From c8014404f1c58790e6cca25948d489c8c822f66c Mon Sep 17 00:00:00 2001 From: "Zhang.WH" Date: Thu, 25 Sep 2025 10:43:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E7=AB=AF=E6=9C=80=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/PractitionerAppServiceImpl.java | 13 +- .../dto/UserAndPractitionerDto.java | 6 + .../impl/OutpatientRefundAppServiceImpl.java | 19 +- .../dto/EncounterLocationFormData.java | 7 +- .../dto/EncounterPatientPageDto.java | 16 +- .../dto/EncounterPatientPrescriptionDto.java | 6 + .../web/chargemanage/dto/RefundItemDto.java | 2 +- .../mapper/OutpatientRefundAppMapper.java | 4 +- .../web/common/appservice/ICommonService.java | 17 + .../appservice/impl/CommonServiceImpl.java | 44 +- .../controller/CommonAppController.java | 26 + .../common/dto/AdviceItemPrintInfoDto.java | 95 +++ .../web/common/dto/AdvicePrintInfoDto.java | 100 ++++ .../web/common/dto/PerformInfoDto.java | 18 +- .../web/common/dto/PractitionerInfoDto.java | 38 ++ .../web/common/mapper/CommonAppMapper.java | 32 +- .../appservice/IDeviceManageAppService.java | 21 +- .../impl/DeviceManageAppServiceImpl.java | 125 +++- .../impl/DiagTreatMAppServiceImpl.java | 18 +- .../impl/DiseaseManageAppServiceImpl.java | 38 +- .../impl/MedicationManageAppServiceImpl.java | 443 +++++++++++++- .../controller/DeviceManageController.java | 23 + .../dto/ActivityChildJsonDto.java | 4 +- .../datadictionary/dto/DeviceImportDto.java | 126 ++++ .../dto/MedicationImportDto.java | 97 ++-- .../DepartmentReceiptApprovalServiceImpl.java | 23 +- .../IDoctorStationAdviceAppService.java | 9 + .../DoctorStationAdviceAppServiceImpl.java | 105 +++- ...orStationChineseMedicalAppServiceImpl.java | 12 +- .../DoctorStationDiagnosisAppServiceImpl.java | 7 +- ...torStationElepPrescriptionServiceImpl.java | 10 +- .../impl/DoctorStationEmrAppServiceImpl.java | 2 +- .../impl/DoctorStationMainAppServiceImpl.java | 13 +- .../impl/ReservationRecordAppServiceImpl.java | 23 +- .../DoctorStationAdviceController.java | 15 +- .../dto/ActivityBindDeviceDetailDto.java | 43 ++ .../dto/ActivityBindDeviceDto.java | 20 + .../dto/ActivityChildrenJsonParams.java | 6 + .../doctorstation/dto/AdviceInventoryDto.java | 3 + .../web/doctorstation/dto/AdviceSaveDto.java | 6 +- .../dto/ReservationRecordDto.java | 5 + .../mapper/DoctorStationAdviceAppMapper.java | 19 + .../mapper/DoctorStationMainAppMapper.java | 2 + .../mapper/ReservationRecordAppMapper.java | 3 - .../web/doctorstation/utils/AdviceUtils.java | 24 +- .../utils/DoctorStationSendApplyUtil.java | 6 +- .../utils/PrescriptionUtils.java | 2 +- .../appservice/IDocDefinitionAppService.java | 2 + .../appservice/IDocRecordAppService.java | 2 +- .../appservice/IDocStatisticsAppService.java | 5 + .../impl/DocDefinitionAppServiceImpl.java | 37 +- ...cDefinitionOrganizationAppServiceImpl.java | 55 +- .../impl/DocRecordAppServiceImpl.java | 64 ++- .../impl/DocStatisticsAppServiceImpl.java | 94 ++- .../controller/DocDefinitionController.java | 13 + .../controller/DocRecordController.java | 4 +- .../controller/DocStatisticsController.java | 45 +- .../controller/DocTemplateController.java | 2 +- .../web/document/dto/DirectoryNode.java | 4 + .../web/document/dto/DocDefinitionDto.java | 2 + .../dto/DocDefinitionOrganizationDto.java | 2 +- .../web/document/dto/DocDefinitonParam.java | 3 - .../web/document/dto/DocRecordDto.java | 6 + .../web/document/dto/DocRecordPatientDto.java | 2 +- .../web/document/dto/DocStatisticsDto.java | 16 +- .../document/dto/DocStatisticsQueryParam.java | 30 + .../web/document/dto/DocTemplateDto.java | 3 + .../document/mapper/DocRecordAppMapper.java | 4 + .../document/util/ConvertToDocStatistics.java | 171 ++++++ .../util/DocumentDirectoryProcessor.java | 6 + .../AdvancePaymentManageAppServiceImpl.java | 2 +- .../appservice/IAdviceProcessAppService.java | 5 +- .../impl/ATDManageAppServiceImpl.java | 8 +- .../impl/AdviceProcessAppServiceImpl.java | 148 +++-- .../controller/AdviceProcessController.java | 7 +- .../dto/AdviceExecuteDetailParam.java | 34 ++ .../dto/AdviceExecuteParam.java | 26 + .../dto/MedicationRequestUseExe.java | 35 ++ .../impl/AdmissionAppServiceImpl.java | 2 +- .../impl/NursingRecordAppServiceImpl.java | 6 +- .../impl/PatientHomeAppServiceImpl.java | 4 +- .../impl/PurchaseInventoryAppServiceImpl.java | 1 - .../impl/ReceiptApprovalAppServiceImpl.java | 50 +- .../impl/TraceNoAppServiceImpl.java | 13 +- .../controller/LossReportFormController.java | 32 +- .../ProductStocktakingController.java | 32 +- .../controller/ProductTransferController.java | 36 +- .../PurchaseInventoryController.java | 32 +- .../controller/PurchaseReturnController.java | 32 +- .../RequisitionIssueController.java | 32 +- .../controller/ReturnIssueController.java | 32 +- .../web/inventorymanage/dto/IssueDto.java | 5 + .../dto/ProductDetailsSearchParam.java | 3 + .../dto/ProductTransferDetailDto.java | 5 + .../dto/PurchaseReturnPageDto.java | 5 +- .../dto/TraceNoSearchParam.java | 3 + .../IReviewPrescriptionRecordsAppService.java | 19 + ...viewPrescriptionRecordsAppServiceImpl.java | 95 +++ .../ReviewPrescriptionRecordsController.java | 41 ++ .../dto/ReviewPrescriptionRecordsDto.java | 50 ++ .../ReviewPrescriptionRecordsAppMapper.java | 11 + .../MaterialReceiptApprovalServiceImpl.java | 40 +- .../IOutpatientTreatmentAppService.java | 9 + .../OutpatientTreatmentAppServiceImpl.java | 238 ++++---- .../OutpatientTreatmentController.java | 12 + .../dto/BloodTransfusionPatchDto.java | 57 ++ .../dto/OutpatientTreatmentInfoDto.java | 8 + .../mapper/OutpatientTreatmentAppMapper.java | 9 + .../impl/PatientInformationServiceImpl.java | 34 +- .../dto/PatientInformationDto.java | 153 +++-- .../appservice/IChargeBillService.java | 40 +- .../impl/IChargeBillServiceImpl.java | 297 +++++++++- .../impl/PaymentRecServiceImpl.java | 39 +- .../controller/ChargeBillController.java | 16 +- .../paymentmanage/dto/ChargeItemDetailVO.java | 2 +- .../web/paymentmanage/dto/OrgIncomeDto.java | 14 +- .../IOrdersGroupPackageAppService.java | 61 ++ .../impl/ActivityDeviceAppServiceImpl.java | 3 +- .../OrdersGroupPackageAppServiceImpl.java | 309 ++++++++++ .../OrdersGroupPackageController.java | 133 +++++ .../dto/ActivityDeviceDto.java | 9 +- .../dto/OrdersGroupPackageDetailQueryDto.java | 66 +++ .../dto/OrdersGroupPackageDetailSaveDto.java | 45 ++ .../dto/OrdersGroupPackageDto.java | 40 ++ .../dto/OrdersGroupPackageQueryDto.java | 53 ++ .../dto/OrdersGroupPackageSaveDto.java | 57 ++ .../dto/OrdersGroupPackageUseDto.java | 36 ++ .../mapper/OrdersGroupPackageAppMapper.java | 44 ++ ...yDispensaryReceiptApprovalServiceImpl.java | 23 +- ...cyWarehouseReceiptApprovalServiceImpl.java | 26 +- .../IChineseMedicineDispenseAppService.java | 69 --- .../appservice/IDeviceDispenseAppService.java | 65 --- .../IInpatientMedicineDispenseAppService.java | 31 - ...ientMedicineSummaryDispenseAppService.java | 1 - ...IMedicalConsumablesDispenseAppService.java | 22 - .../IMedicalDeviceDispenseAppService.java | 74 +++ .../appservice/IReturnMedicineAppService.java | 8 +- .../IWesternMedicineDispenseAppService.java | 37 +- .../impl/DeviceDispenseAppServiceImpl.java | 443 -------------- ...ChineseMedicineDispenseAppServiceImpl.java | 329 ----------- ...icalConsumablesDispenseAppServiceImpl.java | 226 -------- ...patientMedicineDispenseAppServiceImpl.java | 99 ---- ...MedicineSummaryDispenseAppServiceImpl.java | 56 +- .../MedicalDeviceDispenseAppServiceImpl.java | 542 ++++++++++++++++++ .../impl/MedicationDetailsAppServiceImpl.java | 20 +- ...java => ReturnMedicineAppServiceImpl.java} | 195 ++++--- ...esternMedicineDispenseAppServiceImpl.java} | 483 +++++----------- .../ChineseMedicineDispenseController.java | 101 ---- .../controller/DeviceDispenseController.java | 99 ---- .../InpatientMedicineDispenseController.java | 112 ---- ...ientMedicineSummaryDispenseController.java | 2 - .../MedicalConsumablesDispenseController.java | 46 -- .../MedicalDeviceDispenseController.java | 109 ++++ .../controller/ReturnMedicineController.java | 10 +- .../WesternMedicineDispenseController.java | 49 +- .../pharmacymanage/dto/DispenseDeviceDto.java | 42 -- .../pharmacymanage/dto/DispenseInitDto.java | 19 +- .../dto/DispenseInventoryDto.java | 2 +- ...eMedicineDto.java => DispenseItemDto.java} | 11 +- ...InfoPageDto.java => EncounterInfoDto.java} | 9 +- .../dto/EncounterInfoSearchParam.java | 8 +- .../dto/InpatientMedicineInitDto.java | 2 +- .../dto/InpatientMedicineMapInfoDto.java | 45 -- ....java => InpatientMedicineSummaryDto.java} | 14 +- ...InfoDto.java => ItemDispenseOrderDto.java} | 76 +-- .../dto/MedDetailsSearchParam.java | 2 + .../dto/MedRunningAccountPageDto.java | 81 --- .../dto/PrescriptionDeviceInfoDto.java | 230 -------- .../dto/PrescriptionInfoDto.java | 30 - .../dto/PrescriptionPatientInfoDto.java | 76 --- .../mapper/ChineseMedicineDispenseMapper.java | 53 -- .../InpatientMedicineDispenseMapper.java | 10 - ...npatientMedicineSummaryDispenseMapper.java | 4 +- .../MedicalConsumablesDispenseAppMapper.java | 53 -- ....java => MedicalDeviceDispenseMapper.java} | 29 +- .../mapper/MedicationDetailsMapper.java | 33 +- .../mapper/ReturnMedicineMapper.java | 12 +- .../mapper/WesternMedicineDispenseMapper.java | 60 +- .../appservice/ISpecialAdviceAppService.java | 9 + .../impl/AdviceManageAppServiceImpl.java | 21 +- .../impl/RequestFormManageAppServiceImpl.java | 45 +- .../impl/SpecialAdviceAppServiceImpl.java | 123 +++- .../controller/SpecialAdviceController.java | 12 + .../regdoctorstation/dto/ActivitySaveDto.java | 2 +- .../dto/LeaveHospitalParam.java | 13 + .../dto/NursingOrdersSaveDto.java | 6 - .../dto/RequestFormQueryDto.java | 6 + .../dto/RequestFormSaveDto.java | 13 +- .../dto/TransferOrganizationParam.java | 77 +++ .../mapper/AdviceManageAppMapper.java | 7 +- .../IDrugDosageSettlementAppService.java | 33 ++ .../appservice/IInboundReportAppService.java | 3 +- .../IInventoryProductReportAppService.java | 3 +- .../appservice/ILossReportAppService.java | 3 +- .../IMedicationDeviceReportAppService.java | 20 +- .../appservice/IOutboundReportAppService.java | 3 +- .../IReturnIssueReportAppService.java | 3 +- .../IStocktakingReportAppService.java | 16 +- .../appservice/ITransferReportAppService.java | 3 +- ...calRecordHomePageCollectionAppService.java | 3 +- .../PurchaseReturnReportAppService.java | 3 +- .../DrugDosageSettlementAppServiceImpl.java | 76 +++ .../impl/InboundReportAppServiceImpl.java | 11 +- ...ecordHomePageCollectionAppServiceImpl.java | 22 +- .../InventoryProductReportAppServiceImpl.java | 9 +- .../impl/LossReportAppServiceImpl.java | 41 +- .../MedicationDeviceReportAppServiceImpl.java | 130 ++++- ...MonthlySettlementReportAppServiceImpl.java | 6 +- .../impl/OutboundReportAppServiceImpl.java | 12 +- .../PurchaseReturnReportAppServiceImpl.java | 10 +- .../impl/ReturnIssueReportAppServiceImpl.java | 10 +- .../impl/StocktakingReportAppServiceImpl.java | 69 ++- .../impl/TransferReportAppServiceImpl.java | 9 +- .../DrugDosageSettlementController.java | 54 ++ .../controller/InboundReportController.java | 8 +- ...calRecordHomePageCollectionController.java | 5 +- .../InventoryProductReportController.java | 10 +- .../controller/LossReportController.java | 8 +- .../MedicationDeviceReportController.java | 25 + .../MonthlySettlementController.java | 3 +- .../controller/OutboundReportController.java | 9 +- .../PurchaseReturnReportController.java | 10 +- .../ReturnIssueReportController.java | 10 +- .../StocktakingReportController.java | 29 +- .../controller/TransferReportController.java | 9 +- .../dto/DrugDosageSettlementPageDto.java | 50 ++ .../dto/DrugDosageSettlementSearchParam.java | 32 ++ .../dto/InboundReportPageDto.java | 4 +- .../reportmanage/dto/LossReportPageDto.java | 28 +- .../dto/LossReportSearchParam.java | 3 + .../dto/OutboundReportPageDto.java | 4 + .../dto/PurchaseReturnReportPageDto.java | 2 +- .../dto/ReturnIssueReportPageDto.java | 3 + .../dto/StocktakingReportPageDto.java | 30 +- .../dto/StocktakingReportSearchParam.java | 6 + .../dto/TransferReportPageDto.java | 2 +- .../mapper/DrugDosageSettlementMapper.java | 37 ++ .../mapper/MonthlySettlementReportMapper.java | 5 +- .../mapper/StocktakingReportMapper.java | 17 + .../web/reportmanage/utils/CsvFillerUtil.java | 64 +-- .../reportmanage/utils/ExcelFillerUtil.java | 225 +++----- .../web/ybmanage/controller/YbController.java | 107 ++++ .../dto/FinancialHand3201WebParam.java | 35 ++ .../dto/Yb5205SpecialDiseaseWebParam.java | 41 ++ .../src/main/resources/application-cd.yml | 86 +++ .../src/main/resources/application-cloud.yml | 87 +++ .../src/main/resources/application-jh.yml | 86 +++ .../src/main/resources/application-local.yml | 4 +- .../src/main/resources/application-nd.yml | 87 +++ .../src/main/resources/application-sd.yml | 86 +++ .../src/main/resources/application-test.yml | 93 +++ .../src/main/resources/application-ty.yml | 87 +++ .../src/main/resources/application.yml | 2 +- .../Inventorymanage/ProductTransferMapper.xml | 4 + .../PurchaseInventoryMapper.xml | 2 + .../Inventorymanage/PurchaseReturnMapper.xml | 4 +- .../Inventorymanage/ReceiptApprovalMapper.xml | 7 +- .../RequisitionIssueMapper.xml | 9 +- .../Inventorymanage/ReturnIssueMapper.xml | 2 + .../basedatamanage/PractitionerAppMapper.xml | 8 +- .../OutpatientChargeAppMapper.xml | 135 +++-- .../OutpatientRefundAppMapper.xml | 1 + .../mapper/common/CommonAppMapper.xml | 244 +++++++- .../DoctorStationAdviceAppMapper.xml | 24 + .../DoctorStationMainAppMapper.xml | 5 +- .../ReservationRecordAppMapper.xml | 7 +- .../mapper/document/DocRecordAppMapper.xml | 52 +- .../AdvancePaymentManageAppMapper.xml | 6 +- .../AdviceProcessAppMapper.xml | 5 +- .../ReviewPrescriptionRecordsAppMapper.xml | 8 + .../OutpatientTreatmentAppMapper.xml | 386 +++++++------ .../ActivityDeviceAppMapper.xml | 62 +- .../OrdersGroupPackageAppMapper.xml | 69 +++ .../ChineseMedicineDispenseMapper.xml | 156 ----- .../pharmacymanage/IDeviceDispenseMapper.xml | 233 -------- .../InpatientMedicineDispenseMapper.xml | 4 - ...InpatientMedicineSummaryDispenseMapper.xml | 8 +- .../MedicalConsumablesDispenseAppMapper.xml | 139 ----- .../MedicalDeviceDispenseMapper.xml | 213 +++++++ .../MedicationDetailsMapper.xml | 83 ++- .../pharmacymanage/ReturnMedicineMapper.xml | 72 +-- .../WesternMedicineDispenseMapper.xml | 497 ++++------------ .../AdviceManageAppMapper.xml | 13 +- .../RequestFormManageAppMapper.xml | 3 +- .../DrugDosageSettlementMapper.xml | 67 +++ .../reportmanage/InboundReportMapper.xml | 8 +- .../mapper/reportmanage/LossReportMapper.xml | 38 +- .../MedicationDeviceReportMapper.xml | 110 ++-- .../MonthlySettlementReportMapper.xml | 4 +- .../reportmanage/OutboundReportMapper.xml | 5 + .../PurchaseReturnReportMapper.xml | 8 +- .../reportmanage/ReturnIssueReportMapper.xml | 5 + .../reportmanage/StocktakingReportMapper.xml | 157 ++++- .../reportmanage/TransferReportMapper.xml | 6 +- .../common/enums/ActivityDefCategory.java | 101 +++- .../com/openhis/common/enums/BindingType.java | 4 +- ...atus.java => EncounterActivityStatus.java} | 6 +- .../openhis/common/enums/RequestStatus.java | 4 +- .../com/openhis/common/enums/SupplyType.java | 2 +- .../openhis/common/enums/medCategoryCode.java | 7 +- .../administration/domain/ChargeItem.java | 2 +- .../domain/EncounterParticipant.java | 2 +- .../administration/domain/Practitioner.java | 3 + .../dto/ChargeItemBaseInfoDto.java | 44 +- .../service/IChargeItemService.java | 4 +- .../service/IEncounterLocationService.java | 6 +- .../service/impl/ChargeItemServiceImpl.java | 10 +- .../impl/EncounterLocationServiceImpl.java | 16 +- .../impl/EncounterParticipantServiceImpl.java | 6 +- .../service/impl/PatientServiceImpl.java | 2 +- .../clinical/domain/ReservationRecord.java | 5 + .../document/domain/DocStatistics.java | 8 +- .../openhis/document/domain/DocTemplate.java | 1 + .../mapper/PaymentReconciliationMapper.java | 19 + .../PaymentReconciliationAccountDel.java | 105 ++++ .../IPaymentReconciliationService.java | 28 +- .../PaymentReconciliationServiceImpl.java | 51 +- .../domain/ReviewPrescriptionRecords.java | 58 ++ .../ReviewPrescriptionRecordsMapper.java | 17 + .../IReviewPrescriptionRecordsService.java | 14 + .../ReviewPrescriptionRecordsServiceImpl.java | 24 + .../medication/domain/MedicationDispense.java | 4 +- .../medication/domain/MedicationRequest.java | 4 +- .../impl/MedicationDispenseServiceImpl.java | 17 +- .../template/domain/ActivityDevice.java | 9 +- .../template/domain/OrdersGroupPackage.java | 42 ++ .../domain/OrdersGroupPackageDetail.java | 49 ++ .../OrdersGroupPackageDetailMapper.java | 16 + .../mapper/OrdersGroupPackageMapper.java | 16 + .../IOrdersGroupPackageDetailService.java | 11 + .../service/IOrdersGroupPackageService.java | 11 + .../OrdersGroupPackageDetailServiceImpl.java | 20 + .../impl/OrdersGroupPackageServiceImpl.java | 20 + .../workflow/domain/DeviceDispense.java | 8 +- .../workflow/domain/DeviceRequest.java | 2 +- .../workflow/domain/ServiceRequest.java | 13 +- .../mapper/ActivityDefinitionMapper.java | 2 +- .../service/IDeviceDispenseService.java | 3 +- .../impl/DeviceDispenseServiceImpl.java | 5 +- .../impl/ServiceRequestServiceImpl.java | 3 +- .../yb/dto/PaymentDecDetailUniAccountDto.java | 8 +- .../yb/dto/Yb5205InputSpecialDisease.java | 43 ++ .../yb/dto/Yb5205OutputSpecialDisease.java | 219 +++++++ .../java/com/openhis/yb/service/YbDao.java | 82 ++- .../com/openhis/yb/service/YbHttpUtils.java | 36 +- .../com/openhis/yb/service/YbManager.java | 34 +- .../openhis/yb/util/YbParamBuilderUtil.java | 65 ++- .../impl/CatalogDrugInfoUsualServiceImpl.java | 13 +- .../administration/ChargeItemMapper.xml | 18 +- .../financial/PaymentReconciliationMapper.xml | 21 + .../jlau/ReviewPrescriptionRecordsMapper.xml | 7 + .../OrdersGroupPackageDetailMapper.xml | 7 + .../template/OrdersGroupPackageMapper.xml | 7 + .../workflow/ActivityDefinitionMapper.xml | 2 +- .../mapper/yb/MedicalInsuranceMapper.xml | 12 +- 355 files changed, 10070 insertions(+), 5578 deletions(-) create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/AdviceItemPrintInfoDto.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/AdvicePrintInfoDto.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/PractitionerInfoDto.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DeviceImportDto.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ActivityBindDeviceDetailDto.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ActivityBindDeviceDto.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocStatisticsQueryParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/util/ConvertToDocStatistics.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/AdviceExecuteDetailParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/AdviceExecuteParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/MedicationRequestUseExe.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/appservice/IReviewPrescriptionRecordsAppService.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/appservice/impl/ReviewPrescriptionRecordsAppServiceImpl.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/controller/ReviewPrescriptionRecordsController.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/dto/ReviewPrescriptionRecordsDto.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/mapper/ReviewPrescriptionRecordsAppMapper.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/BloodTransfusionPatchDto.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/IOrdersGroupPackageAppService.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/OrdersGroupPackageAppServiceImpl.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/controller/OrdersGroupPackageController.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDetailQueryDto.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDetailSaveDto.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDto.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageQueryDto.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageSaveDto.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageUseDto.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/mapper/OrdersGroupPackageAppMapper.java delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IChineseMedicineDispenseAppService.java delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IDeviceDispenseAppService.java delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IInpatientMedicineDispenseAppService.java delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicalConsumablesDispenseAppService.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicalDeviceDispenseAppService.java delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/DeviceDispenseAppServiceImpl.java delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IChineseMedicineDispenseAppServiceImpl.java delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IMedicalConsumablesDispenseAppServiceImpl.java delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/InpatientMedicineDispenseAppServiceImpl.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicalDeviceDispenseAppServiceImpl.java rename openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/{IReturnMedicineAppServiceImpl.java => ReturnMedicineAppServiceImpl.java} (79%) rename openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/{IWesternMedicineDispenseAppServiceImpl.java => WesternMedicineDispenseAppServiceImpl.java} (61%) delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ChineseMedicineDispenseController.java delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/DeviceDispenseController.java delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/InpatientMedicineDispenseController.java delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicalConsumablesDispenseController.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicalDeviceDispenseController.java delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseDeviceDto.java rename openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/{DispenseMedicineDto.java => DispenseItemDto.java} (76%) rename openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/{EncounterInfoPageDto.java => EncounterInfoDto.java} (94%) delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InpatientMedicineMapInfoDto.java rename openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/{InpatientMedicineSummaryPrescriptionInfoDto.java => InpatientMedicineSummaryDto.java} (89%) rename openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/{PrescriptionMedicineInfoDto.java => ItemDispenseOrderDto.java} (77%) delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedRunningAccountPageDto.java delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PrescriptionDeviceInfoDto.java delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PrescriptionInfoDto.java delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PrescriptionPatientInfoDto.java delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ChineseMedicineDispenseMapper.java delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/InpatientMedicineDispenseMapper.java delete mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicalConsumablesDispenseAppMapper.java rename openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/{IDeviceDispenseMapper.java => MedicalDeviceDispenseMapper.java} (65%) create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/LeaveHospitalParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/TransferOrganizationParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IDrugDosageSettlementAppService.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/DrugDosageSettlementAppServiceImpl.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/DrugDosageSettlementController.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/DrugDosageSettlementPageDto.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/DrugDosageSettlementSearchParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/DrugDosageSettlementMapper.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/FinancialHand3201WebParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb5205SpecialDiseaseWebParam.java create mode 100644 openhis-server-new/openhis-application/src/main/resources/application-cd.yml create mode 100644 openhis-server-new/openhis-application/src/main/resources/application-cloud.yml create mode 100644 openhis-server-new/openhis-application/src/main/resources/application-jh.yml create mode 100644 openhis-server-new/openhis-application/src/main/resources/application-nd.yml create mode 100644 openhis-server-new/openhis-application/src/main/resources/application-sd.yml create mode 100644 openhis-server-new/openhis-application/src/main/resources/application-test.yml create mode 100644 openhis-server-new/openhis-application/src/main/resources/application-ty.yml create mode 100644 openhis-server-new/openhis-application/src/main/resources/mapper/jlau/ReviewPrescriptionRecordsAppMapper.xml create mode 100644 openhis-server-new/openhis-application/src/main/resources/mapper/personalization/OrdersGroupPackageAppMapper.xml delete mode 100644 openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/ChineseMedicineDispenseMapper.xml delete mode 100644 openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/IDeviceDispenseMapper.xml delete mode 100644 openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/InpatientMedicineDispenseMapper.xml delete mode 100644 openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/MedicalConsumablesDispenseAppMapper.xml create mode 100644 openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/MedicalDeviceDispenseMapper.xml create mode 100644 openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/DrugDosageSettlementMapper.xml rename openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/{EncounterLocationStatus.java => EncounterActivityStatus.java} (78%) create mode 100644 openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/model/PaymentReconciliationAccountDel.java create mode 100644 openhis-server-new/openhis-domain/src/main/java/com/openhis/jlau/domain/ReviewPrescriptionRecords.java create mode 100644 openhis-server-new/openhis-domain/src/main/java/com/openhis/jlau/mapper/ReviewPrescriptionRecordsMapper.java create mode 100644 openhis-server-new/openhis-domain/src/main/java/com/openhis/jlau/service/IReviewPrescriptionRecordsService.java create mode 100644 openhis-server-new/openhis-domain/src/main/java/com/openhis/jlau/service/impl/ReviewPrescriptionRecordsServiceImpl.java create mode 100644 openhis-server-new/openhis-domain/src/main/java/com/openhis/template/domain/OrdersGroupPackage.java create mode 100644 openhis-server-new/openhis-domain/src/main/java/com/openhis/template/domain/OrdersGroupPackageDetail.java create mode 100644 openhis-server-new/openhis-domain/src/main/java/com/openhis/template/mapper/OrdersGroupPackageDetailMapper.java create mode 100644 openhis-server-new/openhis-domain/src/main/java/com/openhis/template/mapper/OrdersGroupPackageMapper.java create mode 100644 openhis-server-new/openhis-domain/src/main/java/com/openhis/template/service/IOrdersGroupPackageDetailService.java create mode 100644 openhis-server-new/openhis-domain/src/main/java/com/openhis/template/service/IOrdersGroupPackageService.java create mode 100644 openhis-server-new/openhis-domain/src/main/java/com/openhis/template/service/impl/OrdersGroupPackageDetailServiceImpl.java create mode 100644 openhis-server-new/openhis-domain/src/main/java/com/openhis/template/service/impl/OrdersGroupPackageServiceImpl.java create mode 100644 openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb5205InputSpecialDisease.java create mode 100644 openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb5205OutputSpecialDisease.java create mode 100644 openhis-server-new/openhis-domain/src/main/resources/mapper/jlau/ReviewPrescriptionRecordsMapper.xml create mode 100644 openhis-server-new/openhis-domain/src/main/resources/mapper/template/OrdersGroupPackageDetailMapper.xml create mode 100644 openhis-server-new/openhis-domain/src/main/resources/mapper/template/OrdersGroupPackageMapper.xml diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/PractitionerAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/PractitionerAppServiceImpl.java index 82a02dbb..13141cd5 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/PractitionerAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/PractitionerAppServiceImpl.java @@ -7,6 +7,7 @@ import java.util.stream.Collectors; import javax.annotation.Resource; +import com.openhis.common.enums.AdministrativeGender; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -70,6 +71,8 @@ public class PractitionerAppServiceImpl implements IPractitionerAppService { String nickName = userAndPractitionerDto.getNickName(); String phonenumber = userAndPractitionerDto.getPhonenumber(); String pharPracCertNo = userAndPractitionerDto.getPharPracCertNo(); // 职业证件编号 + String signature = userAndPractitionerDto.getSignature(); // 签名图片 + String drProfttlCode = userAndPractitionerDto.getDrProfttlCode(); // 职称编码 String sex = userAndPractitionerDto.getSex(); // 账号唯一性 long count = iBizUserService.count(new LambdaQueryWrapper().eq(BizUser::getUserName, userName)); @@ -106,7 +109,7 @@ public class PractitionerAppServiceImpl implements IPractitionerAppService { Practitioner practitioner = new Practitioner(); practitioner.setActiveFlag(AccountStatus.ACTIVE.getValue()); // 活动标记 practitioner.setName(nickName); // 姓名 - practitioner.setGenderEnum(Integer.parseInt(sex)); // 性别 + practitioner.setGenderEnum(sex==null? AdministrativeGender.UNKNOWN.getValue() : Integer.parseInt(sex)); // 性别 practitioner.setBirthDate(userAndPractitionerDto.getBirthDate()); // 出生日期 practitioner.setPhone(phonenumber); // 电话 practitioner.setAddress(userAndPractitionerDto.getAddress()); // 地址 @@ -119,6 +122,8 @@ public class PractitionerAppServiceImpl implements IPractitionerAppService { practitioner.setPyStr(ChineseConvertUtils.toPinyinFirstLetter(nickName)); // 拼音码 practitioner.setWbStr(ChineseConvertUtils.toWBFirstLetter(nickName)); // 五笔码 practitioner.setPharPracCertNo(pharPracCertNo); // 职业证件编号 + practitioner.setSignature(signature); // 签名图片 + practitioner.setDrProfttlCode(drProfttlCode); // 职称编码 iPractitionerService.save(practitioner); Long practitionerId = practitioner.getId();// 参与者id // 新增 adm_practitioner_role @@ -276,6 +281,8 @@ public class PractitionerAppServiceImpl implements IPractitionerAppService { String phonenumber = userAndPractitionerDto.getPhonenumber(); String sex = userAndPractitionerDto.getSex(); String pharPracCertNo = userAndPractitionerDto.getPharPracCertNo(); // 职业证件编号 + String signature = userAndPractitionerDto.getSignature(); // 签名图片 + String drProfttlCode = userAndPractitionerDto.getDrProfttlCode(); // 职称编码 // 编辑 sys_user BizUser bizUser = new BizUser(); bizUser.setNickName(nickName); // 昵称 @@ -299,7 +306,7 @@ public class PractitionerAppServiceImpl implements IPractitionerAppService { Practitioner practitioner = new Practitioner(); practitioner.setId(practitionerId); practitioner.setName(nickName); // 姓名 - practitioner.setGenderEnum(Integer.parseInt(sex)); // 性别 + practitioner.setGenderEnum(sex==null? AdministrativeGender.UNKNOWN.getValue() : Integer.parseInt(sex)); // 性别 practitioner.setBirthDate(userAndPractitionerDto.getBirthDate()); // 出生日期 practitioner.setPhone(phonenumber); // 电话 practitioner.setAddress(userAndPractitionerDto.getAddress()); // 地址 @@ -312,6 +319,8 @@ public class PractitionerAppServiceImpl implements IPractitionerAppService { practitioner.setPyStr(ChineseConvertUtils.toPinyinFirstLetter(nickName)); // 拼音码 practitioner.setWbStr(ChineseConvertUtils.toWBFirstLetter(nickName)); // 五笔码 practitioner.setPharPracCertNo(pharPracCertNo);// 职业证件编号 + practitioner.setSignature(signature); // 签名图片 + practitioner.setDrProfttlCode(drProfttlCode); // 职称编码 iPractitionerService.updateById(practitioner); // 先删除,再新增 adm_practitioner_role practitionerAppAppMapper.delPractitionerRole(practitionerId); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/UserAndPractitionerDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/UserAndPractitionerDto.java index ebcf4e95..23fbd246 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/UserAndPractitionerDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/UserAndPractitionerDto.java @@ -99,6 +99,12 @@ public class UserAndPractitionerDto { */ private String pharPracCertNo; + /** 签名图片 */ + private String signature; + + /** 职称编码 */ + private String drProfttlCode ; + /** * 机构id */ diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientRefundAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientRefundAppServiceImpl.java index a0b85578..d3b73586 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientRefundAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientRefundAppServiceImpl.java @@ -3,6 +3,7 @@ */ package com.openhis.web.chargemanage.appservice.impl; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -272,7 +273,7 @@ public class OutpatientRefundAppServiceImpl implements IOutpatientRefundAppServi medicationRequest.setId(null); // 药品请求id medicationRequest .setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_RES_NO.getPrefix(), 4)); // 药品请求编码 - medicationRequest.setQuantity(dto.getQuantity() * (-1)); // 请求数量 + medicationRequest.setQuantity(dto.getQuantity().multiply(new BigDecimal("-1"))); // 请求数量 medicationRequest.setUnitCode(dto.getUnitCode()); // 请求单位编码 medicationRequest.setStatusEnum(RequestStatus.CANCELLED.getValue()); // 请求状态 medicationRequest.setRefundMedicineId(dto.getRequestId()); // 退药id @@ -298,7 +299,7 @@ public class OutpatientRefundAppServiceImpl implements IOutpatientRefundAppServi // 生成服务请求(取消服务) serviceRequest.setId(null); // 服务请求id serviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); // 服务请求编码 - serviceRequest.setQuantity(dto.getQuantity() * (-1)); // 请求数量 + serviceRequest.setQuantity(dto.getQuantity().multiply(new BigDecimal("-1"))); // 请求数量 serviceRequest.setUnitCode(dto.getUnitCode()); // 请求单位编码 serviceRequest.setStatusEnum(RequestStatus.CANCELLED.getValue()); // 请求状态 serviceRequest.setRefundServiceId(dto.getRequestId()); // 退药id @@ -321,7 +322,7 @@ public class OutpatientRefundAppServiceImpl implements IOutpatientRefundAppServi // 生成耗材请求(退耗材) deviceRequest.setId(null); // 耗材请求id deviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.DEVICE_RES_NO.getPrefix(), 4)); // 耗材请求编码 - deviceRequest.setQuantity(dto.getQuantity() * (-1)); // 请求数量 + deviceRequest.setQuantity(dto.getQuantity().multiply(new BigDecimal("-1"))); // 请求数量 deviceRequest.setUnitCode(dto.getUnitCode()); // 请求单位编码 deviceRequest.setStatusEnum(RequestStatus.CANCELLED.getValue()); // 请求状态 deviceRequest.setRefundDeviceId(dto.getRequestId()); // 退药id @@ -374,11 +375,11 @@ public class OutpatientRefundAppServiceImpl implements IOutpatientRefundAppServi CommonConstants.FieldName.EncounterBusNo, CommonConstants.FieldName.idCard)), request); // 就诊患者分页列表 - Page encounterPatientPage = - outpatientRefundAppMapper.selectBilledEncounterPatientPage(new Page<>(pageNo, pageSize), queryWrapper, - ChargeItemStatus.BILLED.getValue(), ChargeItemStatus.REFUNDING.getValue(), - ChargeItemStatus.REFUNDED.getValue(), ChargeItemStatus.PART_REFUND.getValue(), - AccountType.MEDICAL_ELECTRONIC_CERTIFICATE.getCode(), EncounterClass.AMB.getValue()); + Page encounterPatientPage = outpatientRefundAppMapper.selectBilledEncounterPatientPage( + new Page<>(pageNo, pageSize), queryWrapper, ChargeItemStatus.BILLED.getValue(), + ChargeItemStatus.REFUNDING.getValue(), ChargeItemStatus.REFUNDED.getValue(), + ChargeItemStatus.PART_REFUND.getValue(), AccountType.MEDICAL_ELECTRONIC_CERTIFICATE.getCode(), + EncounterClass.AMB.getValue(), ChargeItemContext.REGISTER.getValue()); encounterPatientPage.getRecords().forEach(e -> { // 性别枚举 @@ -387,8 +388,6 @@ public class OutpatientRefundAppServiceImpl implements IOutpatientRefundAppServi e.setStatusEnum_enumText(EnumUtils.getInfoByValue(ChargeItemStatus.class, e.getStatusEnum())); // 计算年龄 e.setAge(AgeCalculatorUtil.getAge(e.getBirthDate())); - // 合同类型枚举 - e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(ContractCategory.class, e.getCategoryEnum())); }); return R.ok(encounterPatientPage); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterLocationFormData.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterLocationFormData.java index 2cb1a1e2..1af32042 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterLocationFormData.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterLocationFormData.java @@ -2,15 +2,12 @@ package com.openhis.web.chargemanage.dto; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import com.openhis.common.enums.EncounterLocationStatus; +import com.openhis.common.enums.EncounterActivityStatus; import com.openhis.common.enums.LocationForm; import lombok.Data; import lombok.experimental.Accessors; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; - /** * 就诊位置 表单数据 */ @@ -39,7 +36,7 @@ public class EncounterLocationFormData { * 设置默认值 */ public EncounterLocationFormData() { - this.statusEnum = EncounterLocationStatus.PLANNED.getValue(); + this.statusEnum = EncounterActivityStatus.PLANNED.getValue(); this.formEnum = LocationForm.ROOM.getValue(); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientPageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientPageDto.java index 1e9abc1b..544ccfea 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientPageDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientPageDto.java @@ -79,13 +79,6 @@ public class EncounterPatientPageDto { */ private Date birthDate; - /** - * 账户类型编码 - */ - @Dict(dictCode = "account_code") - private String typeCode; - private String typeCode_dictText; - /** * 账户余额 */ @@ -120,10 +113,6 @@ public class EncounterPatientPageDto { */ private BigDecimal totalAmount; - /** 合同类型 */ - private Integer categoryEnum; - private String categoryEnum_enumText; - /** * 结算时间 */ @@ -135,4 +124,9 @@ public class EncounterPatientPageDto { */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date startTime; + + /** + * 科室名称 + */ + private String organizationName; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientPrescriptionDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientPrescriptionDto.java index 8d63b2da..d8370bfc 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientPrescriptionDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientPrescriptionDto.java @@ -9,6 +9,7 @@ import java.util.Date; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.openhis.common.annotation.Dict; + import lombok.Data; import lombok.experimental.Accessors; @@ -103,4 +104,9 @@ public class EncounterPatientPrescriptionDto { /** 服务所在表 */ private String serviceTable; + + /** 服务所在表对应的id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long serviceId; + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/RefundItemDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/RefundItemDto.java index 21065314..158f1859 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/RefundItemDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/RefundItemDto.java @@ -42,7 +42,7 @@ public class RefundItemDto { private String prescriptionNo; /** 请求数量 */ - private Integer quantity; + private BigDecimal quantity; /** 请求单位编码 */ @Dict(dictCode = "unit_code") diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/mapper/OutpatientRefundAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/mapper/OutpatientRefundAppMapper.java index 439cb429..3de5c0d3 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/mapper/OutpatientRefundAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/mapper/OutpatientRefundAppMapper.java @@ -61,12 +61,14 @@ public interface OutpatientRefundAppMapper { * @param partRefund 收费状态:部分退费 * @param insurance 账户类型:医保 * @param amb 就诊类型:门诊 + * @param register 账单类型:挂号费 * @return 已结算就诊患者分页列表 */ Page selectBilledEncounterPatientPage(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("billed") Integer billed, @Param("refunding") Integer refunding, @Param("refunded") Integer refunded, - @Param("partRefund") Integer partRefund, @Param("insurance") String insurance, @Param("amb") Integer amb); + @Param("partRefund") Integer partRefund, @Param("insurance") String insurance, @Param("amb") Integer amb, + @Param("register") Integer register); /** * 查询患者退费项目 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/ICommonService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/ICommonService.java index 4f929a87..6743a75c 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/ICommonService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/ICommonService.java @@ -149,4 +149,21 @@ public interface ICommonService { * @return 病区列表 */ List getPractitionerWard(); + + /** + * 查询参与者下拉列表 + * + * @param searchKey 模糊查询关键字 + * @return 参与者下拉列表 + */ + R getPractitionerList(String searchKey); + + /** + * 查询医嘱打印信息 + * + * @param requestIds 请求ids + * @param isPrescription 是否为处方 + * @return 医嘱打印单 + */ + R getAdvicePrintInfo(List requestIds, String isPrescription); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/impl/CommonServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/impl/CommonServiceImpl.java index 6cbb4cfc..64be7d94 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/impl/CommonServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/impl/CommonServiceImpl.java @@ -15,10 +15,12 @@ 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.AgeCalculatorUtil; import com.core.common.utils.SecurityUtils; import com.core.common.utils.StringUtils; import com.core.common.utils.bean.BeanUtils; import com.openhis.administration.domain.Location; +import com.openhis.administration.domain.Organization; import com.openhis.administration.domain.TraceNoManage; import com.openhis.administration.mapper.TraceNoManageMapper; import com.openhis.administration.service.ILocationService; @@ -36,7 +38,6 @@ import com.openhis.web.common.dto.*; import com.openhis.web.common.mapper.CommonAppMapper; import com.openhis.workflow.domain.InventoryItem; import com.openhis.workflow.service.IInventoryItemService; -import com.openhis.administration.domain.Organization; /** * app常用接口 @@ -301,7 +302,7 @@ public class CommonServiceImpl implements ICommonService { * @return 科室列表 */ @Override - public List departmentList(){ + public List departmentList() { return organizationService.getList(OrganizationType.DEPARTMENT.getValue(), null); } @@ -451,4 +452,43 @@ public class CommonServiceImpl implements ICommonService { } return locationDtoList; } + + /** + * 查询参与者下拉列表 + * + * @param searchKey 模糊查询关键字 + * @return 参与者下拉列表 + */ + @Override + public R getPractitionerList(String searchKey) { + return R.ok(commonAppMapper.getPractitionerList(searchKey)); + } + + /** + * 查询医嘱打印信息 + * + * @param requestIds 请求ids + * @param isPrescription 是否为处方 + * @return 医嘱打印单 + */ + @Override + public R getAdvicePrintInfo(List requestIds, String isPrescription) { + AdvicePrintInfoDto advicePrintInfoDto; + if (Whether.YES.getCode().equals(isPrescription)) { + // 查询处方单 + advicePrintInfoDto = commonAppMapper.selectPrescriptionPrintInfo(requestIds); + } else { + // 查询处置单 + advicePrintInfoDto = commonAppMapper.selectTreatmentPrintInfo(requestIds); + } + advicePrintInfoDto + .setAge(advicePrintInfoDto.getBirthDate() != null + ? AgeCalculatorUtil.getAge(advicePrintInfoDto.getBirthDate()) : "") + .setGenderEnum_enumText( + EnumUtils.getInfoByValue(AdministrativeGender.class, advicePrintInfoDto.getGenderEnum())) + .setEncounterYbClass_enumText( + EnumUtils.getInfoByValue(EncounterYbClass.class, advicePrintInfoDto.getEncounterYbClass())); + return R.ok(advicePrintInfoDto); + } + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/controller/CommonAppController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/controller/CommonAppController.java index 20eead33..415a1095 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/controller/CommonAppController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/controller/CommonAppController.java @@ -7,6 +7,8 @@ import java.util.List; import javax.annotation.Resource; +import com.openhis.common.enums.Whether; +import com.openhis.web.common.dto.AdvicePrintInfoDto; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -198,4 +200,28 @@ public class CommonAppController { public List getPractitionerWard() { return commonService.getPractitionerWard(); } + + /** + * 查询参与者下拉列表 + * + * @param searchKey 模糊查询关键字 + * @return 参与者下拉列表 + */ + @GetMapping(value = "/practitioner-list") + public R getPractitionerList(@RequestParam(value = "searchKey", required = false) String searchKey) { + return commonService.getPractitionerList(searchKey); + } + + /** + * 查询医嘱打印信息 + * + * @param requestIds 请求ids + * @param isPrescription 是否为处方 + * @return 医嘱打印单 + */ + @GetMapping("/advice-print") + public R getAdvicePrintInfo(@RequestParam(value = "requestIds") List requestIds, String isPrescription) { + return commonService.getAdvicePrintInfo(requestIds,isPrescription); + } + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/AdviceItemPrintInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/AdviceItemPrintInfoDto.java new file mode 100644 index 00000000..cb69abe6 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/AdviceItemPrintInfoDto.java @@ -0,0 +1,95 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.common.dto; + +import java.math.BigDecimal; + +import com.openhis.common.annotation.Dict; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 医嘱项目打印信息 + * + * @author zwh + * @date 2025-09-16 + */ +@Data +@Accessors(chain = true) +public class AdviceItemPrintInfoDto { + + /** + * 数量 + */ + private Integer quantity; + + /** + * 单价 + */ + private BigDecimal unitPrice; + + /** + * 总价 + */ + private BigDecimal totalPrice; + + /** + * 项目名称 + */ + private String itemName; + + /** + * 规格 + */ + private String totalVolume; + + /** + * 单次剂量 + */ + private BigDecimal dose; + + /** + * 用药频次 + */ + @Dict(dictCode = "rate_code") + private String rateCode; + private String rateCode_dictText; + + /** + * 用法 + */ + @Dict(dictCode = "method_code") + private String methodCode; + private String methodCode_dictText; + + /** + * 剂量单位 + */ + @Dict(dictCode = "unit_code") + private String doseUnitCode; + private String doseUnitCode_dictText; + + /** + * 单位 + */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** + * 处方号 + */ + private String prescriptionNo; + + /** + * 分组号 + */ + private Long groupId; + + /** + * 排序号 + */ + private Integer sortNumber; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/AdvicePrintInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/AdvicePrintInfoDto.java new file mode 100644 index 00000000..c807f203 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/AdvicePrintInfoDto.java @@ -0,0 +1,100 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.common.dto; + +import java.util.Date; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import com.openhis.common.annotation.Dict; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 处方信息 + * + * @author zwh + * @date 2025-09-16 + */ +@Data +@Accessors(chain = true) +public class AdvicePrintInfoDto { + + /** 科室 */ + private String departmentName; + + /** 患者姓名 */ + private String patientName; + + /** 电话 */ + private String phone; + + /** + * 就诊编码 + */ + private String encounterNo; + + /** 性别 */ + private Integer genderEnum; + private String genderEnum_enumText; + + /** 年龄 */ + private String age; + + /** 生日 */ + private Date birthDate; + + /** 开具日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date reqTime; + + /** + * 费用性质 + */ + private String contractName; + + /** + * 诊断名称 + */ + private String conditionName; + + /** + * 开单医生 + */ + private String doctorName; + + /** + * 发药医生 + */ + private String dispenseDoctorName; + + /** + * 配药医生 + */ + private String preparerDoctorName; + + /** + * 收费医生 + */ + private String chargeDoctorName; + + /** 就诊类型 */ + private Integer encounterYbClass; + private String encounterYbClass_enumText; + + /** + * 单位 + */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** + * 医嘱项目打印列表 + */ + private List adviceItemList; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/PerformInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/PerformInfoDto.java index 50197306..dae8c0bb 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/PerformInfoDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/PerformInfoDto.java @@ -26,10 +26,6 @@ public class PerformInfoDto { @JsonSerialize(using = ToStringSerializer.class) private Long requestId; - /** 医嘱项目id */ - @JsonSerialize(using = ToStringSerializer.class) - private Long itemId; - /** 住院id */ @JsonSerialize(using = ToStringSerializer.class) private Long encounterId; @@ -45,20 +41,20 @@ public class PerformInfoDto { /** 请求所在表 */ private String requestTable; + /** 执行时间列表 */ + private List executeTimes; + /** 执行位置 */ @JsonSerialize(using = ToStringSerializer.class) private Long locationId; + /** 分组id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long groupId; + /** 执行开始时间 */ private Date exeStartTime; /** 执行结束时间 */ private Date exeEndTime; - - /** 组号 */ - @JsonSerialize(using = ToStringSerializer.class) - private Long groupId; - - /** 执行时间列表 */ - private List executeTimes; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/PractitionerInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/PractitionerInfoDto.java new file mode 100644 index 00000000..d60cf89c --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/PractitionerInfoDto.java @@ -0,0 +1,38 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.common.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 参与者dto + * + * @author zwh + * @date 2025-04-01 + */ +@Data +@Accessors(chain = true) +public class PractitionerInfoDto { + + /** + * 参与者id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long practitionerId; + + /** + * 参与者名称 + */ + private String practitionerName; + + /** + * 科室名称 + */ + private String organizationName; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/mapper/CommonAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/mapper/CommonAppMapper.java index b28b6700..3f764a1c 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/mapper/CommonAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/mapper/CommonAppMapper.java @@ -5,7 +5,6 @@ package com.openhis.web.common.mapper; import java.util.List; -import com.openhis.administration.domain.TraceNoManage; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -13,9 +12,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.openhis.web.common.dto.InventoryItemDto; -import com.openhis.web.common.dto.InventoryItemParam; -import com.openhis.web.common.dto.LocationInventoryDto; +import com.openhis.administration.domain.TraceNoManage; +import com.openhis.web.common.dto.*; /** * app常用接口 mapper @@ -62,8 +60,32 @@ public interface CommonAppMapper { /** * 查询追溯码信息 * - * @param traceNo 追溯码 + * @param traceNo 追溯码 * @return */ TraceNoManage getInfoByTraceNo(@Param("traceNo") String traceNo); + + /** + * 查询参与者下拉列表 + * + * @param searchKey 模糊查询关键字 + * @return 参与者下拉列表 + */ + List getPractitionerList(@Param("searchKey") String searchKey); + + /** + * 查询处方打印信息 + * + * @param requestIds 请求ids + * @return 处方打印信息 + */ + AdvicePrintInfoDto selectPrescriptionPrintInfo(@Param("requestIds") List requestIds); + + /** + * 查询处置打印信息 + * + * @param requestIds 请求ids + * @return 处置打印信息 + */ + AdvicePrintInfoDto selectTreatmentPrintInfo(@Param("requestIds") List requestIds); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IDeviceManageAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IDeviceManageAppService.java index 80fe1818..cdb48619 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IDeviceManageAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IDeviceManageAppService.java @@ -6,15 +6,15 @@ package com.openhis.web.datadictionary.appservice; import java.util.List; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; import com.core.common.core.domain.R; import com.openhis.web.datadictionary.dto.DeviceManageSelParam; import com.openhis.web.datadictionary.dto.DeviceManageUpDto; -import org.springframework.web.bind.annotation.RequestParam; /** * 器材目录 service @@ -80,4 +80,19 @@ public interface IDeviceManageAppService { * @return */ R editDeviceStart(@RequestBody List ids); + + /** + * 导入器材目录 + * + * @param file 文件 + * @return 结果 + */ + R importData(MultipartFile file); + + /** + * 获取导入模板 + * + * @param response 响应 + */ + void importTemplate(HttpServletResponse response); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DeviceManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DeviceManageAppServiceImpl.java index e8ccfcaf..31fc8016 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DeviceManageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DeviceManageAppServiceImpl.java @@ -3,35 +3,39 @@ */ package com.openhis.web.datadictionary.appservice.impl; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; +import java.io.IOException; +import java.util.*; import java.util.concurrent.CopyOnWriteArrayList; import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.core.domain.entity.SysDictData; +import com.core.common.enums.DeleteFlag; import com.core.common.utils.*; import com.core.common.utils.bean.BeanUtils; +import com.core.common.utils.poi.ExcelUtil; import com.core.system.service.ISysDictTypeService; import com.openhis.administration.domain.ChargeItemDefinition; import com.openhis.administration.domain.DeviceDefinition; +import com.openhis.administration.domain.Location; import com.openhis.administration.domain.Supplier; -import com.openhis.administration.service.IDeviceDefinitionService; -import com.openhis.administration.service.ISupplierService; +import com.openhis.administration.service.*; import com.openhis.common.constant.CommonConstants; import com.openhis.common.constant.PromptMsgConstant; import com.openhis.common.enums.*; @@ -60,6 +64,15 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService { @Autowired private IDeviceDefinitionService deviceDefinitionService; + @Autowired + IChargeItemDefinitionService chargeItemDefinitionService; + + @Autowired + IChargeItemDefDetailService chargeItemDefDetailService; + + @Autowired + private ILocationService locationService; + @Resource private DeviceManageMapper deviceManageMapper; @@ -185,11 +198,11 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService { */ @Override public R editDevice(DeviceManageUpDto deviceManageDto) { -// // 校验是否可以编辑 -// boolean result = supplyRequestService.verifyAbleEdit(deviceManageDto.getId()); -// if (result) { -// return R.fail("该耗材已经发生过业务,不可编辑"); -// } + // 校验是否可以编辑 + boolean result = supplyRequestService.verifyAbleEdit(deviceManageDto.getId()); + if (result) { + return R.fail("该耗材已经发生过业务,不可编辑"); + } DeviceDefinition deviceDefinition = new DeviceDefinition(); BeanUtils.copyProperties(deviceManageDto, deviceDefinition); // 拼音码 @@ -363,4 +376,96 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService { return R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00008, null)); } + + /** + * 导入器材目录 + * + * @param file 文件 + * @return 结果 + */ + @Override + public R importData(MultipartFile file) { + // 读取文件 + R> readResult = readExcelFile(file); + if (R.SUCCESS != readResult.getCode()) { + return readResult; + } + List importDtoList = readResult.getData(); + // 导入信息校验 + R validateResult = validateImportDtoList(importDtoList); + if (R.SUCCESS != validateResult.getCode()) { + return validateResult; + } + // 查询机构ID、当前时间、位置信息供后续使用 + Long orgId = SecurityUtils.getLoginUser().getOrgId(); + Date now = DateUtils.getNowDate(); + List locationList = locationService.list(new LambdaQueryWrapper() + .eq(Location::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode()).orderByAsc(Location::getId)); + Long defaultLocationId = locationList.stream().findFirst().orElse(new Location()).getId(); + Map> locationNameMap = + locationList.stream().collect(Collectors.groupingBy(Location::getName)); + // 创建表数据 + for (DeviceImportDto importDto : importDtoList) { + + } + return R.ok(null, "导入成功!"); + } + + /** + * 获取导入模板 + * + * @param response 响应 + */ + @Override + public void importTemplate(HttpServletResponse response) { + ExcelUtil util = new ExcelUtil<>(DeviceImportDto.class); + util.importTemplateExcel(response, "器材目录数据"); + } + + /** + * 读取Excel文件 + * + * @param file 文件 + * @return 读取结果 + */ + private R> readExcelFile(MultipartFile file) { + ExcelUtil util = new ExcelUtil<>(DeviceImportDto.class); + List importDtoList; + try { + importDtoList = util.importExcel(file.getInputStream()); + } catch (IOException e) { + return R.fail("导入失败!文件读取异常"); + } + if (importDtoList.isEmpty()) { + return R.fail("导入失败!文件不能为空"); + } + return R.ok(importDtoList); + } + + /** + * 导入信息校验 + * + * @param importDtoList 器材目录导入数据列表 + */ + private R validateImportDtoList(List importDtoList) { + // 字段校验(必填及数值类型) + + // 重复校验(文件行重复) + + // 重复校验(文件与数据库重复) + + return R.ok(); + } + + /** + * 创建器材定义实体 + * + * @param importDto 器材目录导入Dto + * @return 器材定义实体 + */ + private DeviceDefinition createDeviceDefinitionEntity(DeviceImportDto importDto) { + + return null; + } + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DiagTreatMAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DiagTreatMAppServiceImpl.java index f27ee165..61f52741 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DiagTreatMAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DiagTreatMAppServiceImpl.java @@ -110,15 +110,15 @@ public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService { .collect(Collectors.toList()); diagnosisTreatmentInitDto.setDiagnosisCategoryOptions(diagnosisCategories); - // 查询医疗服务项类型 - List medical_service_items = - iSysDictTypeService.selectDictDataByType(ActivityDefCategory.MEDICAL_SERVICE_ITEM.getCode()); - // 获取医疗服务项List - List diseaseTreatmentCategoryList = medical_service_items - .stream().map(status -> new DiagnosisTreatmentInitDto.diseaseTreatmentType(status.getDictValue(), - status.getDictLabel())) - .collect(Collectors.toList()); - List diseaseTreatmentCategories = new ArrayList<>(); +// // 查询医疗服务项类型 +// List medical_service_items = +// iSysDictTypeService.selectDictDataByType(ActivityDefCategory.MEDICAL_SERVICE_ITEM.getCode()); +// // 获取医疗服务项List +// List diseaseTreatmentCategoryList = medical_service_items +// .stream().map(status -> new DiagnosisTreatmentInitDto.diseaseTreatmentType(status.getDictValue(), +// status.getDictLabel())) +// .toList(); +// List diseaseTreatmentCategories = new ArrayList<>(); // // //获取目录分类 // DiagnosisTreatmentInitDto.diseaseTreatmentCategory diseaseTreatmentCategory = diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DiseaseManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DiseaseManageAppServiceImpl.java index b6ae859b..69c3cb46 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DiseaseManageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DiseaseManageAppServiceImpl.java @@ -63,13 +63,13 @@ public class DiseaseManageAppServiceImpl implements IDiseaseManageAppService { DiseaseManageInitDto diseaseManageInitDto = new DiseaseManageInitDto(); // 获取疾病目录种类 List diseaseCategoryList = Stream.of(ConditionDefinitionSource.values()) - .map(status -> new DiseaseManageInitDto.diseaseCategory(status.getValue(), status.getInfo())) - .collect(Collectors.toList()); + .map(status -> new DiseaseManageInitDto.diseaseCategory(status.getValue(), status.getInfo())) + .collect(Collectors.toList()); diseaseManageInitDto.setDiseaseCategoryList(diseaseCategoryList); // 获取状态 List statusEnumOptions = Stream.of(PublicationStatus.values()) - .map(status -> new DiseaseManageInitDto.statusEnumOption(status.getValue(), status.getInfo())) - .collect(Collectors.toList()); + .map(status -> new DiseaseManageInitDto.statusEnumOption(status.getValue(), status.getInfo())) + .collect(Collectors.toList()); diseaseManageInitDto.setStatusFlagOptions(statusEnumOptions); return R.ok(diseaseManageInitDto); @@ -79,22 +79,22 @@ public class DiseaseManageAppServiceImpl implements IDiseaseManageAppService { * 查询病种目录分页列表 * * @param diseaseManageSelParam 查询条件 - * @param searchKey 查询条件-模糊查询 - * @param pageNo 当前页码 - * @param pageSize 查询条数 + * @param searchKey 查询条件-模糊查询 + * @param pageNo 当前页码 + * @param pageSize 查询条数 * @return */ public R getDiseaseList(DiseaseManageSelParam diseaseManageSelParam, String searchKey, Integer pageNo, - Integer pageSize, HttpServletRequest request) { + Integer pageSize, HttpServletRequest request) { // 构建查询条件 QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(diseaseManageSelParam, - searchKey, new HashSet<>(Arrays.asList("condition_code", "name", "py_str", "wb_str")), request); + searchKey, new HashSet<>(Arrays.asList("condition_code", "name", "py_str", "wb_str")), request); // 设置排序 queryWrapper.orderByAsc("condition_code"); // 分页查询 Page diseasePage = - HisPageUtils.selectPage(conditionDefinitionMapper, queryWrapper, pageNo, pageSize, DiseaseManageDto.class); + HisPageUtils.selectPage(conditionDefinitionMapper, queryWrapper, pageNo, pageSize, DiseaseManageDto.class); diseasePage.getRecords().forEach(e -> { // 医保对码枚举类回显赋值 @@ -142,8 +142,8 @@ public class DiseaseManageAppServiceImpl implements IDiseaseManageAppService { // 更新病种信息 return ConditionDefinitionService.updateById(conditionDefinition) - ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"疾病目录"})) - : R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[]{"疾病目录"})) + : R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); } /** @@ -159,13 +159,13 @@ public class DiseaseManageAppServiceImpl implements IDiseaseManageAppService { for (Long detail : ids) { ConditionDefinition conditionDefinition = new ConditionDefinition(); conditionDefinition.setId(detail); - conditionDefinition.setStatusEnum(PublicationStatus.ACTIVE.getValue()); + conditionDefinition.setStatusEnum(PublicationStatus.RETIRED.getValue()); conditionDefinitionList.add(conditionDefinition); } // 更新病种信息 return ConditionDefinitionService.updateBatchById(conditionDefinitionList) - ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"疾病目录"})) - : R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[]{"疾病目录"})) + : R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); } /** @@ -186,8 +186,8 @@ public class DiseaseManageAppServiceImpl implements IDiseaseManageAppService { } // 更新病种信息 return ConditionDefinitionService.updateBatchById(conditionDefinitionList) - ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"疾病目录"})) - : R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[]{"疾病目录"})) + : R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); } /** @@ -210,8 +210,8 @@ public class DiseaseManageAppServiceImpl implements IDiseaseManageAppService { // 五笔码 conditionDefinition.setWbStr(ChineseConvertUtils.toWBFirstLetter(conditionDefinition.getName())); return ConditionDefinitionService.addDisease(conditionDefinition) - ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"疾病目录"})) - : R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00008, null)); + ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[]{"疾病目录"})) + : R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00008, null)); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/MedicationManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/MedicationManageAppServiceImpl.java index 1c992957..1641339a 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/MedicationManageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/MedicationManageAppServiceImpl.java @@ -4,10 +4,8 @@ package com.openhis.web.datadictionary.appservice.impl; import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; +import java.math.BigDecimal; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -21,19 +19,24 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.core.domain.entity.SysDictData; +import com.core.common.enums.DeleteFlag; import com.core.common.utils.*; import com.core.common.utils.bean.BeanUtils; import com.core.common.utils.poi.ExcelUtil; import com.core.system.service.ISysDictTypeService; +import com.openhis.administration.domain.ChargeItemDefDetail; import com.openhis.administration.domain.ChargeItemDefinition; +import com.openhis.administration.domain.Location; import com.openhis.administration.domain.Supplier; import com.openhis.administration.service.IChargeItemDefDetailService; import com.openhis.administration.service.IChargeItemDefinitionService; +import com.openhis.administration.service.ILocationService; import com.openhis.administration.service.ISupplierService; import com.openhis.common.constant.CommonConstants; import com.openhis.common.constant.PromptMsgConstant; @@ -75,6 +78,9 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi @Autowired IChargeItemDefDetailService chargeItemDefDetailService; + @Autowired + private ILocationService locationService; + @Autowired private MedicationManageSearchMapper medicationManageSearchMapper; @Autowired @@ -246,16 +252,11 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi */ @Override public R editMedication(@Validated @RequestBody MedicationManageUpDto medicationManageUpDto) { - // // 校验是否可以编辑 - // boolean result = supplyRequestService.verifyAbleEdit(medicationManageUpDto.getMedicationDefId()); - // if (result) { - // return R.fail("该药品已经发生过业务,不可编辑"); - // } - // boolean result = medicationDispenseService.verifyAbleEdit(medicationManageUpDto.getMedicationDefId()); - // if (result) { - // return R.fail("该药品已经发生过业务,不可编辑"); - // } - + // 校验是否可以编辑 + boolean result = supplyRequestService.verifyAbleEdit(medicationManageUpDto.getMedicationDefId()); + if (result) { + return R.fail("该药品已经发生过业务,不可编辑"); + } // Todo:用Medication和medicationDefinition的domainservice来创造新的实例,根据业务需求,使用构造函数; // 如果小于5哥变量,就用基本类型传递,如果大于5哥,在domain层定义构造方法的入参 @@ -472,15 +473,44 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi */ @Override public R importData(MultipartFile file) { - ExcelUtil util = new ExcelUtil<>(MedicationImportDto.class); - List dtoList; - try { - dtoList = util.importExcel(file.getInputStream()); - } catch (IOException e) { - return R.fail("文件读取失败"); + // 读取文件 + R> readResult = readExcelFile(file); + if (R.SUCCESS != readResult.getCode()) { + return readResult; } - - return null; + List importDtoList = readResult.getData(); + // 导入信息校验 + R validateResult = validateImportDtoList(importDtoList); + if (R.SUCCESS != validateResult.getCode()) { + return validateResult; + } + // 查询机构ID、当前时间、位置信息供后续使用 + Long orgId = SecurityUtils.getLoginUser().getOrgId(); + Date now = DateUtils.getNowDate(); + List locationList = locationService.list(new LambdaQueryWrapper() + .eq(Location::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode()).orderByAsc(Location::getId)); + Long defaultLocationId = locationList.stream().findFirst().orElse(new Location()).getId(); + Map> locationNameMap = + locationList.stream().collect(Collectors.groupingBy(Location::getName)); + // 创建表数据 + for (MedicationImportDto importDto : importDtoList) { + // 药品定义表 + MedicationDefinition medicationDefinition = createMedicationDefinitionEntity(importDto); + medicationDefinitionService.save(medicationDefinition); + // 药品表 + Medication medication = + createMedicationEntity(importDto, medicationDefinition.getId(), defaultLocationId, locationNameMap); + medicationService.save(medication); + // 费用定价表 + ChargeItemDefinition chargeItemDefinition = + createChargeItemDefinition(importDto, orgId, medicationDefinition.getId(), now); + chargeItemDefinitionService.save(chargeItemDefinition); + // 费用定价子表 + List chargeItemDefDetailList = + createChargeItemDefDetailList(importDto, chargeItemDefinition.getId()); + chargeItemDefDetailService.saveBatch(chargeItemDefDetailList); + } + return R.ok(null, "导入成功!"); } /** @@ -494,4 +524,373 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi util.importTemplateExcel(response, "药品目录数据"); } + /** + * 读取Excel文件 + * + * @param file 文件 + * @return 读取结果 + */ + private R> readExcelFile(MultipartFile file) { + ExcelUtil util = new ExcelUtil<>(MedicationImportDto.class); + List importDtoList; + try { + importDtoList = util.importExcel(file.getInputStream()); + } catch (IOException e) { + return R.fail("导入失败!文件读取异常"); + } + if (importDtoList.isEmpty()) { + return R.fail("导入失败!文件不能为空"); + } + return R.ok(importDtoList); + } + + /** + * 导入信息校验 + * + * @param importDtoList 药品目录导入数据列表 + */ + private R validateImportDtoList(List importDtoList) { + // 字段校验(必填及数值类型) + List fieldValidateMsgList = new ArrayList<>(); + for (int i = 0; i < importDtoList.size(); i++) { + MedicationImportDto importDto = importDtoList.get(i); + importDto.setLineNumber(i + 2); + List lineValidateMsgList = new ArrayList<>(); + if (StringUtils.isEmpty(importDto.getName())) { + lineValidateMsgList.add("药品名称必填"); + } + if (StringUtils.isEmpty(importDto.getCategoryCode())) { + lineValidateMsgList.add("药品分类必填"); + } + if (Whether.YES.getCode().equals(importDto.getYbMatchFlag()) + && !MedCategoryCode.TRADITIONAL_CHINESE_MEDICINE.getValue().equals(importDto.getCategoryCode()) + && !MedCategoryCode.WESTERN_MEDICINE.getValue().equals(importDto.getCategoryCode()) + && !MedCategoryCode.CHINESE_HERBAL_MEDICINE.getValue().equals(importDto.getCategoryCode())) { + lineValidateMsgList.add("医保药的药品分类只能选择中成药、西药或中草药;"); + } + if (StringUtils.isEmpty(importDto.getMerchandiseName())) { + lineValidateMsgList.add("商品名称必填"); + } + if (StringUtils.isEmpty(importDto.getUnitCode())) { + lineValidateMsgList.add("药品单位必填"); + } + if (StringUtils.isEmpty(importDto.getMinUnitCode())) { + lineValidateMsgList.add("最小单位必填"); + } + if (StringUtils.isEmpty(importDto.getPartPercentStr())) { + lineValidateMsgList.add("拆零比必填"); + } + BigDecimal partPercent; + try { + partPercent = new BigDecimal(importDto.getPartPercentStr()); + importDto.setPartPercent(partPercent); + } catch (Exception e) { + lineValidateMsgList.add("拆零比应为数值类型"); + } + if (StringUtils.isEmpty(importDto.getDoseFrom())) { + lineValidateMsgList.add("剂量形式必填"); + } + if (StringUtils.isEmpty(importDto.getYbMatchFlag())) { + lineValidateMsgList.add("医保是否对码必填"); + } + if (Whether.YES.getCode().equals(importDto.getYbMatchFlag()) && StringUtils.isEmpty(importDto.getYbNo())) { + lineValidateMsgList.add("医保对码时,医保编码必填"); + } + if (StringUtils.isEmpty(importDto.getSkinTestFlag())) { + lineValidateMsgList.add("是否皮试必填"); + } + if (StringUtils.isEmpty(importDto.getInjectFlag())) { + lineValidateMsgList.add("是否为注射药物必填"); + } + if (StringUtils.isEmpty(importDto.getRestrictedFlag())) { + lineValidateMsgList.add("是否限制使用必填"); + } + if (Whether.YES.getCode().equals(importDto.getRestrictedFlag()) + && StringUtils.isEmpty(importDto.getRestrictedScope())) { + lineValidateMsgList.add("限制使用时,限制使用范围必填"); + } + if (StringUtils.isEmpty(importDto.getChildrenFlag())) { + lineValidateMsgList.add("儿童用药标志必填"); + } + if (StringUtils.isEmpty(importDto.getPartAttributeEnum())) { + lineValidateMsgList.add("拆分属性必填"); + } + if (StringUtils.isEmpty(importDto.getAntibioticFlag())) { + lineValidateMsgList.add("是否抗生素必填"); + } + if (Whether.YES.getCode().equals(importDto.getAntibioticFlag()) + && StringUtils.isEmpty(importDto.getAntibioticCode())) { + lineValidateMsgList.add("为抗生素时,抗生素分类必填"); + } + if (StringUtils.isEmpty(importDto.getSelfFlag())) { + lineValidateMsgList.add("是否自制必填"); + } + if (StringUtils.isEmpty(importDto.getBasicFlag())) { + lineValidateMsgList.add("基药标识必填"); + } + if (StringUtils.isEmpty(importDto.getManufacturerText())) { + lineValidateMsgList.add("生产厂商文本必填"); + } + if (StringUtils.isEmpty(importDto.getThoPartAttributeEnum())) { + lineValidateMsgList.add("住院临时医嘱拆分属性必填"); + } + if (StringUtils.isEmpty(importDto.getUnitConversionRatioStr())) { + lineValidateMsgList.add("剂量单位换算比必填"); + } + BigDecimal unitConversionRatio; + try { + unitConversionRatio = new BigDecimal(importDto.getUnitConversionRatioStr()); + importDto.setUnitConversionRatio(unitConversionRatio); + } catch (Exception e) { + lineValidateMsgList.add("剂量单位换算比应为数值类型"); + } + if (StringUtils.isEmpty(importDto.getChrgitmLv())) { + lineValidateMsgList.add("医保等级必填"); + } + if (StringUtils.isEmpty(importDto.getRxFlag())) { + lineValidateMsgList.add("处方标志必填"); + } + if (StringUtils.isEmpty(importDto.getItemMinQuantityStr())) { + lineValidateMsgList.add("最小库存警戒数量(常规单位)必填"); + } + BigDecimal itemMinQuantity; + try { + itemMinQuantity = new BigDecimal(importDto.getItemMinQuantityStr()); + importDto.setItemMinQuantity(itemMinQuantity); + } catch (Exception e) { + lineValidateMsgList.add("最小库存警戒数量(常规单位)应为数值类型"); + } + if (StringUtils.isEmpty(importDto.getItemMaxQuantityStr())) { + lineValidateMsgList.add("最大库存警戒数量(常规单位)必填"); + } + BigDecimal itemMaxQuantity; + try { + itemMaxQuantity = new BigDecimal(importDto.getItemMaxQuantityStr()); + importDto.setItemMaxQuantity(itemMaxQuantity); + } catch (Exception e) { + lineValidateMsgList.add("最大库存警戒数量(常规单位)应为数值类型"); + } + if (StringUtils.isEmpty(importDto.getLocationName())) { + lineValidateMsgList.add("所在位置名称必填"); + } + if (StringUtils.isEmpty(importDto.getTotalVolume())) { + lineValidateMsgList.add("规格必填"); + } + if (StringUtils.isNotEmpty(importDto.getDoseStr())) { + BigDecimal dose; + try { + dose = new BigDecimal(importDto.getDoseStr()); + importDto.setDose(dose); + } catch (Exception e) { + lineValidateMsgList.add("单次剂量应为数值类型"); + } + } + if (StringUtils.isNotEmpty(importDto.getMaxUnitStr())) { + BigDecimal maxUnit; + try { + maxUnit = new BigDecimal(importDto.getMaxUnitStr()); + importDto.setMaxUnit(maxUnit); + } catch (Exception e) { + lineValidateMsgList.add("单次最大剂量应为数值类型"); + } + } + if (StringUtils.isEmpty(importDto.getTypeCode())) { + lineValidateMsgList.add("财务类别必填"); + } + if (StringUtils.isEmpty(importDto.getYbType())) { + lineValidateMsgList.add("医保费用类别必填"); + } + if (StringUtils.isEmpty(importDto.getPurchasePriceStr())) { + lineValidateMsgList.add("购入价必填"); + } + BigDecimal purchasePrice; + try { + purchasePrice = new BigDecimal(importDto.getPurchasePriceStr()); + importDto.setPurchasePrice(purchasePrice); + } catch (Exception e) { + lineValidateMsgList.add("购入价应为数值类型"); + } + if (StringUtils.isEmpty(importDto.getRetailPriceStr())) { + lineValidateMsgList.add("零售价必填"); + } + BigDecimal retailPrice; + try { + retailPrice = new BigDecimal(importDto.getRetailPriceStr()); + importDto.setRetailPrice(retailPrice); + } catch (Exception e) { + lineValidateMsgList.add("零售价应为数值类型"); + } + if (StringUtils.isEmpty(importDto.getMaximumRetailPriceStr())) { + lineValidateMsgList.add("最高零售价必填"); + } + BigDecimal maximumRetailPrice; + try { + maximumRetailPrice = new BigDecimal(importDto.getMaximumRetailPriceStr()); + importDto.setMaximumRetailPrice(maximumRetailPrice); + } catch (Exception e) { + lineValidateMsgList.add("最高零售价应为数值类型"); + } + if (!lineValidateMsgList.isEmpty()) { + fieldValidateMsgList + .add("■ 第" + importDto.getLineNumber() + "行:" + String.join(",", lineValidateMsgList) + ";"); + } + } + if (!fieldValidateMsgList.isEmpty()) { + return R.fail("导入失败!药品信息填写有误:" + String.join(" ", fieldValidateMsgList)); + } + // 重复校验(文件行重复) + List lineRepeatedValidateMsgList = new ArrayList<>(); + List> importDtoGroupList = new ArrayList<>(importDtoList.stream() + .collect(Collectors.groupingBy(e -> e.getName() + e.getManufacturerText() + e.getTotalVolume())).values()); + for (List importDtoGroup : importDtoGroupList) { + if (importDtoGroup.size() > 1) { + lineRepeatedValidateMsgList + .add( + "■ 第" + + importDtoGroup.stream().map(MedicationImportDto::getLineNumber).sorted() + .map(Object::toString).collect(Collectors.joining(",")) + + "行的【" + importDtoGroup.get(0).getName() + "】重复;"); + } + } + if (!lineRepeatedValidateMsgList.isEmpty()) { + return R.fail("导入失败!文件中存在重复药品:" + String.join(" ", lineRepeatedValidateMsgList)); + } + // 重复校验(文件与数据库重复) + List dbRepeatedValidateMsgList = new ArrayList<>(); + for (MedicationImportDto importDto : importDtoList) { + List medicationDefinitionList = medicationDefinitionService.list( + new LambdaQueryWrapper().eq(MedicationDefinition::getName, importDto.getName()) + .eq(MedicationDefinition::getManufacturerText, importDto.getManufacturerText())); + if (!medicationDefinitionList.isEmpty()) { + List medicationList = + medicationService.list(new LambdaQueryWrapper() + .in(Medication::getMedicationDefId, + medicationDefinitionList.stream().map(MedicationDefinition::getId) + .collect(Collectors.toList())) + .eq(Medication::getTotalVolume, importDto.getTotalVolume())); + if (!medicationList.isEmpty()) { + dbRepeatedValidateMsgList + .add("■ 第" + importDto.getLineNumber() + "行的【" + importDto.getName() + "】在系统中已存在;"); + } + } + } + if (!dbRepeatedValidateMsgList.isEmpty()) { + return R.fail("导入失败!系统中存在重复药品:" + String.join(" ", dbRepeatedValidateMsgList)); + } + return R.ok(); + } + + /** + * 创建药品定义实体 + * + * @param importDto 药品目录导入Dto + * @return 药品定义实体 + */ + private MedicationDefinition createMedicationDefinitionEntity(MedicationImportDto importDto) { + MedicationDefinition medicationDefinition = new MedicationDefinition(); + medicationDefinition.setName(importDto.getName()) + .setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.MEDICATION_NUM.getPrefix(), 10)).setDomainEnum(1) + .setVersion(importDto.getVersion()).setNameEn(importDto.getNameEn()) + .setPyStr(ChineseConvertUtils.toPinyinFirstLetter(importDto.getName())) + .setWbStr(ChineseConvertUtils.toWBFirstLetter(importDto.getName())) + .setCategoryCode(importDto.getCategoryCode()).setMerchandiseName(importDto.getMerchandiseName()) + .setMerchandisePyStr(ChineseConvertUtils.toPinyinFirstLetter(importDto.getMerchandiseName())) + .setMerchandiseWbStr(ChineseConvertUtils.toPinyinFirstLetter(importDto.getMerchandiseName())) + .setUnitCode(importDto.getUnitCode()).setMinUnitCode(importDto.getMinUnitCode()) + .setPartPercent(importDto.getPartPercent()).setDoseFrom(tryParseInt(importDto.getDoseFrom())) + .setApprovalNumber(importDto.getApprovalNumber()).setYbMatchFlag(tryParseInt(importDto.getYbMatchFlag())) + .setYbNo(importDto.getYbNo()).setPharmacologyCategoryCode("1") + .setSkinTestFlag(tryParseInt(importDto.getSkinTestFlag())) + .setInjectFlag(tryParseInt(importDto.getInjectFlag())).setManufacturerText(importDto.getManufacturerText()) + .setRestrictedFlag(tryParseInt(importDto.getRestrictedFlag())) + .setRestrictedScope(importDto.getRestrictedScope()).setActiveFlag(Whether.YES.getValue()) + .setChildrenFlag(tryParseInt(importDto.getChildrenFlag())) + .setNationalDrugCode(importDto.getNationalDrugCode()) + .setPartAttributeEnum(tryParseInt(importDto.getPartAttributeEnum())) + .setAntibioticCode(importDto.getAntibioticCode()).setSelfFlag(tryParseInt(importDto.getSelfFlag())) + .setAntibioticFlag(tryParseInt(importDto.getAntibioticFlag())) + .setBasicFlag(tryParseInt(importDto.getBasicFlag())) + .setThoPartAttributeEnum(tryParseInt(importDto.getThoPartAttributeEnum())) + .setUnitConversionRatio(importDto.getUnitConversionRatio()) + .setChrgitmLv(tryParseInt(importDto.getChrgitmLv())).setRxFlag(tryParseInt(importDto.getRxFlag())) + .setItemMinQuantity(importDto.getItemMinQuantity()).setItemMaxQuantity(importDto.getItemMaxQuantity()); + return medicationDefinition; + } + + /** + * 创建药品基本实体 + * + * @param importDto 药品目录导入Dto + * @param medicationDefId 药品定义ID + * @param defaultLocationId 默认位置ID + * @param locationNameMap 位置名称匹配分组Map + * @return 药品基本实体 + */ + private Medication createMedicationEntity(MedicationImportDto importDto, Long medicationDefId, + Long defaultLocationId, Map> locationNameMap) { + Medication medication = new Medication(); + // 根据输入的所在位置名称获取位置ID + List mapLocationList = locationNameMap.get(importDto.getLocationName()); + if (mapLocationList == null || mapLocationList.isEmpty()) { + medication.setLocationId(defaultLocationId); + } else { + medication.setLocationId(mapLocationList.get(0).getId()); + } + medication.setMedicationDefId(medicationDefId).setStatusEnum(PublicationStatus.ACTIVE.getValue()) + .setDoseFormCode(importDto.getDoseFrom()).setTotalVolume(importDto.getTotalVolume()) + .setActiveFlag(Whether.YES.getValue()).setMethodCode(importDto.getMethodCode()) + .setRateCode(importDto.getRateCode()).setDose(importDto.getDose()) + .setDoseUnitCode(importDto.getDoseUnitCode()).setMaxUnit(importDto.getMaxUnit()); + return medication; + } + + /** + * 创建费用定价实体 + * + * @param importDto 药品目录导入Dto + * @return 药品基本实体 + */ + private ChargeItemDefinition createChargeItemDefinition(MedicationImportDto importDto, Long orgId, + Long medicationDefId, Date effectiveStart) { + ChargeItemDefinition chargeItemDefinition = new ChargeItemDefinition(); + chargeItemDefinition.setChargeName(importDto.getName()).setStatusEnum(PublicationStatus.ACTIVE.getValue()) + .setOrgId(orgId).setInstanceTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION) + .setInstanceId(medicationDefId).setEffectiveStart(effectiveStart).setTypeCode(importDto.getTypeCode()) + .setYbType(importDto.getYbType()).setConditionFlag(Whether.YES.getValue()) + .setPrice(importDto.getRetailPrice()); + return chargeItemDefinition; + } + + /** + * 创建费用定价子实体列表 + * + * @param importDto 药品目录导入Dto + * @param chargeItemDefId 费用定价ID + * @return 费用定价子实体列表 + */ + private List createChargeItemDefDetailList(MedicationImportDto importDto, + Long chargeItemDefId) { + ChargeItemDefDetail defDetailPurchase = new ChargeItemDefDetail().setDefinitionId(chargeItemDefId) + .setConditionCode(ConditionCode.PURCHASE.getCode()).setAmount(importDto.getPurchasePrice()); + ChargeItemDefDetail defDetailRetail = + new ChargeItemDefDetail().setDefinitionId(chargeItemDefId).setConditionCode(ConditionCode.UNIT.getCode()) + .setConditionValue(importDto.getUnitCode()).setAmount(importDto.getRetailPrice()); + ChargeItemDefDetail defDetailMaximumRetail = new ChargeItemDefDetail().setDefinitionId(chargeItemDefId) + .setConditionCode(ConditionCode.LIMIT.getCode()).setAmount(importDto.getMaximumRetailPrice()); + return Arrays.asList(defDetailPurchase, defDetailRetail, defDetailMaximumRetail); + } + + /** + * 尝试转化为int + * + * @param intStr int字符串 + * @return int值 + */ + private Integer tryParseInt(String intStr) { + try { + return Integer.parseInt(intStr); + } catch (Exception e) { + return null; + } + } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/controller/DeviceManageController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/controller/DeviceManageController.java index 6fa119a0..6ca5e4de 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/controller/DeviceManageController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/controller/DeviceManageController.java @@ -3,10 +3,12 @@ package com.openhis.web.datadictionary.controller; import java.util.List; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import com.core.common.core.domain.R; import com.openhis.web.datadictionary.appservice.IDeviceManageAppService; @@ -138,4 +140,25 @@ public class DeviceManageController { public R exportDevice(@RequestBody DeviceManageDto DeviceManageDto) { return null; } + + /** + * 导入器材目录 + * + * @param file 文件 + * @return 结果 + */ + @PostMapping("/import-data") + public R importData(MultipartFile file) { + return deviceManageAppService.importData(file); + } + + /** + * 获取导入模板 + * + * @param response 响应 + */ + @PostMapping("/import-template") + public void importTemplate(HttpServletResponse response) { + deviceManageAppService.importTemplate(response); + } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ActivityChildJsonDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ActivityChildJsonDto.java index 2ed99d52..f52d7dfc 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ActivityChildJsonDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ActivityChildJsonDto.java @@ -6,6 +6,8 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import lombok.experimental.Accessors; +import java.math.BigDecimal; + /** * 诊疗子项JSON */ @@ -20,6 +22,6 @@ public class ActivityChildJsonDto { /** * 子项请求数量 */ - private Integer childrenRequestNum; + private BigDecimal childrenRequestNum; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DeviceImportDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DeviceImportDto.java new file mode 100644 index 00000000..fb8ba7bd --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DeviceImportDto.java @@ -0,0 +1,126 @@ +package com.openhis.web.datadictionary.dto; + +import java.math.BigDecimal; + +import com.core.common.annotation.Excel; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 器材目录导入Dto + * + * @author GuoRui + * @date 2025-09-24 + */ +@Data +@Accessors(chain = true) +public class DeviceImportDto { + + /** 行号 */ + private Integer lineNumber; + + // ---------------------- 器材定义 adm_device_definition ------------------------------------- + + /** 器材名称 */ + @Excel(name = "器材名称", prompt = "必填") + private String name; + + /** 器材分类 */ + @Excel(name = "器材分类", prompt = "必填", dictType = "device_category_code", comboReadDict = true) + private String categoryCode; + + /** 包装单位 */ + @Excel(name = "包装单位", prompt = "必填", dictType = "unit_code", comboReadDict = true) + private String unitCode; + + /** 包装规格 */ + @Excel(name = "包装规格", prompt = "必填") + private String size; + + /** 最小库存警戒数量(常规单位) */ + @Excel(name = "最小库存警戒数量(常规单位)", width = 25, prompt = "必填,数值类型") + private String itemMinQuantityStr; + private BigDecimal itemMinQuantity; + + /** 最大库存警戒数量(常规单位) */ + @Excel(name = "最大库存警戒数量(常规单位)", width = 25, prompt = "必填,数值类型") + private String itemMaxQuantityStr; + private BigDecimal itemMaxQuantity; + + /** 拆零比 */ + @Excel(name = "拆零比", prompt = "必填,数值类型") + private String partPercentStr; + private BigDecimal partPercent; + + /** 最小使用单位 */ + @Excel(name = "最小使用单位", prompt = "必填", dictType = "unit_code", comboReadDict = true) + private String minUnitCode; + + /** 所属科室名称(orgId) */ + @Excel(name = "所属科室名称", prompt = "必填") + private String orgName; + + /** 所在位置名称(locationId) */ + @Excel(name = "所在位置名称", prompt = "必填") + private String locationName; + + /** 高值器材标志 */ + @Excel(name = "高值器材标志", prompt = "必填", readConverterExp = "0=否,1=是", combo = "否,是") + private String hvcmFlag; + + /** 销售单位 */ + @Excel(name = "最小使用单位", prompt = "必填", dictType = "unit_code", comboReadDict = true) + private String salesUnitCode; + + /** 批准文号 */ + @Excel(name = "批准文号") + private String approvalNumber; + + /** 医保标记 */ + private String ybFlag; + + /** 医保编码 */ + @Excel(name = "医保编码", prompt = "医保对码时必填") + private String ybNo; + + /** 医药机构目录编码 */ + private String ybOrgNo; + + /** 医保对码标记 */ + private Integer ybMatchFlag; + + /** 医保等级 */ + private Integer chrgitmLv; + + /** 状态 */ + private Integer statusEnum; + + /** 生产厂家 */ + private Long manufacturerId; + + /** 生产厂家 */ + private String manufacturerText; + + /** 供应商 */ + private Long supplyId; + + /** 说明 */ + private String description; + + /** 适用范围 */ + private String jurisdiction; + + /** 器材版本 */ + private String version; + + /** 主要成分 */ + private String substanceText; + + /** 过敏标记 */ + private Integer allergenFlag; + + /** 处方标志 */ + private Integer rxFlag; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/MedicationImportDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/MedicationImportDto.java index e110cdc5..2fe424c7 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/MedicationImportDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/MedicationImportDto.java @@ -17,10 +17,13 @@ import lombok.experimental.Accessors; @Accessors(chain = true) public class MedicationImportDto { + /** 行号 */ + private Integer lineNumber; + // ---------------------- 药品定义 med_medication_definition ------------------------------------- /** 药品名称 */ - @Excel(name = "药品名称") + @Excel(name = "药品名称", prompt = "必填") private String name; /** 药品版本 */ @@ -32,27 +35,28 @@ public class MedicationImportDto { private String nameEn; /** 药品分类 */ - @Excel(name = "药品分类", dictType = "med_category_code", comboReadDict = true) + @Excel(name = "药品分类", prompt = "必填", dictType = "med_category_code", comboReadDict = true) private String categoryCode; /** 商品名称 */ - @Excel(name = "商品名称") + @Excel(name = "商品名称", prompt = "必填") private String merchandiseName; /** 药品单位 */ - @Excel(name = "药品单位", dictType = "unit_code", comboReadDict = true) + @Excel(name = "药品单位", prompt = "必填", dictType = "unit_code", comboReadDict = true) private String unitCode; /** 最小单位 */ - @Excel(name = "最小单位", dictType = "unit_code", comboReadDict = true) + @Excel(name = "最小单位", prompt = "必填", dictType = "unit_code", comboReadDict = true) private String minUnitCode; /** 拆零比 */ - @Excel(name = "拆零比") + @Excel(name = "拆零比", prompt = "必填,数值类型") + private String partPercentStr; private BigDecimal partPercent; /** 剂量形式 */ - @Excel(name = "剂量形式", dictType = "dose_from_code", comboReadDict = true) + @Excel(name = "剂量形式", prompt = "必填", dictType = "dose_form_code", comboReadDict = true) private String doseFrom; /** 批准文号 */ @@ -60,35 +64,31 @@ public class MedicationImportDto { private String approvalNumber; /** 医保是否对码 */ - @Excel(name = "医保是否对码", readConverterExp = "0=否,1=是", combo = "否,是") + @Excel(name = "医保是否对码", prompt = "必填", readConverterExp = "0=否,1=是", combo = "否,是") private String ybMatchFlag; /** 医保编码 */ - @Excel(name = "医保编码") + @Excel(name = "医保编码", prompt = "医保对码时必填") private String ybNo; /** 是否皮试 */ - @Excel(name = "是否皮试", readConverterExp = "0=否,1=是", combo = "否,是") + @Excel(name = "是否皮试", prompt = "必填", readConverterExp = "0=否,1=是", combo = "否,是") private String skinTestFlag; /** 是否为注射药物 */ - @Excel(name = "是否为注射药物", readConverterExp = "0=否,1=是", combo = "否,是") + @Excel(name = "是否为注射药物", prompt = "必填", readConverterExp = "0=否,1=是", combo = "否,是") private String injectFlag; - /** 生产厂商文本 */ - @Excel(name = "生产厂商文本") - private String manufacturerText; - /** 是否限制使用 */ - @Excel(name = "是否限制使用", readConverterExp = "0=否,1=是", combo = "否,是") + @Excel(name = "是否限制使用", prompt = "必填", readConverterExp = "0=否,1=是", combo = "否,是") private String restrictedFlag; /** 限制使用范围 */ - @Excel(name = "限制使用范围") + @Excel(name = "限制使用范围", prompt = "限制使用时必填") private String restrictedScope; /** 儿童用药标志 */ - @Excel(name = "儿童用药标志", readConverterExp = "0=否,1=是", combo = "否,是") + @Excel(name = "儿童用药标志", prompt = "必填", readConverterExp = "0=否,1=是", combo = "否,是") private String childrenFlag; /** 贯标国家编码 */ @@ -96,56 +96,68 @@ public class MedicationImportDto { private String nationalDrugCode; /** 拆分属性 */ - @Excel(name = "拆分属性", readConverterExp = "1=门诊按最小单位每次量向上取整,2=门诊按包装单位不可拆分,3=门诊按最小单位总量向上取整,4=门诊按包装单位每次量向上取整", + @Excel(name = "拆分属性", prompt = "必填", + readConverterExp = "1=门诊按最小单位每次量向上取整,2=门诊按包装单位不可拆分,3=门诊按最小单位总量向上取整,4=门诊按包装单位每次量向上取整", combo = "门诊按最小单位每次量向上取整,门诊按包装单位不可拆分,门诊按最小单位总量向上取整,门诊按包装单位每次量向上取整") private String partAttributeEnum; /** 是否抗生素 */ - @Excel(name = "是否抗生素", readConverterExp = "0=否,1=是", combo = "否,是") + @Excel(name = "是否抗生素", prompt = "必填", readConverterExp = "0=否,1=是", combo = "否,是") private String antibioticFlag; /** 抗生素分类 */ - @Excel(name = "抗生素分类", dictType = "antibiotic_type_code", comboReadDict = true) + @Excel(name = "抗生素分类", prompt = "抗生素时必填", dictType = "antibiotic_type_code", comboReadDict = true) private String antibioticCode; - /** 权限限制 */ - @Excel(name = "权限限制", readConverterExp = "1=非限制使用,2=限制使用,3=特殊使用", combo = "非限制使用,限制使用,特殊使用") - private String restrictedEnum; - /** 是否自制 */ - @Excel(name = "是否自制", readConverterExp = "0=否,1=是", combo = "否,是") + @Excel(name = "是否自制", prompt = "必填", readConverterExp = "0=否,1=是", combo = "否,是") private String selfFlag; /** 基药标识 */ - @Excel(name = "基药标识", readConverterExp = "0=否,1=是", combo = "否,是") + @Excel(name = "基药标识", prompt = "必填", readConverterExp = "0=否,1=是", combo = "否,是") private String basicFlag; + /** 生产厂商文本 */ + @Excel(name = "生产厂商文本", prompt = "必填") + private String manufacturerText; + /** 住院临时医嘱拆分属性 */ - @Excel(name = "住院临时医嘱拆分属性", + @Excel(name = "住院临时医嘱拆分属性", prompt = "必填", width = 20, readConverterExp = "1=临时医嘱按最小单位每次量向上取整,2=临时医嘱按包装单位开立,3=临时医嘱按最小单位总量向上取整,4=临时医嘱按包装单位每次量向上取整", combo = "临时医嘱按最小单位每次量向上取整,临时医嘱按包装单位开立,临时医嘱按最小单位总量向上取整,临时医嘱按包装单位每次量向上取整") private String thoPartAttributeEnum; /** 剂量单位换算比 */ - @Excel(name = "剂量单位换算比") + @Excel(name = "剂量单位换算比", prompt = "必填,数值类型") + private String unitConversionRatioStr; private BigDecimal unitConversionRatio; /** 医保等级 */ - @Excel(name = "医保等级", dictType = "chrgitm_lv", comboReadDict = true) + @Excel(name = "医保等级", prompt = "必填", dictType = "chrgitm_lv", comboReadDict = true) private String chrgitmLv; /** 处方标志 */ - @Excel(name = "处方标志", readConverterExp = "0=否,1=是", combo = "否,是") + @Excel(name = "处方标志", prompt = "必填", readConverterExp = "0=否,1=是", combo = "否,是") private String rxFlag; + /** 最小库存警戒数量(常规单位) */ + @Excel(name = "最小库存警戒数量(常规单位)", width = 25, prompt = "必填,数值类型") + private String itemMinQuantityStr; + private BigDecimal itemMinQuantity; + + /** 最大库存警戒数量(常规单位) */ + @Excel(name = "最大库存警戒数量(常规单位)", width = 25, prompt = "必填,数值类型") + private String itemMaxQuantityStr; + private BigDecimal itemMaxQuantity; + // ---------------------- 药品基本信息 med_medication ---------------------------------------------- /** 所在位置名称(locationId) */ - @Excel(name = "所在位置名称") + @Excel(name = "所在位置名称", prompt = "必填") private String locationName; /** 规格 */ - @Excel(name = "规格") + @Excel(name = "规格", prompt = "必填") private String totalVolume; /** 用法 */ @@ -157,7 +169,8 @@ public class MedicationImportDto { private String rateCode; /** 单次剂量 */ - @Excel(name = "单次剂量") + @Excel(name = "单次剂量", prompt = "数值类型") + private String doseStr; private BigDecimal dose; /** 剂量单位 */ @@ -165,31 +178,35 @@ public class MedicationImportDto { private String doseUnitCode; /** 单次最大剂量 */ - @Excel(name = "单次最大剂量") + @Excel(name = "单次最大剂量", prompt = "数值类型") + private String maxUnitStr; private BigDecimal maxUnit; // ---------------------- 费用定价 adm_charge_item_definition ---------------------------------------------- /** 财务类别 */ - @Excel(name = "财务类别", dictType = "fin_type_code", comboReadDict = true) + @Excel(name = "财务类别", prompt = "必填", dictType = "fin_type_code", comboReadDict = true) private String typeCode; /** 医保费用类别 */ - @Excel(name = "医保费用类别", dictType = "med_chrgitm_type", comboReadDict = true) + @Excel(name = "医保费用类别", prompt = "必填", dictType = "med_chrgitm_type", comboReadDict = true) private String ybType; // ---------------------- 费用定价子表 adm_charge_item_def_detail ---------------------------------------------- /** 购入价 */ - @Excel(name = "购入价") + @Excel(name = "购入价", prompt = "必填,数值类型") + private String purchasePriceStr; private BigDecimal purchasePrice; /** 零售价 */ - @Excel(name = "零售价") + @Excel(name = "零售价", prompt = "必填,数值类型") + private String retailPriceStr; private BigDecimal retailPrice; /** 最高零售价 */ - @Excel(name = "最高零售价") + @Excel(name = "最高零售价", prompt = "必填,数值类型") + private String maximumRetailPriceStr; private BigDecimal maximumRetailPrice; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentReceiptApprovalServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentReceiptApprovalServiceImpl.java index f3411347..4c816e05 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentReceiptApprovalServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentReceiptApprovalServiceImpl.java @@ -185,11 +185,8 @@ public class DepartmentReceiptApprovalServiceImpl implements IDepartmentReceiptA } // 追加追溯码信息 - boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), SupplyType.PURCHASE_STOCKIN.getValue()); - if (!flg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } // 调用医保商品采购接口 todo 科室材料相关医保接口未对应 String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关 @@ -275,11 +272,9 @@ public class DepartmentReceiptApprovalServiceImpl implements IDepartmentReceiptA } } // 追加追溯码信息 - boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), SupplyType.PURCHASE_RETURN.getValue()); - if (!flg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } + // 调用医保采购退货接口 String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关 if (Whether.YES.getCode().equals(ybSwitch)) { @@ -642,11 +637,9 @@ public class DepartmentReceiptApprovalServiceImpl implements IDepartmentReceiptA inventoryItemService.stockIn(inventoryItemList); } // 追加追溯码信息 - boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), SupplyType.PURCHASE_TRANSFERIN.getValue()); - if (!flg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } + } return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); @@ -721,11 +714,9 @@ public class DepartmentReceiptApprovalServiceImpl implements IDepartmentReceiptA } } // 追加追溯码信息 - boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), SupplyType.PURCHASE_TRANSFEROUT.getValue()); - if (!flg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } + } return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAdviceAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAdviceAppService.java index 95da46fe..884ba328 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAdviceAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAdviceAppService.java @@ -4,6 +4,7 @@ import java.util.List; import com.baomidou.mybatisplus.core.metadata.IPage; import com.core.common.core.domain.R; +import com.openhis.web.doctorstation.dto.ActivityBindDeviceDto; import com.openhis.web.doctorstation.dto.AdviceBaseDto; import com.openhis.web.doctorstation.dto.AdviceSaveParam; import com.openhis.web.doctorstation.dto.UpdateGroupIdParam; @@ -31,6 +32,14 @@ public interface IDoctorStationAdviceAppService { List adviceDefinitionIdParamList, Long organizationId, Integer pageNo, Integer pageSize, Integer pricingFlag, List adviceTypes); + /** + * 查询诊疗绑定耗材信息 + * + * @param activityId 诊疗id + * @return 诊疗绑定耗材信息 + */ + ActivityBindDeviceDto getActivityBindDevice(Long activityId); + /** * 门诊保存医嘱 * diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java index f324a649..c54bd676 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java @@ -1,5 +1,6 @@ package com.openhis.web.doctorstation.appservice.impl; +import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -137,6 +138,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // 预减库存 List adviceInventory = adviceUtils.subtractInventory(adviceInventoryList, adviceDraftInventoryList); + // 查询取药科室配置 + List medLocationConfig = doctorStationAdviceAppMapper.getMedLocationConfig(organizationId); // 费用定价子表信息 List childCharge = doctorStationAdviceAppMapper .getChildCharge(ConditionCode.LOT_NUMBER_COST.getCode(), chargeItemDefinitionIdList); @@ -162,9 +165,29 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp .collect(Collectors.toList()); // 库存信息 baseDto.setInventoryList(inventoryList); - // 如果有库存信息,设置默认产品批号 + // 设置默认产品批号 if (!inventoryList.isEmpty()) { - baseDto.setDefaultLotNumber(inventoryList.get(0).getLotNumber()); + // 库存大于0 + List hasInventoryList = inventoryList.stream() + .filter(e -> e.getQuantity().compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList()); + if (!hasInventoryList.isEmpty()) { + baseDto.setDefaultLotNumber(hasInventoryList.get(0).getLotNumber()); + } + } + if (!inventoryList.isEmpty() && !medLocationConfig.isEmpty()) { + // 第一步:在medLocationConfig中匹配categoryCode + AdviceInventoryDto result1 = medLocationConfig.stream() + .filter(dto -> baseDto.getCategoryCode().equals(dto.getCategoryCode())).findFirst() + .orElse(null); + if (result1 != null) { + // 第二步:在inventoryList中匹配locationId + AdviceInventoryDto result2 = inventoryList.stream() + .filter(dto -> result1.getLocationId().equals(dto.getLocationId())).findFirst() + .orElse(null); + if (result2 != null && result2.getLotNumber() != null) { + baseDto.setDefaultLotNumber(result2.getLotNumber()); + } + } } unitCode = baseDto.getUnitCode(); chargeItemDefinitionId = baseDto.getChargeItemDefinitionId(); @@ -201,6 +224,43 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp return adviceBaseInfo; } + /** + * 查询诊疗绑定耗材信息 + * + * @param activityId 诊疗id + * @return 诊疗绑定耗材信息 + */ + public ActivityBindDeviceDto getActivityBindDevice(Long activityId) { + ActivityBindDeviceDto activityBindDeviceDto = new ActivityBindDeviceDto(); + List activityBindDevice = doctorStationAdviceAppMapper.getActivityBindDevice( + activityId + "", PublicationStatus.ACTIVE.getValue(), CommonConstants.TableName.ADM_DEVICE_DEFINITION); + // 详细信息赋值 + if (!activityBindDevice.isEmpty()) { + // 耗材id集合 + List deviceIds = + activityBindDevice.stream().map(ActivityBindDeviceDetailDto::getDeviceId).collect(Collectors.toList()); + // 耗材医嘱信息 + List deviceRecords = + this.getAdviceBaseInfo(null, null, null, deviceIds, 0L, 1, 100, Whether.NO.getValue(), List.of(1, 2, 3)) + .getRecords(); + Map adviceMap = deviceRecords.stream().collect(Collectors + .toMap(AdviceBaseDto::getAdviceDefinitionId, advice -> advice, (existing, replacement) -> existing // 如果有重复key,保留第一个 + )); + activityBindDeviceDto.setActivityBindDeviceInfos(activityBindDevice); + for (ActivityBindDeviceDetailDto activityBindDeviceInfo : activityBindDeviceDto + .getActivityBindDeviceInfos()) { + Long deviceId = activityBindDeviceInfo.getDeviceId(); + if (deviceId != null) { + AdviceBaseDto matchedAdvice = adviceMap.get(deviceId); + if (matchedAdvice != null) { + activityBindDeviceInfo.setDeviceDetailInfos(matchedAdvice); + } + } + } + } + return activityBindDeviceDto; + } + /** * 门诊保存/签发医嘱 * @@ -297,6 +357,18 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // 删除 List deleteList = medicineList.stream() .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); + // 校验删除的医嘱是否已经收费 + List delRequestIdList = deleteList.stream().map(AdviceSaveDto::getRequestId).collect(Collectors.toList()); + if (!delRequestIdList.isEmpty()) { + List chargeItemList = iChargeItemService.getChargeItemInfoByReqId(delRequestIdList); + if (chargeItemList != null && !chargeItemList.isEmpty()) { + for (ChargeItem ci : chargeItemList) { + if (ChargeItemStatus.BILLED.getValue().equals(ci.getStatusEnum())) { + throw new ServiceException("已收费的项目无法删除,请刷新页面后重试"); + } + } + } + } for (AdviceSaveDto adviceSaveDto : deleteList) { iMedicationRequestService.removeById(adviceSaveDto.getRequestId()); // 删除已经产生的药品发放信息 @@ -511,6 +583,18 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // 删除 List deleteList = deviceList.stream() .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); + // 校验删除的医嘱是否已经收费 + List delRequestIdList = deleteList.stream().map(AdviceSaveDto::getRequestId).collect(Collectors.toList()); + if (!delRequestIdList.isEmpty()) { + List chargeItemList = iChargeItemService.getChargeItemInfoByReqId(delRequestIdList); + if (chargeItemList != null && !chargeItemList.isEmpty()) { + for (ChargeItem ci : chargeItemList) { + if (ChargeItemStatus.BILLED.getValue().equals(ci.getStatusEnum())) { + throw new ServiceException("已收费的项目无法删除,请刷新页面后重试"); + } + } + } + } for (AdviceSaveDto adviceSaveDto : deleteList) { iDeviceRequestService.removeById(adviceSaveDto.getRequestId()); // 删除已经产生的耗材发放信息 @@ -606,8 +690,22 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // 删除 List deleteList = activityList.stream() .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); + // 校验删除的医嘱是否已经收费 + List delRequestIdList = deleteList.stream().map(AdviceSaveDto::getRequestId).collect(Collectors.toList()); + if (!delRequestIdList.isEmpty()) { + List chargeItemList = iChargeItemService.getChargeItemInfoByReqId(delRequestIdList); + if (chargeItemList != null && !chargeItemList.isEmpty()) { + for (ChargeItem ci : chargeItemList) { + if (ChargeItemStatus.BILLED.getValue().equals(ci.getStatusEnum())) { + throw new ServiceException("已收费的项目无法删除,请刷新页面后重试"); + } + } + } + } for (AdviceSaveDto adviceSaveDto : deleteList) { - iServiceRequestService.removeById(adviceSaveDto.getRequestId()); + iServiceRequestService.removeById(adviceSaveDto.getRequestId());// 删除诊疗 + iServiceRequestService.remove( + new LambdaQueryWrapper().eq(ServiceRequest::getParentId, adviceSaveDto.getRequestId()));// 删除诊疗套餐对应的子项 // 删除费用项 iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.WOR_SERVICE_REQUEST, adviceSaveDto.getRequestId()); @@ -683,6 +781,7 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp activityChildrenJsonParams.setEncounterId(serviceRequest.getEncounterId()); // 就诊id activityChildrenJsonParams.setAccountId(chargeItem.getAccountId()); // 账户id activityChildrenJsonParams.setChargeItemId(chargeItem.getId()); // 费用项id + activityChildrenJsonParams.setParentId(serviceRequest.getId());// 子项诊疗的父id adviceUtils.handleActivityChild(childrenJson, organizationId, activityChildrenJsonParams); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java index c99cf67e..ae54198b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java @@ -246,7 +246,7 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation List adviceDefinitionIdParamList, Long organizationId, Integer pageNo, Integer pageSize, Integer pricingFlag) { adviceBaseDto.setAdviceType(1); // 医嘱类型为药品 - adviceBaseDto.setCategoryCode(medCategoryCode.CHINESE_HERBAL_MEDICINE.getValue());// 中草药 + adviceBaseDto.setCategoryCode(MedCategoryCode.CHINESE_HERBAL_MEDICINE.getValue());// 中草药 return iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, searchKey, locationId, adviceDefinitionIdParamList, organizationId, pageNo, pageSize, pricingFlag, List.of(1, 2, 3)); } @@ -320,7 +320,7 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation String signCode = assignSeqUtil.getSeq(AssignSeqEnum.ADVICE_SIGN.getPrefix(), 10); for (AdviceSaveDto adviceSaveDto : insertOrUpdateList) { // 中药付数 - Integer chineseHerbsDoseQuantity = adviceSaveDto.getChineseHerbsDoseQuantity(); + BigDecimal chineseHerbsDoseQuantity = adviceSaveDto.getChineseHerbsDoseQuantity(); medicationRequest = new MedicationRequest(); medicationRequest.setTcmFlag(Whether.YES.getValue());// 中医标识 medicationRequest.setId(adviceSaveDto.getRequestId()); // 主键id @@ -335,7 +335,7 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation medicationRequest.setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.MEDICATION_RES_NO.getPrefix(), 4)); medicationRequest.setChineseHerbsDoseQuantity(chineseHerbsDoseQuantity); // 中药付数 medicationRequest.setSufferingFlag(sufferingFlag); // 代煎标识 - medicationRequest.setQuantity(adviceSaveDto.getQuantity() * chineseHerbsDoseQuantity); // 请求数量 + medicationRequest.setQuantity(adviceSaveDto.getQuantity().multiply(chineseHerbsDoseQuantity)); // 请求数量 medicationRequest.setUnitCode(adviceSaveDto.getUnitCode()); // 请求单位编码 medicationRequest.setLotNumber(adviceSaveDto.getLotNumber()); // 产品批号 medicationRequest.setCategoryEnum(adviceSaveDto.getCategoryEnum()); // 请求类型 @@ -388,7 +388,7 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation chargeItem.setQuantityUnit(medicationRequest.getUnitCode()); // 单位 chargeItem.setUnitPrice(adviceSaveDto.getUnitPrice()); // 单价 // 计算总价,保留4位小数 - BigDecimal qty = new BigDecimal(chargeItem.getQuantityValue()); + BigDecimal qty = chargeItem.getQuantityValue(); chargeItem.setTotalPrice(qty.multiply(chargeItem.getUnitPrice()).setScale(4, RoundingMode.HALF_UP)); // 总价 chargeItem.setTotalPrice(adviceSaveDto.getTotalPrice()); // 总价 @@ -411,7 +411,7 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation iActivityDefinitionService.getAppointActivityDefinitionId(CommonConstants.BusinessName.SUFFERING_TCM); // 签发时,生成中药代煎的账单,只生成一次 if (Whether.YES.getValue().equals(sufferingFlag) && is_sign) { - Integer quantity = 1; // 请求数量 + BigDecimal quantity = new BigDecimal("1"); // 请求数量 AdviceBaseDto adviceBaseDto = new AdviceBaseDto(); adviceBaseDto.setAdviceDefinitionId(sufferingDefinitionId); // 医嘱定义id @@ -449,7 +449,7 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation chargeItem.setQuantityUnit(activityAdviceBaseDto.getUnitCode()); // 单位 chargeItem.setUnitPrice(advicePriceDto.getPrice()); // 单价 // 计算总价,保留4位小数 - BigDecimal qty = new BigDecimal(quantity); + BigDecimal qty = quantity; chargeItem .setTotalPrice(qty.multiply(advicePriceDto.getPrice()).setScale(4, RoundingMode.HALF_UP)); // 总价 chargeItem.setTcmFlag(Whether.YES.getValue());// 中医标识 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationDiagnosisAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationDiagnosisAppServiceImpl.java index 5571296e..26a887e8 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationDiagnosisAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationDiagnosisAppServiceImpl.java @@ -67,7 +67,7 @@ public class DoctorStationDiagnosisAppServiceImpl implements IDoctorStationDiagn // 如果绑定类型是个人,objectId 存储当前登录账号id if (BindingType.PERSONAL.getValue().equals(diagnosisBelongBindingDto.getBindingEnum())) { diagnosisBelongBindingDto.setObjectId(SecurityUtils.getLoginUser().getUserId()); - } else if (BindingType.DEFINITION.getValue().equals(diagnosisBelongBindingDto.getBindingEnum())) { + } else if (BindingType.ORGANIZATION.getValue().equals(diagnosisBelongBindingDto.getBindingEnum())) { diagnosisBelongBindingDto.setObjectId(SecurityUtils.getLoginUser().getOrgId()); } DiagnosisBelongBinding diagnosisBelongBinding = new DiagnosisBelongBinding(); @@ -128,7 +128,7 @@ public class DoctorStationDiagnosisAppServiceImpl implements IDoctorStationDiagn diagnosisBelongBindingDto, searchKey, new HashSet<>(Arrays.asList("definition_name", "object_name")), null); IPage diagnosisBelongBindingPage = doctorStationDiagnosisAppMapper.getDiagnosisBelongBindingPage(new Page<>(pageNo, pageSize), - BindingType.PERSONAL.getValue(), BindingType.DEFINITION.getValue(), queryWrapper); + BindingType.PERSONAL.getValue(), BindingType.ORGANIZATION.getValue(), queryWrapper); diagnosisBelongBindingPage.getRecords().forEach(e -> { // 诊断绑定类型 e.setBindingEnum_enumText(EnumUtils.getInfoByValue(BindingType.class, e.getBindingEnum())); @@ -167,6 +167,7 @@ public class DoctorStationDiagnosisAppServiceImpl implements IDoctorStationDiagn conditionDefinition.setStatusEnum(PublicationStatus.ACTIVE.getValue()); QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(conditionDefinition, searchKey, new HashSet<>(Arrays.asList("name", "py_str", "wb_str")), null); + queryWrapper.eq("status_enum",PublicationStatus.ACTIVE.getValue()); // 设置排序 queryWrapper.orderByDesc("update_time"); // 拼接 用于区分 西医诊断 [1] 中医诊断 [2] 的查询条件 @@ -263,7 +264,7 @@ public class DoctorStationDiagnosisAppServiceImpl implements IDoctorStationDiagn // 科室诊断 Long currentUserOrganizationId = SecurityUtils.getLoginUser().getOrgId(); List organizationList = doctorStationDiagnosisAppMapper.getOrganizationList( - PublicationStatus.ACTIVE.getValue(), BindingType.DEFINITION.getValue(), currentUserOrganizationId); + PublicationStatus.ACTIVE.getValue(), BindingType.ORGANIZATION.getValue(), currentUserOrganizationId); this.handleConditionDefinitionMetadata(organizationList); conditionDefinitionBusinessClass.setOrganizationList(organizationList); return R.ok(conditionDefinitionBusinessClass); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationElepPrescriptionServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationElepPrescriptionServiceImpl.java index 8747ad2e..6f3e6e92 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationElepPrescriptionServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationElepPrescriptionServiceImpl.java @@ -117,7 +117,7 @@ public class DoctorStationElepPrescriptionServiceImpl extends ServiceImpl queryWrapper = HisQueryUtils.buildQueryWrapper(null, searchKey, - new HashSet<>(Arrays.asList("registered_name", "pinyin_code", "wubi_code", "approval_no")), + new HashSet<>(Arrays.asList("registered_name", "pinyin_code", "wubi_code", "approval_no","manufacturer_name")), null); //从yb_catalog_drug_info表中取数据 IPage medicationInfo = elepPrescriptionMapper.selectCatalogDrugInfo(new Page<>(pageNo, pageSize), queryWrapper); @@ -456,8 +456,12 @@ public class DoctorStationElepPrescriptionServiceImpl extends ServiceImpl patientInfo = doctorStationMainAppMapper.getPatientInfo(new Page<>(pageNo, pageSize), ParticipantType.REGISTRATION_DOCTOR.getCode(), ParticipantType.ADMITTER.getCode(), ClinicalStatus.INACTIVE.getValue(), userId, currentUserOrganizationId, pricingFlag, - EncounterStatus.PLANNED.getValue(), queryWrapper); + EncounterStatus.PLANNED.getValue(), EncounterActivityStatus.ACTIVE.getValue(), queryWrapper); patientInfo.getRecords().forEach(e -> { // 性别 e.setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, e.getGenderEnum())); @@ -108,11 +108,18 @@ public class DoctorStationMainAppServiceImpl implements IDoctorStationMainAppSer .set(Encounter::getReceptionTime, new Date()) .set(Encounter::getStatusEnum, EncounterStatus.IN_PROGRESS.getValue()) .set(Encounter::getSubjectStatusEnum, EncounterSubjectStatus.RECEIVING_CARE.getValue())); + // 先把之前的接诊记录更新为已完成 + iEncounterParticipantService.update(new LambdaUpdateWrapper() + .eq(EncounterParticipant::getTypeCode, ParticipantType.ADMITTER.getCode()) + .eq(EncounterParticipant::getEncounterId, encounterId) + .set(EncounterParticipant::getStatusEnum, EncounterActivityStatus.COMPLETED.getValue())); + // 插入接诊医生参与记录 EncounterParticipant encounterParticipant = new EncounterParticipant(); encounterParticipant.setEncounterId(encounterId); encounterParticipant.setTypeCode(ParticipantType.ADMITTER.getCode());// 接诊医生 encounterParticipant.setPractitionerId(SecurityUtils.getLoginUser().getPractitionerId()); + encounterParticipant.setStatusEnum(EncounterActivityStatus.ACTIVE.getValue()); // 状态 iEncounterParticipantService.save(encounterParticipant); return update > 0 ? R.ok() : R.fail(); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/ReservationRecordAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/ReservationRecordAppServiceImpl.java index 44fb7d9f..0034b372 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/ReservationRecordAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/ReservationRecordAppServiceImpl.java @@ -45,7 +45,12 @@ public class ReservationRecordAppServiceImpl implements IReservationRecordAppSer // 当前登录账号的科室id Long orgId = SecurityUtils.getLoginUser().getOrgId(); // 参与者id - Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + Long practitionerId; + if (reservationRecordDto.getPractitionerId() != null) { + practitionerId = reservationRecordDto.getPractitionerId(); + } else { + practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + } ReservationRecord reservationRecord = new ReservationRecord(); @@ -54,6 +59,7 @@ public class ReservationRecordAppServiceImpl implements IReservationRecordAppSer reservationRecord.setChiefComplaint(reservationRecordDto.getChiefComplaint()); // 主诉 reservationRecord.setReservationTime(reservationRecordDto.getReservationTime());// 就诊预约时间 reservationRecord.setRemark(reservationRecordDto.getRemark()); // 备注 + reservationRecord.setToothPosition(reservationRecordDto.getToothPosition()); // 牙位 reservationRecord.setOrgId(orgId); // 预约科室id reservationRecord.setPractitionerId(practitionerId); // 预约医生id iReservationRecordService.save(reservationRecord); @@ -72,7 +78,12 @@ public class ReservationRecordAppServiceImpl implements IReservationRecordAppSer // 当前登录账号的科室id Long orgId = SecurityUtils.getLoginUser().getOrgId(); // 参与者id - Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + Long practitionerId; + if (reservationRecordDto.getPractitionerId() != null) { + practitionerId = reservationRecordDto.getPractitionerId(); + } else { + practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + } ReservationRecord reservationRecord = new ReservationRecord(); @@ -82,6 +93,7 @@ public class ReservationRecordAppServiceImpl implements IReservationRecordAppSer reservationRecord.setChiefComplaint(reservationRecordDto.getChiefComplaint()); // 主诉 reservationRecord.setReservationTime(reservationRecordDto.getReservationTime());// 就诊预约时间 reservationRecord.setRemark(reservationRecordDto.getRemark()); // 备注 + reservationRecord.setToothPosition(reservationRecordDto.getToothPosition()); // 牙位 reservationRecord.setOrgId(orgId); // 预约科室id reservationRecord.setPractitionerId(practitionerId); // 预约医生id iReservationRecordService.updateById(reservationRecord); @@ -114,17 +126,12 @@ public class ReservationRecordAppServiceImpl implements IReservationRecordAppSer @Override public IPage getReservationInfo(ReservationRecordDto reservationRecordDto, String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request) { - // 当前登录账号的科室id - Long orgId = SecurityUtils.getLoginUser().getOrgId(); - // 参与者id - Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); // 构建查询条件 QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(reservationRecordDto, searchKey, new HashSet<>(Arrays.asList("patient_name", "chief_complaint", "patient_tel")), request); - return reservationRecordAppMapper.getReservationInfo(new Page<>(pageNo, pageSize), orgId, practitionerId, - queryWrapper); + return reservationRecordAppMapper.getReservationInfo(new Page<>(pageNo, pageSize), queryWrapper); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java index 7eed2156..0c95aa82 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java @@ -47,14 +47,25 @@ public class DoctorStationAdviceController { @RequestParam(value = "searchKey", defaultValue = "") String searchKey, @RequestParam(value = "locationId", required = false) Long locationId, @RequestParam(value = "adviceDefinitionIdParamList", required = false) List adviceDefinitionIdParamList, - @RequestParam(value = "organizationId") Long organizationId, - @RequestParam(value = "adviceTypes") List adviceTypes, + @RequestParam(value = "organizationId", defaultValue = "0") Long organizationId, + @RequestParam(value = "adviceTypes", defaultValue = "1,2,3") List adviceTypes, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { return R.ok(iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, searchKey, locationId, adviceDefinitionIdParamList, organizationId, pageNo, pageSize, Whether.NO.getValue(), adviceTypes)); } + /** + * 查询诊疗绑定耗材信息 + * + * @param activityId 诊疗id + * @return 诊疗绑定耗材信息 + */ + @GetMapping(value = "/activity-bind-device-info") + public R getActivityBindDevice(@RequestParam(value = "activityId") Long activityId) { + return R.ok(iDoctorStationAdviceAppService.getActivityBindDevice(activityId)); + } + /** * 门诊保存医嘱 * diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ActivityBindDeviceDetailDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ActivityBindDeviceDetailDto.java new file mode 100644 index 00000000..14a7fa4f --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ActivityBindDeviceDetailDto.java @@ -0,0 +1,43 @@ +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 lombok.Data; +import lombok.experimental.Accessors; + +/** + * 诊疗绑定耗材 详情dto + */ +@Data +@Accessors(chain = true) +public class ActivityBindDeviceDetailDto { + + /** + * 诊疗id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long activityId; + + /** + * 耗材id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long deviceId; + + /** 数量 */ + private BigDecimal quantity; + + /** + * 单位 + */ + private String unitCode; + + /** + * 耗材详细信息 + */ + private AdviceBaseDto deviceDetailInfos; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ActivityBindDeviceDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ActivityBindDeviceDto.java new file mode 100644 index 00000000..d5608c3c --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ActivityBindDeviceDto.java @@ -0,0 +1,20 @@ +package com.openhis.web.doctorstation.dto; + +import java.util.List; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 诊疗绑定耗材 dto + */ +@Data +@Accessors(chain = true) +public class ActivityBindDeviceDto { + + /** + * 诊疗绑定耗材详情 + */ + private List activityBindDeviceInfos; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ActivityChildrenJsonParams.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ActivityChildrenJsonParams.java index 7ef92204..74569e85 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ActivityChildrenJsonParams.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ActivityChildrenJsonParams.java @@ -36,4 +36,10 @@ public class ActivityChildrenJsonParams { @JsonSerialize(using = ToStringSerializer.class) private Long chargeItemId; + /** + * 诊疗子项对应的上级ServiceRequestId + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long parentId; + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceInventoryDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceInventoryDto.java index 31a1344b..f0a6159c 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceInventoryDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceInventoryDto.java @@ -23,6 +23,9 @@ public class AdviceInventoryDto { @JsonSerialize(using = ToStringSerializer.class) private Long itemId; + /** 目录类别 */ + private String categoryCode; + /** 库存id */ @JsonSerialize(using = ToStringSerializer.class) private Long inventoryId; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java index 5be0bd99..c65852c4 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java @@ -70,7 +70,7 @@ public class AdviceSaveDto { private String prescriptionNo; /** 请求数量 */ - private Integer quantity; + private BigDecimal quantity; /** 每次发药供应天数 */ private Integer dispensePerDuration; @@ -218,7 +218,7 @@ public class AdviceSaveDto { /** * 中药付数 */ - private Integer chineseHerbsDoseQuantity; + private BigDecimal chineseHerbsDoseQuantity; /** * 代煎标识 | 0:否 , 1:是 @@ -234,7 +234,7 @@ public class AdviceSaveDto { * 设置默认值 */ public AdviceSaveDto() { - this.chineseHerbsDoseQuantity = 1; + this.chineseHerbsDoseQuantity = new BigDecimal("1"); this.therapyEnum = TherapyTimeType.TEMPORARY.getValue(); this.practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); this.founderOrgId = SecurityUtils.getLoginUser().getOrgId(); // 开方人科室 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ReservationRecordDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ReservationRecordDto.java index 015b2afd..23aa8868 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ReservationRecordDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ReservationRecordDto.java @@ -64,4 +64,9 @@ public class ReservationRecordDto { */ private String remark; + /** + * 牙位 + */ + private String toothPosition; + } \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationAdviceAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationAdviceAppMapper.java index 7a67f677..6fea26ce 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationAdviceAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationAdviceAppMapper.java @@ -68,6 +68,14 @@ public interface DoctorStationAdviceAppMapper { @Param("deviceTableName") String deviceTableName, @Param("status1") Integer status1, @Param("status2") Integer status2); + /** + * 查询取药科室配置 + * + * @param organizationId 患者挂号对应的科室id + * @return 取药科室配置 + */ + List getMedLocationConfig(@Param("organizationId") Long organizationId); + /** * 查询 费用定价子表 * @@ -112,4 +120,15 @@ public interface DoctorStationAdviceAppMapper { */ List getEncounterContract(@Param("encounterId") Long encounterId); + /** + * 查询诊疗绑定耗材 + * + * @param activityId 诊疗id + * @param status 启用状态 + * @param tableName 表名 + * @return 诊疗绑定耗材 + */ + List getActivityBindDevice(@Param("activityId") String activityId, + @Param("status") Integer status, @Param("tableName") String tableName); + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationMainAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationMainAppMapper.java index 22136de9..14ba8429 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationMainAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationMainAppMapper.java @@ -30,6 +30,7 @@ public interface DoctorStationMainAppMapper { * @param currentUserOrganizationId 当前登录账号所属的科室ID * @param pricingFlag 划价标记 * @param encounterStatus 就诊状态 + * @param activityStatus 活跃状态 * @param queryWrapper 查询条件 * @return 就诊患者信息 */ @@ -38,6 +39,7 @@ public interface DoctorStationMainAppMapper { @Param("ClinicalStatus") Integer ClinicalStatus, @Param("userId") Long userId, @Param("currentUserOrganizationId") Long currentUserOrganizationId, @Param("pricingFlag") Integer pricingFlag, @Param("encounterStatus") Integer encounterStatus, + @Param("activityStatus") Integer activityStatus, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); /** diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/ReservationRecordAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/ReservationRecordAppMapper.java index 918b57ac..5abf8749 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/ReservationRecordAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/ReservationRecordAppMapper.java @@ -19,13 +19,10 @@ public interface ReservationRecordAppMapper { * 查询 预约记录 * * @param page 分页参数 - * @param orgId 科室id - * @param practitionerId 参与者id * @param queryWrapper 查询条件 * @return 预约记录 */ IPage getReservationInfo(@Param("page") Page page, - @Param("orgId") Long orgId, @Param("practitionerId") Long practitionerId, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/AdviceUtils.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/AdviceUtils.java index ab0fe28b..f8d1cb12 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/AdviceUtils.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/AdviceUtils.java @@ -102,11 +102,10 @@ public class AdviceUtils { matched = true; // 检查库存是否充足 BigDecimal minUnitQuantity = saveDto.getMinUnitQuantity(); - Integer chineseHerbsDoseQuantity = saveDto.getChineseHerbsDoseQuantity(); // 中药付数 + BigDecimal chineseHerbsDoseQuantity = saveDto.getChineseHerbsDoseQuantity(); // 中药付数 // 中草药医嘱的情况 - if (chineseHerbsDoseQuantity != null && chineseHerbsDoseQuantity > 0) { - minUnitQuantity = - minUnitQuantity.multiply(BigDecimal.valueOf(chineseHerbsDoseQuantity.longValue())); + if (chineseHerbsDoseQuantity != null && chineseHerbsDoseQuantity.compareTo(BigDecimal.ZERO) > 0) { + minUnitQuantity = minUnitQuantity.multiply(chineseHerbsDoseQuantity); } if (minUnitQuantity.compareTo(inventoryDto.getQuantity()) > 0) { return saveDto.getAdviceName() + "在" + inventoryDto.getLocationName() + "库存不足"; @@ -176,12 +175,12 @@ public class AdviceUtils { AdviceBaseDto adviceBaseDto; ServiceRequest serviceRequest; AdviceBaseDto activityAdviceBaseDto; - Integer quantity; + BigDecimal quantity; ChargeItem chargeItem; DeviceRequest deviceRequest; // 生成皮试检查对应的请求和账单;生成皮试检查这个诊疗自身的请求,以及皮试检查诊疗绑定的耗材(包括发放) if (isSkinTest) { - quantity = 1; // 请求数量 + quantity = new BigDecimal("1"); // 请求数量 // 皮试检查的诊疗定义id Long skinTestInspectionDefinitionId = iActivityDefinitionService .getAppointActivityDefinitionId(CommonConstants.BusinessName.SKIN_TEST_INSPECTION); @@ -235,7 +234,7 @@ public class AdviceUtils { chargeItem.setQuantityUnit(activityAdviceBaseDto.getUnitCode()); // 单位 chargeItem.setUnitPrice(advicePriceDto.getPrice()); // 单价 // 计算总价,保留4位小数 - BigDecimal qty = new BigDecimal(quantity); + BigDecimal qty = quantity; chargeItem .setTotalPrice(qty.multiply(advicePriceDto.getPrice()).setScale(4, RoundingMode.HALF_UP)); // 总价 iChargeItemService.save(chargeItem); @@ -301,7 +300,7 @@ public class AdviceUtils { chargeItem.setQuantityUnit(activityAdviceBaseDto.getUnitCode()); // 单位 chargeItem.setUnitPrice(advicePriceDto.getPrice()); // 单价 // 计算总价,保留4位小数 - BigDecimal qty = new BigDecimal(quantity); + BigDecimal qty = quantity; chargeItem .setTotalPrice(qty.multiply(advicePriceDto.getPrice()).setScale(4, RoundingMode.HALF_UP)); // 总价 iChargeItemService.save(chargeItem); @@ -321,7 +320,7 @@ public class AdviceUtils { List tmpActivityList = outpatientRegistrationAppMapper.getTmpActivityList(methodCode, CommonConstants.TableName.WOR_ACTIVITY_DEFINITION); for (ActivityDeviceDto activityDeviceDto : tmpActivityList) { - quantity = activityDeviceDto.getQuantity() * executeNum; // 请求数量 + quantity = activityDeviceDto.getQuantity().multiply(new BigDecimal(executeNum)); // 请求数量 adviceBaseDto = new AdviceBaseDto(); adviceBaseDto.setAdviceDefinitionId(activityDeviceDto.getDevActId()); // 对应的诊疗医嘱信息 @@ -379,7 +378,7 @@ public class AdviceUtils { chargeItem.setQuantityUnit(activityAdviceBaseDto.getUnitCode()); // 单位 chargeItem.setUnitPrice(advicePriceDto.getPrice()); // 单价 // 计算总价,保留4位小数 - BigDecimal qty = new BigDecimal(quantity); + BigDecimal qty = quantity; chargeItem.setTotalPrice( qty.multiply(advicePriceDto.getPrice()).setScale(4, RoundingMode.HALF_UP)); // 总价 iChargeItemService.saveOrUpdate(chargeItem); @@ -410,7 +409,7 @@ public class AdviceUtils { objectMapper.readValue(childrenJson, new TypeReference<>() {}); // 创建子项的诊疗请求 Long adviceDefinitionId; // 诊疗医嘱定义ID - Integer quantity; // 子项请求数量 + BigDecimal quantity; // 子项请求数量 List chargeItemList = new ArrayList<>(); // 子项账单集合 ServiceRequest serviceRequest; ChargeItem chargeItem; @@ -443,6 +442,7 @@ public class AdviceUtils { serviceRequest.setEncounterId(activityChildrenJsonParams.getEncounterId()); // 就诊id serviceRequest.setAuthoredTime(curDate); // 请求签发时间 serviceRequest.setOrgId(organizationId); // 执行科室 + serviceRequest.setParentId(activityChildrenJsonParams.getParentId()); // 子项诊疗的父id iServiceRequestService.save(serviceRequest); @@ -471,7 +471,7 @@ public class AdviceUtils { chargeItem.setQuantityUnit(activityAdviceBaseDto.getUnitCode()); // 单位 chargeItem.setUnitPrice(advicePriceDto.getPrice()); // 单价 // 计算总价,保留4位小数 - BigDecimal qty = new BigDecimal(quantity); + BigDecimal qty = quantity; chargeItem.setTotalPrice( qty.multiply(advicePriceDto.getPrice()).setScale(4, RoundingMode.HALF_UP)); // 总价 chargeItemList.add(chargeItem); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/DoctorStationSendApplyUtil.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/DoctorStationSendApplyUtil.java index 73e225c4..02b5ec8e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/DoctorStationSendApplyUtil.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/DoctorStationSendApplyUtil.java @@ -14,7 +14,7 @@ import com.openhis.administration.domain.Practitioner; import com.openhis.administration.service.IOrganizationService; import com.openhis.administration.service.IPatientService; import com.openhis.administration.service.IPractitionerService; -import com.openhis.common.enums.ActivityType; +import com.openhis.common.enums.ActivityDefCategory; import com.openhis.common.enums.ybenums.YbGender; import com.openhis.crosssystem.dto.LisApplyDto; import com.openhis.crosssystem.dto.LisApplyGroupDto; @@ -93,7 +93,7 @@ public class DoctorStationSendApplyUtil { } // 检验,发送LIS申请 - if (ActivityType.PROOF.getValue().equals(activityDefinition.getTypeEnum())) { + if (ActivityDefCategory.PROOF.getCode().equals(activityDefinition.getCategoryCode())) { // LIS性别转换 LisPatientSex lisPatientSex; if (patient.getGenderEnum() == null) { @@ -122,7 +122,7 @@ public class DoctorStationSendApplyUtil { crossSystemSendApplyUtil.sendApplyToLis(lisApplyDto); // 检查,发送PACS申请 - } else if (ActivityType.TEST.getValue().equals(activityDefinition.getTypeEnum())) { + } else if (ActivityDefCategory.TEST.getCode().equals(activityDefinition.getCategoryCode())) { // PACS性别转换 PacsPatientSex pacsPatientSex; if (patient.getGenderEnum() == null) { diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/PrescriptionUtils.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/PrescriptionUtils.java index 453fe161..57c27f74 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/PrescriptionUtils.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/PrescriptionUtils.java @@ -103,7 +103,7 @@ public class PrescriptionUtils { BigDecimal currentTotal = BigDecimal.ZERO; for (AdviceSaveDto medicine : medicines) { // 计算单个药品总金额 - BigDecimal medicinePrice = medicine.getUnitPrice().multiply(new BigDecimal(medicine.getQuantity())); + BigDecimal medicinePrice = medicine.getUnitPrice().multiply(medicine.getQuantity()); // 特殊处理:单药品金额超限 if (medicinePrice.compareTo(MAX_SINGLE_PRESCRIPTION_PRICE) > 0) { // 先保存当前组(如果有药品) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/IDocDefinitionAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/IDocDefinitionAppService.java index cad2522c..d732d3da 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/IDocDefinitionAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/IDocDefinitionAppService.java @@ -26,6 +26,8 @@ public interface IDocDefinitionAppService { */ R updateDefinition(DocDefinitionDto definitionDto); + R deleteDefinition(Long id); + /** * 获取文书定义列表 树形结构 * diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/IDocRecordAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/IDocRecordAppService.java index d21f02f1..0df31582 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/IDocRecordAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/IDocRecordAppService.java @@ -28,7 +28,7 @@ public interface IDocRecordAppService { /** * 根据患者ID或就诊ID获取文书记录列表,只针对不需返回患者具体信息的列表,体温单除外,单独处理 */ - R getRecordByEncounterIdList(DocRecordQueryParam docRecordQueryParam, Integer IsPage, Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request); + R getRecordByEncounterIdList(DocRecordQueryParam docRecordQueryParam, Integer isPage, Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request); R getRecordPageList(DocRecordPatientQueryParam docRecordPatientQueryParam, List primaryMenuEnumList, Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/IDocStatisticsAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/IDocStatisticsAppService.java index 4026287d..571196e5 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/IDocStatisticsAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/IDocStatisticsAppService.java @@ -2,8 +2,11 @@ package com.openhis.web.document.appservice; import com.core.common.core.domain.R; import com.openhis.document.domain.DocStatistics; +import com.openhis.web.document.dto.DocRecordQueryParam; import com.openhis.web.document.dto.DocStatisticsDto; +import com.openhis.web.document.dto.DocStatisticsQueryParam; +import javax.servlet.http.HttpServletRequest; import java.util.List; /** @@ -20,4 +23,6 @@ public interface IDocStatisticsAppService { public R queryByEncounterId(Long encounterId); + R getStatisticsList(DocStatisticsQueryParam queryParam, Integer isPage, Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request); + } \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/impl/DocDefinitionAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/impl/DocDefinitionAppServiceImpl.java index 5fd809ad..dc3d6e8a 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/impl/DocDefinitionAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/impl/DocDefinitionAppServiceImpl.java @@ -58,6 +58,9 @@ public class DocDefinitionAppServiceImpl implements IDocDefinitionAppService { if (definitionDto.getVueRouter() == null || definitionDto.getVueRouter().trim().isEmpty()) { return R.fail("新增文书定义失败:文书路由不能为空(或不能为空白字符)"); } + if (definitionDto.getUseRangeEnum() != null && DocUseRangeEnum.DEPT_USE.getValue().equals(definitionDto.getUseRangeEnum()) && definitionDto.getOrganizationIds() == null) { + return R.fail("新增文书定义失败:科室分配时,科室不能为空"); + } // 2. 校验"名称+版本号"唯一性(避免重复创建) long duplicateCount = docDefinitionService.lambdaQuery() @@ -146,7 +149,9 @@ public class DocDefinitionAppServiceImpl implements IDocDefinitionAppService { if (definitionDto.getBusNo() == null || definitionDto.getBusNo().trim().isEmpty()) { return R.fail("修改文书定义失败:文书业务编号不能为空(或不能为空白字符)"); } - + if (definitionDto.getUseRangeEnum() != null && DocUseRangeEnum.DEPT_USE.getValue().equals(definitionDto.getUseRangeEnum()) && definitionDto.getOrganizationIds() == null) { + return R.fail("修改文书定义失败:科室分配时,科室不能为空"); + } // 2. 校验文书是否存在 DocDefinition existingDoc = docDefinitionService.getById(definitionDto.getId()); if (existingDoc == null) { @@ -193,15 +198,31 @@ public class DocDefinitionAppServiceImpl implements IDocDefinitionAppService { log.error("修改文书定义失败:数据库更新异常(ID={}, 业务编号={}", definitionDto.getId(), definitionDto.getBusNo()); return R.fail("修改文书定义失败:数据库更新操作异常"); + } else { + // 7. 更新科室分配(仅当使用范围为"科室级"时执行) + DocDefinitionOrganizationDto orgDto = new DocDefinitionOrganizationDto(); + orgDto.setBusNo(existingDoc.getBusNo()); + orgDto.setDefinitionId(existingDoc.getId()); + orgDto.setOrganizationIds(definitionDto.getOrganizationIds()); + // 复用科室分配服务的更新逻辑(先删后加,全量覆盖) + return docDefinitionOrganizationAppService.updateOrganization(orgDto); } + } - // 7. 更新科室分配(仅当使用范围为"科室级"时执行) - DocDefinitionOrganizationDto orgDto = new DocDefinitionOrganizationDto(); - orgDto.setBusNo(existingDoc.getBusNo()); - orgDto.setDefinitionId(existingDoc.getId()); - orgDto.setOrganizationIds(definitionDto.getOrganizationIds()); - // 复用科室分配服务的更新逻辑(先删后加,全量覆盖) - return docDefinitionOrganizationAppService.updateOrganization(orgDto); + @Override + public R deleteDefinition(Long id) { + // 1. 参数校验 + if (id == null) { + return R.fail("删除文书定义失败:文书ID不能为空"); + } + boolean result = docDefinitionService.removeById(id); + if (result) { + log.info("删除文书定义成功:ID={}", id); + return R.ok("删除文书定义成功"); + } else { + log.error("删除文书定义失败:数据库删除异常(ID={})", id); + return R.fail("删除文书定义失败:数据库删除操作异常"); + } } /** diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/impl/DocDefinitionOrganizationAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/impl/DocDefinitionOrganizationAppServiceImpl.java index e330a05d..f27a2b33 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/impl/DocDefinitionOrganizationAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/impl/DocDefinitionOrganizationAppServiceImpl.java @@ -129,9 +129,6 @@ public class DocDefinitionOrganizationAppServiceImpl implements IDocDefinitionOr if (definitionOrganizationDto == null) { return R.fail("文书科室分配更新失败:请求参数不能为空"); } - if (definitionOrganizationDto.getOrganizationIds() == null || definitionOrganizationDto.getOrganizationIds().isEmpty()) { - return R.fail("文书科室分配更新失败:科室ID列表不能为空"); - } if (definitionOrganizationDto.getDefinitionId() == null || definitionOrganizationDto.getDefinitionId() == 0) { return R.fail("文书科室分配更新失败:文书定义ID不能为空(或不能为0)"); } @@ -140,34 +137,38 @@ public class DocDefinitionOrganizationAppServiceImpl implements IDocDefinitionOr } // 2. 先删除原有分配关系 - LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper<>(); - deleteWrapper.eq(DocDefinitionOrganization::getDefinitionId, definitionOrganizationDto.getDefinitionId()) + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(DocDefinitionOrganization::getDefinitionId, definitionOrganizationDto.getDefinitionId()) .eq(DocDefinitionOrganization::getBusNo, definitionOrganizationDto.getBusNo().trim()); - - boolean deleteSuccess = docDefinitionOrganizationService.remove(deleteWrapper); - if (!deleteSuccess) { - log.error("文书科室分配更新失败:删除原有分配记录异常(文书定义ID={}, 业务编号={}", - definitionOrganizationDto.getDefinitionId(), definitionOrganizationDto.getBusNo()); - return R.fail("文书科室分配更新失败:删除原有分配记录异常"); + Long count = docDefinitionOrganizationService.count(wrapper); + if (count > 0) { + boolean deleteSuccess = docDefinitionOrganizationService.remove(wrapper); + if (!deleteSuccess) { + log.error("文书科室分配更新失败:删除原有分配记录异常(文书定义ID={}, 业务编号={}", + definitionOrganizationDto.getDefinitionId(), definitionOrganizationDto.getBusNo()); + return R.fail("文书科室分配更新失败:删除原有分配记录异常"); + } } - - // 3. 再新增新的分配关系 - List newOrgList = new ArrayList<>(); - for (Long orgId : definitionOrganizationDto.getOrganizationIds()) { - DocDefinitionOrganization docOrg = new DocDefinitionOrganization(); - docOrg.setDefinitionId(definitionOrganizationDto.getDefinitionId()); - docOrg.setBusNo(definitionOrganizationDto.getBusNo().trim()); - docOrg.setOrganizationId(orgId); - newOrgList.add(docOrg); - } - - boolean saveSuccess = docDefinitionOrganizationService.saveBatch(newOrgList); - if (saveSuccess) { + if (definitionOrganizationDto.getOrganizationIds() == null || definitionOrganizationDto.getOrganizationIds().isEmpty()) { return R.ok("文书科室分配更新成功"); } else { - log.error("文书科室分配更新失败:新增新分配记录异常(文书定义ID={}, 业务编号={}", - definitionOrganizationDto.getDefinitionId(), definitionOrganizationDto.getBusNo()); - return R.fail("文书科室分配更新失败:新增新分配记录异常"); + // 3. 再新增新的分配关系 + List newOrgList = new ArrayList<>(); + for (Long orgId : definitionOrganizationDto.getOrganizationIds()) { + DocDefinitionOrganization docOrg = new DocDefinitionOrganization(); + docOrg.setDefinitionId(definitionOrganizationDto.getDefinitionId()); + docOrg.setBusNo(definitionOrganizationDto.getBusNo().trim()); + docOrg.setOrganizationId(orgId); + newOrgList.add(docOrg); + } + boolean saveSuccess = docDefinitionOrganizationService.saveBatch(newOrgList); + if (saveSuccess) { + return R.ok("文书科室分配更新成功"); + } else { + log.error("文书科室分配更新失败:新增新分配记录异常(文书定义ID={}, 业务编号={}", + definitionOrganizationDto.getDefinitionId(), definitionOrganizationDto.getBusNo()); + return R.fail("文书科室分配更新失败:新增新分配记录异常"); + } } } } \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/impl/DocRecordAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/impl/DocRecordAppServiceImpl.java index 4ed11444..3210b04f 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/impl/DocRecordAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/impl/DocRecordAppServiceImpl.java @@ -1,5 +1,8 @@ package com.openhis.web.document.appservice.impl; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -19,15 +22,15 @@ import com.openhis.document.mapper.DocRecordMapper; import com.openhis.document.service.IDocRecordService; import com.openhis.web.document.appservice.IDocDefinitionAppService; import com.openhis.web.document.appservice.IDocRecordAppService; -import com.openhis.web.document.dto.DocDefinitionDto; -import com.openhis.web.document.dto.DocRecordDto; -import com.openhis.web.document.dto.DocRecordPatientDto; -import com.openhis.web.document.dto.DocRecordPatientQueryParam; -import com.openhis.web.document.dto.DocRecordQueryParam; +import com.openhis.web.document.appservice.IDocStatisticsAppService; +import com.openhis.web.document.appservice.IDocStatisticsDefinitionAppService; +import com.openhis.web.document.dto.*; import com.openhis.web.document.mapper.DocRecordAppMapper; +import com.openhis.web.document.util.ConvertToDocStatistics; import com.openhis.web.document.util.PermissionProcessor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.jdbc.core.BatchPreparedStatementSetter; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; @@ -37,6 +40,9 @@ import javax.servlet.http.HttpServletRequest; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; @Slf4j @@ -51,6 +57,12 @@ public class DocRecordAppServiceImpl implements IDocRecordAppService { private IDocDefinitionAppService docDefinitionAppService; @Resource private DocRecordAppMapper docRecordAppMapper; + @Resource + private IDocStatisticsDefinitionAppService docStatisticsDefinitionAppService; + @Resource + private IDocStatisticsAppService docStatisticsAppService; + @Resource + ConvertToDocStatistics convertToDocStatistics; @Autowired private JdbcTemplate jdbcTemplate; // 使用 JdbcTemplate 执行 SQL @@ -198,6 +210,27 @@ public class DocRecordAppServiceImpl implements IDocRecordAppService { return ""; } + + /** + * 文书统计 - 新增、编辑记录 + * + * @param docRecordDto + * @return + */ + private R createOrUpdateStatistics(DocRecordDto docRecordDto) { + if (docRecordDto == null) { + return R.fail("插入文书统计数据失败:原始文书记录不能为空"); + } + if (docRecordDto.getContentJson() == null) { + return R.fail("插入文书统计数据失败:原始文书记录内容不能为空"); + } + List list = convertToDocStatistics.convertToStatisticsDtoList(docRecordDto); + if (list == null || list.isEmpty()) { + return R.fail("插入文书统计数据失败:统计数据为空"); + } + return docStatisticsAppService.createOrUpdte(list); + } + /** * 新增记录 * @@ -213,7 +246,6 @@ public class DocRecordAppServiceImpl implements IDocRecordAppService { docRecord.setDefinitionId(docRecordDto.getDefinitionId()); docRecord.setDefinitionBusNo(docRecordDto.getDefinitionBusNo()); docRecord.setContentJson(docRecordDto.getContentJson()); - // 状态默认设为草稿(修复原逻辑:原代码先判断再覆盖,导致默认值无效) docRecord.setStatusEnum(docRecordDto.getStatusEnum() == null ? DocStatusEnum.DRAFT.getValue() : docRecordDto.getStatusEnum()); docRecord.setOrganizationId(SecurityUtils.getLoginUser().getOrgId()); docRecord.setEncounterId(docRecordDto.getEncounterId()); @@ -222,6 +254,8 @@ public class DocRecordAppServiceImpl implements IDocRecordAppService { docRecord.setIsEdit(0); boolean saveSuccess = docRecordService.save(docRecord); if (saveSuccess) { + docRecordDto.setId(docRecord.getId()); + createOrUpdateStatistics(docRecordDto); return R.ok("新增患者文书记录成功"); } else { return R.fail("新增患者文书记录失败"); @@ -259,7 +293,6 @@ public class DocRecordAppServiceImpl implements IDocRecordAppService { docRecord.setPatientId(docRecordDto.getPatientId()); docRecord.setRecordTime(docRecordDto.getRecordTime()); docRecord.setIsEdit(0); - // 执行修改 boolean updateSuccess = docRecordService.updateById(docRecord); if (updateSuccess) { @@ -268,6 +301,7 @@ public class DocRecordAppServiceImpl implements IDocRecordAppService { if (!logSuccess) { return R.fail("修改患者文书记录成功,但插入文档操作日志失败"); } + createOrUpdateStatistics(docRecordDto); return R.ok("修改患者文书记录成功"); } else { return R.fail("修改患者文书记录失败"); @@ -287,19 +321,16 @@ public class DocRecordAppServiceImpl implements IDocRecordAppService { return R.fail("患者文书记录:患者ID和就诊ID不能同时为空"); } if (docRecordQueryParam.getDefinitionId() == null) { - return R.fail("患者文书记录:文书类型ID不能为空"); + return R.fail("患者文书记录:文书类型(定义)ID不能为空"); } // 2. 分页查询逻辑 if (isPage != null && isPage == 1) { - QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper( + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper( docRecordQueryParam, null, null, request); - // 按记录时间倒序(最新记录在前) - queryWrapper.lambda().orderByDesc(DocRecord::getRecordTime); - - Page recordPage = HisPageUtils.selectPage( - docRecordMapper, queryWrapper, pageNo, pageSize, DocRecordDto.class); - return R.ok(recordPage, "获取患者文书记录列表成功"); + IPage pageResult = docRecordAppMapper.getRecordPageListByEncounterId( + new Page<>(pageNo, pageSize), queryWrapper); + return R.ok(pageResult, "获取患者文书记录列表成功"); } // 3. 不分页查询逻辑 else { @@ -319,12 +350,15 @@ public class DocRecordAppServiceImpl implements IDocRecordAppService { queryWrapper.eq(DocRecord::getOrganizationId, docRecordQueryParam.getOrganizationId()); } + DocDefinitionDto docDefinitionDto = docDefinitionAppService.getDefinitionById(docRecordQueryParam.getDefinitionId()); // 实体转DTO List dtoList = new ArrayList<>(); List recordList = docRecordService.list(queryWrapper); for (DocRecord record : recordList) { DocRecordDto dto = new DocRecordDto(); BeanUtils.copyProperties(record, dto); + dto.setName(docDefinitionDto!=null?docDefinitionDto.getName():""); + dto.setVersion(docDefinitionDto!=null?docDefinitionDto.getVersion():""); dtoList.add(dto); } return R.ok(dtoList, "获取患者文书记录列表成功"); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/impl/DocStatisticsAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/impl/DocStatisticsAppServiceImpl.java index ee906036..18e5df61 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/impl/DocStatisticsAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/appservice/impl/DocStatisticsAppServiceImpl.java @@ -1,16 +1,25 @@ package com.openhis.web.document.appservice.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.core.common.core.domain.R; +import com.core.common.utils.SecurityUtils; +import com.core.common.utils.bean.BeanUtils; +import com.openhis.common.utils.HisPageUtils; +import com.openhis.common.utils.HisQueryUtils; import com.openhis.document.domain.DocStatistics; +import com.openhis.document.mapper.DocStatisticsMapper; import com.openhis.document.service.IDocStatisticsService; import com.openhis.web.document.appservice.IDocStatisticsAppService; -import com.openhis.web.document.appservice.IDocTemplateAppService; import com.openhis.web.document.dto.DocStatisticsDto; +import com.openhis.web.document.dto.DocStatisticsQueryParam; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; import java.util.List; /** @@ -22,6 +31,9 @@ public class DocStatisticsAppServiceImpl implements IDocStatisticsAppService { @Resource private IDocStatisticsService docStatisticsService; + @Resource + private DocStatisticsMapper docStatisticsMapper; + @Override public R createOrUpdte(List docStatisticsList) { @@ -31,12 +43,13 @@ public class DocStatisticsAppServiceImpl implements IDocStatisticsAppService { //根据recordId和statisticDefinitionId判断是否存在,存在则更新,不存在则新增 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(DocStatistics::getRecordId, docStatisticsList.get(0).getRecordId()); - queryWrapper.eq(DocStatistics::getStatisticDefinitionId, docStatisticsList.get(0).getStatisticDefinitionId()); +// queryWrapper.eq(DocStatistics::getStatisticDefinitionId, docStatisticsList.get(0).getStatisticDefinitionId()); List docStatisticsOldList = docStatisticsService.list(queryWrapper); if (docStatisticsOldList.size() > 0) { //批量删除 docStatisticsService.removeByIds(docStatisticsOldList.stream().map(DocStatistics::getId).toList()); } + List docStatisticsInsertList = new ArrayList<>(); //批量新增 for (DocStatisticsDto docStatisticsDto : docStatisticsList) { DocStatistics docStatistics = new DocStatistics(); @@ -45,13 +58,18 @@ public class DocStatisticsAppServiceImpl implements IDocStatisticsAppService { docStatistics.setEncounterId(docStatisticsDto.getEncounterId()); docStatistics.setPatientId(docStatisticsDto.getPatientId()); docStatistics.setStatisticDefinitionCode(docStatisticsDto.getStatisticDefinitionCode()); - docStatistics.setOrgnizationId(docStatisticsDto.getOrgnizationId()); //TODO: 待确定 + docStatistics.setOrganizationId(SecurityUtils.getLoginUser().getOrgId()); docStatistics.setValue(docStatisticsDto.getValue()); - docStatistics.setRecordingDate(docStatisticsDto.getRecordingDate()); - docStatistics.setRecordingTime(docStatisticsDto.getRecordingTime()); + docStatistics.setRecordTime(docStatisticsDto.getRecordTime()); docStatistics.setSource(docStatisticsDto.getSource()); + docStatisticsInsertList.add(docStatistics); + } + boolean result = docStatisticsService.saveBatch(docStatisticsInsertList); + if (result) { + return R.ok(); + } else { + return R.fail("新增或更新文档统计数据失败"); } - return null; } @Override @@ -66,6 +84,68 @@ public class DocStatisticsAppServiceImpl implements IDocStatisticsAppService { @Override public R queryByEncounterId(Long encounterId) { - return null; + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(DocStatistics::getEncounterId, encounterId); + List docStatisticsList = docStatisticsService.list(queryWrapper); + List docStatisticsDtoList = new ArrayList<>(); + for (DocStatistics docStatistics : docStatisticsList) { + DocStatisticsDto docStatisticsDto = new DocStatisticsDto(); + docStatisticsDto.setId(docStatistics.getId()); + docStatisticsDto.setRecordId(docStatistics.getRecordId()); + docStatisticsDto.setStatisticDefinitionId(docStatistics.getStatisticDefinitionId()); + docStatisticsDto.setEncounterId(docStatistics.getEncounterId()); + docStatisticsDto.setPatientId(docStatistics.getPatientId()); + docStatisticsDto.setStatisticDefinitionCode(docStatistics.getStatisticDefinitionCode()); + docStatisticsDto.setOrganizationId(docStatistics.getOrganizationId()); + docStatisticsDto.setValue(docStatistics.getValue()); + docStatisticsDto.setRecordTime(docStatistics.getRecordTime()); + docStatisticsDto.setSource(docStatistics.getSource()); + docStatisticsDtoList.add(docStatisticsDto); + } + return R.ok(docStatisticsDtoList); + } + + @Override + public R getStatisticsList(DocStatisticsQueryParam queryParam, Integer isPage, Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) { + // 1. 分页查询逻辑 + if (isPage != null && isPage == 1) { + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper( + queryParam, null, null, request); + // 按记录时间倒序(最新记录在前) + queryWrapper.lambda().orderByDesc(DocStatistics::getRecordTime); + + Page recordPage = HisPageUtils.selectPage( + docStatisticsMapper, queryWrapper, pageNo, pageSize, DocStatisticsDto.class); + return R.ok(recordPage, "获取患者文书统计数据成功"); + } + //2. 不分页查询逻辑 + else { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + // 患者ID查询条件 + if (queryParam.getPatientId() != null) { + queryWrapper.eq(DocStatistics::getPatientId, queryParam.getPatientId()); + } + // 就诊ID查询条件(修复原逻辑:原代码字段匹配错误,用EncounterId匹配DefinitionBusNo) + if (queryParam.getEncounterId() != null) { + queryWrapper.eq(DocStatistics::getEncounterId, queryParam.getEncounterId()); + } + // 科室ID查询条件(修复原逻辑:原代码字段匹配错误,用OrganizationId匹配EncounterId) + if (queryParam.getOrganizationId() != null) { + queryWrapper.eq(DocStatistics::getOrganizationId, queryParam.getOrganizationId()); + } + if (queryParam.getStatisticsDefinitionCode() != null) { + queryWrapper.eq(DocStatistics::getStatisticDefinitionCode, queryParam.getStatisticsDefinitionCode()); + } + + // 实体转DTO + List dtoList = new ArrayList<>(); + List statisticsList = docStatisticsService.list(queryWrapper); + for (DocStatistics statistics : statisticsList) { + DocStatisticsDto dto = new DocStatisticsDto(); + BeanUtils.copyProperties(statistics, dto); + dtoList.add(dto); + } + return R.ok(dtoList, "获取患者文书统计数据成功"); + } } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocDefinitionController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocDefinitionController.java index 6f2e8094..6ac50b75 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocDefinitionController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocDefinitionController.java @@ -84,6 +84,19 @@ public class DocDefinitionController { return iDocDefinitionAppService.getDefinitionDetailById(id); } + /** + * 获取文书定义详情 + * + * @param id 文书定义ID + * @return 文书定义详情 + */ + @DeleteMapping("/delete/{id}") + public R deleteDefinition(@PathVariable("id") Long id) { + log.info("删除文书定义,ID={}", id); + // 调用删除服务(注意:方法名应改为删除相关,如removeById) + return iDocDefinitionAppService.deleteDefinition(id); + } + /** * 查询获取文书定义列表 树形结构 * diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocRecordController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocRecordController.java index c7559484..e0b89bde 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocRecordController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocRecordController.java @@ -90,11 +90,11 @@ public class DocRecordController { */ @GetMapping("/getRecordByEncounterIdList") R getRecordByEncounterIdList(DocRecordQueryParam docRecordQueryParam, - @RequestParam(value = "IsPage", defaultValue = "1") Integer IsPage, + @RequestParam(value = "isPage", defaultValue = "1") Integer isPage, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { - return docRecordAppService.getRecordByEncounterIdList(docRecordQueryParam, IsPage, pageNo, pageSize, searchKey, request); + return docRecordAppService.getRecordByEncounterIdList(docRecordQueryParam, isPage, pageNo, pageSize, searchKey, request); } /** diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocStatisticsController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocStatisticsController.java index cd8fd45d..94e35e54 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocStatisticsController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocStatisticsController.java @@ -1,24 +1,59 @@ package com.openhis.web.document.controller; +import com.core.common.core.domain.R; import com.openhis.web.document.appservice.IDocRecordAppService; +import com.openhis.web.document.appservice.IDocStatisticsAppService; +import com.openhis.web.document.dto.DocStatisticsDto; +import com.openhis.web.document.dto.DocStatisticsQueryParam; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; /** - * 文档模板-病历另存为模板使用 controller + * DocStatistics文书统计 controller * * @author wanghaiming * @date 2025-08-12 */ @RestController -@RequestMapping("/document/template") +@RequestMapping("/document/statistics") @Slf4j @AllArgsConstructor public class DocStatisticsController { - private final IDocRecordAppService docRecordAppService; + private final IDocStatisticsAppService docStatisticsAppService; + + @PostMapping("/createOrUpdte") + public R createOrUpdte(List docStatisticsList) { + return docStatisticsAppService.createOrUpdte(docStatisticsList); + } + + @DeleteMapping("/delete") + public R delete(List ids) { + return docStatisticsAppService.delete(ids); + } + + @GetMapping("/queryByRecordId") + public R queryByRecordId(Long recordId) { + return docStatisticsAppService.queryByRecordId(recordId); + } + + @GetMapping("/queryByEncounterId") + public R queryByEncounterId(Long encounterId) { + return docStatisticsAppService.queryByEncounterId(encounterId); + } + + @GetMapping("/getStatisticsList") + R getStatisticsList(DocStatisticsQueryParam queryParam, + @RequestParam(value = "isPage", defaultValue = "1") Integer isPage, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return docStatisticsAppService.getStatisticsList(queryParam, isPage, pageNo, pageSize, searchKey, request); + } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocTemplateController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocTemplateController.java index 813600f1..670483b7 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocTemplateController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocTemplateController.java @@ -18,7 +18,7 @@ import lombok.extern.slf4j.Slf4j; import javax.servlet.http.HttpServletRequest; /** - * DOC模板 controller + * 文书模板 controller * * @author wanghaiming * @date 2025-08-12 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DirectoryNode.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DirectoryNode.java index 81ab3728..47d3c319 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DirectoryNode.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DirectoryNode.java @@ -1,5 +1,7 @@ package com.openhis.web.document.dto; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import lombok.experimental.Accessors; @@ -12,6 +14,8 @@ public class DirectoryNode { private String name; private int level; private DocDefinitionDto document; + @JsonSerialize(using = ToStringSerializer.class) + private Long id; private List children = new ArrayList<>(); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocDefinitionDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocDefinitionDto.java index 2d4f0968..3469fbb4 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocDefinitionDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocDefinitionDto.java @@ -81,5 +81,7 @@ public class DocDefinitionDto { * 文书权限 0-不限制 1-查看 2- 编辑 */ private Integer pharmacistPermissionEnum; + // 关键:通过contentUsing指定集合中元素的序列化器 + @JsonSerialize(contentUsing = ToStringSerializer.class) private List organizationIds; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocDefinitionOrganizationDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocDefinitionOrganizationDto.java index 7e61e174..c70c3184 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocDefinitionOrganizationDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocDefinitionOrganizationDto.java @@ -19,6 +19,6 @@ public class DocDefinitionOrganizationDto { @JsonSerialize(using = ToStringSerializer.class) private Long definitionId; private String busNo; - @JsonSerialize(using = ToStringSerializer.class) + @JsonSerialize(contentUsing = ToStringSerializer.class) private List organizationIds; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocDefinitonParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocDefinitonParam.java index 5773d410..d82544ca 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocDefinitonParam.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocDefinitonParam.java @@ -17,8 +17,5 @@ public class DocDefinitonParam { @JsonSerialize(using = ToStringSerializer.class) private Long organizationId; private String name; - @JsonSerialize(using = ToStringSerializer.class) private List useRanges; - - } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocRecordDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocRecordDto.java index 9e876477..e6c9b00b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocRecordDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocRecordDto.java @@ -53,4 +53,10 @@ public class DocRecordDto { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date recordTime; private String createBy; + private String source; + /** + * 记录名称 + */ + private String name; + private String version; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocRecordPatientDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocRecordPatientDto.java index f841343d..df4ae6d3 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocRecordPatientDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocRecordPatientDto.java @@ -60,7 +60,7 @@ public class DocRecordPatientDto extends DocRecordDto { /** * 病历名称 */ - private String docName; + private String name; /** * 主菜单枚举值/病历类型 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocStatisticsDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocStatisticsDto.java index 503dfb1d..16b6b2f8 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocStatisticsDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocStatisticsDto.java @@ -1,9 +1,11 @@ package com.openhis.web.document.dto; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; @@ -15,6 +17,7 @@ public class DocStatisticsDto { /** * 记录ID */ + @JsonSerialize(using = ToStringSerializer.class) private Long recordId; /** * 统计项定义ID @@ -33,19 +36,18 @@ public class DocStatisticsDto { * 记录科室ID */ @JsonSerialize(using = ToStringSerializer.class) - private Long orgnizationId; + private Long organizationId; /** * 统计值 */ + private String value; /** - * 记录日期 yyyy-MM-dd + * 记录时间 */ - private Date recordingDate; - /** - * 记录时间 yyyy-MM-dd HH:mm:ss - */ - private Date recordingTime; + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date recordTime; /** * 记录来源 */ diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocStatisticsQueryParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocStatisticsQueryParam.java new file mode 100644 index 00000000..9db6c555 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocStatisticsQueryParam.java @@ -0,0 +1,30 @@ +package com.openhis.web.document.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; + +/** + * 查询单个患者的文档记录参数 + */ +@Data +@Accessors(chain = true) +public class DocStatisticsQueryParam { + + @JsonSerialize(using = ToStringSerializer.class) + private Long definitionId; + @JsonSerialize(using = ToStringSerializer.class) + private Long patientId; + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterId; + @JsonSerialize(using = ToStringSerializer.class) + private Long organizationId; + private String statisticsDefinitionCode; + /** + * 记录时间 yyyy-MM-dd HH:mm:ss + */ + private Date recordTime; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocTemplateDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocTemplateDto.java index 1419d391..414b9924 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocTemplateDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocTemplateDto.java @@ -28,6 +28,7 @@ public class DocTemplateDto { /** * 文书定义ID */ + @JsonSerialize(using = ToStringSerializer.class) private Long definitionId; /** @@ -37,10 +38,12 @@ public class DocTemplateDto { /** * 当useRange=1时,指定机构ID */ + @JsonSerialize(using = ToStringSerializer.class) private Long organizationId; /** * 当useRange=2时,指定用户ID */ + @JsonSerialize(using = ToStringSerializer.class) private Long userId; /** * 备注 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/mapper/DocRecordAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/mapper/DocRecordAppMapper.java index 02769f76..935968f1 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/mapper/DocRecordAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/mapper/DocRecordAppMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.openhis.web.document.dto.DocRecordDto; import com.openhis.web.document.dto.DocRecordPatientDto; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -23,4 +24,7 @@ public interface DocRecordAppMapper { IPage getRecordPageList(@Param("page") Page page, @Param("primaryMenuEnumList") List primaryMenuEnumList, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + IPage getRecordPageListByEncounterId(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/util/ConvertToDocStatistics.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/util/ConvertToDocStatistics.java new file mode 100644 index 00000000..77740e76 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/util/ConvertToDocStatistics.java @@ -0,0 +1,171 @@ +package com.openhis.web.document.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.openhis.web.document.appservice.IDocStatisticsDefinitionAppService; +import com.openhis.web.document.dto.DocRecordDto; +import com.openhis.web.document.dto.DocStatisticsDefinitionDto; +import com.openhis.web.document.dto.DocStatisticsDto; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import static com.core.framework.datasource.DynamicDataSourceContextHolder.log; + +@Component +public class ConvertToDocStatistics { + @Resource + IDocStatisticsDefinitionAppService docStatisticsDefinitionAppService; + + /** + * 将文档记录转换为统计DTO列表的工具方法 + * 支持两种JSON结构: + * 1. 简单键值对:{"目标code": 值, "recordTime": "yyyy-MM-dd HH:mm:ss"} + * 2. 嵌套Item列表:{"目标code+Item": [{"目标code": 值1}, {"目标code": 值2}],"recordTime": "yyyy-MM-dd HH:mm:ss"} + * 3. 记录 Time 字段:{"目标code+Item": [{"目标code": 值1, "recordTime": "yyyy-MM-dd HH:mm:ss"}, {"目标code": 值2, "recordTime": "yyyy-MM-dd HH:mm:ss"}]} + * 4. 记录 Time 字段:{"目标code": 值, "recordTime": "yyyy-MM-dd HH:mm:ss", "目标code+Item": [{"目标code": 值1, "recordTime": "yyyy-MM-dd HH:mm:ss"}, {"目标code": 值2, "recordTime": "yyyy-MM-dd HH:mm:ss"}]} + * 日期类型使用java.util.Date + */ + public List convertToStatisticsDtoList(DocRecordDto docRecordDto) { + // 初始化返回的统计DTO列表 + List statisticsDtoList = new ArrayList<>(); + + // 防御性判断:如果文档记录为空,直接返回空列表 + if (docRecordDto == null) { + return statisticsDtoList; + } + + // 获取JSON格式的内容字符串(待解析的原始数据) + String contentJson = docRecordDto.getContentJson(); + // 获取系统中定义的统计项列表(需要解析的目标code集合) + List definitionList = docStatisticsDefinitionAppService.getList(1); + + // 防御性判断:如果统计项定义为空,直接返回空列表 + if (definitionList == null || definitionList.isEmpty()) { + return statisticsDtoList; + } + + // 解析JSON字符串为JSONObject(方便操作嵌套结构) + JSONObject contentJsonObj = parseJson(contentJson); + // 如果JSON解析失败(返回null),直接返回空列表 + if (contentJsonObj == null) { + return statisticsDtoList; + } + + // 遍历每个统计项定义,解析对应的值 + for (DocStatisticsDefinitionDto definition : definitionList) { + // 当前需要解析的目标字段code(如"BQ"、"DrugCode") + String targetCode = definition.getCode(); + + // 场景1:先尝试解析顶级键值对结构(如{"BQ": 123}) + if (contentJsonObj.containsKey(targetCode)) { + // 提取值并转换为字符串 + String value = String.valueOf(contentJsonObj.get(targetCode)); + Date recordTime = docRecordDto.getRecordTime(); + // 创建DTO并添加到结果列表 + addSingleDto(statisticsDtoList, definition, docRecordDto, value, + recordTime); + // 处理完当前统计项,继续下一个 + continue; + } + + // 场景2:如果顶级键不存在,尝试解析嵌套的Item列表 + // 列表字段名规则:目标code + "Item"(如code=BQ → 列表字段名=BQItem) + String itemListKey = targetCode + "Item"; + // 从JSON中获取对应的列表 + JSONArray itemArray = contentJsonObj.getJSONArray(itemListKey); + + // 判断列表是否存在且不为空 + if (itemArray != null && !itemArray.isEmpty()) { + // 遍历列表中的每个元素(每个元素是一个JSONObject) + for (int i = 0; i < itemArray.size(); i++) { + JSONObject itemObj = itemArray.getJSONObject(i); + // 检查元素是否包含目标code + if (itemObj != null && itemObj.containsKey(targetCode)) { + // 提取当前元素的目标值 + String value = String.valueOf(itemObj.get(targetCode)); + Date recordTime = new Date(); + if (itemObj.containsKey("recordTime")) { + recordTime = itemObj.getDate("recordTime"); + } else if (contentJsonObj.containsKey("recordTime")) { + recordTime = contentJsonObj.getDate("recordTime"); + } else { + recordTime = docRecordDto.getRecordTime(); + } + // 创建DTO并添加到结果列表 + addSingleDto(statisticsDtoList, definition, docRecordDto, value, + recordTime); + } + } + // 日志提示:如果列表存在但未找到匹配的code + if (statisticsDtoList.isEmpty()) { + log.warn("列表{}中未找到包含{}的元素,可能数据格式不匹配", itemListKey, targetCode); + } + } else { + // 日志提示:未找到对应的Item列表或列表为空 + log.error("未找到列表{}或列表为空,无法解析统计项: {}", itemListKey, targetCode); + } + } + + return statisticsDtoList; + } + + /** + * 工具方法:解析JSON字符串为JSONObject + * + * @param jsonStr 原始JSON字符串 + * @return 解析后的JSONObject,失败则返回null + */ + private JSONObject parseJson(String jsonStr) { + // 如果JSON字符串为空,直接返回null + if (jsonStr == null) { + return null; + } + try { + // 解析JSON字符串 + return JSON.parseObject(jsonStr); + } catch (Exception e) { + // 记录解析异常日志 + log.error("JSON解析失败,原始字符串: {}", jsonStr, e); + return null; + } + } + + /** + * 工具方法:创建单个统计DTO并添加到列表 + * + * @param dtoList 目标DTO列表 + * @param definition 统计项定义 + * @param docRecordDto 文档记录DTO + * @param value 解析出的统计值 + * @param recordTime 记录时间 + */ + private void addSingleDto(List dtoList, + DocStatisticsDefinitionDto definition, + DocRecordDto docRecordDto, + String value, + Date recordTime) { + // 创建统计DTO对象 + DocStatisticsDto dto = new DocStatisticsDto(); + // 设置统计值和关联的统计项定义信息 + dto.setValue(value); + dto.setStatisticDefinitionCode(definition.getCode()); + dto.setStatisticDefinitionId(definition.getId()); + // 设置关联的文档记录信息 + dto.setRecordId(docRecordDto.getId()); + dto.setEncounterId(docRecordDto.getEncounterId()); + dto.setPatientId(docRecordDto.getPatientId()); + dto.setOrganizationId(docRecordDto.getOrganizationId()); + dto.setRecordTime(recordTime); + dto.setSource(docRecordDto.getSource()); + // 将创建好的DTO添加到结果列表 + dtoList.add(dto); + } + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/util/DocumentDirectoryProcessor.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/util/DocumentDirectoryProcessor.java index 3ce9cbdd..e8cad82d 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/util/DocumentDirectoryProcessor.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/util/DocumentDirectoryProcessor.java @@ -8,6 +8,8 @@ import java.util.*; public class DocumentDirectoryProcessor { + private static Long id; + /** * 构建文档目录树 * @@ -16,6 +18,7 @@ public class DocumentDirectoryProcessor { */ public static List buildDocumentDirectory(List documents) { // 第一步:按一级菜单分组,使用LinkedHashMap保持插入顺序 + id = 1L; Map> level1Groups = new LinkedHashMap<>(); for (DocDefinitionDto doc : documents) { Object key = doc.getPrimaryMenuEnum() != null ? doc.getPrimaryMenuEnum() : doc.getName(); @@ -58,6 +61,7 @@ public class DocumentDirectoryProcessor { } else { level1Node.setName(level1Key.toString()); } + level1Node.setId(id++); level1Node.setLevel(1); buildSubNodes(level1Node, level1Docs); @@ -99,6 +103,7 @@ public class DocumentDirectoryProcessor { DirectoryNode childNode = new DirectoryNode(); childNode.setName(groupKey); childNode.setLevel(parentNode.getLevel() + 1); + childNode.setId(id++); // 递归构建子节点 buildSubNodes(childNode, groupDocs); @@ -127,6 +132,7 @@ public class DocumentDirectoryProcessor { DirectoryNode node = new DirectoryNode(); node.setName(doc.getName() + " (" + doc.getVersion() + ")"); node.setLevel(3); + node.setId(id++); node.setDocument(doc); return node; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalcharge/appservice/impl/AdvancePaymentManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalcharge/appservice/impl/AdvancePaymentManageAppServiceImpl.java index 2ade3a43..dad77462 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalcharge/appservice/impl/AdvancePaymentManageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalcharge/appservice/impl/AdvancePaymentManageAppServiceImpl.java @@ -77,7 +77,7 @@ public class AdvancePaymentManageAppServiceImpl implements IAdvancePaymentManage IPage advancePaymentInfo = advancePaymentManageAppMapper.getAdvancePaymentInfo( new Page<>(pageNo, pageSize), PaymentKind.HOSPITAL_DEPOSIT.getValue(), LocationForm.WARD.getValue(), - LocationForm.HOUSE.getValue(), LocationForm.BED.getValue(), EncounterLocationStatus.ACTIVE.getValue(), + LocationForm.HOUSE.getValue(), LocationForm.BED.getValue(), EncounterActivityStatus.ACTIVE.getValue(), ChargeItemStatus.BILLABLE.getValue(), ChargeItemStatus.BILLED.getValue(), ChargeItemStatus.REFUNDED.getValue(), EncounterClass.IMP.getValue(), AccountType.PERSONAL_CASH_ACCOUNT.getCode(), queryWrapper); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/IAdviceProcessAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/IAdviceProcessAppService.java index 24b23735..85312287 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/IAdviceProcessAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/IAdviceProcessAppService.java @@ -10,6 +10,7 @@ import javax.servlet.http.HttpServletRequest; import com.core.common.core.domain.R; import com.openhis.web.common.dto.PerformInfoDto; import com.openhis.web.inhospitalnursestation.dto.AdmissionPageParam; +import com.openhis.web.inhospitalnursestation.dto.AdviceExecuteParam; import com.openhis.web.inhospitalnursestation.dto.InpatientAdviceParam; /** @@ -62,10 +63,10 @@ public interface IAdviceProcessAppService { /** * 医嘱执行 * - * @param performInfoList 医嘱信息集合 + * @param adviceExecuteParam 医嘱执行参数 * @return 操作结果 */ - R adviceExecute(List performInfoList); + R adviceExecute(AdviceExecuteParam adviceExecuteParam); /** * 医嘱取消执行 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/ATDManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/ATDManageAppServiceImpl.java index 0b0045c5..2681baaf 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/ATDManageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/ATDManageAppServiceImpl.java @@ -105,7 +105,7 @@ public class ATDManageAppServiceImpl implements IATDManageAppService { // 入院患者分页列表 Page admissionPatientPage = atdManageAppMapper.selectAdmissionPatientPage( new Page<>(pageNo, pageSize), queryWrapper, EncounterClass.IMP.getValue(), - EncounterZyStatus.TO_BE_REGISTERED.getValue(), EncounterLocationStatus.ACTIVE.getValue(), + EncounterZyStatus.TO_BE_REGISTERED.getValue(), EncounterActivityStatus.ACTIVE.getValue(), LocationForm.WARD.getValue(), LocationForm.HOUSE.getValue(), LocationForm.BED.getValue()); admissionPatientPage.getRecords().forEach(e -> { // 性别枚举 @@ -138,7 +138,7 @@ public class ATDManageAppServiceImpl implements IATDManageAppService { // 入院患者床位分页列表 Page admissionBedPage = atdManageAppMapper.selectAdmissionBadPage(new Page<>(pageNo, pageSize), queryWrapper, - EncounterLocationStatus.ACTIVE.getValue(), LocationForm.WARD.getValue(), LocationForm.HOUSE.getValue(), + EncounterActivityStatus.ACTIVE.getValue(), LocationForm.WARD.getValue(), LocationForm.HOUSE.getValue(), LocationForm.BED.getValue(), AccountType.PERSONAL_CASH_ACCOUNT.getCode(), LocationStatus.INACTIVE.getValue(), ChargeItemStatus.BILLABLE.getValue(), ChargeItemStatus.BILLED.getValue(), ChargeItemStatus.REFUNDED.getValue()); @@ -167,7 +167,7 @@ public class ATDManageAppServiceImpl implements IATDManageAppService { public R getAdmissionPatientInfo(Long encounterId) { // 查询住院患者详细信息 AdmissionPatientInfoDto admissionPatientInfoDto = - atdManageAppMapper.selectAdmissionPatientInfo(encounterId, EncounterLocationStatus.ACTIVE.getValue(), + atdManageAppMapper.selectAdmissionPatientInfo(encounterId, EncounterActivityStatus.ACTIVE.getValue(), LocationForm.WARD.getValue(), LocationForm.HOUSE.getValue(), LocationForm.BED.getValue(), ParticipantType.PRIMARY_NURSE.getCode(), ParticipantType.ATTENDING_DOCTOR.getCode(), ParticipantType.ADMITTING_DOCTOR.getCode(), ParticipantType.CHIEF_DOCTOR.getCode()); @@ -242,7 +242,7 @@ public class ATDManageAppServiceImpl implements IATDManageAppService { Date targetStartTime = null; Optional encounterLocationOptional = locationList.stream().filter(x -> x.getFormEnum().equals(LocationForm.BED.getValue())) - .filter(x -> x.getStatusEnum().equals(EncounterLocationStatus.ACTIVE.getValue())).findFirst(); + .filter(x -> x.getStatusEnum().equals(EncounterActivityStatus.ACTIVE.getValue())).findFirst(); if (encounterLocationOptional.isPresent()) { EncounterLocation encounterLocation = encounterLocationOptional.get(); targetStartTime = encounterLocation.getStartTime(); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java index 7d32b76b..3a666093 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java @@ -3,6 +3,7 @@ */ package com.openhis.web.inhospitalnursestation.appservice.impl; +import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -11,28 +12,33 @@ import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.core.common.core.domain.R; import com.core.common.utils.AgeCalculatorUtil; +import com.core.common.utils.MessageUtils; import com.core.common.utils.SecurityUtils; +import com.core.common.utils.bean.BeanUtils; +import com.openhis.administration.service.IEncounterService; import com.openhis.clinical.service.IProcedureService; import com.openhis.common.constant.CommonConstants; +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.MedicationDefinition; import com.openhis.medication.domain.MedicationRequest; +import com.openhis.medication.service.IMedicationDefinitionService; import com.openhis.medication.service.IMedicationDispenseService; import com.openhis.medication.service.IMedicationRequestService; import com.openhis.web.common.dto.PerformInfoDto; import com.openhis.web.common.dto.PerformRecordDto; import com.openhis.web.inhospitalnursestation.appservice.IAdviceProcessAppService; -import com.openhis.web.inhospitalnursestation.dto.AdmissionPageParam; -import com.openhis.web.inhospitalnursestation.dto.AdmissionPatientPageDto; -import com.openhis.web.inhospitalnursestation.dto.InpatientAdviceDto; -import com.openhis.web.inhospitalnursestation.dto.InpatientAdviceParam; +import com.openhis.web.inhospitalnursestation.dto.*; import com.openhis.web.inhospitalnursestation.mapper.AdviceProcessAppMapper; import com.openhis.web.outpatientmanage.mapper.OutpatientTreatmentAppMapper; +import com.openhis.workflow.domain.ServiceRequest; import com.openhis.workflow.service.IServiceRequestService; /** @@ -62,6 +68,12 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { @Resource private IMedicationDispenseService medicationDispenseService; + @Resource + private IEncounterService encounterService; + + @Resource + private IMedicationDefinitionService medicationDefinitionService; + /** * 住院患者分页列表 * @@ -84,7 +96,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { Page admissionPatientPage = adviceProcessAppMapper.selectInpatientPage(new Page<>(pageNo, pageSize), queryWrapper, EncounterClass.IMP.getValue(), EncounterZyStatus.TO_BE_REGISTERED.getValue(), - EncounterZyStatus.REGISTERED.getValue(), EncounterLocationStatus.ACTIVE.getValue(), + EncounterZyStatus.REGISTERED.getValue(), EncounterActivityStatus.ACTIVE.getValue(), LocationForm.WARD.getValue(), LocationForm.HOUSE.getValue(), LocationForm.BED.getValue()); admissionPatientPage.getRecords().forEach(e -> { // 性别枚举 @@ -133,7 +145,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { Page inpatientAdvicePage = adviceProcessAppMapper.selectInpatientAdvicePage(new Page<>(pageNo, pageSize), queryWrapper, CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_SERVICE_REQUEST, - RequestStatus.DRAFT.getValue(), EncounterLocationStatus.ACTIVE.getValue(), LocationForm.BED.getValue(), + RequestStatus.DRAFT.getValue(), EncounterActivityStatus.ACTIVE.getValue(), LocationForm.BED.getValue(), ParticipantType.ADMITTING_DOCTOR.getCode(), AccountType.PERSONAL_CASH_ACCOUNT.getCode(), ChargeItemStatus.BILLABLE.getValue(), ChargeItemStatus.BILLED.getValue(), ChargeItemStatus.REFUNDED.getValue(), EncounterClass.IMP.getValue()); @@ -255,6 +267,20 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { // 更新服务请求状态已完成 serviceRequestService.updateCompleteRequestStatus( serviceRequestList.stream().map(PerformInfoDto::getRequestId).toList(), practitionerId, checkDate); + List serviceRequests = serviceRequestService + .listByIds(serviceRequestList.stream().map(PerformInfoDto::getRequestId).collect(Collectors.toList())); + for (ServiceRequest serviceRequest : serviceRequests) { + // 判断医嘱类型 + if (ActivityDefCategory.TRANSFER.getValue().equals(serviceRequest.getCategoryEnum())) { + // 更新患者状态 待转科 + encounterService.updateEncounterStatus(serviceRequest.getEncounterId(), + EncounterZyStatus.PENDING_TRANSFER.getValue()); + } else if (ActivityDefCategory.DISCHARGE.getValue().equals(serviceRequest.getCategoryEnum())) { + // 更新患者状态 待出院 + encounterService.updateEncounterStatus(serviceRequest.getEncounterId(), + EncounterZyStatus.AWAITING_DISCHARGE.getValue()); + } + } } if (!medRequestList.isEmpty()) { // 更新药品请求状态已完成 @@ -300,50 +326,80 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { /** * 医嘱执行 * - * @param performInfoList 医嘱信息集合 + * @param adviceExecuteParam 医嘱执行参数 * @return 操作结果 */ @Override - public R adviceExecute(List performInfoList) { - // 分别创建两个列表来存储不同类型的请求 - List serviceRequestList = new ArrayList<>(); - List medRequestList = new ArrayList<>(); - for (PerformInfoDto item : performInfoList) { - if (CommonConstants.TableName.WOR_SERVICE_REQUEST.equals(item.getRequestTable())) { - serviceRequestList.add(item); - } else if (CommonConstants.TableName.MED_MEDICATION_REQUEST.equals(item.getRequestTable())) { - medRequestList.add(item); - } + public R adviceExecute(AdviceExecuteParam adviceExecuteParam) { + // 医嘱集合 + List adviceExecuteDetailList = adviceExecuteParam.getAdviceExecuteDetailList(); + // 药品 + List medicineList = adviceExecuteDetailList.stream() + .filter(e -> CommonConstants.TableName.MED_MEDICATION_REQUEST.equals(e.getAdviceTable())).toList(); + // 诊疗 + List activityList = adviceExecuteDetailList.stream() + .filter(e -> CommonConstants.TableName.WOR_SERVICE_REQUEST.equals(e.getAdviceTable())).toList(); + // -------------------------------------------整体校验药品库存 + if (!medicineList.isEmpty()) { + // 药品请求id集合 + List medicineRequestIdList = + medicineList.stream().map(AdviceExecuteDetailParam::getRequestId).collect(Collectors.toList()); + // 药品请求集合 + List MedicationRequestList = medicationRequestService + .list(new LambdaQueryWrapper().in(MedicationRequest::getId, medicineRequestIdList)); + // 药品定义id集合 + List medicationDefinitionIdList = + MedicationRequestList.stream().map(MedicationRequest::getMedicationId).collect(Collectors.toList()); + // 药品定义集合 + List medicationDefinitionList = + medicationDefinitionService.list(new LambdaQueryWrapper() + .in(MedicationDefinition::getId, medicationDefinitionIdList)); + // 组装MedicationRequestUseExe数据结构 + List MedUseExeList = MedicationRequestList.stream().map(medicationRequest -> { + // 创建 MedicationRequestUseExe 对象,并复制 MedicationRequest 的属性 + MedicationRequestUseExe useExe = new MedicationRequestUseExe(); + BeanUtils.copyProperties(medicationRequest, useExe); + // 匹配 executeTimes:根据 medicationRequest 的 id 在 medicineList 中查找匹配的 executeTimes + List matchedExecuteTimes = + medicineList.stream().filter(medicine -> medicine.getRequestId().equals(medicationRequest.getId())) + .findFirst().map(AdviceExecuteDetailParam::getExecuteTimes).orElse(null); + useExe.setExecuteTimes(matchedExecuteTimes); + // 计算 executeTimesNum:executeTimes 的集合大小,转换为 BigDecimal + if (matchedExecuteTimes != null) { + useExe.setExecuteTimesNum(BigDecimal.valueOf(matchedExecuteTimes.size())); + } else { + useExe.setExecuteTimesNum(BigDecimal.ZERO); + } + // 匹配 minUnitQuantity:根据 medicationId 在 medicationDefinitionList 中查找匹配的药品定义 + MedicationDefinition matchedDefinition = medicationDefinitionList.stream() + .filter(definition -> definition.getId().equals(medicationRequest.getMedicationId())).findFirst() + .orElse(null); + if (matchedDefinition != null) { + // 判断 minUnitCode 是否等于 unitCode + if (matchedDefinition.getMinUnitCode().equals(medicationRequest.getUnitCode())) { + useExe.setMinUnitQuantity(medicationRequest.getQuantity()); + } else { + // 若不相等,则计算 quantity * partPercent + BigDecimal partPercent = matchedDefinition.getPartPercent(); + if (partPercent == null) { + partPercent = BigDecimal.ONE; // 避免空指针,默认设为1 + } + useExe.setMinUnitQuantity(medicationRequest.getQuantity().multiply(partPercent)); + } + } else { + // 若未找到匹配的药品定义,设为 null 或默认值 + useExe.setMinUnitQuantity(null); + } + return useExe; + }).toList(); + + // -------------------------------------------处理药品执行 + } - //分别处理长期/临时医嘱 - // 执行项目列表(需过滤掉特殊医嘱,已经停嘱的医嘱,执行时间与出院时间/入院时间冲突的) - List executeList = performInfoList; - // 校验是否已经停嘱 - // 校验患者是否在科,出院,死亡 - // 处理药品医嘱 - if (!medRequestList.isEmpty()) { - // 查询医嘱信息 - List requestIdList = medRequestList.stream().map(PerformInfoDto::getRequestId).toList(); - List medicationRequestList = medicationRequestService.listByIds(requestIdList); - // 按每个药品分组校验库存 - Map> medMap = - medicationRequestList.stream().collect(Collectors.groupingBy(MedicationRequest::getMedicationId)); - for (Map.Entry> entry : medMap.entrySet()) { - List medicationRequests = entry.getValue(); - } - //校验库存是校验某个药在某个药房这一次执行的总数够不够,生成药品发放是按每个请求生成的 - // 生成药品发放 - // medicationDispenseService.handleMedicationDispense(); - } - if (!serviceRequestList.isEmpty()) { - // todo:查询绑定的耗材 - //生成执行记录 - } - // 记录操作记录 - for (PerformInfoDto execute : executeList) { - //生成账单(待结算) - } - return null; + + // -------------------------------------------处理诊疗执行 + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[] {"医嘱执行"})); } /** diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/AdviceProcessController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/AdviceProcessController.java index 29e3ba58..c5a1996c 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/AdviceProcessController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/AdviceProcessController.java @@ -9,6 +9,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import com.openhis.web.common.dto.PerformInfoDto; +import com.openhis.web.inhospitalnursestation.dto.AdviceExecuteParam; import org.springframework.web.bind.annotation.*; import com.core.common.core.domain.R; @@ -92,12 +93,12 @@ public class AdviceProcessController { /** * 医嘱执行 * - * @param performInfoList 医嘱信息集合 + * @param adviceExecuteParam 医嘱执行参数 * @return 操作结果 */ @PostMapping(value = "/advice-execute") - public R adviceExecute(List performInfoList) { - return adviceProcessAppService.adviceExecute(performInfoList); + public R adviceExecute(@RequestBody AdviceExecuteParam adviceExecuteParam) { + return adviceProcessAppService.adviceExecute(adviceExecuteParam); } /** diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/AdviceExecuteDetailParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/AdviceExecuteDetailParam.java new file mode 100644 index 00000000..63666f44 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/AdviceExecuteDetailParam.java @@ -0,0 +1,34 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inhospitalnursestation.dto; + +import java.util.List; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 医嘱执行详细参数 + * + * @author zwh + * @date 2025-07-28 + */ +@Data +@Accessors(chain = true) +public class AdviceExecuteDetailParam { + + /** 医嘱请求id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long requestId; + + /** 医嘱请求所在表 */ + private String adviceTable; + + /** 执行时间点集合 */ + private List executeTimes; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/AdviceExecuteParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/AdviceExecuteParam.java new file mode 100644 index 00000000..26338ad1 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/AdviceExecuteParam.java @@ -0,0 +1,26 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inhospitalnursestation.dto; + +import java.util.List; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 医嘱执行参数 + * + * @author zwh + * @date 2025-07-28 + */ +@Data +@Accessors(chain = true) +public class AdviceExecuteParam { + + /** + * 医嘱执行详细参数 + */ + private List adviceExecuteDetailList; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/MedicationRequestUseExe.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/MedicationRequestUseExe.java new file mode 100644 index 00000000..32a6f806 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/MedicationRequestUseExe.java @@ -0,0 +1,35 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inhospitalnursestation.dto; + +import java.math.BigDecimal; +import java.util.List; + +import com.openhis.medication.domain.MedicationRequest; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 药品请求用于执行 + * + * @author zwh + * @date 2025-07-28 + */ +@Data +@Accessors(chain = true) +public class MedicationRequestUseExe extends MedicationRequest { + + /** 执行时间点集合 */ + private List executeTimes; + + /** + * 执行时间点集合数量 + */ + private BigDecimal executeTimesNum; + + /** 请求小单位数量 */ + private BigDecimal minUnitQuantity; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/AdmissionAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/AdmissionAppServiceImpl.java index 47b18d39..42cfec23 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/AdmissionAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/AdmissionAppServiceImpl.java @@ -214,7 +214,7 @@ public class AdmissionAppServiceImpl implements IAdmissionAppService { EncounterLocation encounterLocation = new EncounterLocation(); encounterLocation.setLocationId(admissionUpDto.getWardLocationId()).setEncounterId(admissionUpDto.getId()) .setFormEnum(LocationForm.WARD.getValue()).setStartTime(admissionUpDto.getStartTime()) - .setStatusEnum(EncounterLocationStatus.ACTIVE.getValue()); + .setStatusEnum(EncounterActivityStatus.ACTIVE.getValue()); boolean encounterLocationSuccess = encounterLocationService.saveOrUpdateEncounterLocation(encounterLocation); return encounterSuccess && updateAccountSuccess && encounterLocationSuccess; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/NursingRecordAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/NursingRecordAppServiceImpl.java index 1ea1cea5..624fe36f 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/NursingRecordAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/NursingRecordAppServiceImpl.java @@ -8,6 +8,7 @@ import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import com.openhis.common.enums.EncounterActivityStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -26,7 +27,6 @@ import com.openhis.common.constant.CommonConstants; import com.openhis.common.constant.PromptMsgConstant; import com.openhis.common.enums.AdministrativeGender; import com.openhis.common.enums.EncounterClass; -import com.openhis.common.enums.EncounterLocationStatus; import com.openhis.common.enums.LocationForm; import com.openhis.common.utils.EnumUtils; import com.openhis.common.utils.HisQueryUtils; @@ -85,7 +85,7 @@ public class NursingRecordAppServiceImpl implements INursingRecordAppService { // 分页查询,查询患者信息 IPage NursingInfoPage = nursingRecordAppMapper.getPatientPage(new Page<>(pageNo, pageSize), EncounterClass.IMP.getValue(), LocationForm.BED.getValue(), LocationForm.WARD.getValue(), - EncounterLocationStatus.ACTIVE.getValue(), queryWrapper); + EncounterActivityStatus.ACTIVE.getValue(), queryWrapper); NursingInfoPage.getRecords().forEach(e -> { // 性别枚举类回显赋值 @@ -118,7 +118,7 @@ public class NursingRecordAppServiceImpl implements INursingRecordAppService { // 分页查询,查询患者护理记录单信息 IPage NursingPatientPage = nursingRecordAppMapper.getNursingPatientPage( new Page<>(pageNo, pageSize), EncounterClass.IMP.getValue(), LocationForm.BED.getValue(), - LocationForm.WARD.getValue(), EncounterLocationStatus.ACTIVE.getValue(), queryWrapper); + LocationForm.WARD.getValue(), EncounterActivityStatus.ACTIVE.getValue(), queryWrapper); NursingPatientPage.getRecords().forEach(e -> { // 性别枚举类回显赋值 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/PatientHomeAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/PatientHomeAppServiceImpl.java index 96c13036..f15a8ffc 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/PatientHomeAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/PatientHomeAppServiceImpl.java @@ -168,7 +168,7 @@ public class PatientHomeAppServiceImpl implements IPatientHomeAppService { // 设置物理枚举为 8:病床 .setFormEnum(LocationForm.BED.getValue()) // 状态为使用中 - .setStatusEnum(EncounterLocationStatus.ACTIVE.getValue()); + .setStatusEnum(EncounterActivityStatus.ACTIVE.getValue()); encounterLocationService.saveOrUpdateEncounterLocation(encounterLocation); // 2.位置表 @@ -273,7 +273,7 @@ public class PatientHomeAppServiceImpl implements IPatientHomeAppService { // 设置就诊ID .setEncounterId(encounterId) // 设置状态枚举 - .setStatusEnum(EncounterLocationStatus.COMPLETED.getValue()) + .setStatusEnum(EncounterActivityStatus.COMPLETED.getValue()) // 设置物理枚举为 8:病床 .setFormEnum(LocationForm.BED.getValue()); encounterLocationService.saveOrUpdateEncounterLocation(encounterLocation); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/PurchaseInventoryAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/PurchaseInventoryAppServiceImpl.java index ed2c7094..6bfb27e1 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/PurchaseInventoryAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/PurchaseInventoryAppServiceImpl.java @@ -3,7 +3,6 @@ */ package com.openhis.web.inventorymanage.appservice.impl; -import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ReceiptApprovalAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ReceiptApprovalAppServiceImpl.java index 75921bad..bf8c73ae 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ReceiptApprovalAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ReceiptApprovalAppServiceImpl.java @@ -214,7 +214,6 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService // 返回信息 String returnMsg = null; if (!supplyItemDetailList.isEmpty()) { - InventoryItem inventoryItemPurpose = null; // 新增库存信息 List supplyList = new ArrayList<>(); @@ -223,7 +222,7 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService List inventoryItemList = inventoryItemService.selectInventoryByItemId( supplyItemDetailDto.getItemId(), supplyItemDetailDto.getLotNumber(), supplyItemDetailDto.getPurposeLocationId(), SecurityUtils.getLoginUser().getTenantId()); - + InventoryItem inventoryItemPurpose = null; if (!inventoryItemList.isEmpty()) { inventoryItemPurpose = inventoryItemList.get(0); } @@ -257,11 +256,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService } } // 新增追溯码记录 - boolean result = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), SupplyType.PURCHASE_INVENTORY.getValue()); - if (!result) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } if (!supplyList.isEmpty()) { // 将供应项目的详细信息装配为库存项目 @@ -349,11 +345,7 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService } } // 处理盘点追溯码 - boolean result = - traceNoAppService.updateTraceNoList(supplyItemDetailList, SupplyType.PRODUCT_STOCKTAKING.getValue()); - if (!result) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } + traceNoAppService.updateTraceNoList(supplyItemDetailList, SupplyType.PRODUCT_STOCKTAKING.getValue()); // 医保开关 String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); if (Whether.YES.getCode().equals(ybSwitch)) { @@ -508,18 +500,12 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService } // 处理出库追溯码 - boolean outResult = traceNoAppService.addTraceNoManage(outList, TraceNoStatus.OUT.getValue(), + traceNoAppService.addTraceNoManage(outList, TraceNoStatus.OUT.getValue(), SupplyType.PRODUCT_TRANSFER.getValue()); - if (!outResult) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } // 处理入库追溯码 - boolean inResult = traceNoAppService.addTraceNoManage(inList, TraceNoStatus.IN.getValue(), + traceNoAppService.addTraceNoManage(inList, TraceNoStatus.IN.getValue(), SupplyType.PRODUCT_TRANSFER.getValue()); - if (!inResult) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } } return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); @@ -601,11 +587,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService } } // 处理追溯码 - boolean result = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), SupplyType.PRODUCT_RETURN.getValue()); - if (!result) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } // 调用医保采购退货接口 String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关 if (Whether.YES.getCode().equals(ybSwitch)) { @@ -687,11 +670,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService } // 追溯码管理表数据追加 // 处理追溯码 - boolean result = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), SupplyType.LOSS_REPORT_FORM.getValue()); - if (!result) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } // 调用医保库存变更接口 String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关 @@ -773,11 +753,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService } } // 处理追溯码 - boolean result = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), SupplyType.ISSUE_INVENTORY.getValue()); - if (!result) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } // 返回信息 String returnMsg = null; // 调用医保库存变更接口 @@ -866,11 +843,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService inventoryItemService.stockIn(inventoryItemList); } // 处理追溯码 - boolean result = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), SupplyType.RETURN_ISSUE.getValue()); - if (!result) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } // 返回信息 String returnMsg = null; // 调用医保库存变更接口 @@ -971,12 +945,12 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService * @param now 库存变更时间 * @return 上传失败的id集合 */ - private List ybInventoryIntegrated(List supplyItemDetailList, - YbInvChgType ybInvChgType, Date now) { + public List ybInventoryIntegrated(List supplyItemDetailList, YbInvChgType ybInvChgType, + Date now) { List uploadFailedNoList = new ArrayList<>(); // 没有医保码的项目不调进销存 for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) { - if (supplyItemDetailDto.getYbNo() == null) { + if (supplyItemDetailDto.getYbNo() == null || supplyItemDetailDto.getYbNo().isEmpty()) { continue; } R result; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/TraceNoAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/TraceNoAppServiceImpl.java index e7e45ec2..2dea8940 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/TraceNoAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/TraceNoAppServiceImpl.java @@ -184,7 +184,10 @@ public class TraceNoAppServiceImpl implements ITraceNoAppService { TraceNoManage traceNoManage; for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) { // 使用逗号分割追溯码并转换为List - String[] traceNoList = supplyItemDetailDto.getTraceNo().split(CommonConstants.Common.COMMA); + String[] traceNoList = Arrays.stream(supplyItemDetailDto.getTraceNo().split(CommonConstants.Common.COMMA)) + .filter(traceNo -> !traceNo.isEmpty()) // 过滤null和空字符串 + .toArray(String[]::new); // 转换回String数组 + for (String item : traceNoList) { traceNoManage = new TraceNoManage(); // 追溯码处理 @@ -246,10 +249,14 @@ public class TraceNoAppServiceImpl implements ITraceNoAppService { List traceNoInfoItemList = traceNoManageMapper.getItemTraceNoInfo( supplyItemDetailDto.getItemTable(), supplyItemDetailDto.getItemId(), supplyItemDetailDto.getPurposeLocationId(), supplyItemDetailDto.getLotNumber()); - List traceNoList = traceNoInfoItemList.stream().map(TraceNoManage::getTraceNo) // 提取 traceNo + List traceNoList = traceNoInfoItemList.stream() + .map(TraceNoManage::getTraceNo) // 提取traceNo + .filter(traceNo -> traceNo != null && !traceNo.isEmpty()) // 过滤null和空字符串 .toList(); // 使用逗号分割追溯码并转换为List - List traceNoAddList = Arrays.asList(supplyItemDetailDto.getTraceNo().split(",")); + List traceNoAddList = Arrays.stream(supplyItemDetailDto.getTraceNo().split(",")) + .filter(traceNo -> traceNo != null && !traceNo.isEmpty()) // 过滤null和空字符串 + .toList(); Set add = traceNoAddList.stream().filter(code -> !traceNoList.contains(code)).collect(Collectors.toSet()); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/LossReportFormController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/LossReportFormController.java index f43649f4..41a0b3b7 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/LossReportFormController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/LossReportFormController.java @@ -125,20 +125,20 @@ public class LossReportFormController { return lossReportFormAppService.withdrawApproval(busNo); } - /** - * 报损单据详情 - * - * @param locationId 库房id - * @param startTime 开始时间 - * @param endTime 结束时间 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @return 单据详情 - */ - @GetMapping(value = "/loss-receipt-monthly-settlement") - public R getMonthlySettlementDetail(@RequestParam Long locationId, @RequestParam String startTime,@RequestParam String endTime, - @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { - return lossReportFormAppService.getMonthlySettlementDetail(locationId, startTime,endTime,pageNo,pageSize); - } +// /** +// * 报损单据详情 +// * +// * @param locationId 库房id +// * @param startTime 开始时间 +// * @param endTime 结束时间 +// * @param pageNo 当前页码 +// * @param pageSize 查询条数 +// * @return 单据详情 +// */ +// @GetMapping(value = "/loss-receipt-monthly-settlement") +// public R getMonthlySettlementDetail(@RequestParam Long locationId, @RequestParam String startTime,@RequestParam String endTime, +// @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, +// @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { +// return lossReportFormAppService.getMonthlySettlementDetail(locationId, startTime,endTime,pageNo,pageSize); +// } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ProductStocktakingController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ProductStocktakingController.java index 3c85b4df..fd1ec6f6 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ProductStocktakingController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ProductStocktakingController.java @@ -176,21 +176,21 @@ public class ProductStocktakingController { @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { return productStocktakingAppService.getAutoDetail(locationId, time,pageNo,pageSize); } - /** - * 盘点单据详情 - * - * @param locationId 库房id - * @param startTime 开始时间 - * @param endTime 结束时间 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @return 单据详情 - */ - @GetMapping(value = "/stocktaking-receipt-monthly-settlement") - public R getMonthlySettlementDetail(@RequestParam Long locationId, @RequestParam String startTime,@RequestParam String endTime, - @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { - return productStocktakingAppService.getMonthlySettlementDetail(locationId, startTime,endTime,pageNo,pageSize); - } +// /** +// * 盘点单据详情 +// * +// * @param locationId 库房id +// * @param startTime 开始时间 +// * @param endTime 结束时间 +// * @param pageNo 当前页码 +// * @param pageSize 查询条数 +// * @return 单据详情 +// */ +// @GetMapping(value = "/stocktaking-receipt-monthly-settlement") +// public R getMonthlySettlementDetail(@RequestParam Long locationId, @RequestParam String startTime,@RequestParam String endTime, +// @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, +// @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { +// return productStocktakingAppService.getMonthlySettlementDetail(locationId, startTime,endTime,pageNo,pageSize); +// } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ProductTransferController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ProductTransferController.java index 00d467fc..c00e8a89 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ProductTransferController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ProductTransferController.java @@ -172,22 +172,22 @@ public class ProductTransferController { return productTransferAppService.withdrawApproval(busNo); } - /** - * 调拨单据详情 - * - * @param locationId 库房id - * @param startTime 开始时间 - * @param endTime 结束时间 - * @param inOutFlg 调入调出flg 1:调入,2:调出 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @return 单据详情 - */ - @GetMapping(value = "/transfer-receipt-monthly-settlement") - public R getMonthlySettlementDetail(@RequestParam Long locationId, @RequestParam String startTime, - @RequestParam String endTime, @RequestParam Integer inOutFlg, - @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { - return productTransferAppService.getMonthlySettlementDetail(locationId, startTime, endTime,inOutFlg, pageNo, pageSize); - } +// /** +// * 调拨单据详情 +// * +// * @param locationId 库房id +// * @param startTime 开始时间 +// * @param endTime 结束时间 +// * @param inOutFlg 调入调出flg 1:调入,2:调出 +// * @param pageNo 当前页码 +// * @param pageSize 查询条数 +// * @return 单据详情 +// */ +// @GetMapping(value = "/transfer-receipt-monthly-settlement") +// public R getMonthlySettlementDetail(@RequestParam Long locationId, @RequestParam String startTime, +// @RequestParam String endTime, @RequestParam Integer inOutFlg, +// @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, +// @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { +// return productTransferAppService.getMonthlySettlementDetail(locationId, startTime, endTime,inOutFlg, pageNo, pageSize); +// } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/PurchaseInventoryController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/PurchaseInventoryController.java index c570161f..98e33d47 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/PurchaseInventoryController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/PurchaseInventoryController.java @@ -124,20 +124,20 @@ public class PurchaseInventoryController { public R withdrawApproval(@RequestBody String busNo) { return purchaseInventoryAppService.withdrawApproval(busNo); } - /** - * 采购入库单据详情 - * - * @param locationId 库房id - * @param startTime 开始时间 - * @param endTime 结束时间 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @return 单据详情 - */ - @GetMapping(value = "/inventory-receipt-monthly-settlement") - public R getMonthlySettlementDetail(@RequestParam Long locationId, @RequestParam String startTime,@RequestParam String endTime, - @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { - return purchaseInventoryAppService.getMonthlySettlementDetail(locationId, startTime,endTime,pageNo,pageSize); - } +// /** +// * 采购入库单据详情 +// * +// * @param locationId 库房id +// * @param startTime 开始时间 +// * @param endTime 结束时间 +// * @param pageNo 当前页码 +// * @param pageSize 查询条数 +// * @return 单据详情 +// */ +// @GetMapping(value = "/inventory-receipt-monthly-settlement") +// public R getMonthlySettlementDetail(@RequestParam Long locationId, @RequestParam String startTime,@RequestParam String endTime, +// @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, +// @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { +// return purchaseInventoryAppService.getMonthlySettlementDetail(locationId, startTime,endTime,pageNo,pageSize); +// } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/PurchaseReturnController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/PurchaseReturnController.java index 09cf2ed2..160e06b8 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/PurchaseReturnController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/PurchaseReturnController.java @@ -115,20 +115,20 @@ public class PurchaseReturnController { return purchaseReturnAppService.withdrawApproval(busNo); } - /** - * 采购退货单据详情 - * - * @param locationId 库房id - * @param startTime 开始时间 - * @param endTime 结束时间 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @return 单据详情 - */ - @GetMapping(value = "/return-monthly-settlement") - public R getMonthlySettlementDetail(@RequestParam Long locationId, @RequestParam String startTime,@RequestParam String endTime, - @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { - return purchaseReturnAppService.getMonthlySettlementDetail(locationId, startTime,endTime,pageNo,pageSize); - } +// /** +// * 采购退货单据详情 +// * +// * @param locationId 库房id +// * @param startTime 开始时间 +// * @param endTime 结束时间 +// * @param pageNo 当前页码 +// * @param pageSize 查询条数 +// * @return 单据详情 +// */ +// @GetMapping(value = "/return-monthly-settlement") +// public R getMonthlySettlementDetail(@RequestParam Long locationId, @RequestParam String startTime,@RequestParam String endTime, +// @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, +// @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { +// return purchaseReturnAppService.getMonthlySettlementDetail(locationId, startTime,endTime,pageNo,pageSize); +// } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/RequisitionIssueController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/RequisitionIssueController.java index 47ee428d..300a2d89 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/RequisitionIssueController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/RequisitionIssueController.java @@ -125,20 +125,20 @@ public class RequisitionIssueController { return requisitionIssueAppService.withdrawApproval(busNo); } - /** - * 领用出库单据详情 - * - * @param locationId 库房id - * @param startTime 开始时间 - * @param endTime 结束时间 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @return 单据详情 - */ - @GetMapping(value = "/requisition-issue-monthly-settlement") - public R getMonthlySettlementDetail(@RequestParam Long locationId, @RequestParam String startTime,@RequestParam String endTime, - @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { - return requisitionIssueAppService.getMonthlySettlementDetail(locationId, startTime,endTime,pageNo,pageSize); - } +// /** +// * 领用出库单据详情 +// * +// * @param locationId 库房id +// * @param startTime 开始时间 +// * @param endTime 结束时间 +// * @param pageNo 当前页码 +// * @param pageSize 查询条数 +// * @return 单据详情 +// */ +// @GetMapping(value = "/requisition-issue-monthly-settlement") +// public R getMonthlySettlementDetail(@RequestParam Long locationId, @RequestParam String startTime,@RequestParam String endTime, +// @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, +// @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { +// return requisitionIssueAppService.getMonthlySettlementDetail(locationId, startTime,endTime,pageNo,pageSize); +// } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ReturnIssueController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ReturnIssueController.java index daad89d0..f0ef6ce4 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ReturnIssueController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ReturnIssueController.java @@ -122,21 +122,21 @@ public class ReturnIssueController { return returnIssueAppService.withdrawApproval(busNo); } - /** - * 领用退库单据详情 - * - * @param locationId 库房id - * @param startTime 开始时间 - * @param endTime 结束时间 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @return 单据详情 - */ - @GetMapping(value = "/return-issue-monthly-settlement") - public R getMonthlySettlementDetail(@RequestParam Long locationId, @RequestParam String startTime,@RequestParam String endTime, - @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { - return returnIssueAppService.getMonthlySettlementDetail(locationId, startTime,endTime,pageNo,pageSize); - } +// /** +// * 领用退库单据详情 +// * +// * @param locationId 库房id +// * @param startTime 开始时间 +// * @param endTime 结束时间 +// * @param pageNo 当前页码 +// * @param pageSize 查询条数 +// * @return 单据详情 +// */ +// @GetMapping(value = "/return-issue-monthly-settlement") +// public R getMonthlySettlementDetail(@RequestParam Long locationId, @RequestParam String startTime,@RequestParam String endTime, +// @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, +// @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { +// return returnIssueAppService.getMonthlySettlementDetail(locationId, startTime,endTime,pageNo,pageSize); +// } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueDto.java index 4307f81d..7f0ec2cf 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueDto.java @@ -11,6 +11,7 @@ import javax.validation.constraints.NotNull; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; @@ -113,6 +114,10 @@ public class IssueDto { /** 总价 */ private BigDecimal totalPrice; + /** 制单时间 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date occurrenceTime; + /** 备注 */ private String remake; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsSearchParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsSearchParam.java index cd53b69e..76d592d2 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsSearchParam.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsSearchParam.java @@ -38,6 +38,9 @@ public class ProductDetailsSearchParam { /** 供应商 */ private String supplyName; + /** 停用状态 */ + private Integer inventoryStatusEnum; + /** 查询flg */ private String flg; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductTransferDetailDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductTransferDetailDto.java index a3013f68..695a4246 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductTransferDetailDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductTransferDetailDto.java @@ -9,6 +9,7 @@ import java.util.List; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.openhis.common.annotation.Dict; @@ -147,6 +148,10 @@ public class ProductTransferDetailDto { /** 拆零比 */ private String partPercent; + /** 制单时间 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date occurrenceTime; + /** * 单位列表 */ diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnPageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnPageDto.java index 0cdd8352..dbc3bea9 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnPageDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnPageDto.java @@ -61,9 +61,8 @@ public class PurchaseReturnPageDto { /** 期望日期(制单日期) */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @JSONField(name="create_time") - private Date createTime; - + @JSONField(name="occurrence_time") + private Date occurrenceTime; /** 审批时间 */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/TraceNoSearchParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/TraceNoSearchParam.java index 5e8581a7..97ca9f2f 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/TraceNoSearchParam.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/TraceNoSearchParam.java @@ -41,6 +41,9 @@ public class TraceNoSearchParam { /** 操作类型 */ private Integer operationType; + /** 产品批号 */ + private String lotNumber; + /** 项目类型 */ private Integer itemType; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/appservice/IReviewPrescriptionRecordsAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/appservice/IReviewPrescriptionRecordsAppService.java new file mode 100644 index 00000000..94cbba12 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/appservice/IReviewPrescriptionRecordsAppService.java @@ -0,0 +1,19 @@ +package com.openhis.web.jlau.appservice; + +import com.core.common.core.domain.R; +import com.openhis.web.jlau.dto.ReviewPrescriptionRecordsDto; + +/** + * 农大审方记录 应用Service + */ +public interface IReviewPrescriptionRecordsAppService { + + /** + * 审核处方 + * + * @param reviewPrescriptionRecordsDto 审方记录dto + * @return 结果 + */ + R reviewPrescription(ReviewPrescriptionRecordsDto reviewPrescriptionRecordsDto); + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/appservice/impl/ReviewPrescriptionRecordsAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/appservice/impl/ReviewPrescriptionRecordsAppServiceImpl.java new file mode 100644 index 00000000..f9061cff --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/appservice/impl/ReviewPrescriptionRecordsAppServiceImpl.java @@ -0,0 +1,95 @@ +package com.openhis.web.jlau.appservice.impl; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.core.common.core.domain.R; +import com.core.common.exception.ServiceException; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.core.common.utils.StringUtils; +import com.openhis.administration.domain.ChargeItem; +import com.openhis.administration.service.IChargeItemService; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.ChargeItemStatus; +import com.openhis.jlau.domain.ReviewPrescriptionRecords; +import com.openhis.jlau.service.IReviewPrescriptionRecordsService; +import com.openhis.web.jlau.appservice.IReviewPrescriptionRecordsAppService; +import com.openhis.web.jlau.dto.ReviewPrescriptionRecordsDto; +import com.openhis.web.jlau.mapper.ReviewPrescriptionRecordsAppMapper; + +import lombok.extern.slf4j.Slf4j; + +/** + * 农大审方记录 应用实现类 + */ +@Slf4j +@Service +public class ReviewPrescriptionRecordsAppServiceImpl implements IReviewPrescriptionRecordsAppService { + + @Resource + ReviewPrescriptionRecordsAppMapper reviewPrescriptionRecordsAppMapper; + + @Resource + IChargeItemService chargeItemService; + + @Resource + IReviewPrescriptionRecordsService reviewPrescriptionRecordsService; + + /** + * 审核处方 + * + * @param reviewPrescriptionRecordsDto 审方记录dto + * @return 结果 + */ + @Override + public R reviewPrescription(ReviewPrescriptionRecordsDto reviewPrescriptionRecordsDto) { + // 参与者id + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + // 就诊id + Long encounterId = reviewPrescriptionRecordsDto.getEncounterId(); + // 处方号 + String prescriptionNo = reviewPrescriptionRecordsDto.getPrescriptionNo(); + // 药品请求ids + String medRequestIds = reviewPrescriptionRecordsDto.getMedRequestIds(); + if (StringUtils.isNotEmpty(medRequestIds)) { + List medRequestIdList = Arrays.stream(medRequestIds.split(",")).map(String::trim) // 去除空格 + .map(Long::valueOf) // 转换为Long + .collect(Collectors.toList()); + if (!medRequestIdList.isEmpty()) { + List list = chargeItemService.list(new LambdaQueryWrapper() + .eq(ChargeItem::getStatusEnum, ChargeItemStatus.BILLED.getValue()) + .in(ChargeItem::getServiceId, medRequestIdList)); + if (!list.isEmpty()) { + throw new ServiceException("已收费药品,无需审核"); + } + } + } + // 审方id + Long reviewId = reviewPrescriptionRecordsDto.getReviewId(); + // 通过标识 + Integer passFlag = reviewPrescriptionRecordsDto.getPassFlag(); + // 原因 + String reasonText = reviewPrescriptionRecordsDto.getReasonText(); + // 保存审核记录 + ReviewPrescriptionRecords reviewPrescriptionRecords; + reviewPrescriptionRecords = new ReviewPrescriptionRecords(); + reviewPrescriptionRecords.setId(reviewId); // id + reviewPrescriptionRecords.setEncounterId(encounterId); // 就诊id + reviewPrescriptionRecords.setPrescriptionNo(prescriptionNo); // 处方号 + reviewPrescriptionRecords.setMedRequestIds(medRequestIds); // 药品请求ids + reviewPrescriptionRecords.setPassFlag(passFlag); // 通过标识 + reviewPrescriptionRecords.setReasonText(reasonText); // 原因 + reviewPrescriptionRecords.setPractitionerId(practitionerId); // 审方人id + reviewPrescriptionRecordsService.saveOrUpdate(reviewPrescriptionRecords); + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[] {"审核处方"})); + } + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/controller/ReviewPrescriptionRecordsController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/controller/ReviewPrescriptionRecordsController.java new file mode 100644 index 00000000..2f13b8d3 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/controller/ReviewPrescriptionRecordsController.java @@ -0,0 +1,41 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.jlau.controller; + +import com.core.common.core.domain.R; +import com.openhis.web.jlau.dto.ReviewPrescriptionRecordsDto; +import com.openhis.web.regdoctorstation.dto.NursingOrdersSaveDto; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.openhis.web.jlau.appservice.IReviewPrescriptionRecordsAppService; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * 农大审方记录 controller + */ +@RestController +@RequestMapping("/jlau/review-prescription-records") +@Slf4j +@AllArgsConstructor +public class ReviewPrescriptionRecordsController { + + private final IReviewPrescriptionRecordsAppService iReviewPrescriptionRecordsAppService; + + /** + * 审核处方 + * + * @param reviewPrescriptionRecordsDto 审方记录dto + * @return 结果 + */ + @PostMapping(value = "/review-prescription") + public R reviewPrescription(@RequestBody ReviewPrescriptionRecordsDto reviewPrescriptionRecordsDto) { + return iReviewPrescriptionRecordsAppService.reviewPrescription(reviewPrescriptionRecordsDto); + } + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/dto/ReviewPrescriptionRecordsDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/dto/ReviewPrescriptionRecordsDto.java new file mode 100644 index 00000000..ea79d4c5 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/dto/ReviewPrescriptionRecordsDto.java @@ -0,0 +1,50 @@ +package com.openhis.web.jlau.dto; + +import java.util.List; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 农大审方记录 dto + */ +@Data +@Accessors(chain = true) +public class ReviewPrescriptionRecordsDto { + + /** + * 就诊id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterId; + + /** + * 处方号 + */ + private String prescriptionNo; + + /** + * 药品请求ids + */ + private String medRequestIds; + + /** + * 审方id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long reviewId; + + /** + * 通过标识 + */ + private Integer passFlag; + + /** + * 原因 + */ + private String reasonText; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/mapper/ReviewPrescriptionRecordsAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/mapper/ReviewPrescriptionRecordsAppMapper.java new file mode 100644 index 00000000..e5cb7a53 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/jlau/mapper/ReviewPrescriptionRecordsAppMapper.java @@ -0,0 +1,11 @@ +package com.openhis.web.jlau.mapper; + +import org.springframework.stereotype.Repository; + +/** + * 农大审方记录 应用Mapper + */ +@Repository +public interface ReviewPrescriptionRecordsAppMapper { + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialReceiptApprovalServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialReceiptApprovalServiceImpl.java index 179c9a29..586b37c9 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialReceiptApprovalServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialReceiptApprovalServiceImpl.java @@ -197,11 +197,8 @@ public class MaterialReceiptApprovalServiceImpl implements IMaterialReceiptAppro } // 追加追溯码信息 - boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), SupplyType.MATERIAL_STOCKIN.getValue()); - if (!flg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } // 调用医保商品采购接口 todo 相关医保接口未对应 String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关 @@ -303,11 +300,8 @@ public class MaterialReceiptApprovalServiceImpl implements IMaterialReceiptAppro } } // 追加追溯码信息 - boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), SupplyType.MATERIAL_RETURN.getValue()); - if (!flg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } // 调用医保采购退货接口 String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关 @@ -388,11 +382,9 @@ public class MaterialReceiptApprovalServiceImpl implements IMaterialReceiptAppro } } // 追加追溯码信息 - boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), SupplyType.MATERIAL_STOCKOUT.getValue()); - if (!flg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } + } return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); @@ -464,17 +456,14 @@ public class MaterialReceiptApprovalServiceImpl implements IMaterialReceiptAppro if (!supplylList.isEmpty()) { // 将供应项目的详细信息装配为库存项目 - List inventoryItemList = - InventoryManageAssembler.assembleInventoryItem(supplylList); + List inventoryItemList = InventoryManageAssembler.assembleInventoryItem(supplylList); // 入库 inventoryItemService.stockIn(inventoryItemList); } // 追加追溯码信息 - boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), SupplyType.MATERIAL_PRODUCT_RETURN.getValue()); - if (!flg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } + } return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); @@ -746,17 +735,14 @@ public class MaterialReceiptApprovalServiceImpl implements IMaterialReceiptAppro } if (!supplylList.isEmpty()) { // 将供应项目的详细信息装配为库存项目 - List inventoryItemList = - InventoryManageAssembler.assembleInventoryItem(supplylList); + List inventoryItemList = InventoryManageAssembler.assembleInventoryItem(supplylList); // 入库 inventoryItemService.stockIn(inventoryItemList); } // 追加追溯码信息 - boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), SupplyType.MATERIAL_TRANSFERIN.getValue()); - if (!flg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } + } return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); @@ -831,11 +817,9 @@ public class MaterialReceiptApprovalServiceImpl implements IMaterialReceiptAppro } } // 追加追溯码信息 - boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), SupplyType.MATERIAL_TRANSFEROUT.getValue()); - if (!flg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } + } return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/IOutpatientTreatmentAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/IOutpatientTreatmentAppService.java index 2f6bdac2..3ce5a59e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/IOutpatientTreatmentAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/IOutpatientTreatmentAppService.java @@ -71,4 +71,13 @@ public interface IOutpatientTreatmentAppService { * @return 取消结果 */ R cancelPerform(List performInfoList); + + + /** + * 输血贴查询 + * + * @param requestId 请求id + * @return 输血贴 + */ + R getBloodTransfusionPatch(Long requestId); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientTreatmentAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientTreatmentAppServiceImpl.java index 348b3ddc..cb249bf3 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientTreatmentAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientTreatmentAppServiceImpl.java @@ -28,12 +28,13 @@ import com.openhis.medication.service.IMedicationRequestService; import com.openhis.web.common.dto.PerformInfoDto; import com.openhis.web.common.dto.PerformRecordDto; import com.openhis.web.outpatientmanage.appservice.IOutpatientTreatmentAppService; +import com.openhis.web.outpatientmanage.dto.BloodTransfusionPatchDto; import com.openhis.web.outpatientmanage.dto.OutpatientStationInitDto; import com.openhis.web.outpatientmanage.dto.OutpatientTreatmentEncounterDto; import com.openhis.web.outpatientmanage.dto.OutpatientTreatmentInfoDto; import com.openhis.web.outpatientmanage.mapper.OutpatientTreatmentAppMapper; -import com.openhis.web.pharmacymanage.appservice.impl.IReturnMedicineAppServiceImpl; -import com.openhis.web.pharmacymanage.appservice.impl.IWesternMedicineDispenseAppServiceImpl; +import com.openhis.web.pharmacymanage.appservice.impl.ReturnMedicineAppServiceImpl; +import com.openhis.web.pharmacymanage.appservice.impl.WesternMedicineDispenseAppServiceImpl; import com.openhis.web.pharmacymanage.dto.InventoryDto; import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper; import com.openhis.workflow.domain.DeviceDispense; @@ -81,10 +82,10 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp private ReturnMedicineMapper returnMedicineMapper; @Resource - private IWesternMedicineDispenseAppServiceImpl westernMedicineDispenseAppServiceImpl; + private WesternMedicineDispenseAppServiceImpl westernMedicineDispenseAppServiceImpl; @Resource - private IReturnMedicineAppServiceImpl returnedMedicineAppServiceImpl; + private ReturnMedicineAppServiceImpl returnedMedicineAppServiceImpl; @Resource private AssignSeqUtil assignSeqUtil; @@ -126,7 +127,6 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp // 设置模糊查询的字段名 HashSet searchFields = new HashSet<>(); searchFields.add(CommonConstants.FieldName.PatientName); - searchFields.add(CommonConstants.FieldName.idCard); searchFields.add(CommonConstants.FieldName.PatientPyStr); searchFields.add(CommonConstants.FieldName.PatientWbStr); // 构建查询条件 @@ -253,11 +253,13 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp List devicePerformList = new ArrayList<>(); for (PerformInfoDto item : performInfoList) { if (CommonConstants.TableName.WOR_SERVICE_REQUEST.equals(item.getRequestTable()) - || CommonConstants.TableName.MED_MEDICATION_REQUEST.equals(item.getRequestTable())) { + || CommonConstants.TableName.MED_MEDICATION_REQUEST.equals(item.getRequestTable()) + || CommonConstants.TableName.WOR_DEVICE_REQUEST.equals(item.getRequestTable())) { serviceMedPerformList.add(item); - } else if (CommonConstants.TableName.WOR_DEVICE_REQUEST.equals(item.getRequestTable())) { - devicePerformList.add(item); } + // else if (CommonConstants.TableName.WOR_DEVICE_REQUEST.equals(item.getRequestTable())) { + // devicePerformList.add(item); + // } } // 分别处理诊疗/药品执行和耗材发放 if (!serviceMedPerformList.isEmpty()) { @@ -274,7 +276,7 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp encounterId = serviceRequest.getEncounterId(); requestId = serviceRequest.getId(); patientId = serviceRequest.getPatientId(); - exeCount = serviceRequest.getQuantity(); + exeCount = serviceRequest.getQuantity().intValue(); } } else if (CommonConstants.TableName.MED_MEDICATION_REQUEST.equals(performInfoDto.getRequestTable())) { MedicationRequest medicationRequest = @@ -324,105 +326,105 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp } else { return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); } + // todo:因长大农大在执行的时候都不发耗材,暂时注释掉 + // // 返回信息 + // String returnMsg = null; + // if (!devicePerformList.isEmpty()) { + // // 耗材请求id列表 + // List devRequestIdList = devicePerformList.stream().map(PerformInfoDto::getRequestId).toList(); + // // 获取耗材发放id列表 + // List devDispenseIdList = performInfoList.stream().map(PerformInfoDto::getDispenseId).toList(); + // // 获取库存信息 + // List inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null, + // CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); + // // 按每个耗材分组 + // Map> groupedByItemId = + // inventoryList.stream().collect(Collectors.groupingBy(InventoryDto::getItemId)); + // // 遍历每个分组校验库存状态 + // for (Map.Entry> entry : groupedByItemId.entrySet()) { + // List groupItems = entry.getValue(); + // if (groupItems.stream().map(InventoryDto::getInventoryStatusEnum) + // .allMatch(x -> x.equals(PublicationStatus.RETIRED.getValue()))) { + // // 库存停供校验 + // return R.fail(groupItems.get(0).getItemName() + "库存已停供"); + // } + // } + // List inventoryItemList = new ArrayList<>(); + // if (!inventoryList.isEmpty()) { + // for (InventoryDto inventoryDto : inventoryList) { + // if (PublicationStatus.ACTIVE.getValue().equals(inventoryDto.getInventoryStatusEnum())) { + // InventoryItem inventoryItem = new InventoryItem(); + // // 库存数量判定 + // if (inventoryDto.getDispenseUnit().equals(inventoryDto.getInventoryUnitCode())) { + // // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量 + // BigDecimal quantity = + // inventoryDto.getInventoryQuantity().subtract(inventoryDto.getQuantity()); + // // 库存数量判定 + // if (quantity.compareTo(BigDecimal.ZERO) < 0) { + // // 库存数量不足 + // return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); + // } else { + // inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); + // } + // } else { + // // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量) + // BigDecimal quantity = inventoryDto.getInventoryQuantity() + // .subtract(inventoryDto.getPartPercent().multiply(inventoryDto.getQuantity())); + // // 库存数量判定 + // if (quantity.compareTo(BigDecimal.ZERO) < 0) { + // // 库存数量不足 + // return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); + // } else { + // inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); + // } + // } + // inventoryItemList.add(inventoryItem); + // } + // } + // } + // // 发耗材信息查询 + // List dispenseList = deviceDispenseService + // .list(new LambdaQueryWrapper().in(DeviceDispense::getId, devDispenseIdList)); + // if (dispenseList != null) { + // for (DeviceDispense deviceDispense : dispenseList) { + // if (deviceDispense.getStatusEnum().equals(DispenseStatus.PREPARATION.getValue())) { + // // 耗材发放状态 + // deviceDispense.setStatusEnum(DispenseStatus.COMPLETED.getValue()); + // // 发药数量 + // deviceDispense.setDispenseQuantity(deviceDispense.getQuantity()); + // // 发药时间 + // deviceDispense.setDispenseTime(DateUtils.getNowDate()); + // // 发药人 + // deviceDispense.setPerformerId(SecurityUtils.getLoginUser().getPractitionerId()); + // // 根据数量设置追溯码 + // deviceDispense.setTraceNo(String.join(CommonConstants.Common.COMMA, + // Collections.nCopies(deviceDispense.getQuantity().intValue(), CommonConstants.Common.DEV_TRACE_NO))); + // } + // } + // // 药品发放更新 + // deviceDispenseService.updateBatchById(dispenseList); + // } else { + // return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + // } + // // 库存更新 + // inventoryItemService.updateBatchById(inventoryItemList); + // // 更新请求状态为已完成 + // deviceRequestService.updateCompletedStatusBatch(devRequestIdList); - // 返回信息 - String returnMsg = null; - if (!devicePerformList.isEmpty()) { - // 耗材请求id列表 - List devRequestIdList = devicePerformList.stream().map(PerformInfoDto::getRequestId).toList(); - // 获取耗材发放id列表 - List devDispenseIdList = performInfoList.stream().map(PerformInfoDto::getDispenseId).toList(); - // 获取库存信息 - List inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null, - CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); - // 按每个耗材分组 - Map> groupedByItemId = - inventoryList.stream().collect(Collectors.groupingBy(InventoryDto::getItemId)); - // 遍历每个分组校验库存状态 - for (Map.Entry> entry : groupedByItemId.entrySet()) { - List groupItems = entry.getValue(); - if (groupItems.stream().map(InventoryDto::getInventoryStatusEnum) - .allMatch(x -> x.equals(PublicationStatus.RETIRED.getValue()))) { - // 库存停供校验 - return R.fail(groupItems.get(0).getItemName() + "库存已停供"); - } - } - List inventoryItemList = new ArrayList<>(); - if (!inventoryList.isEmpty()) { - for (InventoryDto inventoryDto : inventoryList) { - if (PublicationStatus.ACTIVE.getValue().equals(inventoryDto.getInventoryStatusEnum())) { - InventoryItem inventoryItem = new InventoryItem(); - // 库存数量判定 - if (inventoryDto.getDispenseUnit().equals(inventoryDto.getInventoryUnitCode())) { - // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量 - BigDecimal quantity = - inventoryDto.getInventoryQuantity().subtract(inventoryDto.getQuantity()); - // 库存数量判定 - if (quantity.compareTo(BigDecimal.ZERO) < 0) { - // 库存数量不足 - return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); - } else { - inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); - } - } else { - // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量) - BigDecimal quantity = inventoryDto.getInventoryQuantity() - .subtract(inventoryDto.getPartPercent().multiply(inventoryDto.getQuantity())); - // 库存数量判定 - if (quantity.compareTo(BigDecimal.ZERO) < 0) { - // 库存数量不足 - return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); - } else { - inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); - } - } - inventoryItemList.add(inventoryItem); - } - } - } - // 发耗材信息查询 - List dispenseList = deviceDispenseService - .list(new LambdaQueryWrapper().in(DeviceDispense::getId, devDispenseIdList)); - if (dispenseList != null) { - for (DeviceDispense deviceDispense : dispenseList) { - if (deviceDispense.getStatusEnum().equals(DispenseStatus.PREPARATION.getValue())) { - // 耗材发放状态 - deviceDispense.setStatusEnum(DispenseStatus.COMPLETED.getValue()); - // 发药数量 - deviceDispense.setDispenseQuantity(deviceDispense.getQuantity()); - // 发药时间 - deviceDispense.setDispenseTime(DateUtils.getNowDate()); - // 发药人 - deviceDispense.setPerformerId(SecurityUtils.getLoginUser().getPractitionerId()); - // 根据数量设置追溯码 - deviceDispense.setTraceNo(String.join(CommonConstants.Common.COMMA, - Collections.nCopies(deviceDispense.getQuantity(), CommonConstants.Common.DEV_TRACE_NO))); - } - } - // 药品发放更新 - deviceDispenseService.updateBatchById(dispenseList); - } else { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } - // 库存更新 - inventoryItemService.updateBatchById(inventoryItemList); - // 更新请求状态为已完成 - deviceRequestService.updateCompletedStatusBatch(devRequestIdList); - - // 调用医保商品销售接口 - String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); - // 医保开关 - if (Whether.YES.getCode().equals(ybSwitch)) { - List uploadFailedNoList = - westernMedicineDispenseAppServiceImpl.ybMedicineIntegrated(null, devDispenseIdList); - if (uploadFailedNoList != null) { - returnMsg = "3505商品销售上传错误,错误项目编码" + uploadFailedNoList; - } else { - returnMsg = "3505商品销售上传成功"; - } - } - } - return R.ok(returnMsg, "执行成功"); + // // 调用医保商品销售接口 + // String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); + // // 医保开关 + // if (Whether.YES.getCode().equals(ybSwitch)) { + // List uploadFailedNoList = + // westernMedicineDispenseAppServiceImpl.ybMedicineIntegrated(null, devDispenseIdList); + // if (uploadFailedNoList != null) { + // returnMsg = "3505商品销售上传错误,错误项目编码" + uploadFailedNoList; + // } else { + // returnMsg = "3505商品销售上传成功"; + // } + // } + // } + return R.ok("执行成功"); } /** @@ -508,7 +510,7 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp // 生成退耗材请求 deviceRequest.setId(null); // 耗材请求id deviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.DEVICE_RES_NO.getPrefix(), 4)); // 耗材请求编码 - deviceRequest.setQuantity(deviceRequest.getQuantity() * (-1)); // 请求数量 + deviceRequest.setQuantity(deviceRequest.getQuantity().multiply(new BigDecimal("-1"))); // 请求数量 deviceRequest.setStatusEnum(RequestStatus.CANCELLED.getValue()); // 请求状态 deviceRequest.setRefundDeviceId(deviceRequest.getId()); // 退药id deviceRequestService.save(deviceRequest); @@ -588,4 +590,24 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp } return R.ok(returnMsg, "取消执行成功"); } + + /** + * 输血贴查询 + * + * @param requestId 请求id + * @return 输血贴 + */ + @Override + public R getBloodTransfusionPatch(Long requestId) { + BloodTransfusionPatchDto bloodTransfusionPatch = + outpatientTreatmentAppMapper.getBloodTransfusionPatch(requestId); + // 性别枚举 + bloodTransfusionPatch.setGenderEnum_enumText( + EnumUtils.getInfoByValue(AdministrativeGender.class, bloodTransfusionPatch.getGenderEnum())); + // 计算年龄 + if (bloodTransfusionPatch.getBirthDate() != null) { + bloodTransfusionPatch.setAge(AgeCalculatorUtil.getAge(bloodTransfusionPatch.getBirthDate())); + } + return R.ok(bloodTransfusionPatch); + } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/controller/OutpatientTreatmentController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/controller/OutpatientTreatmentController.java index 58bdd0be..cc7a0976 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/controller/OutpatientTreatmentController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/controller/OutpatientTreatmentController.java @@ -107,4 +107,16 @@ public class OutpatientTreatmentController { public R cancelPerform(@RequestBody List performInfoList) { return outpatientTreatmentAppService.cancelPerform(performInfoList); } + + /** + * 输血贴查询 + * + * @param requestId 请求id + * @return 输血贴 + */ + @GetMapping(value = "/blood-transfusion-patch") + public R getBloodTransfusionPatch(@RequestParam(value = "requestId") Long requestId) { + return outpatientTreatmentAppService.getBloodTransfusionPatch(requestId); + } + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/BloodTransfusionPatchDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/BloodTransfusionPatchDto.java new file mode 100644 index 00000000..8fb83564 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/BloodTransfusionPatchDto.java @@ -0,0 +1,57 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.outpatientmanage.dto; + +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 输血贴 + * + * @author yuxj + * @date 2025-04-11 + */ +@Data +@Accessors(chain = true) +public class BloodTransfusionPatchDto { + + /** 患者姓名 */ + private String patientName; + + /** 性别编码 */ + private Integer genderEnum; + private String genderEnum_enumText; + + /** 生日 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date birthDate; + + /** 病人年龄 */ + private String age; + + /** + * 项目名称 + */ + private String activityName; + + /** + * 项目编码 + */ + private String busNo; + + /** + * 科室 + */ + private String orgName; + + /** + * 医生 + */ + private String practitionerName; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientTreatmentInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientTreatmentInfoDto.java index b0645c71..fe39cade 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientTreatmentInfoDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientTreatmentInfoDto.java @@ -110,4 +110,12 @@ public class OutpatientTreatmentInfoDto { /** 取消执行次数 */ private Integer cancelCount; + + /** 用法 */ + @Dict(dictCode = "method_code") + private String methodCode; + private String methodCode_dictText; + + /** 用药天数 */ + private Integer dispensePerDuration; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/mapper/OutpatientTreatmentAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/mapper/OutpatientTreatmentAppMapper.java index efbc9647..6d2a0980 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/mapper/OutpatientTreatmentAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/mapper/OutpatientTreatmentAppMapper.java @@ -5,6 +5,7 @@ package com.openhis.web.outpatientmanage.mapper; import java.util.List; +import com.openhis.web.outpatientmanage.dto.BloodTransfusionPatchDto; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -56,4 +57,12 @@ public interface OutpatientTreatmentAppMapper { * @return 执行记录列表 */ List selectPerformRecordList(@Param("reqIds") List reqIds); + + /** + * 输血贴查询 + * + * @param requestId 请求id + * @return 输血贴 + */ + BloodTransfusionPatchDto getBloodTransfusionPatch(@Param("requestId") Long requestId); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/patientmanage/appservice/impl/PatientInformationServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/patientmanage/appservice/impl/PatientInformationServiceImpl.java index fc275d0c..30313f13 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/patientmanage/appservice/impl/PatientInformationServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/patientmanage/appservice/impl/PatientInformationServiceImpl.java @@ -166,11 +166,22 @@ public class PatientInformationServiceImpl implements IPatientInformationService public R editPatient(PatientInformationDto patientInformationDto) { // 如果患者没有输入身份证号则根据年龄自动生成 String idCard = patientInformationDto.getIdCard(); - if (idCard == null || CommonConstants.Common.AREA_CODE.equals(idCard.substring(0, 6))) { - idCard = IdCardUtil.generateIdByAge(patientInformationDto.getAge()); - Date birthday = IdCardUtil.extractBirthdayFromIdCard(idCard); + Date birthday = null; +// if (idCard == null || CommonConstants.Common.AREA_CODE.equals(idCard.substring(0, 6))) { +// idCard = IdCardUtil.generateIdByAge(patientInformationDto.getAge()); +// Date birthday = IdCardUtil.extractBirthdayFromIdCard(idCard); +// patientInformationDto.setIdCard(idCard).setBirthDate(birthday); +// } + if (idCard != null && !idCard.isEmpty()) { + birthday = IdCardUtil.extractBirthdayFromIdCard(idCard); patientInformationDto.setIdCard(idCard).setBirthDate(birthday); } + // if(idCard==null&&patientInformationDto.getAge() != null) +// { +// idCard = IdCardUtil.generateIdByAge(patientInformationDto.getAge()); +// birthday = IdCardUtil.extractBirthdayFromIdCard(idCard); +// patientInformationDto.setIdCard(idCard).setBirthDate(birthday); +// } Patient patient = new Patient(); BeanUtils.copyProperties(patientInformationDto, patient); @@ -221,11 +232,22 @@ public class PatientInformationServiceImpl implements IPatientInformationService public R addPatient(PatientInformationDto patientInformationDto) { // 如果患者没有输入身份证号则根据年龄自动生成 String idCard = patientInformationDto.getIdCard(); - if (idCard == null || idCard.isEmpty() || CommonConstants.Common.AREA_CODE.equals(idCard.substring(0, 6))) { - idCard = IdCardUtil.generateIdByAge(patientInformationDto.getAge()); - Date birthday = IdCardUtil.extractBirthdayFromIdCard(idCard); + Date birthday = null; +// if (idCard == null || CommonConstants.Common.AREA_CODE.equals(idCard.substring(0, 6))) { +// idCard = IdCardUtil.generateIdByAge(patientInformationDto.getAge()); +// Date birthday = IdCardUtil.extractBirthdayFromIdCard(idCard); +// patientInformationDto.setIdCard(idCard).setBirthDate(birthday); +// } + if (idCard != null && !idCard.isEmpty()) { + birthday = IdCardUtil.extractBirthdayFromIdCard(idCard); patientInformationDto.setIdCard(idCard).setBirthDate(birthday); } +// if(idCard==null&&patientInformationDto.getAge() != null) +// { +// idCard = IdCardUtil.generateIdByAge(patientInformationDto.getAge()); +// birthday = IdCardUtil.extractBirthdayFromIdCard(idCard); +// patientInformationDto.setIdCard(idCard).setBirthDate(birthday); +// } Patient patient = new Patient(); BeanUtils.copyProperties(patientInformationDto, patient); patient.setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.PATIENT_NUM.getPrefix(), 10)); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/patientmanage/dto/PatientInformationDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/patientmanage/dto/PatientInformationDto.java index 7476e7c2..c072794f 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/patientmanage/dto/PatientInformationDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/patientmanage/dto/PatientInformationDto.java @@ -25,131 +25,202 @@ import lombok.experimental.Accessors; @Accessors(chain = true) public class PatientInformationDto { - /** ID */ + /** + * ID + */ @JsonSerialize(using = ToStringSerializer.class) private Long id; - /** 临时标识 */ + /** + * 临时标识 + */ private Integer tempFlag; - /** 患者姓名 */ + /** + * 患者姓名 + */ @NotBlank(message = "患者姓名不能为空") private String name; - /** 患者其他名称 */ + /** + * 患者其他名称 + */ private String nameJson; - /** 患者院内编码/病历号 */ + /** + * 患者院内编码/病历号 + */ private String busNo; - /** 性别编码 */ + /** + * 性别编码 + */ @NotNull private Integer genderEnum; private String genderEnum_enumText; - /** 生日 */ + /** + * 生日 + */ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") private Date birthDate; - /** 死亡时间 */ + /** + * 死亡时间 + */ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") private Date deceasedDate; - /** 婚姻状态 */ + /** + * 婚姻状态 + */ private Integer maritalStatusEnum; private String maritalStatusEnum_enumText; - /** 职业编码 */ + /** + * 职业编码 + */ private Integer prfsEnum; private String prfsEnum_enumText; - /** 电话 */ - // @NotBlank(message = "电话不能为空") - @Size(min = 11, max = 11, message = "电话长度必须为11位") - @Pattern(regexp = "^1[3-9]\\d{9}$", message = "电话格式不正确") + /** + * 电话 + */ + @Pattern(regexp = "^$|^1[3-9]\\d{9}$", message = "电话格式不正确(必须为11位有效手机号)") private String phone; - /** 地址 */ + /** + * 地址 + */ private String address; - /** 地址省 */ + /** + * 地址省 + */ private String addressProvince; - /** 地址市 */ + /** + * 地址市 + */ private String addressCity; - /** 地址区 */ + /** + * 地址区 + */ private String addressDistrict; - /** 地址街道 */ + /** + * 地址街道 + */ private String addressStreet; - /** 患者其他地址 */ + /** + * 患者其他地址 + */ private String addressJson; - /** 民族 */ + /** + * 民族 + */ private String nationalityCode; - /** 证件号码 */ + /** + * 证件号码 + */ private String idCard; - /** 证件类型 */ + /** + * 证件类型 + */ @Dict(dictCode = "sys_idtype") private String typeCode; private String typeCode_dictText; - /** 标识号 */ + /** + * 标识号 + */ private String identifierNo; - /** 拼音码 */ + /** + * 拼音码 + */ private String pyStr; - /** 五笔码 */ + /** + * 五笔码 + */ private String wbStr; - /** 血型ABO */ + /** + * 血型ABO + */ private Integer bloodAbo; private String bloodAbo_enumText; - /** 血型RH */ + /** + * 血型RH + */ private Integer bloodRh; private String bloodRh_enumText; - /** 工作单位 */ + /** + * 工作单位 + */ private String workCompany; - /** 籍贯 */ + /** + * 籍贯 + */ private String nativePlace; - /** 国家编码 */ + /** + * 国家编码 + */ private String countryCode; - /** 联系人 */ + /** + * 联系人 + */ private String linkName; - /** 联系人关系 */ + /** + * 联系人关系 + */ private Integer linkRelationCode; private String linkRelationCode_enumText; - /** 联系人电话 */ - @Size(min = 11, max = 11, message = "电话长度必须为11位") - @Pattern(regexp = "^1[3-9]\\d{9}$", message = "电话格式不正确") + /** + * 联系人电话 + */ +// @Size(min = 11, max = 11, message = "电话长度必须为11位") +// @Pattern(regexp = "^1[3-9]\\d{9}$", message = "电话格式不正确") + @Pattern(regexp = "^$|^1[3-9]\\d{9}$", message = "联系人电话格式不正确(必须为11位有效手机号)") private String linkTelcom; - /** 其他联系人 */ + /** + * 其他联系人 + */ private String linkJsons; - /** 机构Id */ + /** + * 机构Id + */ private Long organizationId; - /** 机构名 */ + /** + * 机构名 + */ private String organizationName; - /** 创建时间 */ + /** + * 创建时间 + */ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; - /** 年龄 */ + /** + * 年龄 + */ private Integer age; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IChargeBillService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IChargeBillService.java index 65e61fa3..48a3f5f1 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IChargeBillService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IChargeBillService.java @@ -6,35 +6,49 @@ import com.openhis.web.paymentmanage.dto.ChargeSummaryDto; public interface IChargeBillService { /** - * - * @param paymentId - * @return + * 小票信息 + * + * @param paymentId 入参 + * @return 结果 */ Map getDetail(Long paymentId); /** - * - * @param - * @return + * 日结账单报表 + * + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param entererId 收款员 + * @param contractNo 合同 + * @return 结果 */ Map getTotal(String startTime, String endTime, Long entererId, String contractNo); Map getTotalCcu(String startTime, String endTime, Long entererId); - Map getTotalCommen(String startTime, String endTime, Long entererId); + Map getTotalCommen(String startTime, String endTime, Long entererId, String contractNo); /** - * - * @param paymentId - * @return + * 医保保障金的相关接口(弃用) + * + * @param paymentId 付款id + * @return 结果 */ Map getMedicalExpenseCoverageSummary(Long paymentId); /** - * - * @param chargeSummaryDto - * @return + * 按照科室营收情况 + * + * @param chargeSummaryDto 入参 + * @return 结果 */ Map getChargeItemByOrg(ChargeSummaryDto chargeSummaryDto); + /** + * 小票信息(农大) + * + * @param paymentId 付款id + * @return 结果 + */ + Map getReceiptDetailsND(Long paymentId); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/IChargeBillServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/IChargeBillServiceImpl.java index f7d166f0..062d9524 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/IChargeBillServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/IChargeBillServiceImpl.java @@ -19,6 +19,7 @@ import com.core.common.utils.DateUtils; import com.core.common.utils.SecurityUtils; import com.core.common.utils.StringUtils; import com.openhis.administration.domain.*; +import com.openhis.administration.dto.ChargeItemBaseInfoDto; import com.openhis.administration.dto.ChargeItemDefInfo; import com.openhis.administration.dto.EncounterAccountDto; import com.openhis.administration.service.*; @@ -35,6 +36,7 @@ import com.openhis.financial.domain.Contract; import com.openhis.financial.domain.PaymentRecDetail; import com.openhis.financial.domain.PaymentReconciliation; import com.openhis.financial.model.PaymentRecDetailAccountResult; +import com.openhis.financial.model.PaymentReconciliationAccountDel; import com.openhis.financial.service.IContractService; import com.openhis.financial.service.IPaymentRecDetailService; import com.openhis.financial.service.IPaymentReconciliationService; @@ -119,7 +121,7 @@ public class IChargeBillServiceImpl implements IChargeBillService { map.put("paymentId", paymentReconciliation.getPaymentNo());// 结算id map.put("paymentAmount", paymentReconciliation.getTenderedAmount());// 应收金额 Practitioner practitioner = iPractitionerService.getById(paymentReconciliation.getEntererId()); - map.put("paymentAmount", practitioner == null ? "" : practitioner.getName());// 收费员 + map.put("paymentEmployee", practitioner == null ? "" : practitioner.getName());// 收费员 map.put("chargeTime", paymentReconciliation.getBillDate());// 收费时间 Patient patient = iPatientService.getById(paymentReconciliation.getPatientId()); if (patient == null) { @@ -139,6 +141,49 @@ public class IChargeBillServiceImpl implements IChargeBillService { } map.put("detail", paymentRecDetails);// 支付详细 + for (PaymentRecDetail paymentRecDetail : paymentRecDetails) { + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SELF_YB_ZH_PAY.getValue())) { + map.put("ybAccountPay", paymentRecDetail.getAmount());// 医保账户支付 + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.BALC.getValue())) { + map.put("ybAccountBalc", paymentRecDetail.getAmount());// 医保账户余额(现) + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_FUND_PAY.getValue())) { + map.put("ybFundPay", paymentRecDetail.getAmount());// 基金支付总额 + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_TC_FUND_AMOUNT.getValue())) { + map.put("ybTcPay", paymentRecDetail.getAmount());// 统筹支付金额 + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_BC_GWY_BZ_VALUE.getValue())) { + map.put("ybGWYPay", paymentRecDetail.getAmount());// 公务员补助 + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.OTHER_PAY.getValue())) { + map.put("ybOtherPay", paymentRecDetail.getAmount());// 其他支付 + } + // 下面两个大额理赔有哪个用哪个,无所谓的 + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_BC_DE_BZ_VALUE.getValue())) { + map.put("ybDELPPay", paymentRecDetail.getAmount());// 大额理赔(常规) + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_BC_ZG_DE_BZ_VALUE.getValue())) { + map.put("ybDELPPay", paymentRecDetail.getAmount());// 大额理赔(企业) + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.E_WALLET.getValue())) { + map.put("ybWallet", paymentRecDetail.getAmount());// 电子钱包 + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SUPPLEMENTARY_INSURANCE.getValue())) { + map.put("ybWallet", paymentRecDetail.getAmount());// 居民大病报销 + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SELF_CASH_VALUE.getValue())) { + map.put("cash", paymentRecDetail.getAmount());// 现金 + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SELF_CASH_VX_VALUE.getValue())) { + map.put("wxCash", paymentRecDetail.getAmount());// 现金(微信) + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SELF_CASH_ALI_VALUE.getValue())) { + map.put("aliCash", paymentRecDetail.getAmount());// 现金(支付宝) + } + } + Invoice invoice = iInvoiceService.getOne(new LambdaQueryWrapper() .eq(Invoice::getReconciliationId, paymentId).eq(Invoice::getStatusEnum, InvoiceStatus.ISSUED.getValue()) .orderByDesc(Invoice::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1)); @@ -319,8 +364,8 @@ public class IChargeBillServiceImpl implements IChargeBillService { String fixmedinsName = optionJson.getString(CommonConstants.Option.FIXMEDINS_NAME); String fixmedinsCode = optionJson.getString(CommonConstants.Option.FIXMEDINS_CODE); - map.put("fixmedinsName", fixmedinsName); - map.put("fixmedinsCode", fixmedinsCode); + map.put("fixmedinsName", fixmedinsName);// 医院名称 + map.put("fixmedinsCode", fixmedinsCode);// 医院编号 return map; } @@ -372,7 +417,19 @@ public class IChargeBillServiceImpl implements IChargeBillService { paymentReconciliationList.stream().map(PaymentReconciliation::getId).collect(Collectors.toList()); List paymentDetails = paymentRecDetailService .list(new LambdaQueryWrapper().in(PaymentRecDetail::getReconciliationId, paymentIdList) - .eq(PaymentRecDetail::getDeleteFlag, DelFlag.NO.getCode())); + .eq(PaymentRecDetail::getDeleteFlag, DelFlag.NO.getCode()).notIn(PaymentRecDetail::getPayEnum, + YbPayment.SUPPLEMENTARY_INSURANCE.getValue(), YbPayment.SUPPLEMENTARY_INSURANCE.getValue(), + YbPayment.FULAMT_OWNPAY_AMT.getValue(), YbPayment.OVERLMT_SELFPAY.getValue(), + YbPayment.PRESELFPAY_AMT.getValue(), YbPayment.INSCP_SCP_AMT.getValue(), + YbPayment.ACT_PAY_DEDC.getValue(), YbPayment.POOL_PROP_SELFPAY.getValue(), + YbPayment.BALC.getValue(), YbPayment.BIRTH_FUND.getValue(), YbPayment.RETIREE_MEDICAL.getValue(), + YbPayment.MEDICAL_ASSISTANCE.getValue(), YbPayment.URBAN_SERIOUS_ILLNESS.getValue(), + YbPayment.URBAN_BASIC_MEDICAL.getValue(), YbPayment.GOVERNMENT_SUBSIDY.getValue(), + YbPayment.ACCIDENT_INSURANCE.getValue(), YbPayment.CARE_INSURANCE.getValue(), + YbPayment.FINANCIAL_FUND.getValue(), YbPayment.HOSPITAL_ADVANCE.getValue(), + YbPayment.SUPPLEMENTARY_INSURANCE.getValue(), + YbPayment.BASIC_MEDICAL_INSURANCE_FOR_URBAN_EMPLOYEES.getValue(), YbPayment.E_WALLET.getValue(), + YbPayment.HEALTHCARE_PREPAYMENT.getValue())); if (paymentDetails.isEmpty()) { return getMap(map); } @@ -1321,7 +1378,7 @@ public class IChargeBillServiceImpl implements IChargeBillService { * @param entererId 参与人id * @return 参数 */ - public Map getTotalCommen(String startTime, String endTime, Long entererId) { + public Map getTotalCommen(String startTime, String endTime, Long entererId, String contractNo) { // 声明变量 处理时间 Map map = new HashMap<>(); @@ -1346,14 +1403,18 @@ public class IChargeBillServiceImpl implements IChargeBillService { if (entererId != null) { queryWrapper.eq(PaymentReconciliation::getEntererId, entererId); } - List paymentReconciliationList = paymentReconciliationService.list(queryWrapper); + // List paymentReconciliationList = paymentReconciliationService.list(queryWrapper); + List paymentReconciliationList = paymentReconciliationService + .getPaymentAccountContract(startTime, endTime, entererId, contractNo, PaymentStatus.SUCCESS.getValue(), + PaymentStatus.REFUND_ALL.getValue(), PaymentKind.OUTPATIENT_CLINIC.getValue()); + if (paymentReconciliationList.isEmpty()) { return getMap(map); } // 查询所有的支付详情(业务注释:收集并统计不同支付渠道支付的费用) List paymentIdList = - paymentReconciliationList.stream().map(PaymentReconciliation::getId).collect(Collectors.toList()); + paymentReconciliationList.stream().map(PaymentReconciliationAccountDel::getId).collect(Collectors.toList()); List PaymentRecDetailAccountResultList = paymentRecDetailService.getListByReconciliationIds(paymentIdList); if (PaymentRecDetailAccountResultList.isEmpty()) { @@ -1433,18 +1494,18 @@ public class IChargeBillServiceImpl implements IChargeBillService { } } map.put("ybCashSum", YbCashSum);// 医保现金 -// map.put("selfCashSum", SelfCashSum);// 自费现金 + // map.put("selfCashSum", SelfCashSum);// 自费现金 map.put("rmbCashSum", rmbCashSum);// 自费现金纯现金 map.put("vxCashSum", vxCashSum);// 自费现金vx map.put("uniCashSum", uniCashSum);// 自费现金银联 map.put("aliCashSum", aliCashSum);// 自费现金ali // 将所有的payment分组进行单独处理(业务注释:处理不同财务分类的金额,如西药费中药费等) - List paymentList = new ArrayList<>(); - List returnList = new ArrayList<>(); + List paymentList = new ArrayList<>(); + List returnList = new ArrayList<>(); // List partReturnList = new ArrayList<>(); - for (PaymentReconciliation paymentReconciliation : paymentReconciliationList) { + for (PaymentReconciliationAccountDel paymentReconciliation : paymentReconciliationList) { if (PaymentStatus.REFUND_ALL.getValue().equals(paymentReconciliation.getStatusEnum())) { returnList.add(paymentReconciliation); } else if (PaymentStatus.REFUND_PART.getValue().equals(paymentReconciliation.getStatusEnum())) { @@ -1455,16 +1516,16 @@ public class IChargeBillServiceImpl implements IChargeBillService { } } - Map> returnPaymentMapByRelationId = new HashMap<>(); + Map> returnPaymentMapByRelationId = new HashMap<>(); if (!returnList.isEmpty()) { returnPaymentMapByRelationId = - returnList.stream().collect(Collectors.groupingBy(PaymentReconciliation::getRelationId)); + returnList.stream().collect(Collectors.groupingBy(PaymentReconciliationAccountDel::getRelationId)); } List addChargeItemIds = new ArrayList<>(); List subChargeItemIds = new ArrayList<>(); - for (PaymentReconciliation paymentReconciliation : paymentList) { - List paymentReconciliations = + for (PaymentReconciliationAccountDel paymentReconciliation : paymentList) { + List paymentReconciliations = returnPaymentMapByRelationId.get(paymentReconciliation.getId()); if (paymentReconciliations != null && !paymentReconciliations.isEmpty()) { // 情况a @@ -1475,7 +1536,7 @@ public class IChargeBillServiceImpl implements IChargeBillService { // 情况 e List strings = Arrays.asList(paymentReconciliation.getChargeItemIds().split(",")); List split = new ArrayList<>(); - for (PaymentReconciliation reconciliation : paymentReconciliations) { + for (PaymentReconciliationAccountDel reconciliation : paymentReconciliations) { split.addAll(Arrays.asList(reconciliation.getChargeItemIds().split(","))); } strings.removeAll(split); @@ -1491,8 +1552,9 @@ public class IChargeBillServiceImpl implements IChargeBillService { // 情况 c // 情况 g - for (Map.Entry> longListEntry : returnPaymentMapByRelationId.entrySet()) { - for (PaymentReconciliation paymentReconciliation : longListEntry.getValue()) { + for (Map.Entry> longListEntry : returnPaymentMapByRelationId + .entrySet()) { + for (PaymentReconciliationAccountDel paymentReconciliation : longListEntry.getValue()) { subChargeItemIds.addAll(Arrays.asList(paymentReconciliation.getChargeItemIds().split(","))); } } @@ -1510,6 +1572,10 @@ public class IChargeBillServiceImpl implements IChargeBillService { } } + // 查不到收费项的情况下不统计了 + if (chargeItemIds.isEmpty()) { + return getMap(map); + } List chargeItemDefInfoByIds = chargeItemService.getChargeItemDefInfoByIds(chargeItemIds); if (chargeItemDefInfoByIds.isEmpty()) { throw new ServiceException("数据异常,该时间段内未查询到收费项"); @@ -1678,15 +1744,26 @@ public class IChargeBillServiceImpl implements IChargeBillService { map.put(key, bigDecimal); } + // 体检人次(长大专用) + List chargeItemDefInfos = chargeItemDefKVByTypeCode.get("9999"); + BigDecimal peisCnt = BigDecimal.ZERO; + if (chargeItemDefInfos != null) { + for (ChargeItemDefInfo chargeItemDefInfo : chargeItemDefInfos) { + peisCnt = peisCnt.add(chargeItemDefInfo.getQuantityValue()); + } + } + map.put("peisCnt", peisCnt);// 体检人次 + // 处理退费单 List returnBillVOList = new ArrayList<>(); ReturnBillVO returnBillVO; if (!returnList.isEmpty()) { - List returnIds = returnList.stream().map(PaymentReconciliation::getId).collect(Collectors.toList()); + List returnIds = + returnList.stream().map(PaymentReconciliationAccountDel::getId).collect(Collectors.toList()); // 查原付款单子 List relationIdList = - returnList.stream().map(PaymentReconciliation::getRelationId).collect(Collectors.toList()); + returnList.stream().map(PaymentReconciliationAccountDel::getRelationId).collect(Collectors.toList()); if (relationIdList.isEmpty() || returnList.size() != relationIdList.size()) { throw new ServiceException("数据异常,存在无法关联到原单的退款单,请联系工程师"); } @@ -1696,7 +1773,7 @@ public class IChargeBillServiceImpl implements IChargeBillService { if (!invoiceList.isEmpty()) { Map> invoiceKV = invoiceList.stream().collect(Collectors.groupingBy(Invoice::getReconciliationId)); - for (PaymentReconciliation paymentReconciliation : returnList) { + for (PaymentReconciliationAccountDel paymentReconciliation : returnList) { returnBillVO = new ReturnBillVO(); returnBillVO.setTotalAmount(paymentReconciliation.getTenderedAmount()); List paymentRecDetails = @@ -1858,10 +1935,16 @@ public class IChargeBillServiceImpl implements IChargeBillService { orgIncomeDto.setMedFee(orgIncomeDto.getMedFee().add(chargeItemExtendInfoDto.getTotalPrice())); break; case REGISTRATION_FEE: + orgIncomeDto.setAmount(orgIncomeDto.getAmount().add(chargeItemExtendInfoDto.getTotalPrice())); orgIncomeDto.setPersonCnt(orgIncomeDto.getPersonCnt() + 1); orgIncomeDto.setRegistrationFee( orgIncomeDto.getRegistrationFee().add(chargeItemExtendInfoDto.getTotalPrice())); break; + case SANITARY_MATERIALS_FEE: + orgIncomeDto.setAmount(orgIncomeDto.getAmount().add(chargeItemExtendInfoDto.getTotalPrice())); + orgIncomeDto + .setDeviceFee(orgIncomeDto.getDeviceFee().add(chargeItemExtendInfoDto.getTotalPrice())); + break; default: orgIncomeDto.setAmount(orgIncomeDto.getAmount().add(chargeItemExtendInfoDto.getTotalPrice())); orgIncomeDto @@ -1877,4 +1960,176 @@ public class IChargeBillServiceImpl implements IChargeBillService { return map; } + + /** + * 小票信息(农大) + * + * @param paymentId 付款id + * @return 结果 + */ + @Override + public Map getReceiptDetailsND(Long paymentId) { + + Map map = new HashMap<>(); + // 查询 + PaymentReconciliation paymentReconciliation = paymentReconciliationService.getById(paymentId); + if (paymentReconciliation == null) { + throw new ServiceException("未查询到付款信息"); + } + map.put("paymentId", paymentReconciliation.getPaymentNo());// 结算id + map.put("paymentAmount", paymentReconciliation.getTenderedAmount());// 应收金额 + Practitioner practitioner = iPractitionerService.getById(paymentReconciliation.getEntererId()); + map.put("paymentEmployee", practitioner == null ? "" : practitioner.getName());// 收费员 + map.put("chargeTime", paymentReconciliation.getBillDate());// 收费时间 + Patient patient = iPatientService.getById(paymentReconciliation.getPatientId()); + if (patient == null) { + throw new ServiceException("未查询到患者信息"); + } + map.put("patientName", patient.getName());// 患者姓名 + + map.put("sex", patient.getGenderEnum());// 性别 + map.put("idCardNo", patient.getIdCard());// 身份证号 + map.put("birthDay", patient.getBirthDate());// 出生日期 + + List paymentRecDetails = paymentRecDetailService + .list(new LambdaQueryWrapper().eq(PaymentRecDetail::getReconciliationId, paymentId)); + + if (paymentRecDetails.isEmpty()) { + throw new ServiceException("未查询到付款信息"); + } + map.put("detail", paymentRecDetails);// 支付详细 + + for (PaymentRecDetail paymentRecDetail : paymentRecDetails) { + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SELF_YB_ZH_PAY.getValue())) { + map.put("ybAccountPay", paymentRecDetail.getAmount());// 医保账户支付 + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.BALC.getValue())) { + map.put("ybAccountBalc", paymentRecDetail.getAmount());// 医保账户余额(现) + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_FUND_PAY.getValue())) { + map.put("ybFundPay", paymentRecDetail.getAmount());// 基金支付总额 + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_TC_FUND_AMOUNT.getValue())) { + map.put("ybTcPay", paymentRecDetail.getAmount());// 统筹支付金额 + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_BC_GWY_BZ_VALUE.getValue())) { + map.put("ybGWYPay", paymentRecDetail.getAmount());// 公务员补助 + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.OTHER_PAY.getValue())) { + map.put("ybOtherPay", paymentRecDetail.getAmount());// 其他支付 + } + // 下面两个大额理赔有哪个用哪个,无所谓的 + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_BC_DE_BZ_VALUE.getValue())) { + map.put("ybDELPPay", paymentRecDetail.getAmount());// 大额理赔(常规) + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_BC_ZG_DE_BZ_VALUE.getValue())) { + map.put("ybDELPPay", paymentRecDetail.getAmount());// 大额理赔(企业) + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.E_WALLET.getValue())) { + map.put("ybWallet", paymentRecDetail.getAmount());// 电子钱包 + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SUPPLEMENTARY_INSURANCE.getValue())) { + map.put("ybWallet", paymentRecDetail.getAmount());// 居民大病报销 + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SELF_CASH_VALUE.getValue())) { + map.put("cash", paymentRecDetail.getAmount());// 现金 + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SELF_CASH_VX_VALUE.getValue())) { + map.put("wxCash", paymentRecDetail.getAmount());// 现金(微信) + } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SELF_CASH_ALI_VALUE.getValue())) { + map.put("aliCash", paymentRecDetail.getAmount());// 现金(支付宝) + } + } + + Invoice invoice = iInvoiceService.getOne(new LambdaQueryWrapper() + .eq(Invoice::getReconciliationId, paymentId).eq(Invoice::getStatusEnum, InvoiceStatus.ISSUED.getValue()) + .orderByDesc(Invoice::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1)); + if (invoice != null) { + map.put("invoiceNo", invoice.getBillNo());// 支付详细 + map.put("pictureUrl", invoice.getPictureUrl());// 图片 + } + + List chargeItemIds = + Arrays.stream(paymentReconciliation.getChargeItemIds().split(",")).map(Long::parseLong) // 将字符串转换为 Long + .collect(Collectors.toList()); + List chargeItemBaseInfoByIds = + chargeItemService.getChargeItemBaseInfoByIds(chargeItemIds); + + for (ChargeItemBaseInfoDto chargeItemBaseInfoById : chargeItemBaseInfoByIds) { + if (chargeItemBaseInfoById.getDeptName() == null) { + throw new ServiceException("收费项" + chargeItemBaseInfoById.getName() + "无开单科室"); + } + if (chargeItemBaseInfoById.getTypeCode() == null) { + throw new ServiceException("收费项" + chargeItemBaseInfoById.getName() + "无财务分类"); + } + if (!CommonConstants.BusinessName.DEFAULT_CONTRACT_NO.equals(chargeItemBaseInfoById.getContractNo())) { + Object o = map.get(chargeItemBaseInfoById.getContractNo() + "-" + chargeItemBaseInfoById.getTypeCode()); + if (o == null) { + map.put(chargeItemBaseInfoById.getContractNo() + "-" + chargeItemBaseInfoById.getTypeCode(), + chargeItemBaseInfoById.getTotalPrice()); + } else { + BigDecimal bigDecimal = new BigDecimal(String.valueOf(o)); + bigDecimal = bigDecimal.add(chargeItemBaseInfoById.getTotalPrice()); + map.put(chargeItemBaseInfoById.getContractNo() + "-" + chargeItemBaseInfoById.getTypeCode(), + bigDecimal); + } + } else { + // 根据科室的分类来 + Object o = map.get(chargeItemBaseInfoById.getDeptName() + "-" + chargeItemBaseInfoById.getTypeCode()); + if (o == null) { + map.put(chargeItemBaseInfoById.getDeptName() + "-" + chargeItemBaseInfoById.getTypeCode(), + chargeItemBaseInfoById.getTotalPrice()); + } else { + BigDecimal bigDecimal = new BigDecimal(String.valueOf(o)); + bigDecimal = bigDecimal.add(chargeItemBaseInfoById.getTotalPrice()); + map.put(chargeItemBaseInfoById.getDeptName() + "-" + chargeItemBaseInfoById.getTypeCode(), + bigDecimal); + } + } + } + + Encounter encounter = iEncounterService.getById(paymentReconciliation.getEncounterId()); + if (encounter == null) { + throw new ServiceException("未查询到就诊信息"); + } + map.put("classEnum", encounter.getYbClassEnum());// 门诊/住院 + map.put("regNo", encounter.getBusNo());// 门诊号 + + InfoPerson perinfo = iPerinfoService.getOne(new LambdaQueryWrapper() + .eq(InfoPerson::getCertno, patient.getIdCard()).eq(InfoPerson::getTenantId, patient.getTenantId()) + .orderByDesc(InfoPerson::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1)); + if (perinfo != null) { + map.put("personType", perinfo.getInsutype());// 人员类别:职工医保,居民医保等;如果为空显示自费或其他 + map.put("insuplcAdmdvs", perinfo.getInsuplcAdmdvs());// 患者参保地区划 + } + + // 查询主诊断信息 + EncounterDiagnosis encounterDiagnosis = iEncounterDiagnosisService.getOne( + new LambdaQueryWrapper().eq(EncounterDiagnosis::getEncounterId, encounter.getId()) + .eq(EncounterDiagnosis::getMaindiseFlag, Whether.YES.getValue()) + .eq(EncounterDiagnosis::getDeleteFlag, DelFlag.NO.getCode()) + .orderByDesc(EncounterDiagnosis::getDiagSrtNo).last(YbCommonConstants.sqlConst.LIMIT1)); + + if (encounterDiagnosis != null) { + Condition condition = iConditionService.getById(encounterDiagnosis.getConditionId()); + if (condition != null) { + ConditionDefinition conditionDefinition = + iConditionDefinitionService.getOne(new LambdaQueryWrapper() + .eq(ConditionDefinition::getId, condition.getDefinitionId())); + if (conditionDefinition != null) { + map.put("conditionDefinition", conditionDefinition.getName());// 诊断名 + } + } + } + + JSONObject optionJson = SecurityUtils.getLoginUser().getOptionJson(); + String fixmedinsName = optionJson.getString(CommonConstants.Option.FIXMEDINS_NAME); + String fixmedinsCode = optionJson.getString(CommonConstants.Option.FIXMEDINS_CODE); + + map.put("fixmedinsName", fixmedinsName);// 医院名称 + map.put("fixmedinsCode", fixmedinsCode);// 医院编号 + + return map; + } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/PaymentRecServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/PaymentRecServiceImpl.java index 9945ecba..abed2fe8 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/PaymentRecServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/PaymentRecServiceImpl.java @@ -412,14 +412,16 @@ public class PaymentRecServiceImpl implements IPaymentRecService { List medicationRequestList = medicationRequestService .list(new LambdaQueryWrapper().in(MedicationRequest::getId, medReqIdList)); if (!medicationRequestList.isEmpty()) { - minpacuntDrugTracCnt = medicationRequestList.stream().mapToInt(MedicationRequest::getQuantity).sum(); + minpacuntDrugTracCnt = medicationRequestList.stream().map(MedicationRequest::getQuantity) + .map(BigDecimal::intValue).reduce(0, Integer::sum); } } if (!devReqIdList.isEmpty()) { List deviceRequestList = deviceRequestService .list(new LambdaQueryWrapper().in(DeviceRequest::getId, devReqIdList)); if (!deviceRequestList.isEmpty()) { - mcsTracCnt = deviceRequestList.stream().mapToInt(DeviceRequest::getQuantity).sum(); + mcsTracCnt = deviceRequestList.stream().map(DeviceRequest::getQuantity).map(BigDecimal::intValue) + .reduce(0, Integer::sum); } } @@ -458,7 +460,7 @@ public class PaymentRecServiceImpl implements IPaymentRecService { // 更改付款状态 logger.info("更新付款状态:payment:" + JSON.toJSONString(paymentReconciliation)); iPaymentReconciliationService.updatePaymentStatusAndSettleIdsById(paymentReconciliation.getId(), - PaymentStatus.SUCCESS, ybSettleIds); + PaymentStatus.SUCCESS, PaymentOutcome.COMPLETED.getCode(), ybSettleIds); // iPaymentRecDetailService.updateResultByPaymentId(paymentReconciliation.getId(), PaymentResult.PAID); // 更改付款详情的信息 iPaymentRecDetailService.updateBatchById(paymentRecDetails); @@ -512,8 +514,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService { chargeItemList.forEach(item -> { switch (item.getServiceTable()) { - case CommonConstants.TableName.MED_MEDICATION_REQUEST -> - medicationRequestIdList.add(item.getServiceId()); + case CommonConstants.TableName.MED_MEDICATION_REQUEST -> medicationRequestIdList + .add(item.getServiceId()); case CommonConstants.TableName.WOR_DEVICE_REQUEST -> deviceRequestIdList.add(item.getServiceId()); case CommonConstants.TableName.WOR_SERVICE_REQUEST -> serviceRequestIdList.add(item.getServiceId()); } @@ -809,6 +811,11 @@ public class PaymentRecServiceImpl implements IPaymentRecService { paymentReconciliation.setYbSettleIds(setlIds); } paymentReconciliationService.save(paymentReconciliation); + + // 更改原单的支付结果 + paymentReconciliationService.update(new PaymentReconciliation().setOutcomeEnum(PaymentOutcome.ERROR.getCode()), + new LambdaQueryWrapper().eq(PaymentReconciliation::getId, id)); + // 新增详情信息 PaymentRecDetail newPaymentRecDetail; List addDetailList = new ArrayList<>(); @@ -1711,7 +1718,7 @@ public class PaymentRecServiceImpl implements IPaymentRecService { chargeItem.setEncounterId(encounterId); chargeItem.setAccountId(accountId); chargeItem.setEntererId(SecurityUtils.getLoginUser().getPractitionerId()); - chargeItem.setQuantityValue(1); + chargeItem.setQuantityValue(new BigDecimal("1")); iChargeItemService.saveChargeItemByRegister(chargeItem); // 处理诊疗费并返回对应的收费项目id集合用于医保结算 List chargeItemIdList = this.handleActivityPrice(encounter, account.getId()); @@ -1781,7 +1788,7 @@ public class PaymentRecServiceImpl implements IPaymentRecService { Date curDate = new Date(); for (ActivityDeviceDto activityDeviceDto : tmpActivityList) { adviceBaseDto = new AdviceBaseDto(); - Integer quantity = activityDeviceDto.getQuantity(); // 请求数量 + BigDecimal quantity = activityDeviceDto.getQuantity(); // 请求数量 adviceBaseDto.setAdviceDefinitionId(activityDeviceDto.getDevActId()); // 对应的诊疗医嘱信息 AdviceBaseDto activityAdviceBaseDto = iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, null, @@ -1827,7 +1834,7 @@ public class PaymentRecServiceImpl implements IPaymentRecService { chargeItem.setQuantityUnit(activityAdviceBaseDto.getUnitCode()); // 单位 chargeItem.setUnitPrice(advicePriceDto.getPrice()); // 单价 // 计算总价,保留4位小数 - BigDecimal qty = new BigDecimal(quantity); + BigDecimal qty = quantity; chargeItem.setTotalPrice(qty.multiply(advicePriceDto.getPrice()).setScale(4, RoundingMode.HALF_UP)); // 总价 iChargeItemService.save(chargeItem); @@ -2088,12 +2095,12 @@ public class PaymentRecServiceImpl implements IPaymentRecService { } List ybSettleIds = paymentResultList.stream().map(com.openhis.financial.model.PaymentResult::getSetlId) - .collect(Collectors.toList()); + .filter(StringUtils::isNotEmpty).collect(Collectors.toList()); // <4>更改付款状态 logger.info("更新付款状态:payment:" + JSON.toJSONString(paymentReconciliation)); iPaymentReconciliationService.updatePaymentStatusAndSettleIdsById(paymentReconciliation.getId(), - PaymentStatus.SUCCESS, ybSettleIds); + PaymentStatus.SUCCESS, PaymentOutcome.COMPLETED.getCode(), ybSettleIds); // 更改付款详情的信息 iPaymentRecDetailService.updateBatchById(paymentRecDetails); @@ -2102,7 +2109,7 @@ public class PaymentRecServiceImpl implements IPaymentRecService { if (!paymentDto.getPaymentDetails().isEmpty() && newPayment != null) { // 更改新预交金payment状态 iPaymentReconciliationService.updatePaymentStatusAndSettleIdsById(newPayment.getId(), PaymentStatus.SUCCESS, - new ArrayList<>()); + PaymentOutcome.COMPLETED.getCode(), new ArrayList<>()); // 新增详情信息 Optional accountSelfOptional = accountList.stream() .filter(e -> e.getTypeCode().equals(AccountType.PERSONAL_CASH_ACCOUNT.getCode())).findAny(); @@ -2173,8 +2180,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService { chargeItemBaseInfoByIds.forEach(item -> { switch (item.getServiceTable()) { - case CommonConstants.TableName.MED_MEDICATION_REQUEST -> - medicationRequestIdList.add(item.getServiceId()); + case CommonConstants.TableName.MED_MEDICATION_REQUEST -> medicationRequestIdList + .add(item.getServiceId()); case CommonConstants.TableName.WOR_DEVICE_REQUEST -> deviceRequestIdList.add(item.getServiceId()); case CommonConstants.TableName.WOR_SERVICE_REQUEST -> serviceRequestIdList.add(item.getServiceId()); } @@ -2205,6 +2212,10 @@ public class PaymentRecServiceImpl implements IPaymentRecService { * @return 操作结果 */ public R inpatientUnPay(Long paymentId) { + // 校验重复退款 + if (iPaymentReconciliationService.isReturn(paymentId)) { + return R.fail("不可重复退款"); + } PaymentReconciliation paymentReconciliation = iPaymentReconciliationService.getById(paymentId); if (paymentReconciliation == null) { @@ -2229,7 +2240,7 @@ public class PaymentRecServiceImpl implements IPaymentRecService { if (!StringUtils.isEmpty(ybSettleIds)) { // 医保结算信息 List ybSettleIdList = Arrays.asList(ybSettleIds.split(",")); - if (!ybSettleIdList.isEmpty()) { + if (!ybSettleIdList.isEmpty() && !ybSettleIdList.get(0).equals("null")) { // 医保反结 List InpatientSettleList = iInpatientSettleService .list(new LambdaQueryWrapper().in(InpatientSettle::getSetlId, ybSettleIdList)); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/ChargeBillController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/ChargeBillController.java index 73c15fc5..f6f2f2fe 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/ChargeBillController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/ChargeBillController.java @@ -34,6 +34,17 @@ public class ChargeBillController { return R.ok(iChargeBillService.getDetail(paymentId)); } + /** + * 单次结算账单 + * + * @param paymentId 付款实体 + */ + @GetMapping("/receipt-details-nd") + @Anonymous + public R getReceiptDetailsND(@RequestParam("paymentId") Long paymentId) { + return R.ok(iChargeBillService.getReceiptDetailsND(paymentId)); + } + /** * 日结算账单 * @@ -58,8 +69,9 @@ public class ChargeBillController { @GetMapping("/getTotalCcu") @Anonymous public R getTotalCcu(@RequestParam(value = "startTime") String startTime, - @RequestParam("endTime") String endTime, @RequestParam(value = "entererId", required = false) Long entererId) { - return R.ok(iChargeBillService.getTotalCommen(startTime, endTime, entererId)); + @RequestParam("endTime") String endTime, @RequestParam(value = "entererId", required = false) Long entererId, + @RequestParam(value = "contractNo", required = false) String contractNo) { + return R.ok(iChargeBillService.getTotalCommen(startTime, endTime, entererId, contractNo)); } /** diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ChargeItemDetailVO.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ChargeItemDetailVO.java index e848884c..dc761967 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ChargeItemDetailVO.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ChargeItemDetailVO.java @@ -17,7 +17,7 @@ public class ChargeItemDetailVO { private String chargeItemName;//医保等级 /** 数量 */ - private Integer quantityValue; + private BigDecimal quantityValue; /** 单位 */ @Dict(dictCode = "prcunt_type") diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/OrgIncomeDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/OrgIncomeDto.java index 9c716a01..7c07a174 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/OrgIncomeDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/OrgIncomeDto.java @@ -1,11 +1,10 @@ package com.openhis.web.paymentmanage.dto; -import lombok.Data; +import java.math.BigDecimal; + import lombok.Getter; import lombok.Setter; -import java.math.BigDecimal; - @Getter @Setter public class OrgIncomeDto { @@ -29,7 +28,11 @@ public class OrgIncomeDto { * 处置费 */ private BigDecimal serviceFee; - //private BigDecimal receivedAmount; + /** + * 耗材费 + */ + private BigDecimal deviceFee; + // private BigDecimal receivedAmount; /** * 挂号费 */ @@ -46,6 +49,7 @@ public class OrgIncomeDto { this.medFee = BigDecimal.ZERO; this.serviceFee = BigDecimal.ZERO; this.registrationFee = BigDecimal.ZERO; - //this.orgName = orgName; + this.deviceFee = BigDecimal.ZERO; + // this.orgName = orgName; } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/IOrdersGroupPackageAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/IOrdersGroupPackageAppService.java new file mode 100644 index 00000000..35a72b6a --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/IOrdersGroupPackageAppService.java @@ -0,0 +1,61 @@ +package com.openhis.web.personalization.appservice; + +import com.core.common.core.domain.R; +import com.openhis.web.personalization.dto.OrdersGroupPackageDetailQueryDto; +import com.openhis.web.personalization.dto.OrdersGroupPackageQueryDto; +import com.openhis.web.personalization.dto.OrdersGroupPackageSaveDto; +import com.openhis.web.personalization.dto.OrdersGroupPackageUseDto; + +import java.util.List; + +/** + * 组合套餐 service + * + * @author yangmo + * @date 2025-04-10 + */ +public interface IOrdersGroupPackageAppService { + + /** + * 保存组合套餐 + * + * @param ordersGroupPackageSaveDto 保存组合套餐dto + * @param packageTypeEnum 类型枚举 + * @return 结果 + */ + R saveGroupPackage(OrdersGroupPackageSaveDto ordersGroupPackageSaveDto, Integer packageTypeEnum); + + /** + * 查询组合套餐 + * + * @param packageTypeEnum 类型枚举 + * @param searchKey 模糊查询关键字 + * @return 组合套餐 + */ + List getGroupPackage(Integer packageTypeEnum, String searchKey); + + /** + * 查询组合套餐明细 + * + * @param groupPackageId 组合套餐id + * @return 组合套餐明细 + */ + List getGroupPackageDetail(Long groupPackageId); + + /** + * 删除组合套餐 + * + * @param groupPackageId 组合套餐id + * @return 结果 + */ + R delGroupPackage(Long groupPackageId); + + /** + * 查询组合套餐,供开立医嘱使用 + * + * @param organizationId 患者挂号对应的科室id + * @return 组合套餐 + */ + OrdersGroupPackageUseDto getGroupPackageForOrder(Long organizationId); + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/ActivityDeviceAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/ActivityDeviceAppServiceImpl.java index c3ef34b6..469c7211 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/ActivityDeviceAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/ActivityDeviceAppServiceImpl.java @@ -120,13 +120,14 @@ public class ActivityDeviceAppServiceImpl implements IActivityDeviceAppService { .set(ActivityDevice::getRangeCode, activityDeviceDto.getRangeCode()) .set(ActivityDevice::getStatusEnum, activityDeviceDto.getStatusEnum()) .set(ActivityDevice::getDevActTable, activityDeviceDto.getDevActTable()) + .set(ActivityDevice::getUnitCode, activityDeviceDto.getUnitCode()) .eq(ActivityDevice::getId, activityDeviceDto.getId())); return R.ok(); } else { activityDevice.setDevActId(activityDeviceDto.getDevActId()) .setDevActTable(activityDeviceDto.getDevActTable()).setItemNo(activityDeviceDto.getItemNo()) .setQuantity(activityDeviceDto.getQuantity()).setRangeCode(activityDeviceDto.getRangeCode()) - .setTypeCode(activityDeviceDto.getTypeCode()); + .setUnitCode(activityDeviceDto.getUnitCode()).setTypeCode(activityDeviceDto.getTypeCode()); activityDeviceService.save(activityDevice); } return R.ok(activityDevice.getId().toString()); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/OrdersGroupPackageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/OrdersGroupPackageAppServiceImpl.java new file mode 100644 index 00000000..1db5df36 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/OrdersGroupPackageAppServiceImpl.java @@ -0,0 +1,309 @@ +package com.openhis.web.personalization.appservice.impl; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.core.common.core.domain.R; +import com.core.common.exception.ServiceException; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.BindingType; +import com.openhis.common.enums.Whether; +import com.openhis.common.utils.EnumUtils; +import com.openhis.template.domain.OrdersGroupPackage; +import com.openhis.template.domain.OrdersGroupPackageDetail; +import com.openhis.template.service.IOrdersGroupPackageDetailService; +import com.openhis.template.service.IOrdersGroupPackageService; +import com.openhis.web.doctorstation.appservice.IDoctorStationAdviceAppService; +import com.openhis.web.doctorstation.dto.AdviceBaseDto; +import com.openhis.web.personalization.appservice.IOrdersGroupPackageAppService; +import com.openhis.web.personalization.dto.*; +import com.openhis.web.personalization.mapper.OrdersGroupPackageAppMapper; + +/** + * 组合套餐 实现类 + * + * @author yangmo + * @date 2025-04-10 + */ +@Service +public class OrdersGroupPackageAppServiceImpl implements IOrdersGroupPackageAppService { + + @Resource + OrdersGroupPackageAppMapper ordersGroupPackageAppMapper; + + @Resource + IOrdersGroupPackageService ordersGroupPackageService; + + @Resource + IOrdersGroupPackageDetailService ordersGroupPackageDetailService; + + @Resource + IDoctorStationAdviceAppService iDoctorStationAdviceAppService; + + /** + * 保存组合套餐 + * + * @param ordersGroupPackageSaveDto 保存组合套餐dto + * @param packageTypeEnum 类型枚举 + * @return 结果 + */ + @Override + public R saveGroupPackage(OrdersGroupPackageSaveDto ordersGroupPackageSaveDto, Integer packageTypeEnum) { + // 组合套餐id + Long groupPackageId = ordersGroupPackageSaveDto.getGroupPackageId(); + + if (BindingType.PERSONAL.getValue().equals(packageTypeEnum) + && ordersGroupPackageSaveDto.getPractitionerId() == null) { + throw new ServiceException("个人组套需选择人员"); + } else if (BindingType.ORGANIZATION.getValue().equals(packageTypeEnum) + && ordersGroupPackageSaveDto.getOrganizationId() == null) { + throw new ServiceException("科室组套需选择科室"); + } + // 保存主表 + OrdersGroupPackage ordersGroupPackage = new OrdersGroupPackage(); + ordersGroupPackage.setId(groupPackageId); + ordersGroupPackage.setName(ordersGroupPackageSaveDto.getName());// 名称 + ordersGroupPackage.setPackageTypeEnum(packageTypeEnum);// 组套包类型 + ordersGroupPackage.setOrganizationId(ordersGroupPackageSaveDto.getOrganizationId()); // 科室id + ordersGroupPackage.setPractitionerId(ordersGroupPackageSaveDto.getPractitionerId()); // 参与者id + ordersGroupPackageService.saveOrUpdate(ordersGroupPackage); + + // 编辑场景时,先删除原有的明细再新增 + if (groupPackageId != null) { + ordersGroupPackageDetailService.remove(new LambdaQueryWrapper() + .eq(OrdersGroupPackageDetail::getGroupPackageId, groupPackageId)); + } + // 保存明细表 + List detailList = ordersGroupPackageSaveDto.getDetailList(); + OrdersGroupPackageDetail ordersGroupPackageDetail; + for (OrdersGroupPackageDetailSaveDto ordersGroupPackageDetailSaveDto : detailList) { + ordersGroupPackageDetail = new OrdersGroupPackageDetail(); + ordersGroupPackageDetail.setGroupPackageId(ordersGroupPackage.getId()); // 组合套餐id + ordersGroupPackageDetail.setOrderDefinitionId(ordersGroupPackageDetailSaveDto.getOrderDefinitionId()); // 医嘱定义id + ordersGroupPackageDetail.setOrderDefinitionTable(ordersGroupPackageDetailSaveDto.getOrderDefinitionTable());// 医嘱定义表名 + ordersGroupPackageDetail.setQuantity(ordersGroupPackageDetailSaveDto.getQuantity()); // 数量 + ordersGroupPackageDetail.setUnitCode(ordersGroupPackageDetailSaveDto.getUnitCode()); // 单位 + ordersGroupPackageDetailService.save(ordersGroupPackageDetail); + } + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"组合套餐"})); + } + + /** + * 查询组合套餐 + * + * @param packageTypeEnum 类型枚举 + * @param searchKey 模糊查询关键字 + * @return 组合套餐 + */ + @Override + public List getGroupPackage(Integer packageTypeEnum, String searchKey) { + List groupPackage = + ordersGroupPackageAppMapper.getGroupPackage(packageTypeEnum, null, null, searchKey); + for (OrdersGroupPackageQueryDto ordersGroupPackageQueryDto : groupPackage) { + ordersGroupPackageQueryDto.setPackageTypeEnum_enumText( + EnumUtils.getInfoByValue(BindingType.class, ordersGroupPackageQueryDto.getPackageTypeEnum())); + } + return groupPackage; + } + + /** + * 查询组合套餐明细 + * + * @param groupPackageId 组合套餐id + * @return 组合套餐明细 + */ + @Override + public List getGroupPackageDetail(Long groupPackageId) { + return ordersGroupPackageAppMapper.getGroupPackageDetail(List.of(groupPackageId)); + } + + /** + * 删除组合套餐 + * + * @param groupPackageId 组合套餐id + * @return 结果 + */ + @Override + public R delGroupPackage(Long groupPackageId) { + // 删除主表 + ordersGroupPackageService.removeById(groupPackageId); + // 删除明细 + ordersGroupPackageDetailService.remove(new LambdaQueryWrapper() + .eq(OrdersGroupPackageDetail::getGroupPackageId, groupPackageId)); + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00005, new Object[] {"组合套餐"})); + } + + /** + * 查询组合套餐,供开立医嘱使用 + * + * @param organizationId 患者挂号对应的科室id + * @return 组合套餐 + */ + @Override + public OrdersGroupPackageUseDto getGroupPackageForOrder(Long organizationId) { + OrdersGroupPackageUseDto ordersGroupPackageUseDto = new OrdersGroupPackageUseDto(); + // 当前参参与者id + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + // 当前登录账号的科室id + Long orgId = SecurityUtils.getLoginUser().getOrgId(); + + // 个人组套 + List personalGroupPackage = + ordersGroupPackageAppMapper.getGroupPackage(BindingType.PERSONAL.getValue(), null, practitionerId, null); + if (!personalGroupPackage.isEmpty()) { + List personalList = personalGroupPackage.stream().map(queryDto -> { + OrdersGroupPackageDto dto = new OrdersGroupPackageDto(); + dto.setGroupPackageId(queryDto.getGroupPackageId()); + dto.setName(queryDto.getName()); + return dto; + }).collect(Collectors.toList()); + List groupPackageIds = + personalList.stream().map(OrdersGroupPackageDto::getGroupPackageId).collect(Collectors.toList()); + // 明细项 + List personalGroupPackageDetail = + ordersGroupPackageAppMapper.getGroupPackageDetail(groupPackageIds); + // 明细项赋值 + if (!personalGroupPackageDetail.isEmpty()) { + // 医嘱定义id集合 + List orderDefinitionIdParamList = personalGroupPackageDetail.stream() + .map(OrdersGroupPackageDetailQueryDto::getOrderDefinitionId).collect(Collectors.toList()); + // 医嘱下拉详细信息 + List personalRecords = + iDoctorStationAdviceAppService.getAdviceBaseInfo(null, null, null, orderDefinitionIdParamList, + organizationId, 1, 100, Whether.NO.getValue(), List.of(1, 2, 3)).getRecords(); + // 创建AdviceBaseDto的映射,以adviceDefinitionId为key + Map adviceMap = personalRecords.stream().collect(Collectors + .toMap(AdviceBaseDto::getAdviceDefinitionId, advice -> advice, (existing, replacement) -> existing // 如果有重复key,保留第一个 + )); + // 遍历personalGroupPackageDetail,进行匹配赋值 + for (OrdersGroupPackageDetailQueryDto detail : personalGroupPackageDetail) { + Long orderDefinitionId = detail.getOrderDefinitionId(); + if (orderDefinitionId != null) { + AdviceBaseDto matchedAdvice = adviceMap.get(orderDefinitionId); + if (matchedAdvice != null) { + detail.setOrderDetailInfos(matchedAdvice); + } + } + } + // 将明细数据按groupPackageId分组 + Map> detailMap = personalGroupPackageDetail.stream() + .collect(Collectors.groupingBy(OrdersGroupPackageDetailQueryDto::getGroupPackageId)); + personalList.forEach(dto -> { + List details = detailMap.get(dto.getGroupPackageId()); + dto.setDetailList(details != null ? details : Collections.emptyList()); + }); + } + ordersGroupPackageUseDto.setPersonalList(personalList); + } + // 科室组套 + List organizationGroupPackage = + ordersGroupPackageAppMapper.getGroupPackage(BindingType.ORGANIZATION.getValue(), orgId, null, null); + if (!organizationGroupPackage.isEmpty()) { + List organizationList = organizationGroupPackage.stream().map(queryDto -> { + OrdersGroupPackageDto dto = new OrdersGroupPackageDto(); + dto.setGroupPackageId(queryDto.getGroupPackageId()); + dto.setName(queryDto.getName()); + return dto; + }).collect(Collectors.toList()); + List groupPackageIds = + organizationList.stream().map(OrdersGroupPackageDto::getGroupPackageId).collect(Collectors.toList()); + // 明细项 + List organizationGroupPackageDetail = + ordersGroupPackageAppMapper.getGroupPackageDetail(groupPackageIds); + // 明细项赋值 + if (!organizationGroupPackageDetail.isEmpty()) { + // 医嘱定义id集合 + List orderDefinitionIdParamList = organizationGroupPackageDetail.stream() + .map(OrdersGroupPackageDetailQueryDto::getOrderDefinitionId).collect(Collectors.toList()); + // 医嘱下拉详细信息 + List personalRecords = + iDoctorStationAdviceAppService.getAdviceBaseInfo(null, null, null, orderDefinitionIdParamList, + organizationId, 1, 100, Whether.NO.getValue(), List.of(1, 2, 3)).getRecords(); + // 创建AdviceBaseDto的映射,以adviceDefinitionId为key + Map adviceMap = personalRecords.stream().collect(Collectors + .toMap(AdviceBaseDto::getAdviceDefinitionId, advice -> advice, (existing, replacement) -> existing // 如果有重复key,保留第一个 + )); + // 遍历personalGroupPackageDetail,进行匹配赋值 + for (OrdersGroupPackageDetailQueryDto detail : organizationGroupPackageDetail) { + Long orderDefinitionId = detail.getOrderDefinitionId(); + if (orderDefinitionId != null) { + AdviceBaseDto matchedAdvice = adviceMap.get(orderDefinitionId); + if (matchedAdvice != null) { + detail.setOrderDetailInfos(matchedAdvice); + } + } + } + // 将明细数据按groupPackageId分组 + Map> detailMap = organizationGroupPackageDetail.stream() + .collect(Collectors.groupingBy(OrdersGroupPackageDetailQueryDto::getGroupPackageId)); + organizationList.forEach(dto -> { + List details = detailMap.get(dto.getGroupPackageId()); + dto.setDetailList(details != null ? details : Collections.emptyList()); + }); + } + ordersGroupPackageUseDto.setOrganizationList(organizationList); + } + + // 全院组套 + List hospitalGroupPackage = + ordersGroupPackageAppMapper.getGroupPackage(BindingType.HOSPITAL.getValue(), null, null, null); + if (!hospitalGroupPackage.isEmpty()) { + List hospitalList = hospitalGroupPackage.stream().map(queryDto -> { + OrdersGroupPackageDto dto = new OrdersGroupPackageDto(); + dto.setGroupPackageId(queryDto.getGroupPackageId()); + dto.setName(queryDto.getName()); + return dto; + }).collect(Collectors.toList()); + List groupPackageIds = + hospitalList.stream().map(OrdersGroupPackageDto::getGroupPackageId).collect(Collectors.toList()); + // 明细项 + List hospitalGroupPackageDetail = + ordersGroupPackageAppMapper.getGroupPackageDetail(groupPackageIds); + // 明细项赋值 + if (!hospitalGroupPackageDetail.isEmpty()) { + // 医嘱定义id集合 + List orderDefinitionIdParamList = hospitalGroupPackageDetail.stream() + .map(OrdersGroupPackageDetailQueryDto::getOrderDefinitionId).collect(Collectors.toList()); + // 医嘱下拉详细信息 + List personalRecords = + iDoctorStationAdviceAppService.getAdviceBaseInfo(null, null, null, orderDefinitionIdParamList, + organizationId, 1, 100, Whether.NO.getValue(), List.of(1, 2, 3)).getRecords(); + // 创建AdviceBaseDto的映射,以adviceDefinitionId为key + Map adviceMap = personalRecords.stream().collect(Collectors + .toMap(AdviceBaseDto::getAdviceDefinitionId, advice -> advice, (existing, replacement) -> existing // 如果有重复key,保留第一个 + )); + // 遍历personalGroupPackageDetail,进行匹配赋值 + for (OrdersGroupPackageDetailQueryDto detail : hospitalGroupPackageDetail) { + Long orderDefinitionId = detail.getOrderDefinitionId(); + if (orderDefinitionId != null) { + AdviceBaseDto matchedAdvice = adviceMap.get(orderDefinitionId); + if (matchedAdvice != null) { + detail.setOrderDetailInfos(matchedAdvice); + } + } + } + // 将明细数据按groupPackageId分组 + Map> detailMap = hospitalGroupPackageDetail.stream() + .collect(Collectors.groupingBy(OrdersGroupPackageDetailQueryDto::getGroupPackageId)); + hospitalList.forEach(dto -> { + List details = detailMap.get(dto.getGroupPackageId()); + dto.setDetailList(details != null ? details : Collections.emptyList()); + }); + } + ordersGroupPackageUseDto.setHospitalList(hospitalList); + } + + return ordersGroupPackageUseDto; + } + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/controller/OrdersGroupPackageController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/controller/OrdersGroupPackageController.java new file mode 100644 index 00000000..ffc9a02e --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/controller/OrdersGroupPackageController.java @@ -0,0 +1,133 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.personalization.controller; + +import org.springframework.web.bind.annotation.*; + +import com.core.common.core.domain.R; +import com.openhis.common.enums.BindingType; +import com.openhis.web.personalization.appservice.IOrdersGroupPackageAppService; +import com.openhis.web.personalization.dto.OrdersGroupPackageSaveDto; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * 组合套餐 controller + * + * @author yangmo + * @date 2025-04-10 + */ +@RestController +@RequestMapping("/personalization/orders-group-package") +@Slf4j +@AllArgsConstructor +public class OrdersGroupPackageController { + + private final IOrdersGroupPackageAppService ordersGroupPackageAppService; + + /** + * 保存个人组套 + * + * @param ordersGroupPackageSaveDto 组合套餐保存dto + * @return 结果 + */ + @PostMapping(value = "/save-personal") + public R savePersonal(@RequestBody OrdersGroupPackageSaveDto ordersGroupPackageSaveDto) { + return ordersGroupPackageAppService.saveGroupPackage(ordersGroupPackageSaveDto, + BindingType.PERSONAL.getValue()); + } + + /** + * 保存科室组套 + * + * @param ordersGroupPackageSaveDto 组合套餐保存dto + * @return 结果 + */ + @PostMapping(value = "/save-organization") + public R saveOrganization(@RequestBody OrdersGroupPackageSaveDto ordersGroupPackageSaveDto) { + return ordersGroupPackageAppService.saveGroupPackage(ordersGroupPackageSaveDto, + BindingType.ORGANIZATION.getValue()); + } + + /** + * 保存全院组套 + * + * @param ordersGroupPackageSaveDto 组合套餐保存dto + * @return 结果 + */ + @PostMapping(value = "/save-hospital") + public R saveHospital(@RequestBody OrdersGroupPackageSaveDto ordersGroupPackageSaveDto) { + return ordersGroupPackageAppService.saveGroupPackage(ordersGroupPackageSaveDto, + BindingType.HOSPITAL.getValue()); + } + + /** + * 查询个人组套 + * + * @param searchKey 模糊查询关键字 + * @return 个人组套 + */ + @GetMapping(value = "/get-personal") + public R getPersonal(@RequestParam(value = "searchKey", defaultValue = "") String searchKey) { + return R.ok(ordersGroupPackageAppService.getGroupPackage(BindingType.PERSONAL.getValue(), searchKey)); + } + + /** + * 查询科室组套 + * + * @param searchKey 模糊查询关键字 + * @return 科室组套 + */ + @GetMapping(value = "/get-organization") + public R getOrganization(@RequestParam(value = "searchKey", defaultValue = "") String searchKey) { + return R.ok(ordersGroupPackageAppService.getGroupPackage(BindingType.ORGANIZATION.getValue(), searchKey)); + } + + /** + * 查询全院组套 + * + * @param searchKey 模糊查询关键字 + * @return 全院组套 + */ + @GetMapping(value = "/get-hospital") + public R getHospital(@RequestParam(value = "searchKey", defaultValue = "") String searchKey) { + return R.ok(ordersGroupPackageAppService.getGroupPackage(BindingType.HOSPITAL.getValue(), searchKey)); + } + + /** + * 查询组合套餐明细 + * + * @param groupPackageId 组合套餐id + * @return 组合套餐明细 + */ + @GetMapping(value = "/get-group-package-detail") + public R getGroupPackageDetail(@RequestParam Long groupPackageId) { + return R.ok(ordersGroupPackageAppService.getGroupPackageDetail(groupPackageId)); + } + + /** + * 删除组合套餐 + * + * @param groupPackageId 组合套餐id + * @return 结果 + */ + @DeleteMapping(value = "/group-package-detail") + public R delGroupPackage(@RequestParam Long groupPackageId) { + return ordersGroupPackageAppService.delGroupPackage(groupPackageId); + } + + /** + * 查询组合套餐,供开立医嘱使用 + * + * @param organizationId 患者挂号对应的科室id + * @return 组合套餐 + */ + @GetMapping(value = "/group-package-for-order") + public R + getGroupPackageForOrder(@RequestParam(value = "organizationId", defaultValue = "0") Long organizationId) { + return R.ok(ordersGroupPackageAppService.getGroupPackageForOrder(organizationId)); + } + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/ActivityDeviceDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/ActivityDeviceDto.java index 26a60560..11f5af61 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/ActivityDeviceDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/ActivityDeviceDto.java @@ -10,6 +10,8 @@ import com.openhis.common.annotation.Dict; import lombok.Data; import lombok.experimental.Accessors; +import java.math.BigDecimal; + /** * 耗材诊疗绑定 dto * @@ -65,9 +67,14 @@ public class ActivityDeviceDto { private String activityWbStr; /** 耗材数量 */ - private Integer quantity; + private BigDecimal quantity; /** 状态 */ private Integer statusEnum; private String statusEnum_enumText; + + /** 单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDetailQueryDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDetailQueryDto.java new file mode 100644 index 00000000..db2c9f15 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDetailQueryDto.java @@ -0,0 +1,66 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.personalization.dto; + +import java.math.BigDecimal; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.openhis.common.annotation.Dict; +import com.openhis.web.doctorstation.dto.AdviceBaseDto; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 组合套餐明细查询 dto + * + * @author zwh + * @date 2025-04-09 + */ +@Data +@Accessors(chain = true) +public class OrdersGroupPackageDetailQueryDto { + + /** + * 组合套餐id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long groupPackageId; + + /** + * 医嘱定义id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long orderDefinitionId; + + /** + * 医嘱定义表名 + */ + private String orderDefinitionTable; + + /** + * 数量 + */ + private BigDecimal quantity; + + /** + * 单位 + */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + private String unitCodeName; + + /** + * 医嘱名称 + */ + private String orderDefinitionName; + + /** + * 医嘱详细信息 + */ + private AdviceBaseDto orderDetailInfos; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDetailSaveDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDetailSaveDto.java new file mode 100644 index 00000000..e53c1559 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDetailSaveDto.java @@ -0,0 +1,45 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.personalization.dto; + +import java.math.BigDecimal; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 组合套餐明细保存 dto + * + * @author zwh + * @date 2025-04-09 + */ +@Data +@Accessors(chain = true) +public class OrdersGroupPackageDetailSaveDto { + + /** + * 医嘱定义id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long orderDefinitionId; + + /** + * 医嘱定义表名 + */ + private String orderDefinitionTable; + + /** + * 数量 + */ + private BigDecimal quantity; + + /** + * 单位 + */ + private String unitCode; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDto.java new file mode 100644 index 00000000..26f9b22b --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDto.java @@ -0,0 +1,40 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.personalization.dto; + +import java.util.List; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 组合套餐 dto + * + * @author zwh + * @date 2025-04-09 + */ +@Data +@Accessors(chain = true) +public class OrdersGroupPackageDto { + + /** + * 组合套餐id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long groupPackageId; + + /** + * 名称 + */ + private String Name; + + /** + * 明细集合 + */ + private List detailList; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageQueryDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageQueryDto.java new file mode 100644 index 00000000..4ab3f419 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageQueryDto.java @@ -0,0 +1,53 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.personalization.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 组合套餐查询 dto + * + * @author zwh + * @date 2025-04-09 + */ +@Data +@Accessors(chain = true) +public class OrdersGroupPackageQueryDto { + + /** + * 组合套餐id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long groupPackageId; + + /** + * 名称 + */ + private String Name; + + /** + * 类型 + */ + private Integer packageTypeEnum; + private String packageTypeEnum_enumText; + + /** + * 科室 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long organizationId; + private String organizationName; + + /** + * 参与者 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long practitionerId; + private String practitionerName; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageSaveDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageSaveDto.java new file mode 100644 index 00000000..ab89b23d --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageSaveDto.java @@ -0,0 +1,57 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.personalization.dto; + +import java.util.List; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 组合套餐保存 dto + * + * @author zwh + * @date 2025-04-09 + */ +@Data +@Accessors(chain = true) +public class OrdersGroupPackageSaveDto { + + /** + * 组合套餐id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long groupPackageId; + + /** + * 名称 + */ + private String Name; + + /** + * 类型 + */ + private Integer packageTypeEnum; + + /** + * 科室id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long organizationId; + + /** + * 参与者id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long practitionerId; + + /** + * 明细集合 + */ + private List detailList; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageUseDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageUseDto.java new file mode 100644 index 00000000..82385a0f --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageUseDto.java @@ -0,0 +1,36 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.personalization.dto; + +import java.util.List; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 组合套餐(人员使用) dto + * + * @author zwh + * @date 2025-04-09 + */ +@Data +@Accessors(chain = true) +public class OrdersGroupPackageUseDto { + + /** + * 个人组套 + */ + private List personalList; + + /** + * 科室组套 + */ + private List organizationList; + + /** + * 全院组套 + */ + private List hospitalList; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/mapper/OrdersGroupPackageAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/mapper/OrdersGroupPackageAppMapper.java new file mode 100644 index 00000000..aa9baff0 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/mapper/OrdersGroupPackageAppMapper.java @@ -0,0 +1,44 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.personalization.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import com.openhis.web.personalization.dto.OrdersGroupPackageDetailQueryDto; +import com.openhis.web.personalization.dto.OrdersGroupPackageQueryDto; + +/** + * 组合套餐 Mapper + * + * @author zwh + * @date 2025-05-16 + */ +@Repository +public interface OrdersGroupPackageAppMapper { + + /** + * 查询组合套餐 + * + * @param packageTypeEnum 类型枚举 + * @param organizationId 科室id + * @param practitionerId 参与者id + * @param searchKey 模糊查询关键字 + * @return 组合套餐 + */ + List getGroupPackage(@Param("packageTypeEnum") Integer packageTypeEnum, + @Param("organizationId") Long organizationId, @Param("practitionerId") Long practitionerId, + @Param("searchKey") String searchKey); + + /** + * 查询组合套餐明细 + * + * @param groupPackageIds 组合套餐id集合 + * @return 组合套餐明细 + */ + List getGroupPackageDetail(@Param("groupPackageIds") List groupPackageIds); + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryReceiptApprovalServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryReceiptApprovalServiceImpl.java index 40cca160..a7ca0b17 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryReceiptApprovalServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryReceiptApprovalServiceImpl.java @@ -185,11 +185,8 @@ public class PharmacyDispensaryReceiptApprovalServiceImpl implements IPharmacyDi } // 追加追溯码信息 - boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), SupplyType.PURCHASE_STOCKIN.getValue()); - if (!flg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } // 调用医保商品采购接口 todo 药房相关医保接口未对应 String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关 @@ -275,11 +272,9 @@ public class PharmacyDispensaryReceiptApprovalServiceImpl implements IPharmacyDi } } // 追加追溯码信息 - boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), SupplyType.PURCHASE_RETURN.getValue()); - if (!flg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } + // 调用医保采购退货接口 String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关 if (Whether.YES.getCode().equals(ybSwitch)) { @@ -642,11 +637,9 @@ public class PharmacyDispensaryReceiptApprovalServiceImpl implements IPharmacyDi inventoryItemService.stockIn(inventoryItemList); } // 追加追溯码信息 - boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), SupplyType.PURCHASE_TRANSFERIN.getValue()); - if (!flg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } + } return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); @@ -721,11 +714,9 @@ public class PharmacyDispensaryReceiptApprovalServiceImpl implements IPharmacyDi } } // 追加追溯码信息 - boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), SupplyType.PURCHASE_TRANSFEROUT.getValue()); - if (!flg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } + } return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseReceiptApprovalServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseReceiptApprovalServiceImpl.java index 9432b59f..e644c987 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseReceiptApprovalServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseReceiptApprovalServiceImpl.java @@ -160,7 +160,6 @@ public class PharmacyWarehouseReceiptApprovalServiceImpl implements IPharmacyWar // 返回信息 String returnMsg = null; if (!supplyItemDetailList.isEmpty()) { - InventoryItem inventoryItemPurpose = null; // 新增库存信息 List supplyList = new ArrayList<>(); for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) { @@ -168,7 +167,7 @@ public class PharmacyWarehouseReceiptApprovalServiceImpl implements IPharmacyWar List inventoryItemList = inventoryItemService.selectInventoryByItemId( supplyItemDetailDto.getItemId(), supplyItemDetailDto.getLotNumber(), supplyItemDetailDto.getPurposeLocationId(), SecurityUtils.getLoginUser().getTenantId()); - + InventoryItem inventoryItemPurpose = null; if (!inventoryItemList.isEmpty()) { inventoryItemPurpose = inventoryItemList.get(0); } @@ -210,11 +209,8 @@ public class PharmacyWarehouseReceiptApprovalServiceImpl implements IPharmacyWar } // 追加追溯码信息 - boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), SupplyType.CABINET_STOCKIN.getValue()); - if (!flg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } // 调用医保商品采购接口 todo 药库相关医保接口未对应 String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关 @@ -316,11 +312,8 @@ public class PharmacyWarehouseReceiptApprovalServiceImpl implements IPharmacyWar } } // 追加追溯码信息 - boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), SupplyType.CABINET_RETURN.getValue()); - if (!flg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } // 调用医保采购退货接口 String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关 @@ -401,11 +394,9 @@ public class PharmacyWarehouseReceiptApprovalServiceImpl implements IPharmacyWar } } // 追加追溯码信息 - boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), SupplyType.CABINET_STOCKOUT.getValue()); - if (!flg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } + } return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); @@ -482,11 +473,10 @@ public class PharmacyWarehouseReceiptApprovalServiceImpl implements IPharmacyWar inventoryItemService.stockIn(inventoryItemList); } // 追加追溯码信息 - boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), + traceNoAppService + .addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), SupplyType.CABINET_PRODUCT_RETURN.getValue()); - if (!flg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } + } return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IChineseMedicineDispenseAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IChineseMedicineDispenseAppService.java deleted file mode 100644 index 8e06fd86..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IChineseMedicineDispenseAppService.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.openhis.web.pharmacymanage.appservice; - -import javax.servlet.http.HttpServletRequest; - -import com.core.common.core.domain.R; -import com.openhis.web.pharmacymanage.dto.EncounterInfoSearchParam; - -/** - * 处方管理 应用实现接口 - * - * @author wangyang - * @date 2025/3/18 - */ -public interface IChineseMedicineDispenseAppService { - - /** - * 页面初始化 - * - * @return 初始化信息 - */ - R init(); - - /** - * 分页查询就诊病人列表 - * - * @param encounterInfoSearchParam 查询条件 - * @param searchKey 模糊查询关键字 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @param request 请求数据 - * @return 就诊病人分页列表 - */ - R getEncounterInfoListPage(EncounterInfoSearchParam encounterInfoSearchParam, String searchKey, Integer pageNo, - Integer pageSize, HttpServletRequest request); - - /** - * 查询处方单列表 - * - * @param encounterId 就诊号 - * @return 处方单列表 - */ - R getPrescriptionInfo(Long encounterId); - - /** - * 配药 - * - * @param prescriptionNo 处方号 - * @param preparerId 配药人 - * @return 处理结果 - */ - R prepare(String prescriptionNo, Long preparerId); - - /** - * 处方单核对发药 - * - * @param prescriptionNo 处方号 - * @return 处理结果 - */ - R medicineDispense(String prescriptionNo); - - /** - * 处方单作废 - * - * @param prescriptionNo 处方号 - * @param notPerformedReasonEnum 未发药原因 - * @return 处理结果 - */ - R medicineCancel(String prescriptionNo, Integer notPerformedReasonEnum); -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IDeviceDispenseAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IDeviceDispenseAppService.java deleted file mode 100644 index dd0f1542..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IDeviceDispenseAppService.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.openhis.web.pharmacymanage.appservice; - -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import com.core.common.core.domain.R; -import com.openhis.web.pharmacymanage.dto.DispenseDeviceDto; -import com.openhis.web.pharmacymanage.dto.EncounterInfoPageDto; -import com.openhis.web.pharmacymanage.dto.PrescriptionDeviceInfoDto; - -/** - * 材料发送 应用实现接口 - * - * @author yuxj - * @date 2025/8/21 - */ -public interface IDeviceDispenseAppService { - - /** - * 页面初始化 - * - * @return 初始化信息 - */ - R init(); - - /** - * 分页查询发药病人列表 - * - * @param encounterInfoPageDto 查询条件 - * @param searchKey 模糊查询关键字 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @param request 请求数据 - * @return 发药病人列表 - */ - R getEncounterInfoListPage(EncounterInfoPageDto encounterInfoPageDto, String searchKey, Integer pageNo, - Integer pageSize, HttpServletRequest request); - - /** - * 处方单查询 - * - * @param prescriptionDeviceInfoDto 查询信息 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @return 处方单 - */ - R getPrescriptionInfo(PrescriptionDeviceInfoDto prescriptionDeviceInfoDto, Integer pageNo, Integer pageSize); - - /** - * 处方单核对发药 - * - * @param dispenseDeviceList 发药信息 - * @return 处理结果 - */ - R deviceDispense(List dispenseDeviceList); - - /** - * 作废 - * - * @param dispenseDeviceList 作废信息 - * @return 处理结果 - */ - R deviceCancel(List dispenseDeviceList); -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IInpatientMedicineDispenseAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IInpatientMedicineDispenseAppService.java deleted file mode 100644 index 3c15899e..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IInpatientMedicineDispenseAppService.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.openhis.web.pharmacymanage.appservice;//package com.openhis.web.pharmacymanage.appservice; - -import com.core.common.core.domain.R; -import com.openhis.web.pharmacymanage.dto.DispenseMedicineDto; -import com.openhis.web.pharmacymanage.dto.EncounterInfoPageDto; - -import javax.servlet.http.HttpServletRequest; -import java.util.List; - -/** - * 住院发药 应用实现接口 - * - * @author yuxj - * @date 2025/6/3 - */ -public interface IInpatientMedicineDispenseAppService { - - /** - * 分页查询发药病人列表 - * - * @param encounterInfoPageDto 查询条件 - * @param searchKey 模糊查询关键字 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @param request 请求数据 - * @return 发药病人列表 - */ - R getEncounterInfoListPage(EncounterInfoPageDto encounterInfoPageDto, String searchKey, Integer pageNo, - Integer pageSize, HttpServletRequest request); - -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IInpatientMedicineSummaryDispenseAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IInpatientMedicineSummaryDispenseAppService.java index fc0d9c51..3f429999 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IInpatientMedicineSummaryDispenseAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IInpatientMedicineSummaryDispenseAppService.java @@ -3,7 +3,6 @@ package com.openhis.web.pharmacymanage.appservice; import javax.servlet.http.HttpServletRequest; import com.core.common.core.domain.R; -import com.openhis.web.pharmacymanage.dto.DispenseMedicineDto; import com.openhis.web.pharmacymanage.dto.InpatientMedicineSearchParam; import java.util.List; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicalConsumablesDispenseAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicalConsumablesDispenseAppService.java deleted file mode 100644 index 315548c6..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicalConsumablesDispenseAppService.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.openhis.web.pharmacymanage.appservice; - -import java.util.List; - -import com.core.common.core.domain.R; - -/** - * 处方管理 应用实现接口 - * - * @author zwh - * @date 2025/6/20 - */ -public interface IMedicalConsumablesDispenseAppService { - - /** - * 发放耗材 - * - * @param chargeItemIds 耗材收费单ids - * @return 处理结果 - */ - R dispenseMedicalConsumables(List chargeItemIds); -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicalDeviceDispenseAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicalDeviceDispenseAppService.java new file mode 100644 index 00000000..2afd2a1e --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicalDeviceDispenseAppService.java @@ -0,0 +1,74 @@ +package com.openhis.web.pharmacymanage.appservice; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.pharmacymanage.dto.DispenseItemDto; +import com.openhis.web.pharmacymanage.dto.EncounterInfoDto; +import com.openhis.web.pharmacymanage.dto.EncounterInfoSearchParam; +import com.openhis.web.pharmacymanage.dto.ItemDispenseOrderDto; + +/** + * 材料发送 应用实现接口 + * + * @author yuxj + * @date 2025/8/21 + */ +public interface IMedicalDeviceDispenseAppService { + + /** + * 页面初始化 + * + * @return 初始化信息 + */ + R init(); + + /** + * 分页查询病人列表 + * + * @param encounterInfoSearchParam 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request 请求数据 + * @return 病人列表 + */ + R getEncounterInfoListPage(EncounterInfoSearchParam encounterInfoSearchParam, String searchKey, Integer pageNo, Integer pageSize, + HttpServletRequest request); + + /** + * 发耗材单查询 + * + * @param itemDispenseOrderDto 查询信息 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 发耗材单 + */ + R getDeviceDispenseOrderList(ItemDispenseOrderDto itemDispenseOrderDto, Integer pageNo, Integer pageSize); + + /** + * 核对发耗材 + * + * @param dispenseDeviceList 发耗材信息 + * @return 处理结果 + */ + R deviceDispense(List dispenseDeviceList); + + /** + * 发放耗材 + * + * @param chargeItemIds 耗材收费单ids + * @return 处理结果 + */ + R dispenseMedicalConsumables(List chargeItemIds); + + /** + * 作废 + * + * @param dispenseDeviceList 作废信息 + * @return 处理结果 + */ + R deviceCancel(List dispenseDeviceList); +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IReturnMedicineAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IReturnMedicineAppService.java index 8cee8334..312633d7 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IReturnMedicineAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IReturnMedicineAppService.java @@ -5,7 +5,7 @@ import java.util.List; import javax.servlet.http.HttpServletRequest; import com.core.common.core.domain.R; -import com.openhis.web.pharmacymanage.dto.EncounterInfoPageDto; +import com.openhis.web.pharmacymanage.dto.EncounterInfoDto; import com.openhis.web.pharmacymanage.dto.ReturnMedicineDto; /** @@ -26,15 +26,15 @@ public interface IReturnMedicineAppService { /** * 查询退药患者分页列表 * - * @param encounterInfoPageDto 查询条件 + * @param encounterInfoDto 查询条件 * @param searchKey 模糊查询关键字 * @param pageNo 当前页码 * @param pageSize 查询条数 * @param request 请求数据 * @return 退药患者分页列表 */ - R getReturnMedicinePatientPage(EncounterInfoPageDto encounterInfoPageDto, String searchKey, Integer pageNo, - Integer pageSize, HttpServletRequest request); + R getReturnMedicinePatientPage(EncounterInfoDto encounterInfoDto, String searchKey, Integer pageNo, + Integer pageSize, HttpServletRequest request); /** * 查询退药信息 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IWesternMedicineDispenseAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IWesternMedicineDispenseAppService.java index 279f4104..77bc991d 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IWesternMedicineDispenseAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IWesternMedicineDispenseAppService.java @@ -5,9 +5,9 @@ import java.util.List; import javax.servlet.http.HttpServletRequest; import com.core.common.core.domain.R; -import com.openhis.web.pharmacymanage.dto.DispenseMedicineDto; -import com.openhis.web.pharmacymanage.dto.EncounterInfoPageDto; -import com.openhis.web.pharmacymanage.dto.PrescriptionMedicineInfoDto; +import com.openhis.web.pharmacymanage.dto.DispenseItemDto; +import com.openhis.web.pharmacymanage.dto.EncounterInfoSearchParam; +import com.openhis.web.pharmacymanage.dto.ItemDispenseOrderDto; /** * 处方管理 应用实现接口 @@ -25,27 +25,27 @@ public interface IWesternMedicineDispenseAppService { R init(); /** - * 分页查询发药病人列表 + * 分页查询病人列表 * - * @param encounterInfoPageDto 查询条件 + * @param encounterInfoSearchParam 查询条件 * @param searchKey 模糊查询关键字 * @param pageNo 当前页码 * @param pageSize 查询条数 * @param request 请求数据 - * @return 发药病人列表 + * @return 病人列表 */ - R getEncounterInfoListPage(EncounterInfoPageDto encounterInfoPageDto, String searchKey, Integer pageNo, + R getEncounterInfoListPage(EncounterInfoSearchParam encounterInfoSearchParam, String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request); /** * 处方单查询 * - * @param prescriptionMedicineInfoDto 查询信息 + * @param itemDispenseOrderDto 查询信息 * @param pageNo 当前页码 * @param pageSize 查询条数 * @return 处方单 */ - R getPrescriptionInfo(PrescriptionMedicineInfoDto prescriptionMedicineInfoDto, Integer pageNo, Integer pageSize); + R getMedicineDispenseOrderList(ItemDispenseOrderDto itemDispenseOrderDto, Integer pageNo, Integer pageSize); /** * 配药 @@ -53,7 +53,7 @@ public interface IWesternMedicineDispenseAppService { * @param dispenseMedicineList 配药信息 * @return 处理结果 */ - R medicinePrepare(List dispenseMedicineList); + R medicinePrepare(List dispenseMedicineList); /** * 处方单核对发药 @@ -61,7 +61,7 @@ public interface IWesternMedicineDispenseAppService { * @param dispenseMedicineList 发药信息 * @return 处理结果 */ - R medicineDispense(List dispenseMedicineList); + R medicineDispense(List dispenseMedicineList); /** * 作废 @@ -69,18 +69,5 @@ public interface IWesternMedicineDispenseAppService { * @param dispenseMedicineList 作废信息 * @return 处理结果 */ - R medicineCancel(List dispenseMedicineList); - - /** - * 处方详情 - * - * @param locationId 库房id - * @param startTime 开始时间 - * @param endTime 结束时间 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @return 单据详情 - */ - R getMonthlySettlementPatientInfoList(Long locationId, String startTime, String endTime,Integer pageNo, Integer pageSize); - + R medicineCancel(List dispenseMedicineList); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/DeviceDispenseAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/DeviceDispenseAppServiceImpl.java deleted file mode 100644 index c6972c9d..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/DeviceDispenseAppServiceImpl.java +++ /dev/null @@ -1,443 +0,0 @@ -package com.openhis.web.pharmacymanage.appservice.impl; - -import java.math.BigDecimal; -import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -import com.openhis.web.pharmacymanage.appservice.IDeviceDispenseAppService; -import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper; -import com.openhis.workflow.domain.DeviceDispense; -import com.openhis.workflow.service.IDeviceDispenseService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.core.common.core.domain.R; -import com.core.common.core.domain.entity.SysDictData; -import com.core.common.exception.ServiceException; -import com.core.common.utils.*; -import com.core.system.mapper.SysDictDataMapper; -import com.openhis.administration.domain.*; -import com.openhis.administration.service.*; -import com.openhis.common.constant.CommonConstants; -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.web.pharmacymanage.dto.*; -import com.openhis.web.pharmacymanage.mapper.IDeviceDispenseMapper; -import com.openhis.workflow.domain.InventoryItem; -import com.openhis.workflow.service.IInventoryItemService; - -/** - * 材料发送 应用实现类 - * - * @author yuxj - * @date 2025/8/21 - */ -@Service -public class DeviceDispenseAppServiceImpl implements IDeviceDispenseAppService { - - @Autowired - private IOrganizationService organizationService; - - @Autowired - private IDeviceDispenseService deviceDispenseService; - - @Autowired - private IInventoryItemService iInventoryItemService; - - @Autowired - private IDeviceDispenseMapper deviceDispenseMapper; - - @Autowired - private ReturnMedicineMapper returnMedicineMapper; - - @Resource - private SysDictDataMapper sysDictDataMapper; - - @Autowired - private ITraceNoManageService traceNoManageService; - @Resource - private IWesternMedicineDispenseAppServiceImpl westernMedicineDispenseAppService; - - /** - * 获取页面初始化信息 - * - * @return 初始化信息 - */ - @Override - public R init() { - - DispenseInitDto initDto = new DispenseInitDto(); - - // 获取科室下拉选列表 - List organizationList = - organizationService.getList(OrganizationType.DEPARTMENT.getValue(), OrganizationClass.CLINIC.getValue()); - List organizationOptions = organizationList.stream() - .map(organization -> new DispenseInitDto.DepartmentOption(organization.getId(), organization.getName())) - .collect(Collectors.toList()); - - // 获取配药人下拉选列表 - List preparerDoctorList = - deviceDispenseMapper.getPreparerDoctorList(PractitionerRoles.PHARMACIST.getCode()); - List preparerDoctorOptions = preparerDoctorList.stream() - .map(practitioner -> new DispenseInitDto.PreparerDoctorOption(practitioner.getId(), practitioner.getName())) - .collect(Collectors.toList()); - - // 未发药原因下拉选列表 - List notPerformedReasonOptions = - Stream.of(NotPerformedReasonEnum.values()) - .map(notPerformedReason -> new DispenseInitDto.NotPerformedReasonOption(notPerformedReason.getValue(), - notPerformedReason.getInfo())) - .collect(Collectors.toList()); - - // 发药状态 - List dispenseStatusOptions = new ArrayList<>(); - dispenseStatusOptions.add(new DispenseInitDto.DispenseStatusOption(DispenseStatus.IN_PROGRESS.getValue(), - DispenseStatus.IN_PROGRESS.getInfo())); - dispenseStatusOptions.add(new DispenseInitDto.DispenseStatusOption(DispenseStatus.COMPLETED.getValue(), - DispenseStatus.COMPLETED.getInfo())); - - initDto.setDepartmentOptions(organizationOptions).setNotPerformedReasonOptions(notPerformedReasonOptions) - .setDispenseStatusOptions(dispenseStatusOptions).setPreparerDoctorOptions(preparerDoctorOptions); - return R.ok(initDto); - } - - /** - * 分页查询发药病人列表 - * - * @param encounterInfoPageDto 查询条件 - * @param searchKey 模糊查询关键字 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @param request 请求数据 - * @return 发药病人列表 - */ - @Override - public R getEncounterInfoListPage(EncounterInfoPageDto encounterInfoPageDto, String searchKey, Integer pageNo, - Integer pageSize, HttpServletRequest request) { - // 发药状态初始化 - Integer statusEnum = encounterInfoPageDto.getStatusEnum(); - encounterInfoPageDto.setStatusEnum(null); - // 构建查询条件 - QueryWrapper queryWrapper = - HisQueryUtils.buildQueryWrapper(encounterInfoPageDto, searchKey, - new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.idCard, - CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientWbStr)), - request); - // 查询就诊病人列表 - Page encounterInfoPage = deviceDispenseMapper.selectEncounterInfoListPage( - new Page<>(pageNo, pageSize), queryWrapper, statusEnum, DispenseStatus.IN_PROGRESS.getValue(), - DispenseStatus.COMPLETED.getValue(), DispenseStatus.PREPARATION.getValue(), - DispenseStatus.PREPARED.getValue(), EncounterClass.AMB.getValue()); - encounterInfoPage.getRecords().forEach(encounterInfo -> { - // 性别 - encounterInfo.setGenderEnum_enumText( - EnumUtils.getInfoByValue(AdministrativeGender.class, encounterInfo.getGenderEnum())); - // 发药状态 - encounterInfo - .setStatusEnum_enumText(EnumUtils.getInfoByValue(DispenseStatus.class, encounterInfo.getStatusEnum())); - }); - return R.ok(encounterInfoPage); - } - - /** - * 处方单查询 - * - * @param prescriptionDeviceInfoDto 查询信息 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @return 处方单 - */ - @Override - public R getPrescriptionInfo(PrescriptionDeviceInfoDto prescriptionDeviceInfoDto, Integer pageNo, - Integer pageSize) { - // 发药状态初始化 - Integer dispenseStatus = prescriptionDeviceInfoDto.getStatusEnum(); - prescriptionDeviceInfoDto.setStatusEnum(null); - - // 构建查询条件 - QueryWrapper queryWrapper = - HisQueryUtils.buildQueryWrapper(prescriptionDeviceInfoDto, null, null, null); - - // 获取所属医院id - Long hospitalId = SecurityUtils.getLoginUser().getHospitalId(); - // 患者基本信息查询 - PrescriptionPatientInfoDto prescriptionPatientInfoDto = deviceDispenseMapper - .selectPrescriptionPatientInfo(prescriptionDeviceInfoDto.getEncounterId(), hospitalId); - - // 年龄 - prescriptionPatientInfoDto.setAge(AgeCalculatorUtil.getAge(prescriptionPatientInfoDto.getBirthDate())); - // 性别 - prescriptionPatientInfoDto.setGenderEnum_enumText( - EnumUtils.getInfoByValue(AdministrativeGender.class, prescriptionPatientInfoDto.getGenderEnum())); - // 合同类型 - if (StringUtils.isNotNull(prescriptionPatientInfoDto.getCategoryEnum())) { - prescriptionPatientInfoDto.setCategoryEnum_enumText( - EnumUtils.getInfoByValue(FinCategory.class, prescriptionPatientInfoDto.getCategoryEnum())); - } - - // 处方单信息查询 - - Page prescriptionDeviceInfoPage = - deviceDispenseMapper.selectPrescriptionDeviceInfoList(new Page<>(pageNo, pageSize), queryWrapper, - DispenseStatus.IN_PROGRESS.getValue(), DispenseStatus.COMPLETED.getValue(), - DispenseStatus.PREPARATION.getValue(), DispenseStatus.PREPARED.getValue(), dispenseStatus); - - // 查询字典值 - List unitCodeList = sysDictDataMapper.selectDictDataByType("unit_code"); - Map unitCodeLabel = unitCodeList.stream().collect( - Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel, (oldValue, newValue) -> oldValue // 如果有重复键,保留旧值 - )); - List methodCodeList = sysDictDataMapper.selectDictDataByType("method_code"); - Map methodCodeLabel = methodCodeList.stream().collect( - Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel, (oldValue, newValue) -> oldValue // 如果有重复键,保留旧值 - )); - - List prescriptionDeviceInfoList = prescriptionDeviceInfoPage.getRecords(); - Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel, (oldValue, newValue) -> oldValue // 如果有重复键,保留旧值 - ); - prescriptionDeviceInfoList.forEach(prescriptionDeviceInfo -> { - // 发药状态 - prescriptionDeviceInfo.setStatusEnum_enumText( - EnumUtils.getInfoByValue(DispenseStatus.class, prescriptionDeviceInfo.getStatusEnum())); -// // 匹配剂量单位字典文本 -// String doseUnitCode = prescriptionDeviceInfo.getDoseUnitCode(); -// String doseUnitLabel = unitCodeLabel.getOrDefault(doseUnitCode, ""); -// prescriptionDeviceInfo.setDoseUnitCode_dictText(doseUnitLabel); - // 匹配单位字典文本 - String unitCode = prescriptionDeviceInfo.getUnitCode(); - String unitLabel = unitCodeLabel.getOrDefault(unitCode, ""); - prescriptionDeviceInfo.setUnitCode_dictText(unitLabel); -// // 匹配用法字典文本 -// String methodCode = prescriptionDeviceInfo.getMethodCode(); -// String methodLabel = methodCodeLabel.getOrDefault(methodCode, ""); -// prescriptionDeviceInfo.setMethodCode_dictText(methodLabel); - -// switch (prescriptionDeviceInfo.getPharmacologyCategoryCode()) { -// case "2": // 麻醉药品 -// prescriptionDeviceInfo.setPharmacologyCategoryCode_Text("麻醉"); -// case "3": // 毒性药品 -// prescriptionDeviceInfo.setPharmacologyCategoryCode_Text("毒性"); -// case "4": // 一类精神药 -// prescriptionDeviceInfo.setPharmacologyCategoryCode_Text("精一"); -// case "5": // 二类精神药 -// prescriptionDeviceInfo.setPharmacologyCategoryCode_Text("精二"); -// default: // 普通药品 -// prescriptionDeviceInfo.setPharmacologyCategoryCode_Text("普通"); -// } - - // 判断是否为慢病 - if (EncounterYbClass.CHRONIC_DISEASE_OUTPATIENT.getCode() - .equals(prescriptionDeviceInfo.getMedTypeCode())) { - prescriptionDeviceInfo.setChronicDisease(Whether.YES.getInfo()); - } else { - prescriptionDeviceInfo.setChronicDisease(Whether.NO.getInfo()); - } -// // 皮试flag为是时 -// if (Whether.YES.getValue().equals(prescriptionDeviceInfo.getSkinTestFlag())) { -// // 获取皮试结果 -// ServiceRequest serReqObj = -// serviceRequestService.selectByMedRequestId(prescriptionDeviceInfo.getRequestId()); -// if (serReqObj != null) { -// Integer clinicalStatus = allergyIntoleranceService.getPsResultByRequestId(serReqObj.getId()); -// prescriptionDeviceInfo.setPsResult(ClinicalStatus.getByValue(clinicalStatus).getInfo()); -// } -// } else { -// prescriptionDeviceInfo.setPsResult("无"); -// } - - }); - - // 计算合计金额 - if (!prescriptionDeviceInfoList.isEmpty()) { - double totalPrice = 0d; - for (PrescriptionDeviceInfoDto item : prescriptionDeviceInfoList) { - totalPrice += item.getTotalPrice().doubleValue(); - } - prescriptionPatientInfoDto.setTotalPrice(totalPrice); - } - PrescriptionInfoDto prescriptionInfoDto = new PrescriptionInfoDto(); - prescriptionInfoDto.setPrescriptionPatientInfoDto(prescriptionPatientInfoDto); - prescriptionInfoDto.setPrescriptionDeviceInfoDtoList(prescriptionDeviceInfoList); - return R.ok(prescriptionInfoDto); - } - - /** - * 处方单核对发药 - * - * @param dispenseDeviceList 发药信息 - * @return 处理结果 - */ - @Override - public R deviceDispense(List dispenseDeviceList) { - List inventoryItemList = new ArrayList<>(); - // 获取发药单id列表 - List devDispenseIdList = - dispenseDeviceList.stream().map(DispenseDeviceDto::getDispenseId).collect(Collectors.toList()); - // 获取药品申请id列表 - List devRequestIdList = - dispenseDeviceList.stream().map(DispenseDeviceDto::getRequestId).collect(Collectors.toList()); - // 获取库存信息 - List inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null, - CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); - // 按每个药品分组 - Map> groupedByItemId = - inventoryList.stream().collect(Collectors.groupingBy(InventoryDto::getItemId)); - // 遍历每个分组校验库存状态 - for (Map.Entry> entry : groupedByItemId.entrySet()) { - List groupItems = entry.getValue(); - if (groupItems.stream().map(InventoryDto::getInventoryStatusEnum) - .allMatch(x -> x.equals(PublicationStatus.RETIRED.getValue()))) { - // 库存停供校验 - return R.fail(groupItems.get(0).getItemName() + "库存已停供"); - } - } - if (!inventoryList.isEmpty()) { - for (InventoryDto inventoryDto : inventoryList) { - if (PublicationStatus.ACTIVE.getValue().equals(inventoryDto.getInventoryStatusEnum())) { - InventoryItem inventoryItem = new InventoryItem(); - // 库存数量判定 - if (inventoryDto.getDispenseUnit().equals(inventoryDto.getInventoryUnitCode())) { - // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量 - BigDecimal quantity = inventoryDto.getInventoryQuantity().subtract(inventoryDto.getQuantity()); - // 库存数量判定 - if (quantity.compareTo(BigDecimal.ZERO) < 0) { - // 库存数量不足 - return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); - } else { - inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); - } - } else { - // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量) - BigDecimal quantity = inventoryDto.getInventoryQuantity() - .subtract(inventoryDto.getPartPercent().multiply(inventoryDto.getQuantity())); - // 库存数量判定 - if (quantity.compareTo(BigDecimal.ZERO) < 0) { - // 库存数量不足 - return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); - } else { - inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); - } - } - inventoryItemList.add(inventoryItem); - } - } - } - // 材料发放信息查询 - List dispenseList = deviceDispenseService - .list(new LambdaQueryWrapper().in(DeviceDispense::getId, devDispenseIdList)); - // 追溯码列表 - List tracesNoManageList = new ArrayList<>(); - TraceNoManage traceNoManage; - if (dispenseList != null) { - if (dispenseList.stream().map(DeviceDispense::getStatusEnum) - .anyMatch(x -> x.equals(DispenseStatus.COMPLETED.getValue()))) { - throw new ServiceException("材料已发放,请勿重复发放"); - } else { - for (DeviceDispense deviceDispense : dispenseList) { - // 材料发放状态 - deviceDispense.setStatusEnum(DispenseStatus.COMPLETED.getValue()); - // 发药数量 - deviceDispense.setDispenseQuantity(deviceDispense.getQuantity()); - // 发药时间 - deviceDispense.setDispenseTime(DateUtils.getNowDate()); - // 发药人 - deviceDispense.setPerformerId(SecurityUtils.getLoginUser().getPractitionerId()); - // 根据数量设置追溯码 - deviceDispense.setTraceNo(String.join(CommonConstants.Common.COMMA, - Collections.nCopies(deviceDispense.getQuantity(), CommonConstants.Common.DEV_TRACE_NO))); - // 使用逗号分割追溯码并转换为List - String[] traceNoList = deviceDispense.getTraceNo().split(CommonConstants.Common.COMMA); - for (String item : traceNoList) { - traceNoManage = new TraceNoManage(); - // 追溯码处理 - traceNoManage.setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION) - // 项目id - .setItemId(deviceDispense.getDeviceDefId()) - // 仓库类型 - .setLocationTypeEnum(LocationForm.WAREHOUSE.getValue()) - // 仓库 - .setLocationId(deviceDispense.getLocationId()) - // 产品批号 - .setLotNumber(deviceDispense.getLotNumber()) - // 追溯码 - .setTraceNo(item) - // 追溯码状态 - .setStatusEnum(TraceNoStatus.OUT.getValue()) - // 追溯码单位 - .setUnitCode(deviceDispense.getUnitCode()) - // 操作类型 - .setOperationType(SupplyType.DISPENSE_MEDICATION.getValue()); - tracesNoManageList.add(traceNoManage); - } - } - // 药品发放更新 - deviceDispenseService.updateBatchById(dispenseList); - } - } else { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } - // 库存更新 - iInventoryItemService.updateBatchById(inventoryItemList); - // 追溯码管理表数据追加 - boolean result = traceNoManageService.saveBatch(tracesNoManageList); - if (!result) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } - // 返回信息 - String returnMsg = null; - // 调用医保商品销售接口 - String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); - // 医保开关 - if (Whether.YES.getCode().equals(ybSwitch)) { - List uploadFailedNoList = - westernMedicineDispenseAppService.ybMedicineIntegrated(null, devDispenseIdList); - if (uploadFailedNoList != null) { - returnMsg = "3505商品销售上传错误,错误项目编码" + uploadFailedNoList; - } else { - returnMsg = "3505商品销售上传成功"; - } - } - - return R.ok(returnMsg, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); - } - - /** - * 作废 - * - * @param dispenseDeviceList 作废信息 - * @return 处理结果 - */ - @Override - public R deviceCancel(List dispenseDeviceList) { - // 获取发材料单id列表 - List devDispenseIdList = - dispenseDeviceList.stream().map(DispenseDeviceDto::getDispenseId).collect(Collectors.toList()); - // 材料发放信息查询 - List dispenseList = deviceDispenseService - .list(new LambdaQueryWrapper().in(DeviceDispense::getId, devDispenseIdList)); - if (dispenseList != null) { - for (DeviceDispense medicationDispense : dispenseList) { - // 材料发放状态 - medicationDispense.setStatusEnum(DispenseStatus.DECLINED.getValue()); - // 未发药原因 - medicationDispense.setNotPerformedReasonEnum(dispenseDeviceList.get(0).getNotPerformedReasonEnum()); - } - // 药品发放更新 - deviceDispenseService.updateBatchById(dispenseList); - } else { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } - return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); - } - -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IChineseMedicineDispenseAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IChineseMedicineDispenseAppServiceImpl.java deleted file mode 100644 index a8862749..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IChineseMedicineDispenseAppServiceImpl.java +++ /dev/null @@ -1,329 +0,0 @@ -package com.openhis.web.pharmacymanage.appservice.impl; - -import java.math.BigDecimal; -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.Stream; - -import javax.servlet.http.HttpServletRequest; - -import com.openhis.yb.service.YbManager; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.core.common.core.domain.R; -import com.core.common.utils.*; -import com.openhis.administration.domain.Organization; -import com.openhis.administration.service.IOrganizationService; -import com.openhis.common.constant.CommonConstants; -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.MedicationDispense; -import com.openhis.medication.service.IMedicationDispenseService; -import com.openhis.web.pharmacymanage.appservice.IChineseMedicineDispenseAppService; -import com.openhis.web.pharmacymanage.dto.*; -import com.openhis.web.pharmacymanage.mapper.ChineseMedicineDispenseMapper; -import com.openhis.workflow.domain.InventoryItem; -import com.openhis.workflow.service.IInventoryItemService; - -/** - * 中药发放 应用实现类 - * - * @author wangyang - * @date 2025/3/14 - */ -@Service -public class IChineseMedicineDispenseAppServiceImpl implements IChineseMedicineDispenseAppService { - - @Autowired - private IOrganizationService iOrganizationService; - - @Autowired - IMedicationDispenseService iMedicationDispenseService; - - @Autowired - IInventoryItemService iInventoryItemService; - - @Autowired - ChineseMedicineDispenseMapper chineseMedicineDispenseMapper; - - @Autowired - YbManager ybService; - - /** - * 获取页面初始化信息 - * - * @return 初始化信息 - */ - @Override - public R init() { - - DispenseInitDto initDto = new DispenseInitDto(); - - // 获取科室下拉选列表 - List organizationList = - iOrganizationService.getList(OrganizationType.DEPARTMENT.getValue(), OrganizationClass.CLINIC.getValue()); - List organizationOptions = organizationList.stream() - .map(organization -> new DispenseInitDto.DepartmentOption(organization.getId(), organization.getName())) - .collect(Collectors.toList()); - - // 未发药原因下拉选列表 - List notPerformedReasonOptions = - Stream.of(NotPerformedReasonEnum.values()) - .map(notPerformedReason -> new DispenseInitDto.NotPerformedReasonOption(notPerformedReason.getValue(), - notPerformedReason.getInfo())) - .collect(Collectors.toList()); - - initDto.setDepartmentOptions(organizationOptions).setNotPerformedReasonOptions(notPerformedReasonOptions); - return R.ok(initDto); - } - - /** - * 分页查询就诊病人列表 - * - * @param encounterInfoSearchParam 查询条件 - * @param searchKey 模糊查询关键字 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @param request 请求数据 - * @return 就诊病人列表 - */ - @Override - public R getEncounterInfoListPage(EncounterInfoSearchParam encounterInfoSearchParam, String searchKey, - Integer pageNo, Integer pageSize, HttpServletRequest request) { - - // 构建查询条件 - QueryWrapper queryWrapper = - HisQueryUtils.buildQueryWrapper(encounterInfoSearchParam, searchKey, - new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.idCard, - CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientWbStr)), - request); - - // 查询就诊病人列表 - Page encounterInfoPage = - chineseMedicineDispenseMapper.selectEncounterInfoListPage(new Page<>(pageNo, pageSize), queryWrapper); - - encounterInfoPage.getRecords().forEach(encounterInfo -> { - // 性别 - encounterInfo.setGenderEnum_enumText( - EnumUtils.getInfoByValue(AdministrativeGender.class, encounterInfo.getGenderEnum())); - // 性别 - encounterInfo - .setStatusEnum_enumText(EnumUtils.getInfoByValue(DispenseStatus.class, encounterInfo.getStatusEnum())); - }); - return R.ok(encounterInfoPage); - } - - /** - * 查询处方单列表 - * - * @param encounterId 就诊号 - * @return 处方单列表 - */ - @Override - public R getPrescriptionInfo(Long encounterId) { - - // 患者基本信息查询 - PrescriptionPatientInfoDto prescriptionPatientInfoDto = - chineseMedicineDispenseMapper.selectPrescriptionPatientInfo(encounterId); - // 年龄 - prescriptionPatientInfoDto.setAge(AgeCalculatorUtil.getAge(prescriptionPatientInfoDto.getBirthDate())); - // 性别 - prescriptionPatientInfoDto.setGenderEnum_enumText( - EnumUtils.getInfoByValue(AdministrativeGender.class, prescriptionPatientInfoDto.getGenderEnum())); - // 合同类型 - if (StringUtils.isNotNull(prescriptionPatientInfoDto.getCategoryEnum())) { - prescriptionPatientInfoDto.setCategoryEnum_enumText( - EnumUtils.getInfoByValue(FinCategory.class, prescriptionPatientInfoDto.getCategoryEnum())); - } - // 处方单信息查询 - List prescriptionMedicineInfoList = - chineseMedicineDispenseMapper.selectPrescriptionMedicineInfoList(encounterId); - // 计算合计金额 - if (!prescriptionMedicineInfoList.isEmpty()) { - double totalPrice = 0d; - for (PrescriptionMedicineInfoDto item : prescriptionMedicineInfoList) { - totalPrice += item.getTotalPrice().doubleValue(); - } - prescriptionPatientInfoDto.setTotalPrice(totalPrice); - } - PrescriptionInfoDto prescriptionInfoDto = new PrescriptionInfoDto(); - prescriptionInfoDto.setPrescriptionPatientInfoDto(prescriptionPatientInfoDto); - prescriptionInfoDto.setPrescriptionMedicineInfoDtoList(prescriptionMedicineInfoList); - return R.ok(prescriptionInfoDto); - } - - /** - * 配药 - * - * @param prescriptionNo 处方号 - * @param preparerId 配药人 - * @return 处理结果 - */ - @Override - public R prepare(String prescriptionNo, Long preparerId) { - - List medicationDispenseList = new ArrayList<>(); - boolean iMedicationDispenseUpdFlg = true; - - // 配药人检查 - if (!preparerId.equals(SecurityUtils.getLoginUser().getPractitionerId())) { - // 获取药品待发放信息 - List dispenseInventoryList = - chineseMedicineDispenseMapper.selectDispenseInventoryInfoByPrescriptionNo(prescriptionNo, - CommonConstants.TableName.MED_MEDICATION_DEFINITION); - if (!dispenseInventoryList.isEmpty()) { - - MedicationDispense medicationDispense; - - for (DispenseInventoryDto dispenseInventoryDto : dispenseInventoryList) { - - // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量 - BigDecimal quantity = dispenseInventoryDto.getInventoryQuantity() - .subtract(new BigDecimal(dispenseInventoryDto.getDispenseQuantity())); - // 库存数量判定 - if (quantity.compareTo(BigDecimal.ZERO) < 0) { - // 库存数量不足 - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Inventory.M00002, null)); - } - - // 药品发放表项目设定 - medicationDispense = new MedicationDispense(); - // id - medicationDispense.setId(dispenseInventoryDto.getDispenseId()); - // 药品发放状态 - medicationDispense.setStatusEnum(DispenseStatus.PREPARED.getValue()); - // 状态变更时间 - medicationDispense.setStatusChangedTime(DateUtils.getNowDate()); - // 配药人 - medicationDispense.setPreparerId(preparerId); - // 配药时间 - medicationDispense.setPrepareTime(DateUtils.getNowDate()); - medicationDispenseList.add(medicationDispense); - - } - // 药品发放更新 - iMedicationDispenseUpdFlg = iMedicationDispenseService.updateBatchById(medicationDispenseList); - - return iMedicationDispenseUpdFlg - ? R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) - : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null)); - } - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null)); - } - - return R.fail(MessageUtils.createMessage(PromptMsgConstant.MedicationDispense.M00001, null)); - } - - /** - * 处方单核对发药 - * - * @param prescriptionNo 处方号 - * @return 处理结果 - */ - @Override - public R medicineDispense(String prescriptionNo) { - - List medicationDispenseList = new ArrayList<>(); - List inventoryItemList = new ArrayList<>(); - boolean iMedicationDispenseUpdFlg = true; - boolean iInventoryItemUpdFlg = true; - - // 获取药品待发放和库存信息 - List dispenseInventoryList = - chineseMedicineDispenseMapper.selectDispenseInventoryInfoByPrescriptionNo(prescriptionNo, - CommonConstants.TableName.MED_MEDICATION_DEFINITION); - if (!dispenseInventoryList.isEmpty()) { - - MedicationDispense medicationDispense; - InventoryItem inventoryItem; - - for (DispenseInventoryDto dispenseInventoryDto : dispenseInventoryList) { - - // 药品发放表项目设定 - medicationDispense = new MedicationDispense(); - // id - medicationDispense.setId(dispenseInventoryDto.getDispenseId()); - // 药品发放状态 - medicationDispense.setStatusEnum(DispenseStatus.COMPLETED.getValue()); - // 状态变更时间 - medicationDispense.setStatusChangedTime(DateUtils.getNowDate()); - // 发药人 - medicationDispense.setPractitionerId(SecurityUtils.getLoginUser().getPractitionerId()); - // 已发药数量 - medicationDispense.setDispenseQuantity(dispenseInventoryDto.getDispenseQuantity()); - // 发药时间 - medicationDispense.setDispenseTime(DateUtils.getNowDate()); - medicationDispenseList.add(medicationDispense); - - // 库存表项目设定 - inventoryItem = new InventoryItem(); - - inventoryItem.setId(dispenseInventoryDto.getInventoryId()); - // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量 - inventoryItem.setQuantity(dispenseInventoryDto.getInventoryQuantity() - .subtract(new BigDecimal(dispenseInventoryDto.getDispenseQuantity()))); - inventoryItemList.add(inventoryItem); - } - // 药品发放更新 - iMedicationDispenseUpdFlg = iMedicationDispenseService.updateBatchById(medicationDispenseList); - // 库存更新 - iInventoryItemUpdFlg = iInventoryItemService.updateBatchById(inventoryItemList); - - return iMedicationDispenseUpdFlg && iInventoryItemUpdFlg - ? R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) - : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null)); - } - - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null)); - } - - /** - * 作废 - * - * @param prescriptionNo 处方号 - * @param notPerformedReasonEnum 未发药原因 - * @return 处理结果 - */ - @Override - public R medicineCancel(String prescriptionNo, Integer notPerformedReasonEnum) { - - List medicationDispenseList = new ArrayList<>(); - boolean iMedicationDispenseUpdFlg = true; - - // 获取药品待发放记录 - List dispenseInventoryList = - chineseMedicineDispenseMapper.selectDispenseInventoryInfoByPrescriptionNo(prescriptionNo, - CommonConstants.TableName.MED_MEDICATION_DEFINITION); - if (!dispenseInventoryList.isEmpty()) { - MedicationDispense medicationDispense; - for (DispenseInventoryDto dispenseInventoryDto : dispenseInventoryList) { - - // 药品发放表项目设定 - medicationDispense = new MedicationDispense(); - // id - medicationDispense.setId(dispenseInventoryDto.getDispenseId()); - // 药品发放状态 - medicationDispense.setStatusEnum(DispenseStatus.DECLINED.getValue()); - // 未发药原因 - medicationDispense.setNotPerformedReasonEnum(notPerformedReasonEnum); - // 状态变更时间 - medicationDispense.setStatusChangedTime(DateUtils.getNowDate()); - // 发药人 - medicationDispense.setPractitionerId(SecurityUtils.getLoginUser().getPractitionerId()); - medicationDispenseList.add(medicationDispense); - } - // 药品发放更新 - iMedicationDispenseUpdFlg = iMedicationDispenseService.updateBatchById(medicationDispenseList); - } - return iMedicationDispenseUpdFlg ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) - : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null)); - } -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IMedicalConsumablesDispenseAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IMedicalConsumablesDispenseAppServiceImpl.java deleted file mode 100644 index 06a67a1e..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IMedicalConsumablesDispenseAppServiceImpl.java +++ /dev/null @@ -1,226 +0,0 @@ -package com.openhis.web.pharmacymanage.appservice.impl; - -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import javax.annotation.Resource; - -import org.springframework.stereotype.Service; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.core.common.core.domain.R; -import com.core.common.exception.ServiceException; -import com.core.common.utils.DateUtils; -import com.core.common.utils.MessageUtils; -import com.core.common.utils.SecurityUtils; -import com.openhis.administration.domain.ChargeItem; -import com.openhis.administration.service.IChargeItemService; -import com.openhis.common.constant.CommonConstants; -import com.openhis.common.constant.PromptMsgConstant; -import com.openhis.common.enums.DispenseStatus; -import com.openhis.common.enums.HospitalCodeEnum; -import com.openhis.common.enums.PublicationStatus; -import com.openhis.common.enums.Whether; -import com.openhis.web.inventorymanage.appservice.ITraceNoAppService; -import com.openhis.web.pharmacymanage.appservice.IMedicalConsumablesDispenseAppService; -import com.openhis.web.pharmacymanage.dto.InventoryDto; -import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper; -import com.openhis.workflow.domain.DeviceDispense; -import com.openhis.workflow.domain.InventoryItem; -import com.openhis.workflow.service.IDeviceDispenseService; -import com.openhis.workflow.service.IDeviceRequestService; -import com.openhis.workflow.service.IInventoryItemService; -/* - * - * - * 耗材发放 应用实现类 - * - * @author wangyang - * - * @date 2025/3/14 - * - */ - -@Service -public class IMedicalConsumablesDispenseAppServiceImpl implements IMedicalConsumablesDispenseAppService { - - @Resource - private ITraceNoAppService traceNoAppService; - - @Resource - private IDeviceDispenseService deviceDispenseService; - - @Resource - private IDeviceRequestService deviceRequestService; - - @Resource - private ReturnMedicineMapper returnMedicineMapper; - - @Resource - private IInventoryItemService iInventoryItemService; - - @Resource - private IWesternMedicineDispenseAppServiceImpl westernMedicineDispenseAppService; - - @Resource - private IChargeItemService chargeItemService; - - /** - * 发放耗材 - * - * @param chargeItemIds 耗材收费单ids - * @return 处理结果 - */ - @Override - public R dispenseMedicalConsumables(List chargeItemIds) { - // 查看所属医院 - String fixmedinsCode = - SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.FIXMEDINS_CODE); - if (!HospitalCodeEnum.CCU.getCode().equals(fixmedinsCode)) { - return R.ok(); - } - List chargeItemList = chargeItemService.listByIds(chargeItemIds); - if (chargeItemList == null || chargeItemList.isEmpty()) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } - - List inventoryItemList = new ArrayList<>(); - // 获取发申请id列表 - List devRequestIdList = - chargeItemList.stream().map(ChargeItem::getServiceId).collect(Collectors.toList()); - // 获取耗材发放id列表 - List devDispenseIdList = deviceDispenseService - .list(new LambdaQueryWrapper().in(DeviceDispense::getDeviceReqId, devRequestIdList)) - .stream().map(DeviceDispense::getId).collect(Collectors.toList()); - // 获取库存信息 - List inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null, - CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); - // 按每个耗材分组 - Map> groupedByItemId = - inventoryList.stream().collect(Collectors.groupingBy(InventoryDto::getItemId)); - // 遍历每个分组校验库存状态 - for (Map.Entry> entry : groupedByItemId.entrySet()) { - List groupItems = entry.getValue(); - if (groupItems.stream().map(InventoryDto::getInventoryStatusEnum) - .allMatch(x -> x.equals(PublicationStatus.RETIRED.getValue()))) { - // 库存停供校验 - return R.fail(groupItems.get(0).getItemName() + "库存已停供"); - } - } - if (!inventoryList.isEmpty()) { - for (InventoryDto inventoryDto : inventoryList) { - if (PublicationStatus.ACTIVE.getValue().equals(inventoryDto.getInventoryStatusEnum())) { - InventoryItem inventoryItem = new InventoryItem(); - // 库存数量判定 - if (inventoryDto.getDispenseUnit().equals(inventoryDto.getInventoryUnitCode())) { - // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量 - BigDecimal quantity = inventoryDto.getInventoryQuantity().subtract(inventoryDto.getQuantity()); - // 库存数量判定 - if (quantity.compareTo(BigDecimal.ZERO) < 0) { - // 库存数量不足 - return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); - } else { - inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); - } - } else { - // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量) - BigDecimal quantity = inventoryDto.getInventoryQuantity() - .subtract(inventoryDto.getPartPercent().multiply(inventoryDto.getQuantity())); - // 库存数量判定 - if (quantity.compareTo(BigDecimal.ZERO) < 0) { - // 库存数量不足 - return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); - } else { - inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); - } - } - inventoryItemList.add(inventoryItem); - } - } - } - // 发耗材信息查询 - List dispenseList = deviceDispenseService - .list(new LambdaQueryWrapper().in(DeviceDispense::getId, devDispenseIdList)); - // todo 耗材追溯码待定 - // // 追溯码列表 - // List traceNoInfoList = new ArrayList<>(); - // TraceNoInfoParam traceNoInfo; - if (dispenseList != null) { - if (dispenseList.stream().map(DeviceDispense::getStatusEnum) - .anyMatch(x -> x.equals(DispenseStatus.COMPLETED.getValue()))) { - throw new ServiceException("耗材已发放,请勿重复操作"); - } else { - for (DeviceDispense deviceDispense : dispenseList) { - // 耗材发放状态 - deviceDispense.setStatusEnum(DispenseStatus.COMPLETED.getValue()); - // 发药数量 - deviceDispense.setDispenseQuantity(deviceDispense.getQuantity()); - // 发药时间 - deviceDispense.setDispenseTime(DateUtils.getNowDate()); - // 发药人(长大写死发耗材人) - deviceDispense.setPerformerId(CommonConstants.CCU.DisDeviceDoctor); - // 根据数量设置追溯码 - deviceDispense.setTraceNo(String.join(CommonConstants.Common.COMMA, - Collections.nCopies(deviceDispense.getQuantity(), CommonConstants.Common.DEV_TRACE_NO))); - // // 使用逗号分割追溯码并转换为List - // String[] traceNoList = deviceDispense.getTraceNo().split(","); - // for (String item : traceNoList) { - // traceNoInfo = new TraceNoInfoParam(); - // // 追溯码处理 - // // 项目所属表 - // traceNoInfo.setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION) - // // 项目id - // .setItemId(deviceDispense.getDeviceDefId()) - // // 仓库类型 - // .setLocationTypeEnum(null) - // // 仓库 - // .setLocationId(deviceDispense.getLocationId()) - // // 仓位 - // .setLocationStoreId(null) - // // 产品批号 - // .setLotNumber(deviceDispense.getLotNumber()) - // // 追溯码 - // .setTraceNo(item) - // // 追溯码状态 - // .setStatusEnum(TraceNoStatus.OUT.getValue()) - // // 追溯码单位 - // .setUnitCode(deviceDispense.getUnitCode()) - // // 操作类型 - // .setOperationType(SupplyType.DISPENSE_MEDICATION.getValue()); - // traceNoInfoList.add(traceNoInfo); - // } - } - // 药品发放更新 - deviceDispenseService.updateBatchById(dispenseList); - } - } else { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } - // 库存更新 - iInventoryItemService.updateBatchById(inventoryItemList); - // // 追溯码管理表数据追加 - // R request = traceNoAppService.addTraceNoInfo(traceNoInfoList); - // if (request.getCode() != 200) { - // return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - // } - // 返回信息 - String returnMsg = null; - // 调用医保商品销售接口 - String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); - // 医保开关 - if (Whether.YES.getCode().equals(ybSwitch)) { - List uploadFailedNoList = - westernMedicineDispenseAppService.ybMedicineIntegrated(null, devDispenseIdList); - if (uploadFailedNoList != null) { - returnMsg = "3505商品销售上传错误,错误项目编码" + uploadFailedNoList; - } else { - returnMsg = "3505商品销售上传成功"; - } - } - return R.ok(returnMsg, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); - } -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/InpatientMedicineDispenseAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/InpatientMedicineDispenseAppServiceImpl.java deleted file mode 100644 index a936e72e..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/InpatientMedicineDispenseAppServiceImpl.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.openhis.web.pharmacymanage.appservice.impl;//package com.openhis.web.pharmacymanage.appservice.impl; - -import com.alibaba.fastjson.JSONArray; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.core.common.core.domain.R; -import com.core.common.core.domain.entity.SysDictData; -import com.core.common.exception.ServiceException; -import com.core.common.utils.*; -import com.core.system.mapper.SysDictDataMapper; -import com.openhis.administration.domain.*; -import com.openhis.administration.service.IAccountService; -import com.openhis.administration.service.IChargeItemService; -import com.openhis.administration.service.IEncounterDiagnosisService; -import com.openhis.administration.service.IOrganizationService; -import com.openhis.common.constant.CommonConstants; -import com.openhis.common.constant.PromptMsgConstant; -import com.openhis.common.enums.*; -import com.openhis.common.enums.ybenums.YbMdtrtCertType; -import com.openhis.common.utils.EnumUtils; -import com.openhis.common.utils.HisQueryUtils; -import com.openhis.financial.domain.Contract; -import com.openhis.financial.domain.PaymentReconciliation; -import com.openhis.financial.service.IContractService; -import com.openhis.financial.service.IPaymentReconciliationService; -import com.openhis.medication.domain.MedicationDispense; -import com.openhis.medication.service.IMedicationDispenseService; -import com.openhis.medication.service.IMedicationRequestService; -import com.openhis.web.pharmacymanage.appservice.IInpatientMedicineDispenseAppService; -import com.openhis.web.pharmacymanage.dto.*; -import com.openhis.web.pharmacymanage.mapper.InpatientMedicineDispenseMapper; -import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper; -import com.openhis.web.pharmacymanage.mapper.WesternMedicineDispenseMapper; -import com.openhis.workflow.domain.InventoryItem; -import com.openhis.workflow.service.IInventoryItemService; -import com.openhis.yb.domain.ClinicSettle; -import com.openhis.yb.dto.Medical3505Param; -import com.openhis.yb.service.IClinicSettleService; -import com.openhis.yb.service.YbManager; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import java.math.BigDecimal; -import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -/** - * 住院发放 应用实现类 - * - * @author yuxj - * @date 2025/6/3 - */ -@Service public class InpatientMedicineDispenseAppServiceImpl implements IInpatientMedicineDispenseAppService { - - @Autowired - private WesternMedicineDispenseMapper westernMedicineDispenseMapper; - - /** - * 分页查询发药病人列表 - * - * @param encounterInfoPageDto 查询条件 - * @param searchKey 模糊查询关键字 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @param request 请求数据 - * @return 发药病人列表 - */ - @Override - public R getEncounterInfoListPage(EncounterInfoPageDto encounterInfoPageDto, String searchKey, Integer pageNo, - Integer pageSize, HttpServletRequest request) { - // 发药状态初始化 - Integer statusEnum = encounterInfoPageDto.getStatusEnum(); - encounterInfoPageDto.setStatusEnum(null); - // 构建查询条件 - QueryWrapper queryWrapper = - HisQueryUtils.buildQueryWrapper(encounterInfoPageDto, searchKey, - new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.idCard, - CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientWbStr)), - request); - // 查询就诊病人列表 - Page encounterInfoPage = westernMedicineDispenseMapper.selectEncounterInfoListPage( - new Page<>(pageNo, pageSize), queryWrapper, statusEnum, DispenseStatus.IN_PROGRESS.getValue(), - DispenseStatus.COMPLETED.getValue(), DispenseStatus.PREPARATION.getValue(), - DispenseStatus.PREPARED.getValue(), EncounterClass.IMP.getValue()); - encounterInfoPage.getRecords().forEach(encounterInfo -> { - // 性别 - encounterInfo.setGenderEnum_enumText( - EnumUtils.getInfoByValue(AdministrativeGender.class, encounterInfo.getGenderEnum())); - // 发药状态 - encounterInfo - .setStatusEnum_enumText(EnumUtils.getInfoByValue(DispenseStatus.class, encounterInfo.getStatusEnum())); - }); - return R.ok(encounterInfoPage); - } -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/InpatientMedicineSummaryDispenseAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/InpatientMedicineSummaryDispenseAppServiceImpl.java index 2134a3b7..f3ddafaa 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/InpatientMedicineSummaryDispenseAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/InpatientMedicineSummaryDispenseAppServiceImpl.java @@ -1,61 +1,51 @@ package com.openhis.web.pharmacymanage.appservice.impl; -import java.math.BigDecimal; import java.util.*; -import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.core.common.constant.HttpStatus; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import com.openhis.administration.domain.*; -import com.openhis.common.annotation.Dict; -import com.openhis.common.utils.HisQueryUtils; -import com.openhis.financial.domain.PaymentReconciliation; -import com.openhis.medication.domain.MedicationRequest; -import com.openhis.web.inhospitalnursestation.appservice.IInpatientMedicineCollectionAppService; -import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryDispensingOrderService; -import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto; -import com.openhis.web.pharmacymanage.dto.*; -import com.openhis.workflow.domain.DeviceDispense; -import com.openhis.workflow.domain.SupplyDelivery; -import com.openhis.workflow.domain.SupplyRequest; -import com.openhis.workflow.service.IDeviceDispenseService; -import com.openhis.yb.service.YbManager; +import com.openhis.web.pharmacymanage.dto.InpatientMedicineSummaryDto; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.core.common.constant.HttpStatus; import com.core.common.core.domain.R; import com.core.common.exception.ServiceException; import com.core.common.utils.DateUtils; import com.core.common.utils.MessageUtils; import com.core.common.utils.SecurityUtils; -import com.core.system.mapper.SysDictDataMapper; -import com.openhis.administration.service.*; +import com.openhis.administration.domain.Practitioner; +import com.openhis.administration.domain.TraceNoManage; +import com.openhis.administration.service.ILocationService; +import com.openhis.administration.service.IPractitionerService; +import com.openhis.administration.service.ITraceNoManageService; import com.openhis.common.constant.CommonConstants; import com.openhis.common.constant.PromptMsgConstant; import com.openhis.common.enums.*; import com.openhis.common.utils.EnumUtils; -import com.openhis.financial.service.IContractService; -import com.openhis.financial.service.IPaymentReconciliationService; +import com.openhis.common.utils.HisQueryUtils; import com.openhis.medication.domain.MedicationDispense; import com.openhis.medication.service.IMedicationDispenseService; -import com.openhis.medication.service.IMedicationRequestService; +import com.openhis.web.inhospitalnursestation.appservice.IInpatientMedicineCollectionAppService; import com.openhis.web.pharmacymanage.appservice.IInpatientMedicineSummaryDispenseAppService; +import com.openhis.web.pharmacymanage.dto.InpatientMedicineInitDto; +import com.openhis.web.pharmacymanage.dto.InpatientMedicineSearchParam; import com.openhis.web.pharmacymanage.mapper.InpatientMedicineSummaryDispenseMapper; import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper; +import com.openhis.workflow.domain.DeviceDispense; import com.openhis.workflow.domain.InventoryItem; +import com.openhis.workflow.domain.SupplyDelivery; +import com.openhis.workflow.domain.SupplyRequest; +import com.openhis.workflow.service.IDeviceDispenseService; import com.openhis.workflow.service.IInventoryItemService; import com.openhis.workflow.service.ISupplyDeliveryService; import com.openhis.workflow.service.ISupplyRequestService; -import com.openhis.yb.service.IClinicSettleService; /** * 住院汇总发放 应用实现类 @@ -92,7 +82,7 @@ public class InpatientMedicineSummaryDispenseAppServiceImpl implements IInpatien @Autowired private ITraceNoManageService traceNoManageService; @Autowired - private IWesternMedicineDispenseAppServiceImpl westernMedicineDispenseAppServiceImpl; + private WesternMedicineDispenseAppServiceImpl westernMedicineDispenseAppServiceImpl; @Autowired private IInpatientMedicineCollectionAppService inpatientMedicineCollectionAppService; @@ -158,23 +148,23 @@ public class InpatientMedicineSummaryDispenseAppServiceImpl implements IInpatien queryWrapper.orderByDesc(CommonConstants.FieldName.applyTime); // 查询医嘱详细信息 - Page prescriptionItemInfoPageDto = + Page prescriptionItemInfoPageDto = inpatientMedicineDispenseMapper.selectMedicationSummaryInfo(new Page<>(pageNo, pageSize), queryWrapper, CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, SupplyType.DISPENSING_ORDER.getValue(), SupplyCategory.INPATIENT_PATIENT_SUMMARY_DISPENSING.getValue()); - List unitList; + List unitList; // 个别项目设定 - for (InpatientMedicineSummaryPrescriptionInfoDto prescriptionInfoDto : prescriptionItemInfoPageDto + for (InpatientMedicineSummaryDto prescriptionInfoDto : prescriptionItemInfoPageDto .getRecords()) { // 状态 prescriptionInfoDto.setStatusEnum_enumText( EnumUtils.getInfoByValue(DispenseStatus.class, prescriptionInfoDto.getStatusEnum())); // 追溯码单位列表 unitList = new ArrayList<>(); - unitList.add(new InpatientMedicineSummaryPrescriptionInfoDto.Option(prescriptionInfoDto.getMaxUnitCode(), + unitList.add(new InpatientMedicineSummaryDto.Option(prescriptionInfoDto.getMaxUnitCode(), prescriptionInfoDto.getMaxUnitCode_dictText())); - unitList.add(new InpatientMedicineSummaryPrescriptionInfoDto.Option(prescriptionInfoDto.getMinUnitCode(), + unitList.add(new InpatientMedicineSummaryDto.Option(prescriptionInfoDto.getMinUnitCode(), prescriptionInfoDto.getMinUnitCode_dictText())); prescriptionInfoDto.setUnitList(unitList); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicalDeviceDispenseAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicalDeviceDispenseAppServiceImpl.java new file mode 100644 index 00000000..8523c351 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicalDeviceDispenseAppServiceImpl.java @@ -0,0 +1,542 @@ +package com.openhis.web.pharmacymanage.appservice.impl; + +import java.math.BigDecimal; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.core.common.core.domain.R; +import com.core.common.exception.ServiceException; +import com.core.common.utils.AgeCalculatorUtil; +import com.core.common.utils.DateUtils; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.openhis.administration.domain.*; +import com.openhis.administration.service.IChargeItemService; +import com.openhis.administration.service.IDeviceDefinitionService; +import com.openhis.administration.service.IOrganizationService; +import com.openhis.administration.service.ITraceNoManageService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.*; +import com.openhis.common.enums.ybenums.YbInvChgType; +import com.openhis.common.utils.EnumUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.inventorymanage.appservice.impl.ReceiptApprovalAppServiceImpl; +import com.openhis.web.inventorymanage.dto.SupplyItemDetailDto; +import com.openhis.web.pharmacymanage.appservice.IMedicalDeviceDispenseAppService; +import com.openhis.web.pharmacymanage.dto.*; +import com.openhis.web.pharmacymanage.mapper.MedicalDeviceDispenseMapper; +import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper; +import com.openhis.workflow.domain.DeviceDispense; +import com.openhis.workflow.domain.InventoryItem; +import com.openhis.workflow.service.IDeviceDispenseService; +import com.openhis.workflow.service.IInventoryItemService; + +; + +/** + * 材料发送 应用实现类 + * + * @author yuxj + * @date 2025/8/21 + */ +@Service +public class MedicalDeviceDispenseAppServiceImpl implements IMedicalDeviceDispenseAppService { + + @Resource + private IOrganizationService organizationService; + + @Resource + private IDeviceDispenseService deviceDispenseService; + + @Resource + private IInventoryItemService inventoryItemService; + + @Resource + private MedicalDeviceDispenseMapper medicalDeviceDispenseMapper; + + @Resource + private ReturnMedicineMapper returnMedicineMapper; + + @Resource + private ITraceNoManageService traceNoManageService; + + @Resource + private WesternMedicineDispenseAppServiceImpl westernMedicineDispenseAppService; + + @Resource + private IChargeItemService chargeItemService; + + @Resource + private IDeviceDefinitionService deviceDefinitionService; + + @Resource + private ReceiptApprovalAppServiceImpl receiptApprovalAppService; + + /** + * 获取页面初始化信息 + * + * @return 初始化信息 + */ + @Override + public R init() { + + DispenseInitDto initDto = new DispenseInitDto(); + + // 获取科室下拉选列表 + List organizationList = + organizationService.getList(OrganizationType.DEPARTMENT.getValue(), OrganizationClass.CLINIC.getValue()); + List organizationOptions = organizationList.stream() + .map(organization -> new DispenseInitDto.DepartmentOption(organization.getId(), organization.getName())) + .collect(Collectors.toList()); + + // 获取配药人下拉选列表 + List preparerDoctorList = + medicalDeviceDispenseMapper.getPreparerDoctorList(PractitionerRoles.PHARMACIST.getCode()); + List preparerDoctorOptions = preparerDoctorList.stream() + .map(practitioner -> new DispenseInitDto.PreparerDoctorOption(practitioner.getId(), practitioner.getName())) + .collect(Collectors.toList()); + + // 未发药原因下拉选列表 + List notPerformedReasonOptions = + Stream.of(NotPerformedReasonEnum.values()) + .map(notPerformedReason -> new DispenseInitDto.NotPerformedReasonOption(notPerformedReason.getValue(), + notPerformedReason.getInfo())) + .collect(Collectors.toList()); + + // 发药状态 + List dispenseStatusOptions = new ArrayList<>(); + dispenseStatusOptions.add(new DispenseInitDto.DispenseStatusOption(DispenseStatus.IN_PROGRESS.getValue(), + DispenseStatus.IN_PROGRESS.getInfo())); + dispenseStatusOptions.add(new DispenseInitDto.DispenseStatusOption(DispenseStatus.COMPLETED.getValue(), + DispenseStatus.COMPLETED.getInfo())); + + initDto.setDepartmentOptions(organizationOptions).setNotPerformedReasonOptions(notPerformedReasonOptions) + .setDispenseStatusOptions(dispenseStatusOptions).setPreparerDoctorOptions(preparerDoctorOptions); + return R.ok(initDto); + } + + /** + * 分页查询病人列表 + * + * @param encounterInfoSearchParam 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request 请求数据 + * @return 病人列表 + */ + @Override + public R getEncounterInfoListPage(EncounterInfoSearchParam encounterInfoSearchParam, String searchKey, + Integer pageNo, Integer pageSize, HttpServletRequest request) { + // 发药状态初始化 + Integer statusEnum = encounterInfoSearchParam.getStatusEnum(); + encounterInfoSearchParam.setStatusEnum(null); + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(encounterInfoSearchParam, searchKey, + new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.idCard, + CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientWbStr)), + request); + // 查询就诊病人列表 + Page encounterInfoPage = + medicalDeviceDispenseMapper.selectEncounterInfoListPage(new Page<>(pageNo, pageSize), queryWrapper, + statusEnum, DispenseStatus.IN_PROGRESS.getValue(), DispenseStatus.COMPLETED.getValue(), + DispenseStatus.PREPARATION.getValue(), DispenseStatus.PREPARED.getValue()); + encounterInfoPage.getRecords().forEach(encounterInfo -> { + // 性别 + encounterInfo.setGenderEnum_enumText( + EnumUtils.getInfoByValue(AdministrativeGender.class, encounterInfo.getGenderEnum())); + // 发药状态 + encounterInfo + .setStatusEnum_enumText(EnumUtils.getInfoByValue(DispenseStatus.class, encounterInfo.getStatusEnum())); + if (encounterInfo.getBirthDate() != null) { + // 计算年龄 + encounterInfo.setAge(AgeCalculatorUtil.getAge(encounterInfo.getBirthDate())); + } + }); + return R.ok(encounterInfoPage); + } + + /** + * 发耗材单查询 + * + * @param itemDispenseOrderDto 查询信息 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 发耗材单 + */ + @Override + public R getDeviceDispenseOrderList(ItemDispenseOrderDto itemDispenseOrderDto, Integer pageNo, + Integer pageSize) { + // 发药状态初始化 + Integer dispenseStatus = itemDispenseOrderDto.getStatusEnum(); + itemDispenseOrderDto.setStatusEnum(null); + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(itemDispenseOrderDto, null, null, null); + // 处方单信息查询 + Page deviceDispenseOrderPage = + medicalDeviceDispenseMapper.selectDeviceDispenseOrderPage(new Page<>(pageNo, pageSize), queryWrapper, + DispenseStatus.IN_PROGRESS.getValue(), DispenseStatus.COMPLETED.getValue(), + DispenseStatus.PREPARATION.getValue(), DispenseStatus.PREPARED.getValue(), dispenseStatus); + deviceDispenseOrderPage.getRecords().forEach(deviceDispenseOrder -> { + // 发药状态 + deviceDispenseOrder.setStatusEnum_enumText( + EnumUtils.getInfoByValue(DispenseStatus.class, deviceDispenseOrder.getStatusEnum())); + // 设置所在表名 + deviceDispenseOrder.setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION); + }); + return R.ok(deviceDispenseOrderPage); + } + + /** + * 核对发耗材 + * + * @param dispenseDeviceList 发耗材信息 + * @return 处理结果 + */ + @Override + public R deviceDispense(List dispenseDeviceList) { + // 配药人检查 + if (dispenseDeviceList.get(0).getPreparerId() == null + || dispenseDeviceList.get(0).getPreparerId().equals(SecurityUtils.getLoginUser().getPractitionerId())) { + return R.fail("请选择调配药师"); + } + List inventoryItemList = new ArrayList<>(); + // 获取发药单id列表 + List devDispenseIdList = + dispenseDeviceList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList()); + // 获取库存信息 + List inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null, + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); + // 按每个药品分组 + Map> groupedByItemId = + inventoryList.stream().collect(Collectors.groupingBy(InventoryDto::getItemId)); + // 遍历每个分组校验库存状态 + for (Map.Entry> entry : groupedByItemId.entrySet()) { + List groupItems = entry.getValue(); + if (groupItems.stream().map(InventoryDto::getInventoryStatusEnum) + .allMatch(x -> x.equals(PublicationStatus.RETIRED.getValue()))) { + // 库存停供校验 + return R.fail(groupItems.get(0).getItemName() + "库存已停供"); + } + } + if (!inventoryList.isEmpty()) { + for (InventoryDto inventoryDto : inventoryList) { + if (PublicationStatus.ACTIVE.getValue().equals(inventoryDto.getInventoryStatusEnum())) { + InventoryItem inventoryItem = new InventoryItem(); + // 库存数量判定 + if (inventoryDto.getDispenseUnit().equals(inventoryDto.getInventoryUnitCode())) { + // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量 + BigDecimal quantity = inventoryDto.getInventoryQuantity().subtract(inventoryDto.getQuantity()); + // 库存数量判定 + if (quantity.compareTo(BigDecimal.ZERO) < 0) { + // 库存数量不足 + return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); + } else { + inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); + } + } else { + // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量) + BigDecimal quantity = inventoryDto.getInventoryQuantity() + .subtract(inventoryDto.getPartPercent().multiply(inventoryDto.getQuantity())); + // 库存数量判定 + if (quantity.compareTo(BigDecimal.ZERO) < 0) { + // 库存数量不足 + return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); + } else { + inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); + } + } + inventoryItemList.add(inventoryItem); + } + } + } + // 材料发放信息查询 + List dispenseList = deviceDispenseService + .list(new LambdaQueryWrapper().in(DeviceDispense::getId, devDispenseIdList)); + // 追溯码列表 + List tracesNoManageList = new ArrayList<>(); + TraceNoManage traceNoManage; + List supplyItemDetailList = new ArrayList<>(); + if (dispenseList != null) { + if (dispenseList.stream().map(DeviceDispense::getStatusEnum) + .anyMatch(x -> !x.equals(DispenseStatus.PREPARATION.getValue()))) { + throw new ServiceException("耗材发放失败,请检查发耗材单状态"); + } else { + for (DeviceDispense deviceDispense : dispenseList) { + // 材料发放状态 + deviceDispense.setStatusEnum(DispenseStatus.COMPLETED.getValue()); + // 发药数量 + deviceDispense.setDispenseQuantity(deviceDispense.getQuantity()); + // 发药时间 + deviceDispense.setDispenseTime(DateUtils.getNowDate()); + // 发药人 + deviceDispense.setPerformerId(SecurityUtils.getLoginUser().getPractitionerId()); + // 配药时间 + deviceDispense.setPrepareTime(DateUtils.getNowDate()); + // 配药人 + deviceDispense.setPreparerId(dispenseDeviceList.get(0).getPreparerId()); + // 设置库存变更参数 + supplyItemDetailList.add(new SupplyItemDetailDto().setItemId(deviceDispense.getDeviceDefId()) + .setLotNumber(deviceDispense.getLotNumber()) + .setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION)); + if (deviceDispense.getTraceNo() == null) { + // 根据数量设置追溯码 + deviceDispense.setTraceNo(String.join(CommonConstants.Common.COMMA, Collections + .nCopies(deviceDispense.getQuantity().intValue(), CommonConstants.Common.DEV_TRACE_NO))); + } else { + // 使用逗号分割追溯码并转换为List + String[] traceNoList = deviceDispense.getTraceNo().split(CommonConstants.Common.COMMA); + for (String item : traceNoList) { + traceNoManage = new TraceNoManage(); + // 追溯码处理 + traceNoManage.setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION) + // 项目id + .setItemId(deviceDispense.getDeviceDefId()) + // 仓库类型 + .setLocationTypeEnum(LocationForm.WAREHOUSE.getValue()) + // 仓库 + .setLocationId(deviceDispense.getLocationId()) + // 产品批号 + .setLotNumber(deviceDispense.getLotNumber()) + // 追溯码 + .setTraceNo(item) + // 追溯码状态 + .setStatusEnum(TraceNoStatus.OUT.getValue()) + // 追溯码单位 + .setUnitCode(deviceDispense.getUnitCode()) + // 操作类型 + .setOperationType(SupplyType.DISPENSE_MEDICATION.getValue()); + tracesNoManageList.add(traceNoManage); + } + } + } + // 药品发放更新 + deviceDispenseService.updateBatchById(dispenseList); + } + } else { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 库存更新 + inventoryItemService.updateBatchById(inventoryItemList); + // 追溯码管理表数据追加 + traceNoManageService.saveBatch(tracesNoManageList); + // 返回信息 + String returnMsg = null; + List uploadFailedNoList; + // 调用医保商品销售接口 + String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); + // 医保开关 + if (Whether.YES.getCode().equals(ybSwitch)) { + // 设置进销存参数 + List deviceDefinitions = deviceDefinitionService.listByIds( + supplyItemDetailList.stream().map(SupplyItemDetailDto::getItemId).collect(Collectors.toList())); + // 用itemId分组 + Map deviceMap = + deviceDefinitions.stream().collect(Collectors.toMap(DeviceDefinition::getId, Function.identity())); + // 设置库存变更参数 + for (SupplyItemDetailDto dto : supplyItemDetailList) { + if (CommonConstants.TableName.ADM_DEVICE_DEFINITION.equals(dto.getItemTable())) { + DeviceDefinition dev = deviceMap.get(dto.getItemId()); + if (dev != null) { + dto.setItemBusNo(dev.getBusNo()).setPartPercent(dev.getPartPercent()).setRxFlag(dev.getRxFlag()) + .setYbNo(dev.getYbNo()); + } + } + } + uploadFailedNoList = westernMedicineDispenseAppService.ybMedicineIntegrated(null, devDispenseIdList); + uploadFailedNoList = receiptApprovalAppService.ybInventoryIntegrated(supplyItemDetailList, + YbInvChgType.OTHER_OUT, DateUtils.getNowDate()); + if (uploadFailedNoList != null) { + returnMsg = "3505商品销售上传错误,错误项目编码" + uploadFailedNoList; + } else { + returnMsg = "3505商品销售上传成功"; + } + } + return R.ok(returnMsg, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + + /** + * 发放耗材 + * + * @param chargeItemIds 耗材收费单ids + * @return 处理结果 + */ + @Override + public R dispenseMedicalConsumables(List chargeItemIds) { + // 查看所属医院 + String fixmedinsCode = + SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.FIXMEDINS_CODE); + if (!HospitalCodeEnum.CCU.getCode().equals(fixmedinsCode)) { + return R.ok(); + } + List chargeItemList = chargeItemService.listByIds(chargeItemIds); + if (chargeItemList == null || chargeItemList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + List inventoryItemList = new ArrayList<>(); + // 获取发申请id列表 + List devRequestIdList = + chargeItemList.stream().map(ChargeItem::getServiceId).collect(Collectors.toList()); + // 获取耗材发放id列表 + List devDispenseIdList = deviceDispenseService + .list(new LambdaQueryWrapper().in(DeviceDispense::getDeviceReqId, devRequestIdList)) + .stream().map(DeviceDispense::getId).collect(Collectors.toList()); + // 获取库存信息 + List inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null, + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); + // 按每个耗材分组 + Map> groupedByItemId = + inventoryList.stream().collect(Collectors.groupingBy(InventoryDto::getItemId)); + // 遍历每个分组校验库存状态 + for (Map.Entry> entry : groupedByItemId.entrySet()) { + List groupItems = entry.getValue(); + if (groupItems.stream().map(InventoryDto::getInventoryStatusEnum) + .allMatch(x -> x.equals(PublicationStatus.RETIRED.getValue()))) { + // 库存停供校验 + return R.fail(groupItems.get(0).getItemName() + "库存已停供"); + } + } + if (!inventoryList.isEmpty()) { + for (InventoryDto inventoryDto : inventoryList) { + if (PublicationStatus.ACTIVE.getValue().equals(inventoryDto.getInventoryStatusEnum())) { + InventoryItem inventoryItem = new InventoryItem(); + // 库存数量判定 + if (inventoryDto.getDispenseUnit().equals(inventoryDto.getInventoryUnitCode())) { + // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量 + BigDecimal quantity = inventoryDto.getInventoryQuantity().subtract(inventoryDto.getQuantity()); + // 库存数量判定 + if (quantity.compareTo(BigDecimal.ZERO) < 0) { + // 库存数量不足 + return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); + } else { + inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); + } + } else { + // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量) + BigDecimal quantity = inventoryDto.getInventoryQuantity() + .subtract(inventoryDto.getPartPercent().multiply(inventoryDto.getQuantity())); + // 库存数量判定 + if (quantity.compareTo(BigDecimal.ZERO) < 0) { + // 库存数量不足 + return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); + } else { + inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); + } + } + inventoryItemList.add(inventoryItem); + } + } + } + // 发耗材信息查询 + List dispenseList = deviceDispenseService + .list(new LambdaQueryWrapper().in(DeviceDispense::getId, devDispenseIdList)); + List supplyItemDetailList = new ArrayList<>(); + if (dispenseList != null) { + if (dispenseList.stream().map(DeviceDispense::getStatusEnum) + .anyMatch(x -> x.equals(DispenseStatus.COMPLETED.getValue()))) { + throw new ServiceException("耗材已发放,请勿重复操作"); + } else { + for (DeviceDispense deviceDispense : dispenseList) { + // 耗材发放状态 + deviceDispense.setStatusEnum(DispenseStatus.COMPLETED.getValue()); + // 发药数量 + deviceDispense.setDispenseQuantity(deviceDispense.getQuantity()); + // 发药时间 + deviceDispense.setDispenseTime(DateUtils.getNowDate()); + // 发药人(长大写死发耗材人) + deviceDispense.setPerformerId(CommonConstants.CCU.DisDeviceDoctor); + // 根据数量设置追溯码 + deviceDispense.setTraceNo(String.join(CommonConstants.Common.COMMA, Collections + .nCopies(deviceDispense.getQuantity().intValue(), CommonConstants.Common.DEV_TRACE_NO))); + // 设置库存变更参数 + supplyItemDetailList.add(new SupplyItemDetailDto().setItemId(deviceDispense.getDeviceDefId()) + .setLotNumber(deviceDispense.getLotNumber()) + .setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION)); + } + // 药品发放更新 + deviceDispenseService.updateBatchById(dispenseList); + } + } else { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 库存更新 + inventoryItemService.updateBatchById(inventoryItemList); + // 返回信息 + String returnMsg = null; + // 调用医保商品销售接口 + String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); + List uploadFailedNoList = new ArrayList<>(); + // 医保开关 + if (Whether.YES.getCode().equals(ybSwitch)) { + // 设置进销存参数 + List deviceDefinitions = deviceDefinitionService.listByIds( + supplyItemDetailList.stream().map(SupplyItemDetailDto::getItemId).collect(Collectors.toList())); + // 用itemId分组 + Map deviceMap = + deviceDefinitions.stream().collect(Collectors.toMap(DeviceDefinition::getId, Function.identity())); + // 设置库存变更参数 + for (SupplyItemDetailDto dto : supplyItemDetailList) { + if (CommonConstants.TableName.ADM_DEVICE_DEFINITION.equals(dto.getItemTable())) { + DeviceDefinition dev = deviceMap.get(dto.getItemId()); + if (dev != null) { + dto.setItemBusNo(dev.getBusNo()).setPartPercent(dev.getPartPercent()).setRxFlag(dev.getRxFlag()) + .setYbNo(dev.getYbNo()); + } + } + } + uploadFailedNoList = westernMedicineDispenseAppService.ybMedicineIntegrated(null, devDispenseIdList); + uploadFailedNoList = receiptApprovalAppService.ybInventoryIntegrated(supplyItemDetailList, + YbInvChgType.OTHER_OUT, DateUtils.getNowDate()); + if (uploadFailedNoList != null) { + returnMsg = "3505商品销售上传错误,错误项目编码" + uploadFailedNoList; + } else { + returnMsg = "3505商品销售上传成功"; + } + } + return R.ok(returnMsg, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + + /** + * 作废 + * + * @param dispenseDeviceList 作废信息 + * @return 处理结果 + */ + @Override + public R deviceCancel(List dispenseDeviceList) { + // 获取发材料单id列表 + List devDispenseIdList = + dispenseDeviceList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList()); + // 材料发放信息查询 + List dispenseList = deviceDispenseService + .list(new LambdaQueryWrapper().in(DeviceDispense::getId, devDispenseIdList)); + if (dispenseList != null) { + for (DeviceDispense medicationDispense : dispenseList) { + // 材料发放状态 + medicationDispense.setStatusEnum(DispenseStatus.DECLINED.getValue()); + // 未发药原因 + medicationDispense.setNotPerformedReasonEnum(dispenseDeviceList.get(0).getNotPerformedReasonEnum()); + } + // 药品发放更新 + deviceDispenseService.updateBatchById(dispenseList); + } else { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicationDetailsAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicationDetailsAppServiceImpl.java index ec8f6ab2..46dd4fc8 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicationDetailsAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicationDetailsAppServiceImpl.java @@ -78,14 +78,16 @@ public class MedicationDetailsAppServiceImpl implements IMedicationDetailsAppSer @Override public R getAmbPractitionerDetailPage(MedDetailsSearchParam medDetailsSearchParam, Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) { - + Integer flg = medDetailsSearchParam.getFlag(); + medDetailsSearchParam.setFlag(null); // 构建查询条件 QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(medDetailsSearchParam, searchKey, new HashSet<>(Arrays.asList("patient_name", "medication_name", "bus_no", "py_str")), request); - Page medDetailsPage = medicationDetailsMapper.selectAmbPractitionerDetailPage( - new Page<>(pageNo, pageSize), queryWrapper, EncounterClass.AMB.getValue(), - DispenseStatus.COMPLETED.getValue(), DispenseStatus.REFUNDED.getValue(), 1); + Page medDetailsPage = + medicationDetailsMapper.selectAmbPractitionerDetailPage(new Page<>(pageNo, pageSize), queryWrapper, + EncounterClass.AMB.getValue(), DispenseStatus.COMPLETED.getValue(), RequestStatus.COMPLETED.getValue(), + DispenseStatus.REFUNDED.getValue(), 1, flg); return R.ok(medDetailsPage); @@ -105,13 +107,17 @@ public class MedicationDetailsAppServiceImpl implements IMedicationDetailsAppSer public R getAmbMedicationDispenseDetailPage(MedDetailsSearchParam medDetailsSearchParam, Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) { + Integer flg = medDetailsSearchParam.getFlag(); + medDetailsSearchParam.setFlag(null); + // 构建查询条件 QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(medDetailsSearchParam, searchKey, new HashSet<>(Arrays.asList("patient_name", "medication_name", "bus_no", "py_str")), request); - Page medDetailsPage = medicationDetailsMapper.selectAmbPractitionerDetailPage( - new Page<>(pageNo, pageSize), queryWrapper, EncounterClass.AMB.getValue(), - DispenseStatus.COMPLETED.getValue(), DispenseStatus.REFUNDED.getValue(), 2); + Page medDetailsPage = + medicationDetailsMapper.selectAmbPractitionerDetailPage(new Page<>(pageNo, pageSize), queryWrapper, + EncounterClass.AMB.getValue(), DispenseStatus.COMPLETED.getValue(), RequestStatus.COMPLETED.getValue(), + DispenseStatus.REFUNDED.getValue(), 2, flg); return R.ok(medDetailsPage); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IReturnMedicineAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/ReturnMedicineAppServiceImpl.java similarity index 79% rename from openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IReturnMedicineAppServiceImpl.java rename to openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/ReturnMedicineAppServiceImpl.java index 7378db66..2d3ab162 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IReturnMedicineAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/ReturnMedicineAppServiceImpl.java @@ -2,11 +2,12 @@ package com.openhis.web.pharmacymanage.appservice.impl; import java.math.BigDecimal; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.alibaba.fastjson.JSONArray; @@ -21,6 +22,7 @@ import com.openhis.administration.service.*; import com.openhis.common.constant.CommonConstants; import com.openhis.common.constant.PromptMsgConstant; import com.openhis.common.enums.*; +import com.openhis.common.enums.ybenums.YbInvChgType; import com.openhis.common.enums.ybenums.YbMdtrtCertType; import com.openhis.common.enums.ybenums.YbRxFlag; import com.openhis.common.utils.EnumUtils; @@ -29,9 +31,13 @@ import com.openhis.financial.domain.Contract; import com.openhis.financial.domain.PaymentReconciliation; import com.openhis.financial.service.IContractService; import com.openhis.financial.service.IPaymentReconciliationService; +import com.openhis.medication.domain.MedicationDefinition; import com.openhis.medication.domain.MedicationDispense; +import com.openhis.medication.service.IMedicationDefinitionService; import com.openhis.medication.service.IMedicationDispenseService; import com.openhis.medication.service.IMedicationRequestService; +import com.openhis.web.inventorymanage.appservice.impl.ReceiptApprovalAppServiceImpl; +import com.openhis.web.inventorymanage.dto.SupplyItemDetailDto; import com.openhis.web.pharmacymanage.appservice.IReturnMedicineAppService; import com.openhis.web.pharmacymanage.dto.*; import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper; @@ -43,7 +49,6 @@ import com.openhis.workflow.service.IInventoryItemService; import com.openhis.yb.domain.ClinicSettle; import com.openhis.yb.dto.Medical3506Param; import com.openhis.yb.service.IClinicSettleService; -import com.openhis.yb.service.IRegService; import com.openhis.yb.service.YbManager; /** @@ -53,58 +58,64 @@ import com.openhis.yb.service.YbManager; * @date 2025/4/4 */ @Service -public class IReturnMedicineAppServiceImpl implements IReturnMedicineAppService { +public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService { - @Autowired + @Resource private ITraceNoManageService traceNoManageService; - @Autowired + @Resource private IOrganizationService iOrganizationService; - @Autowired + @Resource private IInventoryItemService iInventoryItemService; - @Autowired + @Resource private ReturnMedicineMapper returnMedicineMapper; - @Autowired + @Resource private IMedicationRequestService medicationRequestService; - @Autowired + @Resource private IMedicationDispenseService medicationDispenseService; - @Autowired + @Resource private IDeviceDispenseService deviceDispenseService; - @Autowired + @Resource private IDeviceRequestService deviceRequestService; - @Autowired + @Resource private AssignSeqUtil assignSeqUtil; - @Autowired + @Resource private YbManager ybService; - @Autowired + @Resource private IChargeItemService iChargeItemService; - @Autowired + @Resource private IPaymentReconciliationService iPaymentReconciliationService; - @Autowired + @Resource private IContractService iContractService; - @Autowired + @Resource private IClinicSettleService clinicSettleService; - @Autowired + @Resource private IEncounterDiagnosisService encounterDiagnosisService; - @Autowired + @Resource private IAccountService accountService; - @Autowired - private IRegService iRegService; + @Resource + private IDeviceDefinitionService deviceDefinitionService; + + @Resource + private IMedicationDefinitionService medicationDefinitionService; + + @Resource + private ReceiptApprovalAppServiceImpl receiptApprovalAppService; /** * 获取页面初始化信息 @@ -136,7 +147,7 @@ public class IReturnMedicineAppServiceImpl implements IReturnMedicineAppService /** * 查询退药患者分页列表 * - * @param encounterInfoPageDto 查询条件 + * @param encounterInfoDto 查询条件 * @param searchKey 模糊查询关键字 * @param pageNo 当前页码 * @param pageSize 查询条数 @@ -144,16 +155,15 @@ public class IReturnMedicineAppServiceImpl implements IReturnMedicineAppService * @return 退药患者分页列表 */ @Override - public R getReturnMedicinePatientPage(EncounterInfoPageDto encounterInfoPageDto, String searchKey, - Integer pageNo, Integer pageSize, HttpServletRequest request) { + public R getReturnMedicinePatientPage(EncounterInfoDto encounterInfoDto, String searchKey, Integer pageNo, + Integer pageSize, HttpServletRequest request) { // 构建查询条件 - QueryWrapper queryWrapper = - HisQueryUtils.buildQueryWrapper(encounterInfoPageDto, searchKey, - new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.idCard, - CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientWbStr)), - request); + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(encounterInfoDto, searchKey, + new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.idCard, + CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientWbStr)), + request); // 查询退药患者分页列表 - Page encounterInfoPage = returnMedicineMapper + Page encounterInfoPage = returnMedicineMapper .selectEncounterInfoListPage(new Page<>(pageNo, pageSize), queryWrapper, EncounterClass.AMB.getValue()); encounterInfoPage.getRecords().forEach(encounterInfo -> { // 性别 @@ -177,21 +187,6 @@ public class IReturnMedicineAppServiceImpl implements IReturnMedicineAppService */ @Override public R getReturnMedicineInfo(Long encounterId, Integer refundStatus) { - - // // 患者基本信息查询 - // PrescriptionPatientInfoDto prescriptionPatientInfoDto = - // returnMedicineMapper.selectPrescriptionPatientInfo(encounterId); - // // 年龄 - // prescriptionPatientInfoDto.setAge(AgeCalculatorUtil.getAge(prescriptionPatientInfoDto.getBirthDate())); - // // 性别 - // prescriptionPatientInfoDto.setGenderEnum_enumText( - // EnumUtils.getInfoByValue(AdministrativeGender.class, prescriptionPatientInfoDto.getGenderEnum())); - // // 合同类型 - // if (StringUtils.isNotNull(prescriptionPatientInfoDto.getCategoryEnum())) { - // prescriptionPatientInfoDto.setCategoryEnum_enumText( - // EnumUtils.getInfoByValue(FinCategory.class, prescriptionPatientInfoDto.getCategoryEnum())); - // } - // 获取退药信息 List returnMedicineInfoList = returnMedicineMapper.selectReturnMedicineInfo(encounterId, CommonConstants.TableName.WOR_DEVICE_REQUEST, CommonConstants.TableName.MED_MEDICATION_REQUEST, @@ -205,7 +200,6 @@ public class IReturnMedicineAppServiceImpl implements IReturnMedicineAppService returnMedicineInfoDto.setReqStatus_enumText( EnumUtils.getInfoByValue(RequestStatus.class, returnMedicineInfoDto.getReqStatus())); }); - return R.ok(returnMedicineInfoList); } @@ -255,6 +249,7 @@ public class IReturnMedicineAppServiceImpl implements IReturnMedicineAppService } // 退药单列表 List medicationRefundList = new ArrayList<>(); + List supplyItemDetailList = new ArrayList<>(); if (!medDispenseIdList.isEmpty()) { // 药品已发放信息查询 List medicationDispenseList = medicationDispenseService @@ -279,31 +274,37 @@ public class IReturnMedicineAppServiceImpl implements IReturnMedicineAppService medicationDispense.setPractitionerId(SecurityUtils.getLoginUser().getPractitionerId()); medicationDispense.setId(null); medicationRefundList.add(medicationDispense); - // 使用逗号分割追溯码并转换为List - String[] traceNoList = medicationDispense.getTraceNo().split(CommonConstants.Common.COMMA); - for (String item : traceNoList) { - traceNoManage = new TraceNoManage(); - // 追溯码处理 - traceNoManage.setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION) - // 项目id - .setItemId(medicationDispense.getMedicationId()) - // 仓库类型 - .setLocationTypeEnum(null) - // 仓库 - .setLocationId(medicationDispense.getLocationId()) - // 仓位 - .setLocationStoreId(null) - // 产品批号 - .setLotNumber(medicationDispense.getLotNumber()) - // 追溯码 - .setTraceNo(item) - // 追溯码状态 - .setStatusEnum(TraceNoStatus.IN.getValue()) - // 追溯码单位 - .setUnitCode(medicationDispense.getUnitCode()) - // 操作类型 - .setOperationType(SupplyType.RETURN_MEDICATION.getValue()); - traceNoManageList.add(traceNoManage); + // 设置库存变更参数 + supplyItemDetailList.add(new SupplyItemDetailDto() + .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION) + .setItemId(medicationDispense.getMedicationId()).setLotNumber(medicationDispense.getLotNumber())); + if (medicationDispense.getTraceNo() != null) { + // 使用逗号分割追溯码并转换为List + String[] traceNoList = medicationDispense.getTraceNo().split(CommonConstants.Common.COMMA); + for (String item : traceNoList) { + traceNoManage = new TraceNoManage(); + // 追溯码处理 + traceNoManage.setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION) + // 项目id + .setItemId(medicationDispense.getMedicationId()) + // 仓库类型 + .setLocationTypeEnum(null) + // 仓库 + .setLocationId(medicationDispense.getLocationId()) + // 仓位 + .setLocationStoreId(null) + // 产品批号 + .setLotNumber(medicationDispense.getLotNumber()) + // 追溯码 + .setTraceNo(item) + // 追溯码状态 + .setStatusEnum(TraceNoStatus.IN.getValue()) + // 追溯码单位 + .setUnitCode(medicationDispense.getUnitCode()) + // 操作类型 + .setOperationType(SupplyType.RETURN_MEDICATION.getValue()); + traceNoManageList.add(traceNoManage); + } } } medicationDispenseService.saveBatch(medicationRefundList); @@ -342,8 +343,8 @@ public class IReturnMedicineAppServiceImpl implements IReturnMedicineAppService if (returnDeviceDto.getDispenseId().equals(deviceDispense.getId())) { deviceDispense.setDeviceReqId(returnDeviceDto.getRequestId()); // 根据数量设置追溯码 - deviceDispense.setTraceNo(String.join(CommonConstants.Common.COMMA, - Collections.nCopies(deviceDispense.getQuantity(), CommonConstants.Common.DEV_TRACE_NO))); + deviceDispense.setTraceNo(String.join(CommonConstants.Common.COMMA, Collections + .nCopies(deviceDispense.getQuantity().intValue(), CommonConstants.Common.DEV_TRACE_NO))); } } // 退药时间 @@ -352,6 +353,10 @@ public class IReturnMedicineAppServiceImpl implements IReturnMedicineAppService deviceDispense.setStatusEnum(DispenseStatus.REFUNDED.getValue()); deviceDispense.setId(null); devRefundList.add(deviceDispense); + // 设置库存变更参数 + supplyItemDetailList + .add(new SupplyItemDetailDto().setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION) + .setItemId(deviceDispense.getDeviceDefId()).setLotNumber(deviceDispense.getLotNumber())); // // 使用逗号分割追溯码并转换为List // String[] traceNoList = deviceDispense.getTraceNo().split(CommonConstants.Common.COMMA); // for (String item : traceNoList) { @@ -408,18 +413,49 @@ public class IReturnMedicineAppServiceImpl implements IReturnMedicineAppService // 库存更新 iInventoryItemService.updateBatchById(inventoryItemList); // 追溯码管理表数据追加 - boolean result = traceNoManageService.saveBatch(traceNoManageList); - if (!result) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } + traceNoManageService.saveBatch(traceNoManageList); } // 返回信息 String returnMsg = null; + List uploadFailedNoList; // 调用医保商品销售退货接口 String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关 if (Whether.YES.getCode().equals(ybSwitch)) { if (!medicationRefundList.isEmpty() || !devRefundList.isEmpty()) { - List uploadFailedNoList = this.ybReturnIntegrated(medDispenseIdList, devDispenseIdList); + // 设置进销存参数 + List medicationDefinitions = + medicationDefinitionService.listByIds(supplyItemDetailList.stream() + .filter(x -> x.getItemTable().equals(CommonConstants.TableName.MED_MEDICATION_DEFINITION)) + .map(SupplyItemDetailDto::getItemId).collect(Collectors.toList())); + List deviceDefinitions = deviceDefinitionService.listByIds(supplyItemDetailList + .stream().filter(x -> x.getItemTable().equals(CommonConstants.TableName.ADM_DEVICE_DEFINITION)) + .map(SupplyItemDetailDto::getItemId).collect(Collectors.toList())); + + // 用itemId分组 + Map medicationMap = medicationDefinitions.stream() + .collect(Collectors.toMap(MedicationDefinition::getId, Function.identity())); + Map deviceMap = + deviceDefinitions.stream().collect(Collectors.toMap(DeviceDefinition::getId, Function.identity())); + + // 设置库存变更参数 + for (SupplyItemDetailDto dto : supplyItemDetailList) { + if (CommonConstants.TableName.MED_MEDICATION_DEFINITION.equals(dto.getItemTable())) { + MedicationDefinition med = medicationMap.get(dto.getItemId()); + if (med != null) { + dto.setItemBusNo(med.getBusNo()).setPartPercent(med.getPartPercent()) + .setRxFlag(med.getRxFlag()).setYbNo(med.getYbNo()); + } + } else if (CommonConstants.TableName.ADM_DEVICE_DEFINITION.equals(dto.getItemTable())) { + DeviceDefinition dev = deviceMap.get(dto.getItemId()); + if (dev != null) { + dto.setItemBusNo(dev.getBusNo()).setPartPercent(dev.getPartPercent()) + .setRxFlag(dev.getRxFlag()).setYbNo(dev.getYbNo()); + } + } + } + uploadFailedNoList = this.ybReturnIntegrated(medDispenseIdList, devDispenseIdList); + uploadFailedNoList = receiptApprovalAppService.ybInventoryIntegrated(supplyItemDetailList, + YbInvChgType.OTHER_OUT, DateUtils.getNowDate()); if (uploadFailedNoList != null) { returnMsg = "3506商品销售退货上传错误,错误项目编码" + uploadFailedNoList; } else { @@ -556,8 +592,7 @@ public class IReturnMedicineAppServiceImpl implements IReturnMedicineAppService .setManuDate(dispenseInventoryDto.getProductionDate()) .setSelRetnCnt(new BigDecimal(dispenseInventoryDto.getDispenseQuantity().toString())) .setSelRetnTime(dispenseInventoryDto.getDispenseTime()).setExpyEnd(dispenseInventoryDto.getExpirationDate()) - .setMedinsProdSelNo(dispenseInventoryDto.getDispenseNo()).setDrugtracinfo(medicalTraceNo) - .setCertno(dispenseInventoryDto.getIdCard()); + .setDrugtracinfo(medicalTraceNo).setCertno(dispenseInventoryDto.getIdCard()); // 查看所属医院 String fixmedinsCode = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.FIXMEDINS_CODE); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IWesternMedicineDispenseAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/WesternMedicineDispenseAppServiceImpl.java similarity index 61% rename from openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IWesternMedicineDispenseAppServiceImpl.java rename to openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/WesternMedicineDispenseAppServiceImpl.java index b932f236..d5b30dfa 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IWesternMedicineDispenseAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/WesternMedicineDispenseAppServiceImpl.java @@ -2,13 +2,13 @@ package com.openhis.web.pharmacymanage.appservice.impl; import java.math.BigDecimal; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.alibaba.fastjson.JSONArray; @@ -16,16 +16,17 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.core.common.core.domain.R; -import com.core.common.core.domain.entity.SysDictData; import com.core.common.exception.ServiceException; -import com.core.common.utils.*; -import com.core.system.mapper.SysDictDataMapper; +import com.core.common.utils.AgeCalculatorUtil; +import com.core.common.utils.DateUtils; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; import com.openhis.administration.domain.*; import com.openhis.administration.service.*; -import com.openhis.clinical.service.IAllergyIntoleranceService; import com.openhis.common.constant.CommonConstants; import com.openhis.common.constant.PromptMsgConstant; import com.openhis.common.enums.*; +import com.openhis.common.enums.ybenums.YbInvChgType; import com.openhis.common.enums.ybenums.YbMdtrtCertType; import com.openhis.common.enums.ybenums.YbRxFlag; import com.openhis.common.utils.EnumUtils; @@ -34,18 +35,18 @@ import com.openhis.financial.domain.Contract; import com.openhis.financial.domain.PaymentReconciliation; import com.openhis.financial.service.IContractService; import com.openhis.financial.service.IPaymentReconciliationService; +import com.openhis.medication.domain.MedicationDefinition; import com.openhis.medication.domain.MedicationDispense; +import com.openhis.medication.service.IMedicationDefinitionService; import com.openhis.medication.service.IMedicationDispenseService; -import com.openhis.medication.service.IMedicationRequestService; -import com.openhis.web.inventorymanage.appservice.ITraceNoAppService; +import com.openhis.web.inventorymanage.appservice.impl.ReceiptApprovalAppServiceImpl; +import com.openhis.web.inventorymanage.dto.SupplyItemDetailDto; import com.openhis.web.pharmacymanage.appservice.IWesternMedicineDispenseAppService; import com.openhis.web.pharmacymanage.dto.*; import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper; import com.openhis.web.pharmacymanage.mapper.WesternMedicineDispenseMapper; import com.openhis.workflow.domain.InventoryItem; -import com.openhis.workflow.domain.ServiceRequest; import com.openhis.workflow.service.IInventoryItemService; -import com.openhis.workflow.service.IServiceRequestService; import com.openhis.yb.domain.ClinicSettle; import com.openhis.yb.dto.Medical3505Param; import com.openhis.yb.service.IClinicSettleService; @@ -60,62 +61,53 @@ import reactor.util.annotation.Nullable; * @date 2025/3/14 */ @Service -public class IWesternMedicineDispenseAppServiceImpl implements IWesternMedicineDispenseAppService { - - @Autowired - private ITraceNoAppService traceNoAppService; - - @Autowired - private IOrganizationService organizationService; - - @Autowired - private IMedicationDispenseService medicationDispenseService; - - @Autowired - private IInventoryItemService iInventoryItemService; - - @Autowired - private IMedicationRequestService medicationRequestService; - - @Autowired - private WesternMedicineDispenseMapper westernMedicineDispenseMapper; - - @Autowired - private ReturnMedicineMapper returnMedicineMapper; - - @Autowired - private YbManager ybService; - - @Autowired - private IChargeItemService iChargeItemService; - - @Autowired - private IPaymentReconciliationService iPaymentReconciliationService; - - @Autowired - private IContractService iContractService; - - @Autowired - private IAccountService accountService; - - @Autowired - private IClinicSettleService clinicSettleService; - - @Autowired - private IEncounterDiagnosisService encounterDiagnosisService; - - @Autowired - private IServiceRequestService serviceRequestService; - - @Autowired - private IAllergyIntoleranceService allergyIntoleranceService; +public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDispenseAppService { @Resource - private SysDictDataMapper sysDictDataMapper; + private IOrganizationService organizationService; - @Autowired + @Resource + private IMedicationDispenseService medicationDispenseService; + + @Resource + private IInventoryItemService inventoryItemService; + + @Resource + private WesternMedicineDispenseMapper westernMedicineDispenseMapper; + + @Resource + private ReturnMedicineMapper returnMedicineMapper; + + @Resource + private YbManager ybService; + + @Resource + private IChargeItemService chargeItemService; + + @Resource + private IPaymentReconciliationService paymentReconciliationService; + + @Resource + private IContractService contractService; + + @Resource + private IAccountService accountService; + + @Resource + private IClinicSettleService clinicSettleService; + + @Resource + private IEncounterDiagnosisService encounterDiagnosisService; + + @Resource private ITraceNoManageService traceNoManageService; + @Resource + private ReceiptApprovalAppServiceImpl receiptApprovalAppService; + + @Resource + private IMedicationDefinitionService medicationDefinitionService; + /** * 获取页面初始化信息 * @@ -147,6 +139,12 @@ public class IWesternMedicineDispenseAppServiceImpl implements IWesternMedicineD notPerformedReason.getInfo())) .collect(Collectors.toList()); + // 患者类型 + List encounterClassOptions = Stream.of(EncounterClass.values()) + .map(encounterClass -> new DispenseInitDto.EncounterClassOption(encounterClass.getValue(), + encounterClass.getInfo())) + .toList(); + // 发药状态 List dispenseStatusOptions = new ArrayList<>(); dispenseStatusOptions.add(new DispenseInitDto.DispenseStatusOption(DispenseStatus.IN_PROGRESS.getValue(), @@ -155,37 +153,38 @@ public class IWesternMedicineDispenseAppServiceImpl implements IWesternMedicineD DispenseStatus.COMPLETED.getInfo())); initDto.setDepartmentOptions(organizationOptions).setNotPerformedReasonOptions(notPerformedReasonOptions) - .setDispenseStatusOptions(dispenseStatusOptions).setPreparerDoctorOptions(preparerDoctorOptions); + .setDispenseStatusOptions(dispenseStatusOptions).setPreparerDoctorOptions(preparerDoctorOptions) + .setEncounterClassOptions(encounterClassOptions); return R.ok(initDto); } /** - * 分页查询发药病人列表 + * 分页查询病人列表 * - * @param encounterInfoPageDto 查询条件 + * @param encounterInfoSearchParam 查询条件 * @param searchKey 模糊查询关键字 * @param pageNo 当前页码 * @param pageSize 查询条数 * @param request 请求数据 - * @return 发药病人列表 + * @return 病人列表 */ @Override - public R getEncounterInfoListPage(EncounterInfoPageDto encounterInfoPageDto, String searchKey, Integer pageNo, - Integer pageSize, HttpServletRequest request) { + public R getEncounterInfoListPage(EncounterInfoSearchParam encounterInfoSearchParam, String searchKey, + Integer pageNo, Integer pageSize, HttpServletRequest request) { // 发药状态初始化 - Integer statusEnum = encounterInfoPageDto.getStatusEnum(); - encounterInfoPageDto.setStatusEnum(null); + Integer statusEnum = encounterInfoSearchParam.getStatusEnum(); + encounterInfoSearchParam.setStatusEnum(null); // 构建查询条件 - QueryWrapper queryWrapper = - HisQueryUtils.buildQueryWrapper(encounterInfoPageDto, searchKey, + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(encounterInfoSearchParam, searchKey, new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.idCard, CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientWbStr)), request); // 查询就诊病人列表 - Page encounterInfoPage = westernMedicineDispenseMapper.selectEncounterInfoListPage( - new Page<>(pageNo, pageSize), queryWrapper, statusEnum, DispenseStatus.IN_PROGRESS.getValue(), - DispenseStatus.COMPLETED.getValue(), DispenseStatus.PREPARATION.getValue(), - DispenseStatus.PREPARED.getValue(), EncounterClass.AMB.getValue()); + Page encounterInfoPage = + westernMedicineDispenseMapper.selectEncounterInfoListPage(new Page<>(pageNo, pageSize), queryWrapper, + statusEnum, DispenseStatus.IN_PROGRESS.getValue(), DispenseStatus.COMPLETED.getValue(), + DispenseStatus.PREPARATION.getValue(), DispenseStatus.PREPARED.getValue()); encounterInfoPage.getRecords().forEach(encounterInfo -> { // 性别 encounterInfo.setGenderEnum_enumText( @@ -193,6 +192,10 @@ public class IWesternMedicineDispenseAppServiceImpl implements IWesternMedicineD // 发药状态 encounterInfo .setStatusEnum_enumText(EnumUtils.getInfoByValue(DispenseStatus.class, encounterInfo.getStatusEnum())); + if (encounterInfo.getBirthDate() != null) { + // 计算年龄 + encounterInfo.setAge(AgeCalculatorUtil.getAge(encounterInfo.getBirthDate())); + } }); return R.ok(encounterInfoPage); } @@ -200,118 +203,33 @@ public class IWesternMedicineDispenseAppServiceImpl implements IWesternMedicineD /** * 处方单查询 * - * @param prescriptionMedicineInfoDto 查询信息 + * @param itemDispenseOrderDto 查询信息 * @param pageNo 当前页码 * @param pageSize 查询条数 * @return 处方单 */ @Override - public R getPrescriptionInfo(PrescriptionMedicineInfoDto prescriptionMedicineInfoDto, Integer pageNo, + public R getMedicineDispenseOrderList(ItemDispenseOrderDto itemDispenseOrderDto, Integer pageNo, Integer pageSize) { // 发药状态初始化 - Integer dispenseStatus = prescriptionMedicineInfoDto.getStatusEnum(); - prescriptionMedicineInfoDto.setStatusEnum(null); - + Integer dispenseStatus = itemDispenseOrderDto.getStatusEnum(); + itemDispenseOrderDto.setStatusEnum(null); // 构建查询条件 - QueryWrapper queryWrapper = - HisQueryUtils.buildQueryWrapper(prescriptionMedicineInfoDto, null, null, null); - - // 获取所属医院id - Long hospitalId = SecurityUtils.getLoginUser().getHospitalId(); - // 患者基本信息查询 - PrescriptionPatientInfoDto prescriptionPatientInfoDto = westernMedicineDispenseMapper - .selectPrescriptionPatientInfo(prescriptionMedicineInfoDto.getEncounterId(), hospitalId); - - // 年龄 - prescriptionPatientInfoDto.setAge(AgeCalculatorUtil.getAge(prescriptionPatientInfoDto.getBirthDate())); - // 性别 - prescriptionPatientInfoDto.setGenderEnum_enumText( - EnumUtils.getInfoByValue(AdministrativeGender.class, prescriptionPatientInfoDto.getGenderEnum())); - + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(itemDispenseOrderDto, null, null, null); // 处方单信息查询 - - Page prescriptionMedicineInfoPage = - westernMedicineDispenseMapper.selectPrescriptionMedicineInfoList(new Page<>(pageNo, pageSize), queryWrapper, + Page medicineDispenseOrderPage = + westernMedicineDispenseMapper.selectMedicineDispenseOrderPage(new Page<>(pageNo, pageSize), queryWrapper, DispenseStatus.IN_PROGRESS.getValue(), DispenseStatus.COMPLETED.getValue(), DispenseStatus.PREPARATION.getValue(), DispenseStatus.PREPARED.getValue(), dispenseStatus); - - // 查询字典值 - List unitCodeList = sysDictDataMapper.selectDictDataByType("unit_code"); - Map unitCodeLabel = unitCodeList.stream().collect( - Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel, (oldValue, newValue) -> oldValue // 如果有重复键,保留旧值 - )); - List methodCodeList = sysDictDataMapper.selectDictDataByType("method_code"); - Map methodCodeLabel = methodCodeList.stream().collect( - Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel, (oldValue, newValue) -> oldValue // 如果有重复键,保留旧值 - )); - - List prescriptionMedicineInfoList = prescriptionMedicineInfoPage.getRecords(); - Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel, (oldValue, newValue) -> oldValue // 如果有重复键,保留旧值 - ); - prescriptionMedicineInfoList.forEach(prescriptionMedicineInfo -> { + medicineDispenseOrderPage.getRecords().forEach(medicineDispenseOrder -> { // 发药状态 - prescriptionMedicineInfo.setStatusEnum_enumText( - EnumUtils.getInfoByValue(DispenseStatus.class, prescriptionMedicineInfo.getStatusEnum())); - // 匹配剂量单位字典文本 - String doseUnitCode = prescriptionMedicineInfo.getDoseUnitCode(); - String doseUnitLabel = unitCodeLabel.getOrDefault(doseUnitCode, ""); - prescriptionMedicineInfo.setDoseUnitCode_dictText(doseUnitLabel); - // 匹配单位字典文本 - String unitCode = prescriptionMedicineInfo.getUnitCode(); - String unitLabel = unitCodeLabel.getOrDefault(unitCode, ""); - prescriptionMedicineInfo.setUnitCode_dictText(unitLabel); - // 匹配用法字典文本 - String methodCode = prescriptionMedicineInfo.getMethodCode(); - String methodLabel = methodCodeLabel.getOrDefault(methodCode, ""); - prescriptionMedicineInfo.setMethodCode_dictText(methodLabel); - - switch (prescriptionMedicineInfo.getPharmacologyCategoryCode()) { - case "2": // 麻醉药品 - prescriptionMedicineInfo.setPharmacologyCategoryCode_Text("麻醉"); - case "3": // 毒性药品 - prescriptionMedicineInfo.setPharmacologyCategoryCode_Text("毒性"); - case "4": // 一类精神药 - prescriptionMedicineInfo.setPharmacologyCategoryCode_Text("精一"); - case "5": // 二类精神药 - prescriptionMedicineInfo.setPharmacologyCategoryCode_Text("精二"); - default: // 普通药品 - prescriptionMedicineInfo.setPharmacologyCategoryCode_Text("普通"); - } - - // 判断是否为慢病 - if (EncounterYbClass.CHRONIC_DISEASE_OUTPATIENT.getCode() - .equals(prescriptionMedicineInfo.getMedTypeCode())) { - prescriptionMedicineInfo.setChronicDisease(Whether.YES.getInfo()); - } else { - prescriptionMedicineInfo.setChronicDisease(Whether.NO.getInfo()); - } - // 皮试flag为是时 - if (Whether.YES.getValue().equals(prescriptionMedicineInfo.getSkinTestFlag())) { - // 获取皮试结果 - ServiceRequest serReqObj = - serviceRequestService.selectByMedRequestId(prescriptionMedicineInfo.getRequestId()); - if (serReqObj != null) { - Integer clinicalStatus = allergyIntoleranceService.getPsResultByRequestId(serReqObj.getId()); - prescriptionMedicineInfo.setPsResult(ClinicalStatus.getByValue(clinicalStatus).getInfo()); - } - } else { - prescriptionMedicineInfo.setPsResult("无"); - } - + medicineDispenseOrder.setStatusEnum_enumText( + EnumUtils.getInfoByValue(DispenseStatus.class, medicineDispenseOrder.getStatusEnum())); + // 设置所在表名 + medicineDispenseOrder.setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION); }); - - // 计算合计金额 - if (!prescriptionMedicineInfoList.isEmpty()) { - double totalPrice = 0d; - for (PrescriptionMedicineInfoDto item : prescriptionMedicineInfoList) { - totalPrice += item.getTotalPrice().doubleValue(); - } - prescriptionPatientInfoDto.setTotalPrice(totalPrice); - } - PrescriptionInfoDto prescriptionInfoDto = new PrescriptionInfoDto(); - prescriptionInfoDto.setPrescriptionPatientInfoDto(prescriptionPatientInfoDto); - prescriptionInfoDto.setPrescriptionMedicineInfoDtoList(prescriptionMedicineInfoList); - return R.ok(prescriptionInfoDto); + return R.ok(medicineDispenseOrderPage); } /** @@ -321,7 +239,7 @@ public class IWesternMedicineDispenseAppServiceImpl implements IWesternMedicineD * @return 处理结果 */ @Override - public R medicinePrepare(List dispenseMedicineList) { + public R medicinePrepare(List dispenseMedicineList) { // 配药人检查 if (dispenseMedicineList.get(0).getPreparerId() == null || dispenseMedicineList.get(0).getPreparerId().equals(SecurityUtils.getLoginUser().getPractitionerId())) { @@ -329,7 +247,7 @@ public class IWesternMedicineDispenseAppServiceImpl implements IWesternMedicineD } // 获取发药单id列表 List medDispenseIdList = - dispenseMedicineList.stream().map(DispenseMedicineDto::getDispenseId).collect(Collectors.toList()); + dispenseMedicineList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList()); // 获取库存信息 List inventoryList = returnMedicineMapper.selectInventoryInfoList(null, medDispenseIdList, CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); @@ -375,8 +293,8 @@ public class IWesternMedicineDispenseAppServiceImpl implements IWesternMedicineD .list(new LambdaQueryWrapper().in(MedicationDispense::getId, medDispenseIdList)); if (dispenseList != null) { if (dispenseList.stream().map(MedicationDispense::getStatusEnum) - .anyMatch(x -> x.equals(DispenseStatus.PREPARED.getValue()))) { - throw new ServiceException("药品已配药,请勿重复配药"); + .anyMatch(x -> !x.equals(DispenseStatus.PREPARATION.getValue()))) { + throw new ServiceException("配药失败,请检查发药单状态"); } else { for (MedicationDispense medicationDispense : dispenseList) { // 药品发放状态 @@ -387,10 +305,10 @@ public class IWesternMedicineDispenseAppServiceImpl implements IWesternMedicineD medicationDispense.setPreparerId(dispenseMedicineList.get(0).getPreparerId()); // 配药时间 medicationDispense.setPrepareTime(DateUtils.getNowDate()); - for (DispenseMedicineDto dispenseMedicineDto : dispenseMedicineList) { - if (medicationDispense.getId().equals(dispenseMedicineDto.getDispenseId())) + for (DispenseItemDto dispenseItemDto : dispenseMedicineList) { + if (medicationDispense.getId().equals(dispenseItemDto.getDispenseId())) // 药品追溯码 - medicationDispense.setTraceNo(dispenseMedicineDto.getTraceNo()); + medicationDispense.setTraceNo(dispenseItemDto.getTraceNo()); } } // 药品发放更新 @@ -409,14 +327,11 @@ public class IWesternMedicineDispenseAppServiceImpl implements IWesternMedicineD * @return 处理结果 */ @Override - public R medicineDispense(List dispenseMedicineList) { + public R medicineDispense(List dispenseMedicineList) { List inventoryItemList = new ArrayList<>(); // 获取发药单id列表 List medDispenseIdList = - dispenseMedicineList.stream().map(DispenseMedicineDto::getDispenseId).collect(Collectors.toList()); - // 获取药品申请id列表 - List medRequestIdList = - dispenseMedicineList.stream().map(DispenseMedicineDto::getRequestId).collect(Collectors.toList()); + dispenseMedicineList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList()); // 获取库存信息 List inventoryList = returnMedicineMapper.selectInventoryInfoList(null, medDispenseIdList, CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); @@ -469,10 +384,11 @@ public class IWesternMedicineDispenseAppServiceImpl implements IWesternMedicineD // 追溯码列表 List tracesNoManageList = new ArrayList<>(); TraceNoManage traceNoManage; + List supplyItemDetailList = new ArrayList<>(); if (dispenseList != null) { if (dispenseList.stream().map(MedicationDispense::getStatusEnum) - .anyMatch(x -> x.equals(DispenseStatus.COMPLETED.getValue()))) { - throw new ServiceException("药品已发药,请勿重复发药"); + .anyMatch(x -> !x.equals(DispenseStatus.PREPARED.getValue()))) { + throw new ServiceException("发药失败,请检查发药单状态"); } else { for (MedicationDispense medicationDispense : dispenseList) { // 药品发放状态 @@ -485,29 +401,35 @@ public class IWesternMedicineDispenseAppServiceImpl implements IWesternMedicineD medicationDispense.setDispenseTime(DateUtils.getNowDate()); // 发药人 medicationDispense.setPractitionerId(SecurityUtils.getLoginUser().getPractitionerId()); + // 设置库存变更参数 + supplyItemDetailList.add(new SupplyItemDetailDto().setItemId(medicationDispense.getMedicationId()) + .setLotNumber(medicationDispense.getLotNumber()) + .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION)); // 使用逗号分割追溯码并转换为List - String[] traceNoList = medicationDispense.getTraceNo().split(CommonConstants.Common.COMMA); - for (String item : traceNoList) { - traceNoManage = new TraceNoManage(); - // 追溯码处理 - traceNoManage.setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION) - // 项目id - .setItemId(medicationDispense.getMedicationId()) - // 仓库类型 - .setLocationTypeEnum(LocationForm.PHARMACY.getValue()) - // 仓库 - .setLocationId(medicationDispense.getLocationId()) - // 产品批号 - .setLotNumber(medicationDispense.getLotNumber()) - // 追溯码 - .setTraceNo(item) - // 追溯码状态 - .setStatusEnum(TraceNoStatus.OUT.getValue()) - // 追溯码单位 - .setUnitCode(medicationDispense.getUnitCode()) - // 操作类型 - .setOperationType(SupplyType.DISPENSE_MEDICATION.getValue()); - tracesNoManageList.add(traceNoManage); + if (medicationDispense.getTraceNo() != null) { + String[] traceNoList = medicationDispense.getTraceNo().split(CommonConstants.Common.COMMA); + for (String item : traceNoList) { + traceNoManage = new TraceNoManage(); + // 追溯码处理 + traceNoManage.setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION) + // 项目id + .setItemId(medicationDispense.getMedicationId()) + // 仓库类型 + .setLocationTypeEnum(LocationForm.PHARMACY.getValue()) + // 仓库 + .setLocationId(medicationDispense.getLocationId()) + // 产品批号 + .setLotNumber(medicationDispense.getLotNumber()) + // 追溯码 + .setTraceNo(item) + // 追溯码状态 + .setStatusEnum(TraceNoStatus.OUT.getValue()) + // 追溯码单位 + .setUnitCode(medicationDispense.getUnitCode()) + // 操作类型 + .setOperationType(SupplyType.DISPENSE_MEDICATION.getValue()); + tracesNoManageList.add(traceNoManage); + } } } // 药品发放更新 @@ -517,18 +439,34 @@ public class IWesternMedicineDispenseAppServiceImpl implements IWesternMedicineD return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); } // 库存更新 - iInventoryItemService.updateBatchById(inventoryItemList); + inventoryItemService.updateBatchById(inventoryItemList); // 追溯码管理表数据追加 - boolean result = traceNoManageService.saveBatch(tracesNoManageList); - if (!result) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } + traceNoManageService.saveBatch(tracesNoManageList); // 返回信息 String returnMsg = null; + List uploadFailedNoList; // 调用医保商品销售接口 String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关 if (Whether.YES.getCode().equals(ybSwitch)) { - List uploadFailedNoList = this.ybMedicineIntegrated(medDispenseIdList, null); + // 设置进销存参数 + List medicationDefinitions = medicationDefinitionService.listByIds( + supplyItemDetailList.stream().map(SupplyItemDetailDto::getItemId).collect(Collectors.toList())); + // 用itemId分组 + Map medicationMap = medicationDefinitions.stream() + .collect(Collectors.toMap(MedicationDefinition::getId, Function.identity())); + // 设置库存变更参数 + for (SupplyItemDetailDto dto : supplyItemDetailList) { + if (CommonConstants.TableName.MED_MEDICATION_DEFINITION.equals(dto.getItemTable())) { + MedicationDefinition med = medicationMap.get(dto.getItemId()); + if (med != null) { + dto.setItemBusNo(med.getBusNo()).setPartPercent(med.getPartPercent()).setRxFlag(med.getRxFlag()) + .setYbNo(med.getYbNo()); + } + } + } + uploadFailedNoList = this.ybMedicineIntegrated(medDispenseIdList, null); + uploadFailedNoList = receiptApprovalAppService.ybInventoryIntegrated(supplyItemDetailList, + YbInvChgType.OTHER_OUT, DateUtils.getNowDate()); if (uploadFailedNoList != null) { returnMsg = "3505商品销售上传错误,错误项目编码" + uploadFailedNoList; } else { @@ -545,10 +483,10 @@ public class IWesternMedicineDispenseAppServiceImpl implements IWesternMedicineD * @return 处理结果 */ @Override - public R medicineCancel(List dispenseMedicineList) { + public R medicineCancel(List dispenseMedicineList) { // 获取发药单id列表 List medDispenseIdList = - dispenseMedicineList.stream().map(DispenseMedicineDto::getDispenseId).collect(Collectors.toList()); + dispenseMedicineList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList()); // 药品发药信息查询 List dispenseList = medicationDispenseService .list(new LambdaQueryWrapper().in(MedicationDispense::getId, medDispenseIdList)); @@ -604,12 +542,12 @@ public class IWesternMedicineDispenseAppServiceImpl implements IWesternMedicineD ChargeItem chargeItem = null; if (CommonConstants.TableName.MED_MEDICATION_DEFINITION.equals(dispenseInventoryDto.getItemTable())) { // 查询费用结算信息 - chargeItem = iChargeItemService.getOne(new LambdaQueryWrapper() + chargeItem = chargeItemService.getOne(new LambdaQueryWrapper() .eq(ChargeItem::getServiceTable, CommonConstants.TableName.MED_MEDICATION_REQUEST) .eq(ChargeItem::getServiceId, dispenseInventoryDto.getReqId()) .eq(ChargeItem::getTenantId, SecurityUtils.getLoginUser().getTenantId())); } else if (CommonConstants.TableName.ADM_DEVICE_DEFINITION.equals(dispenseInventoryDto.getItemTable())) { - chargeItem = iChargeItemService.getOne(new LambdaQueryWrapper() + chargeItem = chargeItemService.getOne(new LambdaQueryWrapper() .eq(ChargeItem::getServiceTable, CommonConstants.TableName.WOR_DEVICE_REQUEST) .eq(ChargeItem::getServiceId, dispenseInventoryDto.getReqId()) .eq(ChargeItem::getTenantId, SecurityUtils.getLoginUser().getTenantId())); @@ -625,7 +563,7 @@ public class IWesternMedicineDispenseAppServiceImpl implements IWesternMedicineD } // 查询付款信息 List paymentReconciliationList = - iPaymentReconciliationService.list(new LambdaQueryWrapper() + paymentReconciliationService.list(new LambdaQueryWrapper() .eq(PaymentReconciliation::getEncounterId, dispenseInventoryDto.getEncounterId()) .eq(PaymentReconciliation::getTenantId, SecurityUtils.getLoginUser().getTenantId()) .like(PaymentReconciliation::getChargeItemIds, chargeItem.getId()) @@ -646,7 +584,7 @@ public class IWesternMedicineDispenseAppServiceImpl implements IWesternMedicineD } // 查询合同实体 Contract contract = - iContractService.getOne(new LambdaQueryWrapper().eq(Contract::getBusNo, account.getContractNo())); + contractService.getOne(new LambdaQueryWrapper().eq(Contract::getBusNo, account.getContractNo())); if (contract == null) { throw new ServiceException("未查找到合同信息"); } @@ -732,107 +670,4 @@ public class IWesternMedicineDispenseAppServiceImpl implements IWesternMedicineD return medical3505Param; } - - - /** - * 处方单查询 - * - * @param locationId 库房id - * @param startTime 开始时间 - * @param endTime 结束时间 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @return 处方单 - */ - @Override - public R getMonthlySettlementPatientInfoList(Long locationId, String startTime, String endTime,Integer pageNo, Integer pageSize) { - - // 患者基本信息查询 - PrescriptionPatientInfoDto prescriptionPatientInfoDto =new PrescriptionPatientInfoDto(); - - // 处方单信息查询 - Page prescriptionMedicineInfoPage = - westernMedicineDispenseMapper.selectMonthlySettlementPatientInfoList(new Page<>(pageNo, pageSize), - locationId,startTime, endTime, DispenseStatus.COMPLETED.getValue(),ItemType.MEDICINE.getValue(), - ItemType.DEVICE.getValue()); - - // 查询字典值 - List unitCodeList = sysDictDataMapper.selectDictDataByType("unit_code"); - Map unitCodeLabel = unitCodeList.stream().collect( - Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel, (oldValue, newValue) -> oldValue // 如果有重复键,保留旧值 - )); - List methodCodeList = sysDictDataMapper.selectDictDataByType("method_code"); - Map methodCodeLabel = methodCodeList.stream().collect( - Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel, (oldValue, newValue) -> oldValue // 如果有重复键,保留旧值 - )); - - List prescriptionMedicineInfoList = prescriptionMedicineInfoPage.getRecords(); - Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel, (oldValue, newValue) -> oldValue // 如果有重复键,保留旧值 - ); - prescriptionMedicineInfoList.forEach(prescriptionMedicineInfo -> { - if(prescriptionMedicineInfo.getType().equals(ItemType.MEDICINE.getValue())){ - // 发药状态 - prescriptionMedicineInfo.setStatusEnum_enumText( - EnumUtils.getInfoByValue(DispenseStatus.class, prescriptionMedicineInfo.getStatusEnum())); - // 匹配剂量单位字典文本 - String doseUnitCode = prescriptionMedicineInfo.getDoseUnitCode(); - String doseUnitLabel = unitCodeLabel.getOrDefault(doseUnitCode, ""); - prescriptionMedicineInfo.setDoseUnitCode_dictText(doseUnitLabel); - // 匹配单位字典文本 - String unitCode = prescriptionMedicineInfo.getUnitCode(); - String unitLabel = unitCodeLabel.getOrDefault(unitCode, ""); - prescriptionMedicineInfo.setUnitCode_dictText(unitLabel); - // 匹配用法字典文本 - String methodCode = prescriptionMedicineInfo.getMethodCode(); - String methodLabel = methodCodeLabel.getOrDefault(methodCode, ""); - prescriptionMedicineInfo.setMethodCode_dictText(methodLabel); - - switch (prescriptionMedicineInfo.getPharmacologyCategoryCode()) { - case "2": // 麻醉药品 - prescriptionMedicineInfo.setPharmacologyCategoryCode_Text("麻醉"); - case "3": // 毒性药品 - prescriptionMedicineInfo.setPharmacologyCategoryCode_Text("毒性"); - case "4": // 一类精神药 - prescriptionMedicineInfo.setPharmacologyCategoryCode_Text("精一"); - case "5": // 二类精神药 - prescriptionMedicineInfo.setPharmacologyCategoryCode_Text("精二"); - default: // 普通药品 - prescriptionMedicineInfo.setPharmacologyCategoryCode_Text("普通"); - } - - // 判断是否为慢病 - if (EncounterYbClass.CHRONIC_DISEASE_OUTPATIENT.getCode() - .equals(prescriptionMedicineInfo.getMedTypeCode())) { - prescriptionMedicineInfo.setChronicDisease(Whether.YES.getInfo()); - } else { - prescriptionMedicineInfo.setChronicDisease(Whether.NO.getInfo()); - } - // 皮试flag为是时 - if (Whether.YES.getValue().equals(prescriptionMedicineInfo.getSkinTestFlag())) { - // 获取皮试结果 - ServiceRequest serReqObj = - serviceRequestService.selectByMedRequestId(prescriptionMedicineInfo.getRequestId()); - if (serReqObj != null) { - Integer clinicalStatus = allergyIntoleranceService.getPsResultByRequestId(serReqObj.getId()); - prescriptionMedicineInfo.setPsResult(ClinicalStatus.getByValue(clinicalStatus).getInfo()); - } - } else { - prescriptionMedicineInfo.setPsResult("无"); - } - } - }); - - // 计算合计金额 - if (!prescriptionMedicineInfoList.isEmpty()) { - double totalPrice = 0d; - for (PrescriptionMedicineInfoDto item : prescriptionMedicineInfoList) { - totalPrice += item.getTotalPrice().doubleValue(); - } - prescriptionPatientInfoDto.setTotalPrice(totalPrice); - } - PrescriptionInfoDto prescriptionInfoDto = new PrescriptionInfoDto(); - prescriptionInfoDto.setPrescriptionPatientInfoDto(prescriptionPatientInfoDto); - prescriptionInfoDto.setPrescriptionMedicineInfoDtoList(prescriptionMedicineInfoList); - return R.ok(prescriptionInfoDto); - } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ChineseMedicineDispenseController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ChineseMedicineDispenseController.java deleted file mode 100644 index 5e79b390..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ChineseMedicineDispenseController.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.openhis.web.pharmacymanage.controller; - -import javax.servlet.http.HttpServletRequest; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import com.core.common.core.domain.R; -import com.openhis.web.pharmacymanage.appservice.IChineseMedicineDispenseAppService; -import com.openhis.web.pharmacymanage.dto.EncounterInfoSearchParam; - -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; - -/** - * 西药发药 - * - * @author wangyang - * @date 2025/3/14 - */ -@RestController -@RequestMapping("/pharmacy-manage/chinese-medicine-dispense") -@Slf4j -@AllArgsConstructor -public class ChineseMedicineDispenseController { - - @Autowired - public IChineseMedicineDispenseAppService chineseMedicineDispenseService; - - /** - * 获取页面初始化信息 - * - * @return 初始化信息 - */ - @GetMapping(value = "/init") - public R medicineDispenseInit() { - return chineseMedicineDispenseService.init(); - } - - /** - * 分页查询就诊病人列表 - * - * @param encounterInfoSearchParam 查询条件 - * @param searchKey 模糊查询关键字 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @param request 请求数据 - * @return 就诊病人列表 - */ - @GetMapping("/encounter-list") - public R getEncounterInfoList(EncounterInfoSearchParam encounterInfoSearchParam, String searchKey, - @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { - return chineseMedicineDispenseService.getEncounterInfoListPage(encounterInfoSearchParam, searchKey, pageNo, - pageSize, request); - } - - /** - * 处方单查询 - * - * @param encounterId 就诊Id - */ - @GetMapping("/prescription-list") - public R getPatientInfoList(@RequestParam(value = "encounterId") Long encounterId) { - return chineseMedicineDispenseService.getPrescriptionInfo(encounterId); - } - - /** - * 配药 - * - * @param prescriptionNo 处方号 - * @param preparerId 配药人 - */ - @PutMapping("/prepare") - public R prepare(@RequestParam(value = "prescriptionNo") String prescriptionNo, - @RequestParam(value = "preparerId") Long preparerId) { - return chineseMedicineDispenseService.prepare(prescriptionNo, preparerId); - } - - /** - * 核对发药 - * - * @param prescriptionNo 处方号 - */ - @PutMapping("/medicine-dispense") - public R medicineDispense(@RequestParam(value = "prescriptionNo") String prescriptionNo) { - return chineseMedicineDispenseService.medicineDispense(prescriptionNo); - } - - /** - * 作废 - * - * @param prescriptionNo 处方号 - * @param notPerformedReasonEnum 未发药原因 - */ - @PutMapping("/medicine-cancel") - public R medicineCancel(@RequestParam(value = "prescriptionNo") String prescriptionNo, - @RequestParam(value = "notPerformedReasonEnum") Integer notPerformedReasonEnum) { - return chineseMedicineDispenseService.medicineCancel(prescriptionNo, notPerformedReasonEnum); - } -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/DeviceDispenseController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/DeviceDispenseController.java deleted file mode 100644 index 78c553f1..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/DeviceDispenseController.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.openhis.web.pharmacymanage.controller; - -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import com.openhis.web.pharmacymanage.appservice.IDeviceDispenseAppService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import com.core.common.core.domain.R; -import com.openhis.web.pharmacymanage.appservice.IDeviceDispenseAppService; -import com.openhis.web.pharmacymanage.dto.DispenseDeviceDto; -import com.openhis.web.pharmacymanage.dto.EncounterInfoPageDto; -import com.openhis.web.pharmacymanage.dto.PrescriptionDeviceInfoDto; - -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; - -/** - * 材料发送 - * - * @author yuxj - * @date 2025/8/21 - */ -@RestController -@RequestMapping("/pharmacy-manage/device-dispense") -@Slf4j -@AllArgsConstructor -public class DeviceDispenseController { - - @Autowired - public IDeviceDispenseAppService deviceDispenseService; - - /** - * 获取页面初始化信息 - * - * @return 初始化信息 - */ - @GetMapping(value = "/init") - public R deviceDispenseInit() { - return deviceDispenseService.init(); - } - - /** - * 分页查询发药病人列表 - * - * @param encounterInfoPageDto 查询条件 - * @param searchKey 模糊查询关键字 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @param request 请求数据 - * @return 发药病人列表 - */ - @GetMapping("/encounter-list") - public R getEncounterInfoList(EncounterInfoPageDto encounterInfoPageDto, String searchKey, - @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { - return deviceDispenseService.getEncounterInfoListPage(encounterInfoPageDto, searchKey, pageNo, - pageSize, request); - } - - /** - * 处方单查询 - * - * @param prescriptionDeviceInfoDto 查询信息 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @return 处方单 - */ - @GetMapping("/prescription-list") - public R getPatientInfoList(PrescriptionDeviceInfoDto prescriptionDeviceInfoDto, - @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { - return deviceDispenseService.getPrescriptionInfo(prescriptionDeviceInfoDto, pageNo, pageSize); - } - - /** - * 核对发药 - * - * @param dispenseDeviceList 发药信息 - * @return 处理结果 - */ - @PutMapping("/device-dispense") - public R deviceDispense(@RequestBody List dispenseDeviceList) { - return deviceDispenseService.deviceDispense(dispenseDeviceList); - } - - /** - * 作废 - * - * @param dispenseDeviceList 作废信息 - * @return 处理结果 - */ - @PutMapping("/device-cancel") - public R deviceCancel(@RequestBody List dispenseDeviceList) { - return deviceDispenseService.deviceCancel(dispenseDeviceList); - } -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/InpatientMedicineDispenseController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/InpatientMedicineDispenseController.java deleted file mode 100644 index a17c1607..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/InpatientMedicineDispenseController.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.openhis.web.pharmacymanage.controller;//package com.openhis.web.pharmacymanage.controller; - -import com.core.common.core.domain.R; -import com.openhis.web.pharmacymanage.appservice.IInpatientMedicineDispenseAppService; -import com.openhis.web.pharmacymanage.appservice.IWesternMedicineDispenseAppService; -import com.openhis.web.pharmacymanage.dto.DispenseMedicineDto; -import com.openhis.web.pharmacymanage.dto.EncounterInfoPageDto; -import com.openhis.web.pharmacymanage.dto.PrescriptionMedicineInfoDto; -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import java.util.List; - -/** - * 住院发药 - * - * @author yuxj - * @date 2025/6/3 - */ -@RestController -@RequestMapping("/pharmacy-manage/inpatient-medicine-dispense") -@Slf4j -@AllArgsConstructor -public class InpatientMedicineDispenseController { - - @Resource - public IInpatientMedicineDispenseAppService inpatientMedicineDispenseService; - - @Autowired - public IWesternMedicineDispenseAppService westernMedicineDispenseService; - - /** - * 分页查询发药病人列表 - * - * @param encounterInfoPageDto 查询条件 - * @param searchKey 模糊查询关键字 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @param request 请求数据 - * @return 发药病人列表 - */ - @GetMapping("/encounter-list") - public R getEncounterInfoList(EncounterInfoPageDto encounterInfoPageDto, String searchKey, - @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { - return inpatientMedicineDispenseService.getEncounterInfoListPage(encounterInfoPageDto, searchKey, pageNo, - pageSize, request); - } - - /** - * 获取页面初始化信息 - * - * @return 初始化信息 - */ - @GetMapping(value = "/init") - public R medicineDispenseInit() { - return westernMedicineDispenseService.init(); - } - - /** - * 处方单查询 - * - * @param prescriptionMedicineInfoDto 查询信息 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @return 处方单 - */ - @GetMapping("/prescription-list") - public R getPatientInfoList(PrescriptionMedicineInfoDto prescriptionMedicineInfoDto, - @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { - return westernMedicineDispenseService.getPrescriptionInfo(prescriptionMedicineInfoDto, pageNo, pageSize); - } - - /** - * 配药 - * - * @param dispenseMedicineList 配药信息 - * @return 处理结果 - */ - @PutMapping("/prepare") - public R medicinePrepare(@RequestBody List dispenseMedicineList) { - return westernMedicineDispenseService.medicinePrepare(dispenseMedicineList); - } - - /** - * 核对发药 - * - * @param dispenseMedicineList 发药信息 - * @return 处理结果 - */ - @PutMapping("/medicine-dispense") - public R medicineDispense(@RequestBody List dispenseMedicineList) { - return westernMedicineDispenseService.medicineDispense(dispenseMedicineList); - } - - /** - * 作废 - * - * @param dispenseMedicineList 作废信息 - * @return 处理结果 - */ - @PutMapping("/medicine-cancel") - public R medicineCancel(@RequestBody List dispenseMedicineList) { - return westernMedicineDispenseService.medicineCancel(dispenseMedicineList); - } - -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/InpatientMedicineSummaryDispenseController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/InpatientMedicineSummaryDispenseController.java index 8d14881d..6ad8a280 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/InpatientMedicineSummaryDispenseController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/InpatientMedicineSummaryDispenseController.java @@ -3,8 +3,6 @@ package com.openhis.web.pharmacymanage.controller; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import com.openhis.web.pharmacymanage.dto.DispenseMedicineDto; -import org.apache.ibatis.annotations.Param; import org.springframework.web.bind.annotation.*; import com.core.common.core.domain.R; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicalConsumablesDispenseController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicalConsumablesDispenseController.java deleted file mode 100644 index a3f97815..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicalConsumablesDispenseController.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright ©2023 CJB-CNIT Team. All rights reserved - */ -package com.openhis.web.pharmacymanage.controller; - -import java.util.List; - -import javax.annotation.Resource; - -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.core.common.core.domain.R; -import com.openhis.web.pharmacymanage.appservice.IMedicalConsumablesDispenseAppService; - -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; - -/** - * 耗材发放 - * - * @author zwh - * @date 2025-06-20 - */ -@RestController -@RequestMapping("/pharmacy-manage/medical-consumables-dispense") -@Slf4j -@AllArgsConstructor -public class MedicalConsumablesDispenseController { - - @Resource - public IMedicalConsumablesDispenseAppService medicalConsumablesDispenseAppService; - - /** - * 发放耗材 - * - * @param chargeItemIds 耗材收费单ids - * @return 处理结果 - */ - @PutMapping("/consumables-dispense") - public R dispenseMedicalConsumables(@RequestBody List chargeItemIds) { - return medicalConsumablesDispenseAppService.dispenseMedicalConsumables(chargeItemIds); - } -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicalDeviceDispenseController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicalDeviceDispenseController.java new file mode 100644 index 00000000..ff752e1a --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicalDeviceDispenseController.java @@ -0,0 +1,109 @@ +package com.openhis.web.pharmacymanage.controller; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import com.core.common.core.domain.R; +import com.openhis.web.pharmacymanage.appservice.IMedicalDeviceDispenseAppService; +import com.openhis.web.pharmacymanage.dto.DispenseItemDto; +import com.openhis.web.pharmacymanage.dto.EncounterInfoSearchParam; +import com.openhis.web.pharmacymanage.dto.ItemDispenseOrderDto; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * 材料发送 + * + * @author yuxj + * @date 2025/8/21 + */ +@RestController +@RequestMapping("/pharmacy-manage/device-dispense") +@Slf4j +@AllArgsConstructor +public class MedicalDeviceDispenseController { + + @Autowired + public IMedicalDeviceDispenseAppService medicalDeviceDispenseAppService; + + /** + * 获取页面初始化信息 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R deviceDispenseInit() { + return medicalDeviceDispenseAppService.init(); + } + + /** + * 分页查询病人列表 + * + * @param encounterInfoSearchParam 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request 请求数据 + * @return 病人列表 + */ + @GetMapping("/encounter-list") + public R getEncounterInfoList(EncounterInfoSearchParam encounterInfoSearchParam, String searchKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { + return medicalDeviceDispenseAppService.getEncounterInfoListPage(encounterInfoSearchParam, searchKey, pageNo, + pageSize, request); + } + + /** + * 发耗材单查询 + * + * @param itemDispenseOrderDto 查询信息 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 发耗材单 + */ + @GetMapping("/device-order") + public R getDeviceDispenseOrderList(ItemDispenseOrderDto itemDispenseOrderDto, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return medicalDeviceDispenseAppService.getDeviceDispenseOrderList(itemDispenseOrderDto, pageNo, pageSize); + } + + /** + * 核对发耗材 + * + * @param dispenseDeviceList 发耗材信息 + * @return 处理结果 + */ + @PutMapping("/device-dispense") + public R deviceDispense(@RequestBody List dispenseDeviceList) { + return medicalDeviceDispenseAppService.deviceDispense(dispenseDeviceList); + } + + /** + * 发放耗材(长大专属) + * + * @param chargeItemIds 耗材收费单ids + * @return 处理结果 + */ + @PutMapping("/consumables-dispense") + public R dispenseMedicalConsumables(@RequestBody List chargeItemIds) { + return medicalDeviceDispenseAppService.dispenseMedicalConsumables(chargeItemIds); + } + + /** + * 作废 + * + * @param dispenseDeviceList 作废信息 + * @return 处理结果 + */ + @PutMapping("/device-cancel") + public R deviceCancel(@RequestBody List dispenseDeviceList) { + return medicalDeviceDispenseAppService.deviceCancel(dispenseDeviceList); + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ReturnMedicineController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ReturnMedicineController.java index 5e6d09f6..93058a21 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ReturnMedicineController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ReturnMedicineController.java @@ -9,14 +9,14 @@ import org.springframework.web.bind.annotation.*; import com.core.common.core.domain.R; import com.openhis.web.pharmacymanage.appservice.IReturnMedicineAppService; -import com.openhis.web.pharmacymanage.dto.EncounterInfoPageDto; +import com.openhis.web.pharmacymanage.dto.EncounterInfoDto; import com.openhis.web.pharmacymanage.dto.ReturnMedicineDto; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; /** - * 退药管理 + * 退药(退耗材)管理 * * @author yangmo * @date 2025/4/4 @@ -43,7 +43,7 @@ public class ReturnMedicineController { /** * 查询退药患者分页列表 * - * @param encounterInfoPageDto 查询条件 + * @param encounterInfoDto 查询条件 * @param searchKey 模糊查询关键字 * @param pageNo 当前页码 * @param pageSize 查询条数 @@ -51,11 +51,11 @@ public class ReturnMedicineController { * @return 退药患者分页列表 */ @GetMapping(value = "/return-patient-page") - public R getReturnMedicinePatientPage(EncounterInfoPageDto encounterInfoPageDto, + public R getReturnMedicinePatientPage(EncounterInfoDto encounterInfoDto, @RequestParam(value = "searchKey", defaultValue = "") String searchKey, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { - return returnMedicineAppService.getReturnMedicinePatientPage(encounterInfoPageDto, searchKey, pageNo, pageSize, + return returnMedicineAppService.getReturnMedicinePatientPage(encounterInfoDto, searchKey, pageNo, pageSize, request); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/WesternMedicineDispenseController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/WesternMedicineDispenseController.java index 70393a1f..4c3fe659 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/WesternMedicineDispenseController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/WesternMedicineDispenseController.java @@ -9,9 +9,9 @@ import org.springframework.web.bind.annotation.*; import com.core.common.core.domain.R; import com.openhis.web.pharmacymanage.appservice.IWesternMedicineDispenseAppService; -import com.openhis.web.pharmacymanage.dto.DispenseMedicineDto; -import com.openhis.web.pharmacymanage.dto.EncounterInfoPageDto; -import com.openhis.web.pharmacymanage.dto.PrescriptionMedicineInfoDto; +import com.openhis.web.pharmacymanage.dto.DispenseItemDto; +import com.openhis.web.pharmacymanage.dto.EncounterInfoSearchParam; +import com.openhis.web.pharmacymanage.dto.ItemDispenseOrderDto; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -42,36 +42,36 @@ public class WesternMedicineDispenseController { } /** - * 分页查询发药病人列表 + * 分页查询病人列表 * - * @param encounterInfoPageDto 查询条件 + * @param encounterInfoSearchParam 查询条件 * @param searchKey 模糊查询关键字 * @param pageNo 当前页码 * @param pageSize 查询条数 * @param request 请求数据 - * @return 发药病人列表 + * @return 病人列表 */ @GetMapping("/encounter-list") - public R getEncounterInfoList(EncounterInfoPageDto encounterInfoPageDto, String searchKey, + public R getEncounterInfoList(EncounterInfoSearchParam encounterInfoSearchParam, String searchKey, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { - return westernMedicineDispenseService.getEncounterInfoListPage(encounterInfoPageDto, searchKey, pageNo, + return westernMedicineDispenseService.getEncounterInfoListPage(encounterInfoSearchParam, searchKey, pageNo, pageSize, request); } /** - * 处方单查询 + * 发药单查询 * - * @param prescriptionMedicineInfoDto 查询信息 + * @param itemDispenseOrderDto 查询信息 * @param pageNo 当前页码 * @param pageSize 查询条数 * @return 处方单 */ - @GetMapping("/prescription-list") - public R getPatientInfoList(PrescriptionMedicineInfoDto prescriptionMedicineInfoDto, + @GetMapping("/medicine-order") + public R getMedicineDispenseOrderList(ItemDispenseOrderDto itemDispenseOrderDto, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { - return westernMedicineDispenseService.getPrescriptionInfo(prescriptionMedicineInfoDto, pageNo, pageSize); + return westernMedicineDispenseService.getMedicineDispenseOrderList(itemDispenseOrderDto, pageNo, pageSize); } /** @@ -81,7 +81,7 @@ public class WesternMedicineDispenseController { * @return 处理结果 */ @PutMapping("/prepare") - public R medicinePrepare(@RequestBody List dispenseMedicineList) { + public R medicinePrepare(@RequestBody List dispenseMedicineList) { return westernMedicineDispenseService.medicinePrepare(dispenseMedicineList); } @@ -92,7 +92,7 @@ public class WesternMedicineDispenseController { * @return 处理结果 */ @PutMapping("/medicine-dispense") - public R medicineDispense(@RequestBody List dispenseMedicineList) { + public R medicineDispense(@RequestBody List dispenseMedicineList) { return westernMedicineDispenseService.medicineDispense(dispenseMedicineList); } @@ -103,24 +103,7 @@ public class WesternMedicineDispenseController { * @return 处理结果 */ @PutMapping("/medicine-cancel") - public R medicineCancel(@RequestBody List dispenseMedicineList) { + public R medicineCancel(@RequestBody List dispenseMedicineList) { return westernMedicineDispenseService.medicineCancel(dispenseMedicineList); } - - /** - * 处方单查询 - * - * @param locationId 库房id - * @param startTime 开始时间 - * @param endTime 结束时间 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @return 处方单 - */ - @GetMapping("/prescription-list-monthly-settlement") - public R getMonthlySettlementPatientInfoList(@RequestParam Long locationId, @RequestParam String startTime,@RequestParam String endTime, - @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { - return westernMedicineDispenseService.getMonthlySettlementPatientInfoList(locationId, startTime,endTime,pageNo,pageSize); - } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseDeviceDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseDeviceDto.java deleted file mode 100644 index 5570adc4..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseDeviceDto.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright ©2023 CJB-CNIT Team. All rights reserved - */ -package com.openhis.web.pharmacymanage.dto; - -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; - -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 发材料信息 - * - * @author yuxj - * @date 2025-08-21 - */ -@Data -@Accessors(chain = true) -public class DispenseDeviceDto { - - /** 请求ID */ - @JsonSerialize(using = ToStringSerializer.class) - private Long requestId; - - /** 配药人 */ - @JsonSerialize(using = ToStringSerializer.class) - private Long preparerId; - - /** 发放ID */ - @JsonSerialize(using = ToStringSerializer.class) - private Long dispenseId; - - /** 追溯码 */ - private String traceNo; - - /** 处方号 */ - private String prescriptionNo; - - /** 未发原因 */ - private Integer notPerformedReasonEnum; -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseInitDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseInitDto.java index 45203d64..121661e2 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseInitDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseInitDto.java @@ -7,12 +7,13 @@ import java.util.List; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import com.openhis.common.enums.DispenseStatus; + import lombok.Data; import lombok.experimental.Accessors; /** - * + * 发放列表初始化 + * * @author wangyang * @date 2025-03-14 */ @@ -32,6 +33,9 @@ public class DispenseInitDto { /** 发药状态 */ private List preparerDoctorOptions; + /** 患者类型 */ + private List encounterClassOptions; + @Data public static class DepartmentOption { @JsonSerialize(using = ToStringSerializer.class) @@ -55,6 +59,17 @@ public class DispenseInitDto { } } + @Data + public static class EncounterClassOption { + private Integer value; + private String label; + + public EncounterClassOption(Integer value, String label) { + this.value = value; + this.label = label; + } + } + @Data public static class DispenseStatusOption { private Integer value; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseInventoryDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseInventoryDto.java index 803d0010..d75b34c6 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseInventoryDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseInventoryDto.java @@ -41,7 +41,7 @@ public class DispenseInventoryDto { private String dispenseUnitCode; /** 请求数量 */ - private Integer dispenseQuantity; + private BigDecimal dispenseQuantity; /** 发放数量 */ private Integer dispenseStatus; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseMedicineDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseItemDto.java similarity index 76% rename from openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseMedicineDto.java rename to openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseItemDto.java index 925fdf26..88064bac 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseMedicineDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseItemDto.java @@ -10,18 +10,14 @@ import lombok.Data; import lombok.experimental.Accessors; /** - * 发药信息 + * 发药/耗材信息 * * @author zwh * @date 2025-05-23 */ @Data @Accessors(chain = true) -public class DispenseMedicineDto { - - /** 请求ID */ - @JsonSerialize(using = ToStringSerializer.class) - private Long requestId; +public class DispenseItemDto { /** 配药人 */ @JsonSerialize(using = ToStringSerializer.class) @@ -34,9 +30,6 @@ public class DispenseMedicineDto { /** 追溯码 */ private String traceNo; - /** 处方号 */ - private String prescriptionNo; - /** 未发原因 */ private Integer notPerformedReasonEnum; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/EncounterInfoPageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/EncounterInfoDto.java similarity index 94% rename from openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/EncounterInfoPageDto.java rename to openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/EncounterInfoDto.java index eb019e8d..b3a93811 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/EncounterInfoPageDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/EncounterInfoDto.java @@ -3,14 +3,14 @@ */ package com.openhis.web.pharmacymanage.dto; +import java.util.Date; + import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import lombok.experimental.Accessors; -import java.util.Date; - /** * 就诊人员列表 * @@ -19,7 +19,7 @@ import java.util.Date; */ @Data @Accessors(chain = true) -public class EncounterInfoPageDto { +public class EncounterInfoDto { /** 就诊ID */ @JsonSerialize(using = ToStringSerializer.class) @@ -78,7 +78,4 @@ public class EncounterInfoPageDto { /** 生日 */ private Date birthDate; - - /** 中药标识 */ - private Integer tcmFlag; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/EncounterInfoSearchParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/EncounterInfoSearchParam.java index 9afa47bb..2d44b555 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/EncounterInfoSearchParam.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/EncounterInfoSearchParam.java @@ -4,15 +4,12 @@ package com.openhis.web.pharmacymanage.dto; import java.io.Serializable; -import java.util.Date; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import lombok.experimental.Accessors; /** - * 处方列表查询条件 + * 患者列表查询条件 * * @author wangyang * @date 2025-03-14 @@ -23,4 +20,7 @@ public class EncounterInfoSearchParam implements Serializable { /** 执行状态 */ private Integer statusEnum; + + /** 患者类型 */ + private Integer classEnum; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InpatientMedicineInitDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InpatientMedicineInitDto.java index 3e9bf575..576b3924 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InpatientMedicineInitDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InpatientMedicineInitDto.java @@ -13,7 +13,7 @@ import lombok.Data; import lombok.experimental.Accessors; /** - *住院发药初期dto + * 住院发药初期dto * * @author yuxj * @date 2025-06-03 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InpatientMedicineMapInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InpatientMedicineMapInfoDto.java deleted file mode 100644 index 2b7be4f1..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InpatientMedicineMapInfoDto.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright ©2023 CJB-CNIT Team. All rights reserved - */ -package com.openhis.web.pharmacymanage.dto; - -import java.io.Serializable; -import java.util.List; - -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; - -import com.openhis.common.annotation.Dict; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 映射信息 - * - * @author yuxj - * @date 2025-06-03 - */ -@Data -@Accessors(chain = true) -public class InpatientMedicineMapInfoDto implements Serializable { - - /** 项目发放 */ - @JsonSerialize(using = ToStringSerializer.class) - private Long dispenseId; - - /** 追溯码*/ - private String traceNo; - - /** 追溯码单位 */ - @Dict(dictCode = "unit_code") - private String traceNoUnitCode; - private String traceNoUnitCode_dictText; - - /** 供应发放id */ - @JsonSerialize(using = ToStringSerializer.class) - private Long deliveryId; - - /** 发放表名 */ - private String tableName; - -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InpatientMedicineSummaryPrescriptionInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InpatientMedicineSummaryDto.java similarity index 89% rename from openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InpatientMedicineSummaryPrescriptionInfoDto.java rename to openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InpatientMedicineSummaryDto.java index 2c47e7f8..9f5c83dd 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InpatientMedicineSummaryPrescriptionInfoDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InpatientMedicineSummaryDto.java @@ -10,17 +10,18 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.openhis.common.annotation.Dict; -import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto; import lombok.Data; import lombok.experimental.Accessors; /** - * 医嘱详细 + * 汇总发药信息 * * @author yuxj * @date 2025-06-03 */ -@Data @Accessors(chain = true) public class InpatientMedicineSummaryPrescriptionInfoDto { +@Data +@Accessors(chain = true) +public class InpatientMedicineSummaryDto { /** * 单据号 @@ -109,18 +110,19 @@ import lombok.experimental.Accessors; /** * 单位列表 */ - private List unitList; + private List unitList; @Data public static class Option { @Dict(dictCode = "unit_code") private String value; private String value_dictText; + public Option(String value, String value_dictText) { this.value = value; this.value_dictText = value_dictText; } - public Option() { - } + + public Option() {} } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PrescriptionMedicineInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/ItemDispenseOrderDto.java similarity index 77% rename from openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PrescriptionMedicineInfoDto.java rename to openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/ItemDispenseOrderDto.java index c1ad1c17..6f7f8a4a 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PrescriptionMedicineInfoDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/ItemDispenseOrderDto.java @@ -3,26 +3,26 @@ */ package com.openhis.web.pharmacymanage.dto; +import java.math.BigDecimal; +import java.util.Date; + import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.openhis.common.annotation.Dict; + import lombok.Data; import lombok.experimental.Accessors; -import java.io.Serializable; -import java.math.BigDecimal; -import java.util.Date; - /** - * 处方发药单 + * 发药/耗材单 * * @author wangyang * @date 2025-03-14 */ @Data @Accessors(chain = true) -public class PrescriptionMedicineInfoDto { +public class ItemDispenseOrderDto { /** * 发放药房 @@ -31,10 +31,10 @@ public class PrescriptionMedicineInfoDto { private Long locationId; /** - * 药品id + * 项目id */ @JsonSerialize(using = ToStringSerializer.class) - private Long medicineId; + private Long itemId; /** * 发放id @@ -79,11 +79,6 @@ public class PrescriptionMedicineInfoDto { */ private String dispenseDoctorName; - /** - * 配药医生 - */ - private String preparerDoctorName; - /** * 项目类型 */ @@ -108,9 +103,9 @@ public class PrescriptionMedicineInfoDto { private String prescriptionNo; /** - * 药品名称 + * 项目名称 */ - private String medicineName; + private String itemName; /** * 规格 @@ -150,26 +145,6 @@ public class PrescriptionMedicineInfoDto { private String unitCode; private String unitCode_dictText; - /** - * 单次最大剂量 - */ - private BigDecimal maxDose; - - /** - * 首次用量 - */ - private BigDecimal firstDose; - - /** - * 首次持续时间 - */ - private String firstDuration; - - /** - * 给药间隔 - */ - private String dispenseInterval; - /** * 单次发药数 */ @@ -210,33 +185,22 @@ public class PrescriptionMedicineInfoDto { @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") private Date reqAuthoredTime; - /** - * 就诊账户类型 - */ - private String chargeType; - - /** 药品性质 */ - private String pharmacologyCategoryCode; - - /** 药品性质文本 */ - private String pharmacologyCategoryCode_Text; - - /** 特殊病种标志 */ - private String medTypeCode; - - /** 慢性病 是/否 */ - private String chronicDisease; - /** 皮试标志 */ private Integer skinTestFlag; /** 中药标识 */ private Integer tcmFlag; - /** 皮试结果 */ - private String psResult; + /** 所在表 */ + private String itemTable; - /** 药品类型 */ - private Integer type; + /** + * 生产厂家 + */ + private String manufacturerText; + /** + * 追溯码 + */ + private String traceNo; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailsSearchParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailsSearchParam.java index b13c18ce..f85cb1da 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailsSearchParam.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailsSearchParam.java @@ -38,4 +38,6 @@ public class MedDetailsSearchParam { /** 出院状态 */ private Integer dischargeStatus; + /** 门诊住院flg */ + private Integer flag; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedRunningAccountPageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedRunningAccountPageDto.java deleted file mode 100644 index 45a57cc2..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedRunningAccountPageDto.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.openhis.web.pharmacymanage.dto; - -import com.alibaba.fastjson2.annotation.JSONField; -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import com.openhis.common.annotation.Dict; -import lombok.Data; -import lombok.experimental.Accessors; -import org.springframework.format.annotation.DateTimeFormat; - -import java.math.BigDecimal; -import java.util.Date; - -/** - * 明细流水账分页列表 dto - * - * @author yuanzs - * @date 2025-04-14 - */ -@Data -@Accessors(chain = true) -public class MedRunningAccountPageDto { - - /** 门诊号 */ - private String outpatientNo; - - /** 住院号 */ - private Integer admissionNo; - - /** 处方号 */ - private String prescriptionNo; - - /** 患者 */ - private String patientName; - - /** 发药人 */ - @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") - @JsonSerialize(using = ToStringSerializer.class) - private Long practitionerId; - private String practitionerId_dictText; - - /** 药品项目 */ - private String medicineName; - - /** 规格 */ - private String totalVolume; - - /** 零售价 */ - private BigDecimal retailPrice; - - /** 发药数量 */ - private Integer dispenseQuantity; - - /** 发药金额 */ - private BigDecimal dispensePrice; - - /** 退药数量 */ - private Integer returnQuantity; - - /** 退药金额 */ - private BigDecimal returnPrice; - - /** 批号 */ - private String lotNumber; - - /** 发药时间 */ - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @JSONField(name="dispense_time") - private Date dispenseTime; - - /** 厂商 */ - private String manufacturerText; - - /** 供应商 */ - @Dict(dictCode = "id", dictText = "name", dictTable = "adm_supplier") - @JsonSerialize(using = ToStringSerializer.class) - private Long supplyId; - private String supplyId_dictText; -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PrescriptionDeviceInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PrescriptionDeviceInfoDto.java deleted file mode 100644 index a5032a0b..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PrescriptionDeviceInfoDto.java +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright ©2023 CJB-CNIT Team. All rights reserved - */ -package com.openhis.web.pharmacymanage.dto; - -import java.math.BigDecimal; -import java.util.Date; - -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import com.openhis.common.annotation.Dict; - -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 处方发材料单 - * - * @author yuxj - * @date 2025-08-21 - */ -@Data -@Accessors(chain = true) -public class PrescriptionDeviceInfoDto { - - /** - * 科室 - */ - private String departmentName; - - /** - * 开单医生 - */ - private String doctorName; - - /** - * 项目类型 - */ - @Dict(dictCode = "med_category_code") - private String itemType; - private String itemType_dictText; - - /** - * 诊断名称 - */ - private String conditionName; - - /** - * 处方号 - */ - private String prescriptionNo; - - /** - * 批次号 - */ - private String lotNumber; - - /** - * 请求id - */ - @JsonSerialize(using = ToStringSerializer.class) - private Long requestId; - /** - * 材料id - */ - @JsonSerialize(using = ToStringSerializer.class) - private Long deviceId; - - /** - * 材料名称 - */ - private String deviceName; - - /** - * 规格 - */ - private String totalVolume; - /** - * 单位 - */ - @Dict(dictCode = "unit_code") - private String unitCode; - private String unitCode_dictText; - - /** - * 就诊id - */ - @JsonSerialize(using = ToStringSerializer.class) - private Long encounterId; - /** - * 发药状态 - */ - private Integer statusEnum; - private String statusEnum_enumText; - /** - * 用药频次 - */ - private String rateCode; - /** - * 发放药房 - */ - @JsonSerialize(using = ToStringSerializer.class) - private Long locationId; - - /** - * 数量 - */ - private Integer quantity; - /** - * 发放id - */ - @JsonSerialize(using = ToStringSerializer.class) - private Long dispenseId; - - /** - * 发放药房 - */ - private String locationName; - - /** - * 单价 - */ - private BigDecimal unitPrice; - - /** - * 金额 - */ - private BigDecimal totalPrice; - - /** - * 发药医生 - */ - private String dispenseDoctorName; - /** - * 就诊NO - */ - @JsonSerialize(using = ToStringSerializer.class) - private String encounterBusNo; - /** 开具日期 */ - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") - private Date reqAuthoredTime; - - /** - * 就诊账户类型 - */ - private String chargeType; - - /** 特殊病种标志 */ - private String medTypeCode; - - /** 慢性病 是/否 */ - private String chronicDisease; - - -// -// /** -// * 配药医生 -// */ -// private String preparerDoctorName; -// -// /** -// * 单次剂量 -// */ -// private BigDecimal dose; -// -// /** -// * 用法 -// */ -// @Dict(dictCode = "method_code") -// private String methodCode; -// private String methodCode_dictText; -// -// /** -// * 剂量单位 -// */ -// @Dict(dictCode = "unit_code") -// private String doseUnitCode; -// private String doseUnitCode_dictText; -// -// /** -// * 单次最大剂量 -// */ -// private BigDecimal maxDose; -// -// /** -// * 首次用量 -// */ -// private BigDecimal firstDose; -// -// /** -// * 首次持续时间 -// */ -// private String firstDuration; -// -// /** -// * 给药间隔 -// */ -// private String dispenseInterval; -// -// /** -// * 单次发药数 -// */ -// private Integer dispensePerQuantity; -// -// /** -// * 每次发药供应天数 -// */ -// private Integer dispensePerDuration; -// -// /** -// * 组合号 -// */ -// @JsonSerialize(using = ToStringSerializer.class) -// private Long groupId; -// -// /** 药品性质 */ -// private String pharmacologyCategoryCode; -// -// /** 药品性质文本 */ -// private String pharmacologyCategoryCode_Text; -// -// -// /** 皮试标志 */ -// private Integer skinTestFlag; -// -// /** 皮试结果 */ -// private String psResult; - -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PrescriptionInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PrescriptionInfoDto.java deleted file mode 100644 index 8d53b386..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PrescriptionInfoDto.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright ©2023 CJB-CNIT Team. All rights reserved - */ -package com.openhis.web.pharmacymanage.dto; - -import java.util.List; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 处方信息 - * - * @author wangyang - * @date 2025-03-14 - */ -@Data -@Accessors(chain = true) -public class PrescriptionInfoDto { - - /** 患者基本信息 */ - private PrescriptionPatientInfoDto prescriptionPatientInfoDto; - - /** 处方药品信息 */ - private List prescriptionMedicineInfoDtoList; - - /** 处方材料信息 */ - private List prescriptionDeviceInfoDtoList; -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PrescriptionPatientInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PrescriptionPatientInfoDto.java deleted file mode 100644 index 6abea9a8..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PrescriptionPatientInfoDto.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright ©2023 CJB-CNIT Team. All rights reserved - */ -package com.openhis.web.pharmacymanage.dto; - -import java.io.Serializable; -import java.math.BigDecimal; -import java.util.Date; - -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 患者基本信息 - * - * @author wangyang - * @date 2025-03-14 - */ -@Data -@Accessors(chain = true) -public class PrescriptionPatientInfoDto { - - /** 姓名 */ - private String patientName; - - /** 性别 */ - private Integer genderEnum; - private String genderEnum_enumText; - - /** 生日 */ - private Date birthDate; - - /** 年龄 */ - private String age; - - /** 合同类型 */ - private Integer categoryEnum; - private String categoryEnum_enumText; - private String contractName; - - /** 证件号 */ - private String idCard; - - /** 就诊科室 */ - private String organizationName; - - /** 就诊日期 */ - private String encounterDate; - - /** 总金额 */ - private double totalPrice; - - /** 电话 */ - private String phone; - - /** 医院名字 */ - private String hospitalName; - - /** 患者院内编码/病历号 */ - private String patientBusNo; - - /** - * 就诊id - */ - @JsonSerialize(using = ToStringSerializer.class) - private Long encounterId; - - /** - * 诊断 - */ - @JsonSerialize(using = ToStringSerializer.class) - private Long conditionId; - private String conditionName; -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ChineseMedicineDispenseMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ChineseMedicineDispenseMapper.java deleted file mode 100644 index 68f0dbcd..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ChineseMedicineDispenseMapper.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright ©2023 CJB-CNIT Team. All rights reserved - */ -package com.openhis.web.pharmacymanage.mapper; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Constants; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.openhis.web.pharmacymanage.dto.*; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Repository; - -import java.util.List; - -@Repository -public interface ChineseMedicineDispenseMapper { - - /** - * 就诊病人列表分页查询 - * - * @param page 分页 - * @param queryWrapper 查询条件 - * @return 就诊病人列表 - */ - Page selectEncounterInfoListPage(@Param("page") Page page, - @Param(Constants.WRAPPER) QueryWrapper queryWrapper); - - /** - * 患者基本信息查询 - * - * @param encounterId 就诊号 - * @return 患者基本信息 - */ - PrescriptionPatientInfoDto selectPrescriptionPatientInfo(@Param("encounterId") Long encounterId); - - /** - * 处方单查询 - * - * @param encounterId 就诊号 - * @return 处方单列表 - */ - List selectPrescriptionMedicineInfoList(@Param("encounterId") Long encounterId); - - /** - * 待发药和库存信息查询 - * - * @param prescriptionNo 处方号 - * @return 待发药信息 - */ - List selectDispenseInventoryInfoByPrescriptionNo( - @Param("prescriptionNo") String prescriptionNo, - @Param("medMedicationDefinition") String medMedicationDefinition); -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/InpatientMedicineDispenseMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/InpatientMedicineDispenseMapper.java deleted file mode 100644 index ff38534e..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/InpatientMedicineDispenseMapper.java +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright ©2023 CJB-CNIT Team. All rights reserved - */ -package com.openhis.web.pharmacymanage.mapper; - -import org.springframework.stereotype.Repository; - -@Repository -public interface InpatientMedicineDispenseMapper { -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/InpatientMedicineSummaryDispenseMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/InpatientMedicineSummaryDispenseMapper.java index 94b60ec8..74a622d1 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/InpatientMedicineSummaryDispenseMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/InpatientMedicineSummaryDispenseMapper.java @@ -3,8 +3,6 @@ */ package com.openhis.web.pharmacymanage.mapper; -import java.util.List; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.openhis.web.inhospitalnursestation.dto.InpatientMedicinePrescriptionInfoDto; @@ -26,7 +24,7 @@ public interface InpatientMedicineSummaryDispenseMapper { * @param deviceDefinition 耗材定义 * @return 医嘱信息 */ - Page selectMedicationSummaryInfo( + Page selectMedicationSummaryInfo( @Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("medicationDefinition") String medicationDefinition, diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicalConsumablesDispenseAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicalConsumablesDispenseAppMapper.java deleted file mode 100644 index 1554cf9f..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicalConsumablesDispenseAppMapper.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright ©2023 CJB-CNIT Team. All rights reserved - */ -package com.openhis.web.pharmacymanage.mapper; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Constants; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.openhis.web.pharmacymanage.dto.*; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Repository; - -import java.util.List; - -@Repository -public interface MedicalConsumablesDispenseAppMapper { - - /** - * 就诊病人列表分页查询 - * - * @param page 分页 - * @param queryWrapper 查询条件 - * @return 就诊病人列表 - */ - Page selectEncounterInfoListPage(@Param("page") Page page, - @Param(Constants.WRAPPER) QueryWrapper queryWrapper); - - /** - * 患者基本信息查询 - * - * @param encounterId 就诊号 - * @return 患者基本信息 - */ - PrescriptionPatientInfoDto selectPrescriptionPatientInfo(@Param("encounterId") Long encounterId); - - /** - * 处方单查询 - * - * @param encounterId 就诊号 - * @return 处方单列表 - */ - List selectPrescriptionConsumablesInfoList(@Param("encounterId") Long encounterId); - - /** - * 待发药和库存信息查询 - * - * @param prescriptionNo 处方号 - * @return 待发药信息 - */ - List selectDispenseInventoryInfoByPrescriptionNo( - @Param("prescriptionNo") String prescriptionNo, - @Param("medMedicationDefinition") String medMedicationDefinition); -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/IDeviceDispenseMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicalDeviceDispenseMapper.java similarity index 65% rename from openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/IDeviceDispenseMapper.java rename to openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicalDeviceDispenseMapper.java index a871465e..37b97bff 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/IDeviceDispenseMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicalDeviceDispenseMapper.java @@ -12,12 +12,12 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.openhis.administration.domain.Practitioner; -import com.openhis.web.pharmacymanage.dto.EncounterInfoPageDto; -import com.openhis.web.pharmacymanage.dto.PrescriptionDeviceInfoDto; -import com.openhis.web.pharmacymanage.dto.PrescriptionPatientInfoDto; +import com.openhis.web.pharmacymanage.dto.EncounterInfoDto; +import com.openhis.web.pharmacymanage.dto.EncounterInfoSearchParam; +import com.openhis.web.pharmacymanage.dto.ItemDispenseOrderDto; @Repository -public interface IDeviceDispenseMapper { +public interface MedicalDeviceDispenseMapper { /** * 就诊病人列表分页查询 @@ -29,23 +29,13 @@ public interface IDeviceDispenseMapper { * @param completed 发药状态:已发药 * @param preparation 发药状态:待配药 * @param prepared 发药状态:已配药 - * @param amb 就诊类型:门诊 * @return 就诊病人列表 */ - Page selectEncounterInfoListPage(@Param("page") Page page, - @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + Page selectEncounterInfoListPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("statusEnum") Integer statusEnum, @Param("inProgress") Integer inProgress, @Param("completed") Integer completed, @Param("preparation") Integer preparation, - @Param("prepared") Integer prepared, @Param("amb") Integer amb); - - /** - * 患者基本信息查询 - * - * @param encounterId 就诊号 - * @return 患者基本信息 - */ - PrescriptionPatientInfoDto selectPrescriptionPatientInfo(@Param("encounterId") Long encounterId, - @Param("hospitalId") Long hospitalId); + @Param("prepared") Integer prepared); /** * 处方单查询 @@ -59,9 +49,8 @@ public interface IDeviceDispenseMapper { * @param dispenseStatus 发药状态 * @return 处方单列表 */ - Page selectPrescriptionDeviceInfoList( - @Param("page") Page page, - @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + Page selectDeviceDispenseOrderPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("inProgress") Integer inProgress, @Param("completed") Integer completed, @Param("preparation") Integer preparation, @Param("prepared") Integer prepared, @Param("dispenseStatus") Integer dispenseStatus); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicationDetailsMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicationDetailsMapper.java index c768135e..17dc3dd1 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicationDetailsMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicationDetailsMapper.java @@ -11,7 +11,6 @@ import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.openhis.web.pharmacymanage.dto.MedDetailedAccountPageDto; import com.openhis.web.pharmacymanage.dto.MedDetailsSearchParam; -import com.openhis.web.pharmacymanage.dto.MedRunningAccountPageDto; @Repository public interface MedicationDetailsMapper { @@ -29,22 +28,22 @@ public interface MedicationDetailsMapper { */ Page selectAmbPractitionerDetailPage(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("amb") Integer amb, - @Param("completed") Integer completed, @Param("refunded") Integer refunded, - @Param("dispenseEnum") Integer dispenseEnum); + @Param("completed") Integer completed, @Param("agree") Integer agree, @Param("refunded") Integer refunded, + @Param("dispenseEnum") Integer dispenseEnum, @Param("flg") Integer flg); -// /** -// * 门诊发药明细流水账 -// * -// * @param page 分页 -// * @param queryWrapper 查询条件 -// * @param amb 发药类型:门诊 -// * @param completed 发药状态:已发药 -// * @param refunded 发药状态:已退药 -// * @return 门诊发药明细流水账 -// */ -// Page selectAmbMedicationDispenseDetailPage( -// @Param("page") Page page, -// @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("amb") Integer amb, -// @Param("completed") Integer completed, @Param("refunded") Integer refunded) + // /** + // * 门诊发药明细流水账 + // * + // * @param page 分页 + // * @param queryWrapper 查询条件 + // * @param amb 发药类型:门诊 + // * @param completed 发药状态:已发药 + // * @param refunded 发药状态:已退药 + // * @return 门诊发药明细流水账 + // */ + // Page selectAmbMedicationDispenseDetailPage( + // @Param("page") Page page, + // @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("amb") Integer amb, + // @Param("completed") Integer completed, @Param("refunded") Integer refunded) } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ReturnMedicineMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ReturnMedicineMapper.java index 4509b186..d37da68a 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ReturnMedicineMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ReturnMedicineMapper.java @@ -24,8 +24,8 @@ public interface ReturnMedicineMapper { * @param amb 就诊类型:门诊 * @return 退药患者分页列表 */ - Page selectEncounterInfoListPage(@Param("page") Page page, - @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("amb") Integer amb); + Page selectEncounterInfoListPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("amb") Integer amb); /** * 申请退药清单查询 @@ -46,14 +46,6 @@ public interface ReturnMedicineMapper { @Param("refundStatus") Integer refundStatus, @Param("inRefund") Integer inRefund, @Param("completed") Integer completed); - /** - * 患者基本信息查询 - * - * @param encounterId 就诊ID - * @return 患者基本信息 - */ - PrescriptionPatientInfoDto selectPrescriptionPatientInfo(@Param("encounterId") Long encounterId); - /** * 库存信息查询 * diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/WesternMedicineDispenseMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/WesternMedicineDispenseMapper.java index 05fa6dd8..302fb870 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/WesternMedicineDispenseMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/WesternMedicineDispenseMapper.java @@ -12,10 +12,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.openhis.administration.domain.Practitioner; -import com.openhis.web.pharmacymanage.dto.DispenseInventoryDto; -import com.openhis.web.pharmacymanage.dto.EncounterInfoPageDto; -import com.openhis.web.pharmacymanage.dto.PrescriptionMedicineInfoDto; -import com.openhis.web.pharmacymanage.dto.PrescriptionPatientInfoDto; +import com.openhis.web.pharmacymanage.dto.EncounterInfoDto; +import com.openhis.web.pharmacymanage.dto.EncounterInfoSearchParam; +import com.openhis.web.pharmacymanage.dto.ItemDispenseOrderDto; @Repository public interface WesternMedicineDispenseMapper { @@ -30,26 +29,16 @@ public interface WesternMedicineDispenseMapper { * @param completed 发药状态:已发药 * @param preparation 发药状态:待配药 * @param prepared 发药状态:已配药 - * @param amb 就诊类型:门诊 * @return 就诊病人列表 */ - Page selectEncounterInfoListPage(@Param("page") Page page, - @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + Page selectEncounterInfoListPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("statusEnum") Integer statusEnum, @Param("inProgress") Integer inProgress, @Param("completed") Integer completed, @Param("preparation") Integer preparation, - @Param("prepared") Integer prepared, @Param("amb") Integer amb); + @Param("prepared") Integer prepared); /** - * 患者基本信息查询 - * - * @param encounterId 就诊号 - * @return 患者基本信息 - */ - PrescriptionPatientInfoDto selectPrescriptionPatientInfo(@Param("encounterId") Long encounterId, - @Param("hospitalId") Long hospitalId); - - /** - * 处方单查询 + * 发药单查询 * * @param page 分页 * @param queryWrapper 查询条件 @@ -58,25 +47,14 @@ public interface WesternMedicineDispenseMapper { * @param preparation 发药状态:待配药 * @param prepared 发药状态:已配药 * @param dispenseStatus 发药状态 - * @return 处方单列表 + * @return 发耗材单列表 */ - Page selectPrescriptionMedicineInfoList( - @Param("page") Page page, - @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + Page selectMedicineDispenseOrderPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("inProgress") Integer inProgress, @Param("completed") Integer completed, @Param("preparation") Integer preparation, @Param("prepared") Integer prepared, @Param("dispenseStatus") Integer dispenseStatus); - /** - * 待发药和库存信息查询 - * - * @param prescriptionNo 处方号 - * @return 待发药信息 - */ - List selectDispenseInventoryInfoByPrescriptionNo( - @Param("prescriptionNo") String prescriptionNo, - @Param("medMedicationDefinition") String medMedicationDefinition); - /** * 获取配药人下拉选列表 * @@ -84,22 +62,4 @@ public interface WesternMedicineDispenseMapper { * @return 配药人下拉选列表 */ List getPreparerDoctorList(@Param("pharmacist") String pharmacist); - - /** - * 处方单查询 - * - * @param page 分页 - * @param locationId 库房id - * @param startTime 开始时间 - * @param endTime 结束时间 - * @param completed 发药状态:已发药 - * @param medicine 药品 - * @param device 耗材 - * @return 处方单列表 - */ - Page selectMonthlySettlementPatientInfoList( - @Param("page") Page page, - @Param("locationId") Long locationId, @Param("startTime") String startTime, - @Param("endTime") String endTime, @Param("completed") Integer completed, - @Param("medicine") Integer medicine, @Param("device") Integer device); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/ISpecialAdviceAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/ISpecialAdviceAppService.java index 2085ae07..d27f6afe 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/ISpecialAdviceAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/ISpecialAdviceAppService.java @@ -4,6 +4,7 @@ import com.core.common.core.domain.R; import com.openhis.web.regdoctorstation.dto.NursingOrdersDto; import com.openhis.web.regdoctorstation.dto.NursingOrdersEncounterDto; import com.openhis.web.regdoctorstation.dto.NursingOrdersSaveDto; +import com.openhis.web.regdoctorstation.dto.TransferOrganizationParam; /** * 特殊医嘱 应用Service @@ -33,4 +34,12 @@ public interface ISpecialAdviceAppService { */ NursingOrdersEncounterDto getEncounterNursingOrdersInfos(Long encounterId); + /** + * 保存转科医嘱 + * + * @param transferOrganizationParam 转科医嘱参数 + * @return 结果 + */ + R saveTransferOrganizationOrders(TransferOrganizationParam transferOrganizationParam); + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java index c6271f6f..f60180b1 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java @@ -1,5 +1,6 @@ package com.openhis.web.regdoctorstation.appservice.impl; +import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -98,7 +99,7 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { IPage regPatientMainInfo = adviceManageAppMapper.getRegPatientMainInfo( new Page<>(pageNo, pageSize), SecurityUtils.getLoginUser().getPractitionerId(), LocationForm.WARD.getValue(), LocationForm.HOUSE.getValue(), LocationForm.BED.getValue(), - EncounterLocationStatus.ACTIVE.getValue(), EncounterClass.IMP.getValue(), status, Whether.YES.getValue(), + EncounterActivityStatus.ACTIVE.getValue(), EncounterClass.IMP.getValue(), status, Whether.YES.getValue(), AccountType.PERSONAL_CASH_ACCOUNT.getCode(), queryWrapper); regPatientMainInfo.getRecords().forEach(e -> { // 性别 @@ -259,16 +260,15 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { longMedicationRequest.setEffectiveDoseStart(startTime); // 医嘱开始时间 longMedicationRequest .setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_RES_NO.getPrefix(), 4)); - longMedicationRequest.setQuantity(regAdviceSaveDto.getQuantity()); // 请求数量 + longMedicationRequest.setQuantity(regAdviceSaveDto.getDose()); // 请求数量 | 长期医嘱保持和单次剂量一致 longMedicationRequest.setExecuteNum(regAdviceSaveDto.getExecuteNum()); // 执行次数 - longMedicationRequest.setUnitCode(regAdviceSaveDto.getUnitCode()); // 请求单位编码 + longMedicationRequest.setUnitCode(regAdviceSaveDto.getDoseUnitCode()); // 请求单位编码 | 长期医嘱保持和单次剂量一致 longMedicationRequest.setLotNumber(regAdviceSaveDto.getLotNumber()); // 产品批号 longMedicationRequest.setCategoryEnum(regAdviceSaveDto.getCategoryEnum()); // 请求类型 longMedicationRequest.setMedicationId(regAdviceSaveDto.getAdviceDefinitionId());// 医嘱定义id longMedicationRequest.setPatientId(regAdviceSaveDto.getPatientId()); // 患者 longMedicationRequest.setPractitionerId(regAdviceSaveDto.getPractitionerId()); // 开方医生 longMedicationRequest.setOrgId(regAdviceSaveDto.getFounderOrgId()); // 开方人科室 - longMedicationRequest.setReqAuthoredTime(curDate); // 请求开始时间 longMedicationRequest.setPerformLocation(regAdviceSaveDto.getLocationId()); // 发放药房 longMedicationRequest.setEncounterId(regAdviceSaveDto.getEncounterId()); // 就诊id longMedicationRequest.setConditionId(regAdviceSaveDto.getConditionId()); // 诊断id @@ -324,7 +324,6 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { tempMedicationRequest.setPatientId(regAdviceSaveDto.getPatientId()); // 患者 tempMedicationRequest.setPractitionerId(regAdviceSaveDto.getPractitionerId()); // 开方医生 tempMedicationRequest.setOrgId(regAdviceSaveDto.getFounderOrgId()); // 开方人科室 - tempMedicationRequest.setReqAuthoredTime(curDate); // 请求开始时间 tempMedicationRequest.setPerformLocation(regAdviceSaveDto.getLocationId()); // 发放药房 tempMedicationRequest.setEncounterId(regAdviceSaveDto.getEncounterId()); // 就诊id tempMedicationRequest.setConditionId(regAdviceSaveDto.getConditionId()); // 诊断id @@ -432,15 +431,15 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { if (is_save) { longServiceRequest.setOccurrenceStartTime(startTime); // 医嘱开始时间 longServiceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); - longServiceRequest.setQuantity(regAdviceSaveDto.getQuantity()); // 请求数量 + longServiceRequest.setQuantity(new BigDecimal("1")); // 请求数量 | 诊疗的长期医嘱数量都是1 longServiceRequest.setUnitCode(regAdviceSaveDto.getUnitCode()); // 请求单位编码 + longServiceRequest.setRateCode(regAdviceSaveDto.getRateCode()); // 用药频次 longServiceRequest.setCategoryEnum(regAdviceSaveDto.getCategoryEnum()); // 请求类型 longServiceRequest.setTherapyEnum(regAdviceSaveDto.getTherapyEnum()); // 治疗类型,长期(需要前端传) longServiceRequest.setActivityId(regAdviceSaveDto.getAdviceDefinitionId());// 诊疗定义id longServiceRequest.setPatientId(regAdviceSaveDto.getPatientId()); // 患者 longServiceRequest.setRequesterId(regAdviceSaveDto.getPractitionerId()); // 开方医生 longServiceRequest.setEncounterId(regAdviceSaveDto.getEncounterId()); // 就诊id - // longServiceRequest.setAuthoredTime(curDate); // 请求签发时间 longServiceRequest.setOrgId(regAdviceSaveDto.getPositionId()); // 执行科室 longServiceRequest.setContentJson(regAdviceSaveDto.getContentJson()); // 请求内容json longServiceRequest.setYbClassEnum(regAdviceSaveDto.getYbClassEnum());// 类别医保编码 @@ -456,6 +455,7 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { ChargeItem chargeItem; // 新增 + 修改 (临时医嘱) List tempInsertOrUpdateList = activityList.stream().filter(e -> TherapyTimeType.TEMPORARY + .getValue().equals(e.getTherapyEnum()) && (DbOpType.INSERT.getCode().equals(e.getDbOpType()) || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))) .collect(Collectors.toList()); @@ -530,6 +530,7 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { activityChildrenJsonParams.setEncounterId(tempServiceRequest.getEncounterId()); // 就诊id activityChildrenJsonParams.setAccountId(chargeItem.getAccountId()); // 账户id activityChildrenJsonParams.setChargeItemId(chargeItem.getId()); // 费用项id + activityChildrenJsonParams.setParentId(tempServiceRequest.getId());// 子项诊疗的父id adviceUtils.handleActivityChild(childrenJson, organizationId, activityChildrenJsonParams); } } @@ -551,8 +552,7 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { // 住院医嘱请求数据 List regRequestBaseInfo = adviceManageAppMapper.getRegRequestBaseInfo(encounterId, null, CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST, - CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.NO.getCode(), - EncounterClass.IMP.getValue()); + CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.NO.getCode()); for (RegRequestBaseDto regRequestBaseDto : regRequestBaseInfo) { // 请求状态 regRequestBaseDto.setStatusEnum_enumText( @@ -587,8 +587,7 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { // 住院医嘱请求数据 List regRequestBaseInfo = adviceManageAppMapper.getRegRequestBaseInfo(encounterId, patientId, CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST, - CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.YES.getCode(), - EncounterClass.IMP.getValue()); + CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.YES.getCode()); for (RegRequestBaseDto regRequestBaseDto : regRequestBaseInfo) { // 请求状态 regRequestBaseDto.setStatusEnum_enumText( diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java index 3196e0f2..12ff22ca 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java @@ -2,11 +2,13 @@ package com.openhis.web.regdoctorstation.appservice.impl; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; import javax.annotation.Resource; import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.core.common.core.domain.R; import com.core.common.utils.AssignSeqUtil; import com.core.common.utils.MessageUtils; @@ -73,9 +75,29 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer */ @Override public R saveRequestForm(RequestFormSaveDto requestFormSaveDto, String typeCode) { + // 诊疗处方号 + String prescriptionNo; + // 申请单ID + Long requestFormId = requestFormSaveDto.getRequestFormId(); + // 编辑场景 + if (requestFormId != null) { + RequestForm requestFormInfo = iRequestFormService.getById(requestFormId); + prescriptionNo = requestFormInfo.getPrescriptionNo(); + // 该申请单存在的待发送医嘱个数 + long count = iServiceRequestService.count(new LambdaQueryWrapper() + .eq(ServiceRequest::getStatusEnum, RequestStatus.DRAFT.getValue()) + .eq(ServiceRequest::getPrescriptionNo, prescriptionNo)); + if (count == 0L) { + return R.fail("无待签发的医嘱,该申请单不可编辑"); + } + } else { + // 诊疗处方号 + prescriptionNo = assignSeqUtil.getSeq(AssignSeqEnum.ACTIVITY_PSYCHOTROPIC_NO.getPrefix(), 8); + } + // 当前时间 Date curDate = new Date(); - // 请求类型,用于区分 住院还是门诊 + // 请求类型 Integer categoryEnum = requestFormSaveDto.getCategoryEnum(); // 当前登录账号的科室id Long orgId = SecurityUtils.getLoginUser().getOrgId(); @@ -87,18 +109,30 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer Long patientId = requestFormSaveDto.getPatientId(); // 患者挂号对应的科室id 或 住院科室id Long organizationId = requestFormSaveDto.getOrganizationId(); - // 诊疗处方号 - String prescriptionNo = assignSeqUtil.getSeq(AssignSeqEnum.ACTIVITY_PSYCHOTROPIC_NO.getPrefix(), 8); // 声明申请单信息 RequestForm requestForm = new RequestForm(); + requestForm.setId(requestFormId); requestForm.setTypeCode(typeCode); // 申请单类型 requestForm.setPrescriptionNo(prescriptionNo); // 处方号 requestForm.setName(requestFormSaveDto.getName()); // 名称 requestForm.setEncounterId(encounterId); // 就诊ID requestForm.setRequesterId(practitionerId); // 申请人 requestForm.setDescJson(requestFormSaveDto.getDescJson()); // 描述内容 - iRequestFormService.save(requestForm); + iRequestFormService.saveOrUpdate(requestForm); + + // 编辑场景时,先删除掉原有诊疗项目及账单再新增 + if (requestFormId != null) { + List serviceRequestIds = iServiceRequestService + .list(new LambdaQueryWrapper().eq(ServiceRequest::getPrescriptionNo, prescriptionNo)) + .stream().map(ServiceRequest::getId).collect(Collectors.toList()); + for (Long serviceRequestId : serviceRequestIds) { + iServiceRequestService.removeById(serviceRequestId); + // 删除费用项 + iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.WOR_SERVICE_REQUEST, + serviceRequestId); + } + } ServiceRequest serviceRequest; ChargeItem chargeItem; @@ -108,6 +142,8 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer serviceRequest = new ServiceRequest(); serviceRequest.setStatusEnum(RequestStatus.DRAFT.getValue()); serviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); + serviceRequest.setPrescriptionNo(prescriptionNo); + serviceRequest.setTherapyEnum(TherapyTimeType.TEMPORARY.getValue());// 治疗类型 serviceRequest.setQuantity(activitySaveDto.getQuantity()); // 请求数量 serviceRequest.setUnitCode(activitySaveDto.getUnitCode()); // 请求单位编码 serviceRequest.setCategoryEnum(categoryEnum); // 请求类型 @@ -158,6 +194,7 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer activityChildrenJsonParams.setEncounterId(serviceRequest.getEncounterId()); // 就诊id activityChildrenJsonParams.setAccountId(chargeItem.getAccountId()); // 账户id activityChildrenJsonParams.setChargeItemId(chargeItem.getId()); // 费用项id + activityChildrenJsonParams.setParentId(serviceRequest.getId());// 子项诊疗的父id adviceUtils.handleActivityChild(childrenJson, organizationId, activityChildrenJsonParams); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/SpecialAdviceAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/SpecialAdviceAppServiceImpl.java index fee7f636..54ae4c77 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/SpecialAdviceAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/SpecialAdviceAppServiceImpl.java @@ -1,5 +1,6 @@ package com.openhis.web.regdoctorstation.appservice.impl; +import java.math.BigDecimal; import java.util.Arrays; import java.util.Date; import java.util.List; @@ -16,14 +17,18 @@ import com.core.common.core.domain.R; import com.core.common.utils.AssignSeqUtil; import com.core.common.utils.MessageUtils; import com.core.common.utils.SecurityUtils; +import com.openhis.common.constant.CommonConstants; import com.openhis.common.constant.PromptMsgConstant; import com.openhis.common.enums.*; +import com.openhis.document.domain.OrderProcess; +import com.openhis.document.service.IOrderProcessService; import com.openhis.web.doctorstation.appservice.IDoctorStationAdviceAppService; import com.openhis.web.doctorstation.dto.AdviceBaseDto; import com.openhis.web.regdoctorstation.appservice.ISpecialAdviceAppService; import com.openhis.web.regdoctorstation.dto.*; import com.openhis.web.regdoctorstation.mapper.SpecialAdviceAppMapper; import com.openhis.workflow.domain.ServiceRequest; +import com.openhis.workflow.service.IActivityDefinitionService; import com.openhis.workflow.service.IServiceRequestService; import lombok.extern.slf4j.Slf4j; @@ -47,6 +52,12 @@ public class SpecialAdviceAppServiceImpl implements ISpecialAdviceAppService { @Resource IDoctorStationAdviceAppService iDoctorStationAdviceAppService; + @Resource + IActivityDefinitionService iActivityDefinitionService; + + @Resource + IOrderProcessService iOrderProcessService; + /** * 查询护理医嘱信息 * @@ -121,8 +132,6 @@ public class SpecialAdviceAppServiceImpl implements ISpecialAdviceAppService { Long conditionId = nursingOrdersSaveDto.getConditionId(); // 就诊诊断id Long encounterDiagnosisId = nursingOrdersSaveDto.getEncounterDiagnosisId(); - // 患者入院科室id - Long organizationId = nursingOrdersSaveDto.getOrganizationId(); // 护理医嘱详情保存集合 List nursingOrdersSaveDetailDtoList = nursingOrdersSaveDto.getNursingOrdersSaveDetailDtoList(); @@ -155,12 +164,12 @@ public class SpecialAdviceAppServiceImpl implements ISpecialAdviceAppService { adviceBaseDto.setAdviceDefinitionId(definitionId); // 医嘱定义id // 对应的诊疗医嘱信息 activityAdviceBaseDto = iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, null, null, - null, organizationId, 1, 1, Whether.NO.getValue(), List.of(1, 2, 3)).getRecords().get(0); + null, null, 1, 1, Whether.NO.getValue(), List.of(3)).getRecords().get(0); // 逻辑1---------------------直接新增 longServiceRequest.setStatusEnum(RequestStatus.DRAFT.getValue());// 请求状态 longServiceRequest.setOccurrenceStartTime(startTime); // 医嘱开始时间 longServiceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); - longServiceRequest.setQuantity(1); // 请求数量 + longServiceRequest.setQuantity(new BigDecimal("1")); // 请求数量 longServiceRequest.setUnitCode(activityAdviceBaseDto.getUnitCode()); // 请求单位编码 longServiceRequest.setCategoryEnum(categoryEnum); // 请求类型 longServiceRequest.setTherapyEnum(TherapyTimeType.LONG_TERM.getValue()); // 治疗类型 @@ -168,7 +177,7 @@ public class SpecialAdviceAppServiceImpl implements ISpecialAdviceAppService { longServiceRequest.setPatientId(patientId); // 患者 longServiceRequest.setRequesterId(practitionerId); // 开方医生 longServiceRequest.setEncounterId(encounterId); // 就诊id - longServiceRequest.setOrgId(organizationId); // 执行科室 + longServiceRequest.setOrgId(activityAdviceBaseDto.getPositionId()); // 执行科室 // longServiceRequest.setYbClassEnum();// 类别医保编码 longServiceRequest.setConditionId(conditionId); // 诊断id longServiceRequest.setEncounterDiagnosisId(encounterDiagnosisId); // 就诊诊断id @@ -200,13 +209,14 @@ public class SpecialAdviceAppServiceImpl implements ISpecialAdviceAppService { adviceBaseDto = new AdviceBaseDto(); adviceBaseDto.setAdviceDefinitionId(definitionId); // 医嘱定义id // 对应的诊疗医嘱信息 - activityAdviceBaseDto = iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, null, null, null, - organizationId, 1, 1, Whether.NO.getValue(), List.of(1, 2, 3)).getRecords().get(0); + activityAdviceBaseDto = iDoctorStationAdviceAppService + .getAdviceBaseInfo(adviceBaseDto, null, null, null, null, 1, 1, Whether.NO.getValue(), List.of(3)) + .getRecords().get(0); longServiceRequest.setStatusEnum(RequestStatus.DRAFT.getValue());// 请求状态 longServiceRequest.setOccurrenceStartTime(startTime); // 医嘱开始时间 longServiceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); - longServiceRequest.setQuantity(1); // 请求数量 + longServiceRequest.setQuantity(new BigDecimal("1")); // 请求数量 longServiceRequest.setUnitCode(activityAdviceBaseDto.getUnitCode()); // 请求单位编码 longServiceRequest.setCategoryEnum(categoryEnum); // 请求类型 longServiceRequest.setTherapyEnum(TherapyTimeType.LONG_TERM.getValue()); // 治疗类型 @@ -214,7 +224,7 @@ public class SpecialAdviceAppServiceImpl implements ISpecialAdviceAppService { longServiceRequest.setPatientId(patientId); // 患者 longServiceRequest.setRequesterId(practitionerId); // 开方医生 longServiceRequest.setEncounterId(encounterId); // 就诊id - longServiceRequest.setOrgId(organizationId); // 执行科室 + longServiceRequest.setOrgId(activityAdviceBaseDto.getPositionId()); // 执行科室 // longServiceRequest.setYbClassEnum();// 类别医保编码 longServiceRequest.setConditionId(conditionId); // 诊断id longServiceRequest.setEncounterDiagnosisId(encounterDiagnosisId); // 就诊诊断id @@ -280,4 +290,99 @@ public class SpecialAdviceAppServiceImpl implements ISpecialAdviceAppService { return nursingOrdersEncounterDto; } + /** + * 保存转科医嘱 + * + * @param transferOrganizationParam 转科医嘱参数 + * @return 结果 + */ + @Override + public R saveTransferOrganizationOrders(TransferOrganizationParam transferOrganizationParam) { + // 当前登录账号参与者id + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + // 当前时间 + Date curDate = new Date(); + // 医嘱开始时间 + Date startTime = transferOrganizationParam.getStartTime(); + if (startTime == null) { + startTime = curDate; + } + // 就诊id + Long encounterId = transferOrganizationParam.getEncounterId(); + // 患者 + Long patientId = transferOrganizationParam.getPatientId(); + // 诊断ID + Long conditionId = transferOrganizationParam.getConditionId(); + // 就诊诊断id + Long encounterDiagnosisId = transferOrganizationParam.getEncounterDiagnosisId(); + + // 转科的医嘱定义id + Long transferOrganizationDefinitionId = iActivityDefinitionService + .getAppointActivityDefinitionId(CommonConstants.BusinessName.TRANSFER_ORGANIZATION); + if (transferOrganizationDefinitionId == null) { + return R.fail("请先在诊疗目录维护转科医嘱"); + } + // 出院的医嘱定义id + Long leaveHospitalDefinitionId = + iActivityDefinitionService.getAppointActivityDefinitionId(CommonConstants.BusinessName.LEAVE_HOSPITAL); + if (leaveHospitalDefinitionId != null) { + LambdaQueryWrapper leaveLambdaQuery = new LambdaQueryWrapper<>(); + leaveLambdaQuery.eq(ServiceRequest::getEncounterId, encounterId) + .eq(ServiceRequest::getActivityId, leaveHospitalDefinitionId) + .and(wrapper -> wrapper.eq(ServiceRequest::getStatusEnum, RequestStatus.DRAFT.getValue()).or() + .eq(ServiceRequest::getStatusEnum, RequestStatus.ACTIVE.getValue()).or()); + if (!iServiceRequestService.list(leaveLambdaQuery).isEmpty()) { + return R.fail("已经开立出院医嘱,请勿开立转科医嘱"); + } + } + + // 校验重复开立 + LambdaQueryWrapper lambdaQuery = new LambdaQueryWrapper<>(); + lambdaQuery.eq(ServiceRequest::getEncounterId, encounterId) + .eq(ServiceRequest::getActivityId, transferOrganizationDefinitionId) + .and(wrapper -> wrapper.eq(ServiceRequest::getStatusEnum, RequestStatus.DRAFT.getValue()).or() + .eq(ServiceRequest::getStatusEnum, RequestStatus.ACTIVE.getValue()).or()); + if (!iServiceRequestService.list(lambdaQuery).isEmpty()) { + return R.fail("请勿重复开立转科医嘱"); + } + AdviceBaseDto adviceBaseDto = new AdviceBaseDto(); + adviceBaseDto.setAdviceDefinitionId(transferOrganizationDefinitionId); // 医嘱定义id + // 对应的诊疗医嘱信息 + AdviceBaseDto activityAdviceBaseDto = iDoctorStationAdviceAppService + .getAdviceBaseInfo(adviceBaseDto, null, null, null, null, 1, 1, Whether.NO.getValue(), List.of(3)) + .getRecords().get(0); + // 保存转科医嘱请求 + ServiceRequest serviceRequest = new ServiceRequest(); + serviceRequest.setStatusEnum(RequestStatus.DRAFT.getValue());// 请求状态 + serviceRequest.setOccurrenceStartTime(startTime); // 医嘱开始时间 + serviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); + serviceRequest.setQuantity(new BigDecimal("1")); // 请求数量 + serviceRequest.setUnitCode(activityAdviceBaseDto.getUnitCode()); // 请求单位编码 + serviceRequest.setCategoryEnum(Integer.valueOf(activityAdviceBaseDto.getCategoryCode())); // 请求类型 + serviceRequest.setTherapyEnum(TherapyTimeType.TEMPORARY.getValue()); // 治疗类型 + serviceRequest.setReasonText(transferOrganizationParam.getReasonText()); // 理由 + serviceRequest.setActivityId(transferOrganizationDefinitionId);// 诊疗定义id + serviceRequest.setPatientId(patientId); // 患者 + serviceRequest.setRequesterId(practitionerId); // 开方医生 + serviceRequest.setEncounterId(encounterId); // 就诊id + serviceRequest.setOrgId(activityAdviceBaseDto.getPositionId()); // 执行科室 + serviceRequest.setConditionId(conditionId); // 诊断id + serviceRequest.setEncounterDiagnosisId(encounterDiagnosisId); // 就诊诊断id + iServiceRequestService.save(serviceRequest); + + // 保存转科医嘱请求的过程数据 + OrderProcess orderProcess = new OrderProcess(); + orderProcess.setName(CommonConstants.BusinessName.TRANSFER_ORGANIZATION); // 名称 + orderProcess.setEncounterId(encounterId); // 就诊id + orderProcess.setRequestId(serviceRequest.getId()); // 请求id + orderProcess.setRequestTableName(CommonConstants.TableName.WOR_SERVICE_REQUEST); // 请求表名 + orderProcess.setOriginalOrganizationId(transferOrganizationParam.getOriginalOrganizationId()); // 原科室 + orderProcess.setTargetOrganizationId(transferOrganizationParam.getTargetOrganizationId()); // 目标科室 + orderProcess.setOriginalLocationId(transferOrganizationParam.getOriginalLocationId()); // 原病区 + orderProcess.setTargetLocationId(transferOrganizationParam.getTargetLocationId()); // 目标病区 + iOrderProcessService.save(orderProcess); + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"转科医嘱"})); + } + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/SpecialAdviceController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/SpecialAdviceController.java index e5e00412..e0aeb8c2 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/SpecialAdviceController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/SpecialAdviceController.java @@ -8,6 +8,7 @@ import org.springframework.web.bind.annotation.*; import com.core.common.core.domain.R; import com.openhis.web.regdoctorstation.appservice.ISpecialAdviceAppService; import com.openhis.web.regdoctorstation.dto.NursingOrdersSaveDto; +import com.openhis.web.regdoctorstation.dto.TransferOrganizationParam; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -55,4 +56,15 @@ public class SpecialAdviceController { return R.ok(iSpecialAdviceAppService.getEncounterNursingOrdersInfos(encounterId)); } + /** + * 保存转科医嘱 + * + * @param transferOrganizationParam 转科医嘱参数 + * @return 结果 + */ + @PostMapping(value = "/transfer-organization-orders") + public R saveTransferOrganizationOrders(@RequestBody TransferOrganizationParam transferOrganizationParam) { + return iSpecialAdviceAppService.saveTransferOrganizationOrders(transferOrganizationParam); + } + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/ActivitySaveDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/ActivitySaveDto.java index 1b06883f..6e44e4d0 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/ActivitySaveDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/ActivitySaveDto.java @@ -21,7 +21,7 @@ public class ActivitySaveDto { private Long adviceDefinitionId; /** 请求数量 */ - private Integer quantity; + private BigDecimal quantity; /** 请求单位编码 */ private String unitCode; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/LeaveHospitalParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/LeaveHospitalParam.java new file mode 100644 index 00000000..6b22377d --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/LeaveHospitalParam.java @@ -0,0 +1,13 @@ +package com.openhis.web.regdoctorstation.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 出院参数类 + */ +@Data +@Accessors(chain = true) +public class LeaveHospitalParam { + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/NursingOrdersSaveDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/NursingOrdersSaveDto.java index 3cf60e2f..e8b88ff6 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/NursingOrdersSaveDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/NursingOrdersSaveDto.java @@ -39,12 +39,6 @@ public class NursingOrdersSaveDto { @JsonSerialize(using = ToStringSerializer.class) private Long encounterDiagnosisId; - /** - * 患者入院科室id - */ - @JsonSerialize(using = ToStringSerializer.class) - private Long organizationId; - /** * 医嘱开始时间 */ diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/RequestFormQueryDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/RequestFormQueryDto.java index eed4af05..3faf7349 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/RequestFormQueryDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/RequestFormQueryDto.java @@ -31,6 +31,12 @@ public class RequestFormQueryDto { */ private String patientName; + /** + * 申请单ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long requestFormId; + /** 处方号 */ private String prescriptionNo; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/RequestFormSaveDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/RequestFormSaveDto.java index b1af223e..3cc3531a 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/RequestFormSaveDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/RequestFormSaveDto.java @@ -31,6 +31,12 @@ public class RequestFormSaveDto { @JsonSerialize(using = ToStringSerializer.class) private Long organizationId; + /** + * 申请单ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long requestFormId; + /** * 名称 */ @@ -41,15 +47,10 @@ public class RequestFormSaveDto { */ private String descJson; - /** - * 类型编码 - */ - private String typeCode; - /** * 请求类型 */ - private Integer categoryEnum; // 住院传 1 , 门诊传 2 + private Integer categoryEnum; /** * 诊疗参数集合 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/TransferOrganizationParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/TransferOrganizationParam.java new file mode 100644 index 00000000..af70813b --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/TransferOrganizationParam.java @@ -0,0 +1,77 @@ +package com.openhis.web.regdoctorstation.dto; + +import java.util.Date; + +import org.springframework.format.annotation.DateTimeFormat; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 转科参数类 + */ +@Data +@Accessors(chain = true) +public class TransferOrganizationParam { + + /** 就诊id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterId; + + /** 患者 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long patientId; + + /** + * 诊断ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long conditionId; + + /** + * 就诊诊断id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterDiagnosisId; + + /** + * 医嘱开始时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date startTime; + + /** + * 原科室 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long originalOrganizationId; + + /** + * 目标科室 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long targetOrganizationId; + + /** + * 原病区 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long originalLocationId; + + /** + * 目标病区 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long targetLocationId; + + /** + * 理由 + */ + private String reasonText; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/mapper/AdviceManageAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/mapper/AdviceManageAppMapper.java index 10a2668d..939dabe6 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/mapper/AdviceManageAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/mapper/AdviceManageAppMapper.java @@ -26,7 +26,7 @@ public interface AdviceManageAppMapper { * @param wardEnum 病区 * @param houseEnum 病房 * @param bedEnum 床位 - * @param encounterLocationStatus 使用状态 + * @param encounterActivityStatus 使用状态 * @param classEnum 就诊类型 * @param status 住院就诊状态 * @param maindiseFlag 主诊断标识 @@ -37,7 +37,7 @@ public interface AdviceManageAppMapper { IPage getRegPatientMainInfo(@Param("page") Page page, @Param("practitionerId") Long practitionerId, @Param("wardEnum") Integer wardEnum, @Param("houseEnum") Integer houseEnum, @Param("bedEnum") Integer bedEnum, - @Param("encounterLocationStatus") Integer encounterLocationStatus, @Param("classEnum") Integer classEnum, + @Param("encounterActivityStatus") Integer encounterActivityStatus, @Param("classEnum") Integer classEnum, @Param("status") Integer status, @Param("maindiseFlag") Integer maindiseFlag, @Param("accountTypeCode") String accountTypeCode, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); @@ -52,13 +52,12 @@ public interface AdviceManageAppMapper { * @param WOR_SERVICE_REQUEST 诊疗请求表名 * @param practitionerId 当前账号的参与者id * @param historyFlag 历史医嘱标记 - * @param categoryEnum 请求类型为住院 * @return 住院医嘱请求数据 */ List getRegRequestBaseInfo(@Param("encounterId") Long encounterId, @Param("patientId") Long patientId, @Param("MED_MEDICATION_REQUEST") String MED_MEDICATION_REQUEST, @Param("WOR_DEVICE_REQUEST") String WOR_DEVICE_REQUEST, @Param("WOR_SERVICE_REQUEST") String WOR_SERVICE_REQUEST, @Param("practitionerId") Long practitionerId, - @Param("historyFlag") String historyFlag, @Param("categoryEnum") Integer categoryEnum); + @Param("historyFlag") String historyFlag); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IDrugDosageSettlementAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IDrugDosageSettlementAppService.java new file mode 100644 index 00000000..13d02d6d --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IDrugDosageSettlementAppService.java @@ -0,0 +1,33 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.appservice; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.core.common.core.domain.R; +import com.openhis.web.reportmanage.dto.DrugDosageSettlementSearchParam; +import com.openhis.web.reportmanage.dto.TransferReportSearchParam; + +/** + * 药品用量结算 appService + * + * @author yuxj + * @date 2025-09-09 + */ +public interface IDrugDosageSettlementAppService { + + /** + * 药品用量明细列表 + * + * @param drugDosageSettlementSearchParam 药品用量明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 药品用量明细 + */ + R getPage(DrugDosageSettlementSearchParam drugDosageSettlementSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request); +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IInboundReportAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IInboundReportAppService.java index 836e319c..499265c0 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IInboundReportAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IInboundReportAppService.java @@ -4,6 +4,7 @@ package com.openhis.web.reportmanage.appservice; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.core.common.core.domain.R; import com.openhis.web.reportmanage.dto.InboundReportSearchParam; @@ -47,5 +48,5 @@ public interface IInboundReportAppService { * @return 单据详情 */ R makeExcelFile(InboundReportSearchParam inboundReportSearchParam, Integer pageNo, Integer pageSize, - String searchKey, HttpServletRequest request); + String searchKey, HttpServletRequest request, HttpServletResponse response); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IInventoryProductReportAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IInventoryProductReportAppService.java index 12a09626..c55cc6c9 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IInventoryProductReportAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IInventoryProductReportAppService.java @@ -4,6 +4,7 @@ package com.openhis.web.reportmanage.appservice; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.core.common.core.domain.R; import com.openhis.web.reportmanage.dto.InventoryProductReportSearchParam; @@ -41,5 +42,5 @@ public interface IInventoryProductReportAppService { * @return 单据详情 */ R makeExcelFile(InventoryProductReportSearchParam inventoryProductReportSearchParam, Integer pageNo, - Integer pageSize, String searchKey, HttpServletRequest request); + Integer pageSize, String searchKey, HttpServletRequest request, HttpServletResponse response); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/ILossReportAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/ILossReportAppService.java index 0a4fe39a..0ac498ba 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/ILossReportAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/ILossReportAppService.java @@ -4,6 +4,7 @@ package com.openhis.web.reportmanage.appservice; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.core.common.core.domain.R; import com.openhis.web.reportmanage.dto.LossReportSearchParam; @@ -42,5 +43,5 @@ public interface ILossReportAppService { * @return 单据详情 */ R makeExcelFile(LossReportSearchParam lossReportSearchParam, Integer pageNo, Integer pageSize, String searchKey, - HttpServletRequest request); + HttpServletRequest request, HttpServletResponse response); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IMedicationDeviceReportAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IMedicationDeviceReportAppService.java index 40f4f993..0e450224 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IMedicationDeviceReportAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IMedicationDeviceReportAppService.java @@ -3,9 +3,15 @@ */ package com.openhis.web.reportmanage.appservice; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.core.common.core.domain.R; +import com.openhis.web.reportmanage.dto.InboundReportSearchParam; +import com.openhis.web.reportmanage.dto.MedUseReportInfoDto; import org.springframework.web.bind.annotation.RequestParam; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * 药品院内开立情况 appService * @@ -33,5 +39,17 @@ public interface IMedicationDeviceReportAppService { * @param pageSize 查询条数 * @return 药品耗材日结/周结/月结算单 */ - R selectMedDdevInfo(Long orgId, String name, String dispenseDateSTime, String dispenseDateETime,Integer pageNo, Integer pageSize); + Page selectMedDdevInfo(Long orgId, String name, String dispenseDateSTime, String dispenseDateETime,Integer pageNo, Integer pageSize); + + /** + * 导出 + * + * @param orgId 科室 + * @param dispenseDateSTime 开始时间 + * @param dispenseDateSTime 结束时间 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 单据详情 + */ + R makeExcelFile(Long orgId, String name, String dispenseDateSTime, String dispenseDateETime,Integer pageNo, Integer pageSize, HttpServletResponse response); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IOutboundReportAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IOutboundReportAppService.java index cc61da4e..70cbf25f 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IOutboundReportAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IOutboundReportAppService.java @@ -1,6 +1,7 @@ package com.openhis.web.reportmanage.appservice; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.core.common.core.domain.R; import com.openhis.web.reportmanage.dto.InboundReportSearchParam; @@ -45,5 +46,5 @@ public interface IOutboundReportAppService { * @return 单据详情 */ R makeExcelFile(OutboundReportSearchParam outboundReportSearchParam, Integer pageNo, Integer pageSize, - String searchKey, HttpServletRequest request); + String searchKey, HttpServletRequest request, HttpServletResponse response); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IReturnIssueReportAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IReturnIssueReportAppService.java index 0ab47dc0..b9085e91 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IReturnIssueReportAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IReturnIssueReportAppService.java @@ -1,6 +1,7 @@ package com.openhis.web.reportmanage.appservice; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.core.common.core.domain.R; import com.openhis.web.reportmanage.dto.OutboundReportSearchParam; @@ -45,5 +46,5 @@ public interface IReturnIssueReportAppService { * @return 单据详情 */ R makeExcelFile(ReturnIssueReportSearchParam returnIssueReportSearchParam, Integer pageNo, Integer pageSize, - String searchKey, HttpServletRequest request); + String searchKey, HttpServletRequest request, HttpServletResponse response); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IStocktakingReportAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IStocktakingReportAppService.java index ea2b4801..dc62d345 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IStocktakingReportAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IStocktakingReportAppService.java @@ -4,6 +4,7 @@ package com.openhis.web.reportmanage.appservice; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.core.common.core.domain.R; import com.openhis.web.reportmanage.dto.OutboundReportSearchParam; @@ -30,6 +31,19 @@ public interface IStocktakingReportAppService { R getPage(StocktakingReportSearchParam stocktakingReportSearchParam, Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request); + /** + * 库存盘点明细列表 + * + * @param stocktakingReportSearchParam 库存盘点明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 库存盘点明细 + */ + R getAutoPage(StocktakingReportSearchParam stocktakingReportSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request); + /** * 导出 * @@ -41,5 +55,5 @@ public interface IStocktakingReportAppService { * @return 单据详情 */ R makeExcelFile(StocktakingReportSearchParam stocktakingReportSearchParam, Integer pageNo, Integer pageSize, - String searchKey, HttpServletRequest request); + String searchKey, HttpServletRequest request, HttpServletResponse response); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/ITransferReportAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/ITransferReportAppService.java index 59427fb5..d5d7652a 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/ITransferReportAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/ITransferReportAppService.java @@ -4,6 +4,7 @@ package com.openhis.web.reportmanage.appservice; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.core.common.core.domain.R; import com.openhis.web.reportmanage.dto.InboundReportSearchParam; @@ -41,5 +42,5 @@ public interface ITransferReportAppService { * @return 单据详情 */ R makeExcelFile(TransferReportSearchParam transferReportSearchParam, Integer pageNo, Integer pageSize, - String searchKey, HttpServletRequest request); + String searchKey, HttpServletRequest request, HttpServletResponse response); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/InpatientMedicalRecordHomePageCollectionAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/InpatientMedicalRecordHomePageCollectionAppService.java index de3883a4..54c4c428 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/InpatientMedicalRecordHomePageCollectionAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/InpatientMedicalRecordHomePageCollectionAppService.java @@ -4,6 +4,7 @@ package com.openhis.web.reportmanage.appservice; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.core.common.core.domain.R; import com.openhis.web.reportmanage.dto.PurchaseReturnReportSearchParam; @@ -26,5 +27,5 @@ public interface InpatientMedicalRecordHomePageCollectionAppService { * @param encounterIdList 就诊idList * @return 执行结果 */ - R makeCsvFile(List encounterIdList); + R makeCsvFile(List encounterIdList, HttpServletResponse response); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/PurchaseReturnReportAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/PurchaseReturnReportAppService.java index 492847f2..139a8c42 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/PurchaseReturnReportAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/PurchaseReturnReportAppService.java @@ -4,6 +4,7 @@ package com.openhis.web.reportmanage.appservice; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.core.common.core.domain.R; import com.openhis.web.reportmanage.dto.OutboundReportSearchParam; @@ -48,5 +49,5 @@ public interface PurchaseReturnReportAppService { * @return 单据详情 */ R makeExcelFile(PurchaseReturnReportSearchParam purchaseReturnReportSearchParam, Integer pageNo, - Integer pageSize, String searchKey, HttpServletRequest request); + Integer pageSize, String searchKey, HttpServletRequest request, HttpServletResponse response); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/DrugDosageSettlementAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/DrugDosageSettlementAppServiceImpl.java new file mode 100644 index 00000000..d6412ca5 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/DrugDosageSettlementAppServiceImpl.java @@ -0,0 +1,76 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.appservice.impl; + + +import javax.servlet.http.HttpServletRequest; +import com.openhis.common.enums.*; +import com.openhis.web.reportmanage.appservice.IDrugDosageSettlementAppService; +import com.openhis.web.reportmanage.dto.DrugDosageSettlementPageDto; +import com.openhis.web.reportmanage.dto.DrugDosageSettlementSearchParam; +import com.openhis.web.reportmanage.mapper.DrugDosageSettlementMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.core.common.core.domain.R; +import com.openhis.common.utils.HisQueryUtils; + +/** + * 药品用量结算 impl + * + * @author yuxj + * @date 2025-09-09 + */ +@Service +public class DrugDosageSettlementAppServiceImpl implements IDrugDosageSettlementAppService { + + @Autowired + private DrugDosageSettlementMapper drugDosageSettlementMapper; + + /** + * 药品用量明细列表 + * + * @param drugDosageSettlementSearchParam 药品用量明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 药品用量明细 + */ + @Override + public R getPage(DrugDosageSettlementSearchParam drugDosageSettlementSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request) { + + // 数据初始化,不使用eq条件拼接 + // 项目类型 + Integer categoryCode = drugDosageSettlementSearchParam.getCategoryCode(); + drugDosageSettlementSearchParam.setCategoryCode(null); + // 抗生素flg + Integer antibioticFlg = drugDosageSettlementSearchParam.getAntibioticFlg(); + drugDosageSettlementSearchParam.setAntibioticFlg(null); +// // 开始时间 +// String dispenseDateSTime = drugDosageSettlementSearchParam.getDispenseDateSTime(); +// drugDosageSettlementSearchParam.setDispenseDateSTime(null); +// // 结束时间 +// String dispenseDateETime = drugDosageSettlementSearchParam.getDispenseDateETime(); +// drugDosageSettlementSearchParam.setDispenseDateETime(null); + + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper( + drugDosageSettlementSearchParam, searchKey, null, request); + + // 项目类型为中成药(1)、西药(2)、外购药品(3)、中草药(4)时查药品表 + if (categoryCode != null) { + queryWrapper.eq("category_code", categoryCode.toString()); + } + + // 查询商品调拨明细分页列表 + Page drugDosageReportPage = + drugDosageSettlementMapper.selectDrugDosageReportPage(new Page<>(pageNo, pageSize), queryWrapper, + DispenseStatus.COMPLETED.getValue(), RequestStatus.COMPLETED.getValue(),antibioticFlg); + + return R.ok(drugDosageReportPage); + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InboundReportAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InboundReportAppServiceImpl.java index faad386f..4caac692 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InboundReportAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InboundReportAppServiceImpl.java @@ -9,9 +9,11 @@ import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.core.common.core.domain.entity.SysDictData; import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; import com.core.system.service.ISysDictTypeService; import com.openhis.administration.domain.Practitioner; import com.openhis.administration.domain.Supplier; @@ -115,7 +117,9 @@ public class InboundReportAppServiceImpl implements IInboundReportAppService { */ @Override public R makeExcelFile(InboundReportSearchParam inboundReportSearchParam, Integer pageNo, Integer pageSize, - String searchKey, HttpServletRequest request) { + String searchKey, HttpServletRequest request, HttpServletResponse response) { + pageNo = 1; + pageSize = 10000; // 构建查询条件 QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(inboundReportSearchParam, searchKey, new HashSet<>(Arrays.asList("supply_bus_no", "name", "bus_no")), request); @@ -167,7 +171,7 @@ public class InboundReportAppServiceImpl implements IInboundReportAppService { headers.put("totalSalePrice", "售价金额"); headers.put("supplier", "供应商"); headers.put("approverId_dictText", "审核人"); - headers.put("createTime", "制单日期"); + headers.put("occurrenceTime", "制单日期"); headers.put("approvalTime", "审核日期"); BigDecimal totalPrice = @@ -180,9 +184,8 @@ public class InboundReportAppServiceImpl implements IInboundReportAppService { // 文件名,只传文字部分 String excelName = SupplyType.PURCHASE_INVENTORY.getInfo(); - // TODO 文件路径 // 导出到Excel - ExcelFillerUtil.makeExcelFile(receiptDetailList, headers, "E:\\qqqqqqqqqq\\", excelName, totalValues); + ExcelFillerUtil.makeExcelFile(response,receiptDetailList, headers, excelName, totalValues); } catch (Exception e) { e.printStackTrace(); System.out.printf("导出Excel失败:" + e.getMessage()); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InpatientMedicalRecordHomePageCollectionAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InpatientMedicalRecordHomePageCollectionAppServiceImpl.java index 148875ef..ba3fb25c 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InpatientMedicalRecordHomePageCollectionAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InpatientMedicalRecordHomePageCollectionAppServiceImpl.java @@ -9,6 +9,8 @@ import java.text.DecimalFormat; import java.util.*; import java.util.stream.Collectors; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; + import com.alibaba.fastjson2.JSONObject; import com.core.common.utils.AgeCalculatorUtil; import com.core.common.utils.SecurityUtils; @@ -49,7 +51,7 @@ public class InpatientMedicalRecordHomePageCollectionAppServiceImpl * @return 执行结果 */ @Override - public R makeCsvFile(List encounterIdList) { + public R makeCsvFile(List encounterIdList, HttpServletResponse response) { // // 格式 (7,2):最大整数位 7,固定小数位 2 // DecimalFormat df7_2 = new DecimalFormat(); @@ -84,25 +86,19 @@ public class InpatientMedicalRecordHomePageCollectionAppServiceImpl // 获取系统信息 JSONObject optionJson = SecurityUtils.getLoginUser().getOptionJson(); - // todo test数据 - encounterIdList.add(1927295460902035458L); - encounterIdList.add(1927897518316187649L); - encounterIdList.add(1928275772621451265L); - encounterIdList.add(1927930956645658626L); - // 住院病案csv参数 InpatientMedicalRecordHomePageCollectionDto medicalRecordHomePage = new InpatientMedicalRecordHomePageCollectionDto(); List medicalRecordHomePageList = new ArrayList<>(); - // 搜索csv所需数据 todo sql没写完 + // 搜索csv所需数据 todo sql没写完 csv出力需要确认好不好使 List medicalRecordHomePageMakeList = inpatientMedicalRecordHomePageCollectionMapper.getInfo(encounterIdList); for (InpatientMedicalRecordHomePageMakeDto item : medicalRecordHomePageMakeList) { // 组织机构代码 字符 30 必填 - medicalRecordHomePage.setA01(optionJson.getString("fixmedinsCode")); + medicalRecordHomePage.setA01(optionJson.getString(CommonConstants.Option.FIXMEDINS_CODE)); // 医疗机构名称 A02 字符 80 必填 - medicalRecordHomePage.setA02(optionJson.getString("fixmedinsName")); + medicalRecordHomePage.setA02(optionJson.getString(CommonConstants.Option.FIXMEDINS_NAME)); // 病案号 A48 字符 50 必填 medicalRecordHomePage.setA48(item.getA48()); // 住院次数 A49 数字 4 必填 @@ -345,10 +341,8 @@ public class InpatientMedicalRecordHomePageCollectionAppServiceImpl medicalRecordHomePageList.add(medicalRecordHomePage); } try { - // 做成csv文件 todo 文件路径 - // CsvFillerUtil.makeCsvFile(optionJson.getString("CsvOutputPath()"), medicalRecordHomePageList); - CsvFillerUtil.makeCsvFile("E:\\qqqqqqqqqq\\", medicalRecordHomePageList); - + // 做成csv文件 + CsvFillerUtil.makeCsvFile(response, medicalRecordHomePageList); } catch (IOException e) { e.printStackTrace(); System.err.println("写入csv时发生错误:" + e.getMessage()); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InventoryProductReportAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InventoryProductReportAppServiceImpl.java index a9c6333a..5a836620 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InventoryProductReportAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InventoryProductReportAppServiceImpl.java @@ -5,9 +5,11 @@ package com.openhis.web.reportmanage.appservice.impl; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.core.common.core.domain.entity.SysDictData; import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; import com.core.system.service.ISysDictTypeService; import com.openhis.administration.domain.Practitioner; import com.openhis.administration.domain.Supplier; @@ -99,7 +101,9 @@ public class InventoryProductReportAppServiceImpl implements IInventoryProductRe */ @Override public R makeExcelFile(InventoryProductReportSearchParam inventoryProductReportSearchParam, Integer pageNo, - Integer pageSize, String searchKey, HttpServletRequest request) { + Integer pageSize, String searchKey, HttpServletRequest request, HttpServletResponse response) { + pageNo = 1; + pageSize = 10000; // 设置模糊查询的字段名 HashSet searchFields = new HashSet<>(); searchFields.add(CommonConstants.FieldName.BusNo); @@ -174,9 +178,8 @@ public class InventoryProductReportAppServiceImpl implements IInventoryProductRe // 文件名,只传文字部分 String excelName = SupplyType.INVENTORY_PRODUCT.getInfo(); - // TODO 文件路径 // 导出到Excel - ExcelFillerUtil.makeExcelFile(receiptDetailList, headers, "E:\\qqqqqqqqqq\\", excelName, totalValues); + ExcelFillerUtil.makeExcelFile(response, receiptDetailList, headers, excelName, totalValues); } catch (Exception e) { e.printStackTrace(); System.out.printf("导出Excel失败:" + e.getMessage()); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/LossReportAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/LossReportAppServiceImpl.java index a6fd2f3a..be132da4 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/LossReportAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/LossReportAppServiceImpl.java @@ -9,10 +9,14 @@ import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import com.alibaba.fastjson2.JSONObject; import com.core.common.core.domain.entity.SysDictData; import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; import com.core.system.service.ISysDictTypeService; +import com.openhis.administration.domain.Practitioner; import com.openhis.administration.service.IPractitionerService; import com.openhis.common.constant.PromptMsgConstant; import com.openhis.web.reportmanage.utils.ExcelFillerUtil; @@ -88,7 +92,9 @@ public class LossReportAppServiceImpl implements ILossReportAppService { */ @Override public R makeExcelFile(LossReportSearchParam lossReportSearchParam, Integer pageNo, Integer pageSize, - String searchKey, HttpServletRequest request) { + String searchKey, HttpServletRequest request, HttpServletResponse response) { + pageNo = 1; + pageSize = 10000; // 构建查询条件 QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(lossReportSearchParam, searchKey, new HashSet<>(Arrays.asList("name", "bus_no")), request); @@ -111,38 +117,49 @@ public class LossReportAppServiceImpl implements ILossReportAppService { Map unitCodeToNameMap = unitCodeList.stream().collect( Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel, (oldValue, newValue) -> oldValue // 冲突时保留旧值(第一个) )); + // 做成参与者List + List practitionerList = practitionerService.getList(); + // 创建id到名字的映射 + Map practitionerToNameMap = practitionerList.stream() + .collect(Collectors.toMap(Practitioner::getId, Practitioner::getName, (oldValue, newValue) -> oldValue // 冲突时保留旧值(第一个) + )); // 遍历赋值 receiptDetailList.forEach(detail -> { detail.setUnitCode_dictText(unitCodeToNameMap.get(detail.getUnitCode())); + detail.setApproverId_dictText(practitionerToNameMap.get(detail.getApproverId())); }); try { // 准备表头(key对应DTO的字段名) Map headers = new LinkedHashMap<>(); + headers.put("supplyBusno", "单据号"); headers.put("busNo", "编码"); headers.put("name", "项目名称"); headers.put("totalVolume", "规格"); headers.put("manufacturerText", "厂家/产地"); headers.put("lotNumber", "生产批号"); headers.put("locationName", "仓库"); + headers.put("locationStoreName", "货位"); headers.put("unitCode_dictText", "单位"); headers.put("itemQuantity", "报损数量"); - headers.put("approvalTime", "报损日期"); + headers.put("price", "采购单价"); + headers.put("totalPrice", "报损金额"); + headers.put("supplier", "供应商"); + headers.put("approverId_dictText", "审核人"); + headers.put("occurrenceTime", "制单日期"); + headers.put("approvalTime", "审核日期"); - // BigDecimal totalPrice = receiptDetailList.stream() - // .filter(Objects::nonNull) - // .map(LossReportPageDto::getTotalPrice) - // .filter(Objects::nonNull) - // .reduce(BigDecimal.ZERO, BigDecimal::add); - // // 表头上的字段 - // Map totalValues = new LinkedHashMap<>(); - // totalValues.put("合计金额", totalPrice); + BigDecimal totalPrice = + receiptDetailList.stream().filter(Objects::nonNull).map(LossReportPageDto::getTotalPrice) + .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); + // 表头上的字段 + Map totalValues = new LinkedHashMap<>(); + totalValues.put("合计金额", totalPrice); // 文件名,只传文字部分 String excelName = SupplyType.LOSS_REPORT_FORM.getInfo(); - // TODO 文件路径 // 导出到Excel - ExcelFillerUtil.makeExcelFile(receiptDetailList, headers, "E:\\qqqqqqqqqq\\", excelName, null); + ExcelFillerUtil.makeExcelFile(response, receiptDetailList, headers, excelName, totalValues); } catch (Exception e) { e.printStackTrace(); System.out.printf("导出Excel失败:" + e.getMessage()); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/MedicationDeviceReportAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/MedicationDeviceReportAppServiceImpl.java index 8ce31825..e0008d66 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/MedicationDeviceReportAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/MedicationDeviceReportAppServiceImpl.java @@ -3,19 +3,38 @@ */ package com.openhis.web.reportmanage.appservice.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.core.common.core.domain.entity.SysDictData; +import com.core.common.utils.MessageUtils; +import com.core.system.service.ISysDictTypeService; +import com.openhis.administration.domain.Organization; +import com.openhis.administration.domain.Practitioner; +import com.openhis.administration.service.IOrganizationService; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.*; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.reportmanage.dto.InboundReportPageDto; +import com.openhis.web.reportmanage.dto.InboundReportSearchParam; +import com.openhis.web.reportmanage.dto.MedDevUseReportDto; import com.openhis.web.reportmanage.dto.MedUseReportInfoDto; +import com.openhis.web.reportmanage.utils.ExcelFillerUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.core.common.core.domain.R; import com.openhis.common.constant.CommonConstants; -import com.openhis.common.enums.DispenseStatus; -import com.openhis.common.enums.RequestStatus; -import com.openhis.common.enums.SupplyType; import com.openhis.web.reportmanage.appservice.IMedicationDeviceReportAppService; import com.openhis.web.reportmanage.mapper.MedicationDeviceReportMapper; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + /** * 药品耗材统计查询用 impl * @@ -27,12 +46,16 @@ public class MedicationDeviceReportAppServiceImpl implements IMedicationDeviceRe @Autowired private MedicationDeviceReportMapper medicationDeviceReportMapper; + @Resource + private ISysDictTypeService sysDictTypeService; + @Resource + private IOrganizationService organizationService; /** * 药品耗材日结/周结/月结算(统计筛选时间区内) * * @param dispenseDateSTime 开始时间 - * @param dispenseDateSTime 结束时间 + * @param dispenseDateETime 结束时间 * @return 药品耗材日结/周结/月结算单 */ @Override @@ -49,14 +72,14 @@ public class MedicationDeviceReportAppServiceImpl implements IMedicationDeviceRe * * @param orgId 科室 * @param dispenseDateSTime 开始时间 - * @param dispenseDateSTime 结束时间 + * @param dispenseDateETime 结束时间 * @param pageNo 当前页码 * @param pageSize 查询条数 * @return 药品耗材日结/周结/月结算单 */ @Override - public R selectMedDdevInfo(Long orgId, String name, String dispenseDateSTime, String dispenseDateETime, - Integer pageNo, Integer pageSize) { + public Page selectMedDdevInfo(Long orgId, String name, String dispenseDateSTime, + String dispenseDateETime, Integer pageNo, Integer pageSize) { Page medUseReportInfoDto = medicationDeviceReportMapper.selectMedDdevInfo( new Page<>(pageNo, pageSize), CommonConstants.TableName.MED_MEDICATION_REQUEST, @@ -65,7 +88,98 @@ public class MedicationDeviceReportAppServiceImpl implements IMedicationDeviceRe DispenseStatus.COMPLETED.getValue(), SupplyType.ISSUE_INVENTORY.getValue(), SupplyType.RETURN_ISSUE.getValue(), orgId, name, dispenseDateSTime, dispenseDateETime); - return R.ok(medUseReportInfoDto); + return medUseReportInfoDto; + } + + /** + * 导出 + * + * @param orgId 科室 + * @param dispenseDateSTime 开始时间 + * @param dispenseDateETime 结束时间 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param response excel导出用 + * + * @return 单据详情 + */ + @Override + public R makeExcelFile(Long orgId, String name, String dispenseDateSTime, String dispenseDateETime, + Integer pageNo, Integer pageSize, HttpServletResponse response) { + pageNo = 1; + pageSize = 10000; + // 获取科室的耗材和药品总金额数据 + List medDevReport = + medicationDeviceReportMapper.selectMedDevReport(CommonConstants.TableName.MED_MEDICATION_REQUEST, + CommonConstants.TableName.WOR_DEVICE_REQUEST, CommonConstants.TableName.MED_MEDICATION_DEFINITION, + CommonConstants.TableName.ADM_DEVICE_DEFINITION, RequestStatus.COMPLETED.getValue(), + DispenseStatus.COMPLETED.getValue(), dispenseDateSTime, dispenseDateETime); + MedDevUseReportDto medDevReportDto = medDevReport.stream().filter(dto -> orgId.equals(dto.getOrgId())) + .findFirst().orElseThrow(() -> new IllegalArgumentException("未找到指定科室的数据")); + + // 查询数据 + Page medUseReportInfoDto = medicationDeviceReportMapper.selectMedDdevInfo( + new Page<>(pageNo, pageSize), CommonConstants.TableName.MED_MEDICATION_REQUEST, + CommonConstants.TableName.WOR_DEVICE_REQUEST, CommonConstants.TableName.MED_MEDICATION_DEFINITION, + CommonConstants.TableName.ADM_DEVICE_DEFINITION, RequestStatus.COMPLETED.getValue(), + DispenseStatus.COMPLETED.getValue(), SupplyType.ISSUE_INVENTORY.getValue(), + SupplyType.RETURN_ISSUE.getValue(), orgId, name, dispenseDateSTime, dispenseDateETime); + + List receiptDetailList = medUseReportInfoDto.getRecords(); + + if (receiptDetailList.isEmpty()) { + System.out.printf("导出Excel失败,无数据。"); + return R.fail("导出Excel失败,无数据。"); + } + // 获取药品分类 + List unitCodeList = sysDictTypeService.selectDictDataByType("unit_code"); + // 创建单位代码到单位名称的映射 + Map unitCodeToNameMap = unitCodeList.stream().collect( + Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel, (oldValue, newValue) -> oldValue // 冲突时保留旧值(第一个) + )); + // 做成科室List + List organizationList = organizationService.getList(OrganizationType.DEPARTMENT.getValue(), null); + // 创建id到名字的映射 + Map rganizationToNameMap = organizationList.stream() + .collect(Collectors.toMap(Organization::getId, Organization::getName, (oldValue, newValue) -> oldValue // 冲突时保留旧值(第一个) + )); + // 遍历赋值 + receiptDetailList.forEach(detail -> { + detail.setUnitCode_dictText(unitCodeToNameMap.get(detail.getUnitCode())); + detail.setOrgId_dictText(rganizationToNameMap.get(detail.getOrgId())); + }); + + try { + // 准备表头(key对应DTO的字段名) + Map headers = new LinkedHashMap<>(); + headers.put("name", "项目名"); + headers.put("totalVolume", "规格"); + headers.put("lotNumber", "产品型号"); + headers.put("manufacturerText", "生产厂家"); + headers.put("totalQuantity", "数量"); + headers.put("unitCode_dictText", "单位"); + headers.put("unitPrice", "单价"); + headers.put("totalMoney", "项目总价"); + headers.put("orgId_dictText", "所属科室"); + headers.put("dispenseTime", "发放时间"); + + // 表头上的字段 + Map totalValues = new LinkedHashMap<>(); + totalValues.put("科室名", medDevReportDto.getOrgName()); + totalValues.put("耗材和药品总金额", medDevReportDto.getTotalMoney()); + + // 文件名,只传文字部分 + String excelName = "药房月结"; + // 导出到Excel + ExcelFillerUtil.makeExcelFile(response, receiptDetailList, headers, excelName, totalValues); + } catch (Exception e) { + e.printStackTrace(); + System.out.printf("导出Excel失败:" + e.getMessage()); + return R.fail("导出Excel失败:" + e.getMessage()); + } + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } } \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/MonthlySettlementReportAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/MonthlySettlementReportAppServiceImpl.java index 4399109b..22d2e021 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/MonthlySettlementReportAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/MonthlySettlementReportAppServiceImpl.java @@ -101,11 +101,11 @@ public class MonthlySettlementReportAppServiceImpl implements IMonthlySettlement SupplyType.PRODUCT_TRANSFER.getValue(), SupplyType.PRODUCT_BATCH_TRANSFER.getValue(), SupplyStatus.AGREE.getValue(), DispenseStatus.COMPLETED.getValue(), startTime, endTime); // 调拨出库,typeEnum=2,8 商品调拨,商品批量调拨 - AmountNumberDto transferOutObj = monthlySettlementReportMapper.selectTransferInAmountNumber(locationId, + AmountNumberDto transferOutObj = monthlySettlementReportMapper.selectTransferOutAmountNumber(locationId, SupplyType.PRODUCT_TRANSFER.getValue(), SupplyType.PRODUCT_BATCH_TRANSFER.getValue(), SupplyStatus.AGREE.getValue(), DispenseStatus.COMPLETED.getValue(), startTime, endTime); // 盘点出库,typeEnum=4,10 商品盘点,商品批量盘点 - AmountNumberDto profitLossObj = monthlySettlementReportMapper.selectTransferOutAmountNumber(locationId, + AmountNumberDto profitLossObj = monthlySettlementReportMapper.selectProfitLossAmountNumber(locationId, SupplyType.PRODUCT_STOCKTAKING.getValue(), SupplyType.PRODUCT_BATCH_STOCKTAKING.getValue(), SupplyStatus.AGREE.getValue(), DispenseStatus.COMPLETED.getValue(), startTime, endTime); // 报损单,typeEnum=6 报损单 @@ -114,7 +114,7 @@ public class MonthlySettlementReportAppServiceImpl implements IMonthlySettlement SupplyStatus.AGREE.getValue(), DispenseStatus.COMPLETED.getValue(), startTime, endTime); // 药品和耗材发放金额 monthlySettlementDto.setDrugIssueAmount(monthlySettlementReportMapper.selectDrugIssue(locationId, - RequestStatus.COMPLETED.getValue(), CommonConstants.TableName.MED_MEDICATION_REQUEST, + RequestStatus.COMPLETED.getValue(), DispenseStatus.COMPLETED.getValue(), CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST, startTime, endTime)); // 预期期末金额 = 期初金额 + 采购入库金额 - 领用出库金额 + 领用退货金额 + 调拨入库金额 - 调拨出库金额 - 报损单金额 - 药品和耗材发放金额 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/OutboundReportAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/OutboundReportAppServiceImpl.java index d4c5cdf3..b861f9df 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/OutboundReportAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/OutboundReportAppServiceImpl.java @@ -7,9 +7,11 @@ import java.util.stream.Stream; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.core.common.core.domain.entity.SysDictData; import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; import com.core.system.service.ISysDictTypeService; import com.openhis.administration.domain.Practitioner; import com.openhis.administration.domain.Supplier; @@ -31,7 +33,7 @@ import com.openhis.web.reportmanage.appservice.IOutboundReportAppService; import com.openhis.web.reportmanage.mapper.OutboundReportMapper; /** - * 入库明细 应用实现类 + * 出库明细 应用实现类 * * @author yuanzs * @date 2025/4/21 @@ -112,7 +114,9 @@ public class OutboundReportAppServiceImpl implements IOutboundReportAppService { */ @Override public R makeExcelFile(OutboundReportSearchParam outboundReportSearchParam, Integer pageNo, Integer pageSize, - String searchKey, HttpServletRequest request) { + String searchKey, HttpServletRequest request, HttpServletResponse response) { + pageNo = 1; + pageSize = 10000; // 构建查询条件 QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(outboundReportSearchParam, searchKey, @@ -185,9 +189,9 @@ public class OutboundReportAppServiceImpl implements IOutboundReportAppService { // 文件名,只传文字部分 String excelName = SupplyType.ISSUE_INVENTORY.getInfo(); - // TODO 文件路径 + // 导出到Excel - ExcelFillerUtil.makeExcelFile(receiptDetailList, headers, "E:\\qqqqqqqqqq\\", excelName, totalValues); + ExcelFillerUtil.makeExcelFile(response, receiptDetailList, headers, excelName, totalValues); } catch (Exception e) { e.printStackTrace(); System.out.printf("导出Excel失败:" + e.getMessage()); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/PurchaseReturnReportAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/PurchaseReturnReportAppServiceImpl.java index 0d05f1be..d1947c3e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/PurchaseReturnReportAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/PurchaseReturnReportAppServiceImpl.java @@ -9,9 +9,11 @@ import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.core.common.core.domain.entity.SysDictData; import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; import com.core.system.service.ISysDictTypeService; import com.openhis.administration.domain.Practitioner; import com.openhis.administration.service.IPractitionerService; @@ -116,7 +118,9 @@ public class PurchaseReturnReportAppServiceImpl implements PurchaseReturnReportA */ @Override public R makeExcelFile(PurchaseReturnReportSearchParam purchaseReturnReportSearchParam, Integer pageNo, - Integer pageSize, String searchKey, HttpServletRequest request) { + Integer pageSize, String searchKey, HttpServletRequest request, HttpServletResponse response) { + pageNo = 1; + pageSize = 10000; // 构建查询条件 QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(purchaseReturnReportSearchParam, searchKey, @@ -183,9 +187,9 @@ public class PurchaseReturnReportAppServiceImpl implements PurchaseReturnReportA // 文件名,只传文字部分 String excelName = SupplyType.PRODUCT_RETURN.getInfo(); - // TODO 文件路径 + // 导出到Excel - ExcelFillerUtil.makeExcelFile(receiptDetailList, headers, "E:\\qqqqqqqqqq\\", excelName, totalValues); + ExcelFillerUtil.makeExcelFile(response, receiptDetailList, headers, excelName, totalValues); } catch (Exception e) { e.printStackTrace(); System.out.printf("导出Excel失败:" + e.getMessage()); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/ReturnIssueReportAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/ReturnIssueReportAppServiceImpl.java index 610d75ed..c2dd06bf 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/ReturnIssueReportAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/ReturnIssueReportAppServiceImpl.java @@ -6,9 +6,11 @@ import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.core.common.core.domain.entity.SysDictData; import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; import com.core.system.service.ISysDictTypeService; import com.openhis.administration.domain.Practitioner; import com.openhis.administration.service.IPractitionerService; @@ -113,7 +115,9 @@ public class ReturnIssueReportAppServiceImpl implements IReturnIssueReportAppSer */ @Override public R makeExcelFile(ReturnIssueReportSearchParam returnIssueReportSearchParam, Integer pageNo, - Integer pageSize, String searchKey, HttpServletRequest request) { + Integer pageSize, String searchKey, HttpServletRequest request, HttpServletResponse response) { + pageNo = 1; + pageSize = 10000; // 构建查询条件 QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(returnIssueReportSearchParam, searchKey, @@ -186,9 +190,9 @@ public class ReturnIssueReportAppServiceImpl implements IReturnIssueReportAppSer // 文件名,只传文字部分 String excelName = SupplyType.RETURN_ISSUE.getInfo(); - // TODO 文件路径 + // 导出到Excel - ExcelFillerUtil.makeExcelFile(receiptDetailList, headers, "E:\\qqqqqqqqqq\\", excelName, totalValues); + ExcelFillerUtil.makeExcelFile(response, receiptDetailList, headers, excelName, totalValues); } catch (Exception e) { e.printStackTrace(); System.out.printf("导出Excel失败:" + e.getMessage()); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/StocktakingReportAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/StocktakingReportAppServiceImpl.java index 4d8c85dc..410d60ca 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/StocktakingReportAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/StocktakingReportAppServiceImpl.java @@ -9,16 +9,17 @@ import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.core.common.core.domain.entity.SysDictData; import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; import com.core.system.service.ISysDictTypeService; import com.openhis.administration.domain.Practitioner; import com.openhis.administration.domain.Supplier; import com.openhis.administration.service.IPractitionerService; import com.openhis.common.constant.PromptMsgConstant; -import com.openhis.web.reportmanage.dto.OutboundReportPageDto; -import com.openhis.web.reportmanage.dto.OutboundReportSearchParam; +import com.openhis.web.reportmanage.dto.*; import com.openhis.web.reportmanage.utils.ExcelFillerUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -32,8 +33,6 @@ import com.openhis.common.enums.SupplyStatus; import com.openhis.common.enums.SupplyType; import com.openhis.common.utils.HisQueryUtils; import com.openhis.web.reportmanage.appservice.IStocktakingReportAppService; -import com.openhis.web.reportmanage.dto.StocktakingReportPageDto; -import com.openhis.web.reportmanage.dto.StocktakingReportSearchParam; import com.openhis.web.reportmanage.mapper.StocktakingReportMapper; /** @@ -65,7 +64,7 @@ public class StocktakingReportAppServiceImpl implements IStocktakingReportAppSer @Override public R getPage(StocktakingReportSearchParam stocktakingReportSearchParam, Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) { - + stocktakingReportSearchParam.setTime(null); // 构建查询条件 QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper( stocktakingReportSearchParam, searchKey, new HashSet<>(Arrays.asList("name", "bus_no")), request); @@ -77,10 +76,31 @@ public class StocktakingReportAppServiceImpl implements IStocktakingReportAppSer SupplyType.PRODUCT_STOCKTAKING.getValue(), SupplyType.PRODUCT_BATCH_STOCKTAKING.getValue(), SupplyStatus.AGREE.getValue(), DispenseStatus.COMPLETED.getValue()); - // stocktakingReportPage.getRecords().forEach(e -> { - // // 药品类型 - // e.setItemTableText(EnumUtils.getInfoByValue(CategoryType.class, e.getItemTable())); - // }); + return R.ok(stocktakingReportPage); + } + + /** + * 库存盘点明细列表 + * + * @param stocktakingReportSearchParam 库存盘点明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 库存盘点明细 + */ + @Override + public R getAutoPage(StocktakingReportSearchParam stocktakingReportSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request) { + String time = stocktakingReportSearchParam.getTime(); + stocktakingReportSearchParam.setTime(null); + + // 查询库存盘点明细分页列表 + Page stocktakingReportPage = + stocktakingReportMapper.selectAutoStocktakingReportPage(new Page<>(pageNo, pageSize), time, + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, + SupplyType.AUTO_STOCKTAKING.getValue(), SupplyStatus.AGREE.getValue()); + return R.ok(stocktakingReportPage); } @@ -96,7 +116,9 @@ public class StocktakingReportAppServiceImpl implements IStocktakingReportAppSer */ @Override public R makeExcelFile(StocktakingReportSearchParam stocktakingReportSearchParam, Integer pageNo, - Integer pageSize, String searchKey, HttpServletRequest request) { + Integer pageSize, String searchKey, HttpServletRequest request, HttpServletResponse response) { + pageNo = 1; + pageSize = 10000; // 构建查询条件 QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper( stocktakingReportSearchParam, searchKey, new HashSet<>(Arrays.asList("name", "bus_no")), request); @@ -120,29 +142,50 @@ public class StocktakingReportAppServiceImpl implements IStocktakingReportAppSer Map unitCodeToNameMap = unitCodeList.stream().collect( Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel, (oldValue, newValue) -> oldValue // 冲突时保留旧值(第一个) )); + // 做成参与者List + List practitionerList = practitionerService.getList(); + // 创建id到名字的映射 + Map practitionerToNameMap = practitionerList.stream() + .collect(Collectors.toMap(Practitioner::getId, Practitioner::getName, (oldValue, newValue) -> oldValue // 冲突时保留旧值(第一个) + )); // 遍历赋值 receiptDetailList.forEach(detail -> { detail.setUnitCode_dictText(unitCodeToNameMap.get(detail.getUnitCode())); + detail.setApproverId_dictText(practitionerToNameMap.get(detail.getApproverId())); }); try { // 准备表头(key对应DTO的字段名) Map headers = new LinkedHashMap<>(); + headers.put("supplyBusno", "单据号"); headers.put("busNo", "编码"); headers.put("name", "项目名称"); headers.put("totalVolume", "规格"); headers.put("manufacturerText", "厂家/产地"); headers.put("lotNumber", "生产批号"); headers.put("locationName", "仓库"); + headers.put("locationStoreName", "货位"); headers.put("unitCode_dictText", "单位"); headers.put("itemQuantity", "盈亏数量"); - headers.put("approvalTime", "盘点日期"); + headers.put("price", "采购单价"); + headers.put("totalPrice", "报损金额"); + headers.put("supplier", "供应商"); + headers.put("approverId_dictText", "审核人"); + headers.put("occurrenceTime", "制单日期"); + headers.put("approvalTime", "审批日期"); + + BigDecimal totalPrice = + receiptDetailList.stream().filter(Objects::nonNull).map(StocktakingReportPageDto::getTotalPrice) + .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); + // 表头上的字段 + Map totalValues = new LinkedHashMap<>(); + totalValues.put("合计金额", totalPrice); // 文件名,只传文字部分 String excelName = SupplyType.PRODUCT_STOCKTAKING.getInfo(); - // TODO 文件路径 + // 导出到Excel - ExcelFillerUtil.makeExcelFile(receiptDetailList, headers, "E:\\qqqqqqqqqq\\", excelName, null); + ExcelFillerUtil.makeExcelFile(response, receiptDetailList, headers, excelName, totalValues); } catch (Exception e) { e.printStackTrace(); System.out.printf("导出Excel失败:" + e.getMessage()); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/TransferReportAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/TransferReportAppServiceImpl.java index 8ed6ae95..cecb4f9b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/TransferReportAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/TransferReportAppServiceImpl.java @@ -9,9 +9,11 @@ import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.core.common.core.domain.entity.SysDictData; import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; import com.core.system.service.ISysDictTypeService; import com.openhis.administration.domain.Practitioner; import com.openhis.administration.service.IPractitionerService; @@ -95,7 +97,9 @@ public class TransferReportAppServiceImpl implements ITransferReportAppService { */ @Override public R makeExcelFile(TransferReportSearchParam transferReportSearchParam, Integer pageNo, Integer pageSize, - String searchKey, HttpServletRequest request) { + String searchKey, HttpServletRequest request, HttpServletResponse response) { + pageNo = 1; + pageSize = 10000; // 构建查询条件 QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper( transferReportSearchParam, searchKey, new HashSet<>(Arrays.asList("name", "supply_bus_no")), request); @@ -168,9 +172,8 @@ public class TransferReportAppServiceImpl implements ITransferReportAppService { // 文件名,只传文字部分 String excelName = SupplyType.PRODUCT_TRANSFER.getInfo(); - // TODO 文件路径 // 导出到Excel - ExcelFillerUtil.makeExcelFile(receiptDetailList, headers, "E:\\qqqqqqqqqq\\", excelName, totalValues); + ExcelFillerUtil.makeExcelFile(response, receiptDetailList, headers, excelName, totalValues); } catch (Exception e) { e.printStackTrace(); System.out.printf("导出Excel失败:" + e.getMessage()); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/DrugDosageSettlementController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/DrugDosageSettlementController.java new file mode 100644 index 00000000..7eb2d502 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/DrugDosageSettlementController.java @@ -0,0 +1,54 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.controller; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.openhis.web.reportmanage.appservice.IDrugDosageSettlementAppService; +import com.openhis.web.reportmanage.dto.DrugDosageSettlementSearchParam; +import org.springframework.beans.factory.annotation.Autowired; +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 com.core.common.core.domain.R; +import com.openhis.web.reportmanage.appservice.ITransferReportAppService; +import com.openhis.web.reportmanage.dto.TransferReportSearchParam; + +import lombok.extern.slf4j.Slf4j; + +/** + * 药品用量结算 controller + * + * @author yuxj + * @date 2025-09-09 + */ +@RestController +@RequestMapping("/report-manage/drug-dosage-settlement") +@Slf4j +public class DrugDosageSettlementController { + + @Autowired + private IDrugDosageSettlementAppService drugDosageSettlementAppService; + + /** + * 药品用量明细列表 + * + * @param drugDosageSettlementSearchParam 药品用量明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 药品用量明细 + */ + @GetMapping(value = "/report-drug-dosage-page") + public R getPage(DrugDosageSettlementSearchParam drugDosageSettlementSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "searchKey", required = false) String searchKey, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { + return drugDosageSettlementAppService.getPage(drugDosageSettlementSearchParam, pageNo, pageSize, searchKey, request); + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InboundReportController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InboundReportController.java index a81efbf7..5cbfb66f 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InboundReportController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InboundReportController.java @@ -4,6 +4,7 @@ package com.openhis.web.reportmanage.controller; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -70,11 +71,12 @@ public class InboundReportController { * @return 单据详情 */ @GetMapping(value = "/excel-out") - public R makeExcelFile(InboundReportSearchParam inboundReportSearchParam, + public void makeExcelFile(InboundReportSearchParam inboundReportSearchParam, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10000") Integer pageSize, - @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { - return inboundReportAppService.makeExcelFile(inboundReportSearchParam, pageNo, pageSize, searchKey, request); + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request, + HttpServletResponse response) { + inboundReportAppService.makeExcelFile(inboundReportSearchParam, pageNo, pageSize, searchKey, request, response); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InpatientMedicalRecordHomePageCollectionController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InpatientMedicalRecordHomePageCollectionController.java index e6a7bff7..53dc1e3e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InpatientMedicalRecordHomePageCollectionController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InpatientMedicalRecordHomePageCollectionController.java @@ -4,6 +4,7 @@ package com.openhis.web.reportmanage.controller; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.openhis.web.reportmanage.appservice.InpatientMedicalRecordHomePageCollectionAppService; import org.springframework.beans.factory.annotation.Autowired; @@ -38,7 +39,7 @@ public class InpatientMedicalRecordHomePageCollectionController { * @return 执行结果 */ @GetMapping(value = "/make-csvFile") - public R makeCsvFile(@RequestParam List encounterIdList) { - return inpatientMedicalRecordHomePageCollectionAppService.makeCsvFile(encounterIdList); + public R makeCsvFile(@RequestParam List encounterIdList, HttpServletResponse response) { + return inpatientMedicalRecordHomePageCollectionAppService.makeCsvFile(encounterIdList, response); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InventoryProductReportController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InventoryProductReportController.java index 1f3fec3e..8e49ad48 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InventoryProductReportController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InventoryProductReportController.java @@ -4,6 +4,7 @@ package com.openhis.web.reportmanage.controller; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.openhis.web.reportmanage.dto.OutboundReportSearchParam; import org.springframework.beans.factory.annotation.Autowired; @@ -62,11 +63,12 @@ public class InventoryProductReportController { * @return 单据详情 */ @GetMapping(value = "/excel-out") - public R makeExcelFile(InventoryProductReportSearchParam inventoryProductReportSearchParam, + public void makeExcelFile(InventoryProductReportSearchParam inventoryProductReportSearchParam, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10000") Integer pageSize, - @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { - return inventoryProductReportAppService.makeExcelFile(inventoryProductReportSearchParam, pageNo, pageSize, - searchKey, request); + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request, + HttpServletResponse response) { + inventoryProductReportAppService.makeExcelFile(inventoryProductReportSearchParam, pageNo, pageSize, searchKey, + request, response); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/LossReportController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/LossReportController.java index 90faa105..901c56dd 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/LossReportController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/LossReportController.java @@ -4,6 +4,7 @@ package com.openhis.web.reportmanage.controller; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.openhis.web.reportmanage.appservice.ILossReportAppService; import com.openhis.web.reportmanage.dto.LossReportSearchParam; @@ -64,10 +65,11 @@ public class LossReportController { * @return 单据详情 */ @GetMapping(value = "/excel-out") - public R makeExcelFile(LossReportSearchParam lossReportSearchParam, + public void makeExcelFile(LossReportSearchParam lossReportSearchParam, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10000") Integer pageSize, - @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { - return lossReportAppService.makeExcelFile(lossReportSearchParam, pageNo, pageSize, searchKey, request); + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request, + HttpServletResponse response) { + lossReportAppService.makeExcelFile(lossReportSearchParam, pageNo, pageSize, searchKey, request, response); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/MedicationDeviceReportController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/MedicationDeviceReportController.java index ad0c05ea..7f25a1f8 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/MedicationDeviceReportController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/MedicationDeviceReportController.java @@ -14,6 +14,9 @@ import com.openhis.web.reportmanage.appservice.IMedicationDeviceReportAppService import lombok.extern.slf4j.Slf4j; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * 药品耗材统计查询用 controller * @@ -61,4 +64,26 @@ public class MedicationDeviceReportController { .ok(medicationDeviceReportAppService.selectMedDdevInfo(orgId, name, dispenseDateSTime, dispenseDateETime,pageNo,pageSize)); } + /** + * 导出 + * + * @param orgId 科室 + * @param name 项目名称 + * @param dispenseDateSTime 开始时间 + * @param dispenseDateETime 结束时间 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 单据详情 + */ + @GetMapping(value = "/excel-out") + public void makeExcelFile(@RequestParam Long orgId, @RequestParam String dispenseDateSTime, + @RequestParam String dispenseDateETime, @RequestParam(name = "name", required = false) String name, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletResponse response) { + medicationDeviceReportAppService.makeExcelFile(orgId, name, dispenseDateSTime, dispenseDateETime,pageNo,pageSize, + response); + } + + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/MonthlySettlementController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/MonthlySettlementController.java index 67ec9c4a..03e63944 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/MonthlySettlementController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/MonthlySettlementController.java @@ -14,8 +14,9 @@ import com.openhis.web.reportmanage.appservice.IMonthlySettlementReportAppServic import lombok.extern.slf4j.Slf4j; + /** - * controller + * 对账 controller * * @author liuhr * @date 2025-07-25 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/OutboundReportController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/OutboundReportController.java index 1c327a03..a0a12849 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/OutboundReportController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/OutboundReportController.java @@ -1,6 +1,7 @@ package com.openhis.web.reportmanage.controller; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.openhis.web.reportmanage.appservice.IOutboundReportAppService; import com.openhis.web.reportmanage.dto.InboundReportSearchParam; @@ -70,11 +71,13 @@ public class OutboundReportController { * @return 单据详情 */ @GetMapping(value = "/excel-out") - public R makeExcelFile(OutboundReportSearchParam outboundReportSearchParam, + public void makeExcelFile(OutboundReportSearchParam outboundReportSearchParam, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10000") Integer pageSize, - @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { - return outboundReportAppService.makeExcelFile(outboundReportSearchParam, pageNo, pageSize, searchKey, request); + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request, + HttpServletResponse response) { + outboundReportAppService.makeExcelFile(outboundReportSearchParam, pageNo, pageSize, searchKey, request, + response); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/PurchaseReturnReportController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/PurchaseReturnReportController.java index 53b821ef..03531ed1 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/PurchaseReturnReportController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/PurchaseReturnReportController.java @@ -4,6 +4,7 @@ package com.openhis.web.reportmanage.controller; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.openhis.web.reportmanage.appservice.PurchaseReturnReportAppService; import com.openhis.web.reportmanage.dto.OutboundReportSearchParam; @@ -72,11 +73,12 @@ public class PurchaseReturnReportController { * @return 单据详情 */ @GetMapping(value = "/excel-out") - public R makeExcelFile(PurchaseReturnReportSearchParam purchaseReturnReportSearchParam, + public void makeExcelFile(PurchaseReturnReportSearchParam purchaseReturnReportSearchParam, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10000") Integer pageSize, - @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { - return purchaseReturnReportAppService.makeExcelFile(purchaseReturnReportSearchParam, pageNo, pageSize, - searchKey, request); + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request, + HttpServletResponse response) { + purchaseReturnReportAppService.makeExcelFile(purchaseReturnReportSearchParam, pageNo, pageSize, searchKey, + request, response); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/ReturnIssueReportController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/ReturnIssueReportController.java index 44c08a50..0fd0069a 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/ReturnIssueReportController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/ReturnIssueReportController.java @@ -1,6 +1,7 @@ package com.openhis.web.reportmanage.controller; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.openhis.web.reportmanage.appservice.IReturnIssueReportAppService; import com.openhis.web.reportmanage.dto.OutboundReportSearchParam; @@ -70,12 +71,13 @@ public class ReturnIssueReportController { * @return 单据详情 */ @GetMapping(value = "/excel-out") - public R makeExcelFile(ReturnIssueReportSearchParam returnIssueReportSearchParam, + public void makeExcelFile(ReturnIssueReportSearchParam returnIssueReportSearchParam, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10000") Integer pageSize, - @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { - return returnIssueReportAppService.makeExcelFile(returnIssueReportSearchParam, pageNo, pageSize, searchKey, - request); + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request, + HttpServletResponse response) { + returnIssueReportAppService.makeExcelFile(returnIssueReportSearchParam, pageNo, pageSize, searchKey, request, + response); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/StocktakingReportController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/StocktakingReportController.java index 45ae5225..dc2d5918 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/StocktakingReportController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/StocktakingReportController.java @@ -4,6 +4,7 @@ package com.openhis.web.reportmanage.controller; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.openhis.web.reportmanage.dto.OutboundReportSearchParam; import org.springframework.beans.factory.annotation.Autowired; @@ -50,6 +51,25 @@ public class StocktakingReportController { return stocktakingReportAppService.getPage(stocktakingReportSearchParam, pageNo, pageSize, searchKey, request); } + /** + * 库存盘点明细列表 + * + * @param stocktakingReportSearchParam 库存盘点明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 库存盘点明细 + */ + @GetMapping(value = "/report-stocktaking-page-auto") + public R getAutoPage(StocktakingReportSearchParam stocktakingReportSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return stocktakingReportAppService.getAutoPage(stocktakingReportSearchParam, pageNo, pageSize, searchKey, + request); + } + /** * 导出 * @@ -61,11 +81,12 @@ public class StocktakingReportController { * @return 单据详情 */ @GetMapping(value = "/excel-out") - public R makeExcelFile(StocktakingReportSearchParam stocktakingReportSearchParam, + public void makeExcelFile(StocktakingReportSearchParam stocktakingReportSearchParam, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10000") Integer pageSize, - @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { - return stocktakingReportAppService.makeExcelFile(stocktakingReportSearchParam, pageNo, pageSize, searchKey, - request); + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request, + HttpServletResponse response) { + stocktakingReportAppService.makeExcelFile(stocktakingReportSearchParam, pageNo, pageSize, searchKey, request, + response); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/TransferReportController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/TransferReportController.java index f385133f..db2ec558 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/TransferReportController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/TransferReportController.java @@ -4,6 +4,7 @@ package com.openhis.web.reportmanage.controller; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.openhis.web.reportmanage.dto.InboundReportSearchParam; import org.springframework.beans.factory.annotation.Autowired; @@ -61,10 +62,12 @@ public class TransferReportController { * @return 单据详情 */ @GetMapping(value = "/excel-out") - public R makeExcelFile(TransferReportSearchParam transferReportSearchParam, + public void makeExcelFile(TransferReportSearchParam transferReportSearchParam, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10000") Integer pageSize, - @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { - return transferReportAppService.makeExcelFile(transferReportSearchParam, pageNo, pageSize, searchKey, request); + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request, + HttpServletResponse response) { + transferReportAppService.makeExcelFile(transferReportSearchParam, pageNo, pageSize, searchKey, request, + response); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/DrugDosageSettlementPageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/DrugDosageSettlementPageDto.java new file mode 100644 index 00000000..76593486 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/DrugDosageSettlementPageDto.java @@ -0,0 +1,50 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +import java.math.BigDecimal; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.openhis.common.annotation.Dict; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 药品用量结算 dto + * + * @author yuxj + * @date 2025-09-09 + */ +@Data +@Accessors(chain = true) +public class DrugDosageSettlementPageDto { + + /** 发药日期 */ + private Date dispenseTime; + /** 药品项目 */ + private String medicationName; + + /** 项目编码 */ + private String busNo; + + /** 规格 */ + private String totalVolume; + + /** 发药单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 发药数量 */ + private Integer dispenseQuantity; + + /** 发药金额 */ + private BigDecimal dispensePrice; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/DrugDosageSettlementSearchParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/DrugDosageSettlementSearchParam.java new file mode 100644 index 00000000..0e5991ad --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/DrugDosageSettlementSearchParam.java @@ -0,0 +1,32 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +import java.util.Date; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 药品用量结算查询条件 + * + * @author yuxj + * @date 2025-09-09 + */ +@Data +@Accessors(chain = true) +public class DrugDosageSettlementSearchParam { + + /** 项目类型 */ + private Integer categoryCode; + + /** 抗生素flg */ + private Integer antibioticFlg; +// +// /** 开始时间 */ +// private String dispenseDateSTime; +// +// /** 结束时间 */ +// private String dispenseDateETime; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InboundReportPageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InboundReportPageDto.java index f1fbfafd..b409db2c 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InboundReportPageDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InboundReportPageDto.java @@ -8,6 +8,7 @@ import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; @@ -76,7 +77,8 @@ public class InboundReportPageDto { private String approverId_dictText; /** 制单日期 */ - private Date createTime; + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date occurrenceTime; /** 审批时间 */ private Date approvalTime; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/LossReportPageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/LossReportPageDto.java index 40a40ede..b559f5d4 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/LossReportPageDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/LossReportPageDto.java @@ -8,6 +8,7 @@ import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.openhis.common.annotation.Dict; @@ -25,6 +26,9 @@ import lombok.experimental.Accessors; @Accessors(chain = true) public class LossReportPageDto { + /** 单据号 */ + private String supplyBusno; + /** 编码 */ private String busNo; @@ -40,9 +44,16 @@ public class LossReportPageDto { /** 产品批号 */ private String lotNumber; + /** 目的仓库id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long purposeLocationId; + /** 仓库 */ private String locationName; + /** 仓库货位 */ + private String locationStoreName; + /** 计量单位 */ @Dict(dictCode = "unit_code") private String unitCode; @@ -51,6 +62,21 @@ public class LossReportPageDto { /** 数量 */ private BigDecimal itemQuantity; - /** 审批时间(盘点时间) */ + /** 采购单价 */ + private BigDecimal price; + + /** 报损金额 */ + private BigDecimal totalPrice; + /** 供应商 */ + private String supplier; + /** 审批人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + private Long approverId; + private String approverId_dictText; + /** 制单日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date occurrenceTime; + /** 审批时间 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") private Date approvalTime; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/LossReportSearchParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/LossReportSearchParam.java index 1f1108e1..53843b61 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/LossReportSearchParam.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/LossReportSearchParam.java @@ -24,6 +24,9 @@ public class LossReportSearchParam { /** 项目名称 */ private String name; + /** 目的仓库(库房) */ + private Long purposeLocationId; + /** 报损时间 */ private Date approvalTime; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutboundReportPageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutboundReportPageDto.java index 4075a9dc..ca95cb47 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutboundReportPageDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutboundReportPageDto.java @@ -87,6 +87,10 @@ public class OutboundReportPageDto { @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") private Date approvalTime; + /** 制单日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date occurrenceTime; + /** 备注 */ private String remake; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PurchaseReturnReportPageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PurchaseReturnReportPageDto.java index 14de1614..94a22fee 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PurchaseReturnReportPageDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PurchaseReturnReportPageDto.java @@ -74,7 +74,7 @@ public class PurchaseReturnReportPageDto { private String approverId_dictText; /** 制单日期 */ - private Date createTime; + private Date occurrenceTime; /** 审批时间 */ private Date approvalTime; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReturnIssueReportPageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReturnIssueReportPageDto.java index 84216e8f..fdef558f 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReturnIssueReportPageDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReturnIssueReportPageDto.java @@ -86,6 +86,9 @@ public class ReturnIssueReportPageDto { @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") private Date approvalTime; + /** 制单日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date occurrenceTime; /** 备注 */ private String remake; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/StocktakingReportPageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/StocktakingReportPageDto.java index 924a8e8e..d751b5b2 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/StocktakingReportPageDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/StocktakingReportPageDto.java @@ -8,6 +8,7 @@ import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.openhis.common.annotation.Dict; @@ -25,6 +26,9 @@ import lombok.experimental.Accessors; @Accessors(chain = true) public class StocktakingReportPageDto { + /** 单据号 */ + private String supplyBusno; + /** ID */ @TableId(type = IdType.ASSIGN_ID) @JsonSerialize(using = ToStringSerializer.class) @@ -42,15 +46,16 @@ public class StocktakingReportPageDto { /** 厂家 */ private String manufacturerText; -// /** 项目(药品类型) */ -// private Integer itemTable; -// private String itemTableText; - /** 产品批号 */ private String lotNumber; + /** 目的仓库id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long purposeLocationId; /** 仓库 */ private String locationName; + /** 仓库货位 */ + private String locationStoreName; /** 计量单位 */ @Dict(dictCode = "unit_code") @@ -60,6 +65,21 @@ public class StocktakingReportPageDto { /** 数量 */ private BigDecimal itemQuantity; - /** 审批时间(盘点时间) */ + /** 采购单价 */ + private BigDecimal price; + + /** 盈亏金额 */ + private BigDecimal totalPrice; + /** 供应商 */ + private String supplier; + /** 审批人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + private Long approverId; + private String approverId_dictText; + /** 制单日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date occurrenceTime; + /** 审批时间 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") private Date approvalTime; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/StocktakingReportSearchParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/StocktakingReportSearchParam.java index 74038c6c..f56d8d14 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/StocktakingReportSearchParam.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/StocktakingReportSearchParam.java @@ -24,9 +24,15 @@ public class StocktakingReportSearchParam { /** 项目名称 */ private String name; + /** 目的仓库(库房) */ + private Long purposeLocationId; + // /** 项目类型 */ // private Integer categoryType; + /** 盘点时间 */ + private String time; + /** 盘点时间 */ private Date approvalTime; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/TransferReportPageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/TransferReportPageDto.java index 1ab613cb..63d7a2f9 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/TransferReportPageDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/TransferReportPageDto.java @@ -94,7 +94,7 @@ public class TransferReportPageDto { private String approverId_dictText; /** 制单日期 */ - private Date createTime; + private Date occurrenceTime; /** 申请日期 */ private Date applyTime; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/DrugDosageSettlementMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/DrugDosageSettlementMapper.java new file mode 100644 index 00000000..28760051 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/DrugDosageSettlementMapper.java @@ -0,0 +1,37 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.mapper; + +import com.openhis.web.reportmanage.dto.DrugDosageSettlementPageDto; +import com.openhis.web.reportmanage.dto.DrugDosageSettlementSearchParam; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +/** + * 药品用量结算 mapper + * + * @author yuxj + * @date 2025-09-09 + */ +@Repository +public interface DrugDosageSettlementMapper { + + /** + * 查询药品用量明细 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param disCompleted 发药状态:已发放 + * @param reqCompleted 请求状态:已完成 + * @param antibioticFlg 抗生素flg + * @return 药品用量明细 + */ + Page selectDrugDosageReportPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("disCompleted") Integer disCompleted, @Param("reqCompleted") Integer reqCompleted, + @Param("antibioticFlg") Integer antibioticFlg); +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/MonthlySettlementReportMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/MonthlySettlementReportMapper.java index 751f49fe..5e62558e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/MonthlySettlementReportMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/MonthlySettlementReportMapper.java @@ -113,7 +113,8 @@ public interface MonthlySettlementReportMapper { * @return 药品耗材发放金额查询 */ BigDecimal selectDrugIssue(@Param("locationId") Long locationId, @Param("completed") Integer completed, - @Param("medReqTableName") String medReqTableName, @Param("devReqTableName") String devReqTableName, - @Param("startTime") String startTime, @Param("endTime") String endTime); + @Param("agree") Integer agree, @Param("medReqTableName") String medReqTableName, + @Param("devReqTableName") String devReqTableName, @Param("startTime") String startTime, + @Param("endTime") String endTime); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/StocktakingReportMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/StocktakingReportMapper.java index 3d7c3ccb..4a5902c0 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/StocktakingReportMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/StocktakingReportMapper.java @@ -12,6 +12,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.openhis.web.reportmanage.dto.StocktakingReportPageDto; import com.openhis.web.reportmanage.dto.StocktakingReportSearchParam; +import java.util.Date; + /** * 库存盘点明细查询用 mapper * @@ -40,4 +42,19 @@ public interface StocktakingReportMapper { @Param("stocktakingReport") Integer stocktakingReport, @Param("stocktakingBatchReport") Integer stocktakingBatchReport, @Param("supplyStatus") Integer supplyStatus, @Param("deliveryStatus") Integer deliveryStatus); + + /** + * 库存盘点调拨明细 + * + * @param page 分页 + * @param medicationTableName 药品表名 + * @param deviceTableName 耗材表名 + * @param stocktakingReport 单据类型:自动盘点 + * @param supplyStatus 单据状态:同意 + * @return 库存盘点明细 + */ + Page selectAutoStocktakingReportPage(@Param("page") Page page, + @Param("time") String time, @Param("medicationTableName") String medicationTableName, + @Param("deviceTableName") String deviceTableName, @Param("stocktakingReport") Integer stocktakingReport, + @Param("supplyStatus") Integer supplyStatus); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/utils/CsvFillerUtil.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/utils/CsvFillerUtil.java index 77205e1b..30ada2c8 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/utils/CsvFillerUtil.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/utils/CsvFillerUtil.java @@ -6,6 +6,7 @@ import com.openhis.web.reportmanage.dto.InpatientMedicalRecordHomePageCollection import org.apache.logging.log4j.util.Supplier; import org.dom4j.DocumentException; +import javax.servlet.http.HttpServletResponse; import java.awt.*; import java.io.*; import java.nio.charset.StandardCharsets; @@ -36,39 +37,25 @@ public final class CsvFillerUtil { /** * 住院病案csv做成 * - * @param outPath 文件路径 + * @param response * @param dto 文件内容 * */ - public static void makeCsvFile(String outPath, List dto) + public static void makeCsvFile(HttpServletResponse response, List dto) throws IOException { - // 获取当前日期 - LocalDate currentDate = LocalDate.now(); - // 定义格式(yyyyMMdd) - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); - // 格式化日期 - String formattedDate = currentDate.format(formatter); // 时间戳日期 String timestamp = TIME_FORMATTER.format(new Date()); - // 创建日期文件夹 - Boolean pathFlg = makePath(outPath, formattedDate); - if (!pathFlg) { - System.err.println("创建文件夹时发生错误"); - } - // 生成的pdf模板文件全路径 - String outputPath = outPath + formattedDate + "\\hqmsts_" + timestamp + ".csv"; + String fileName = "\\hqmsts_" + timestamp + ".csv"; + //设置响应头信息 + response.setContentType("text/csv"); + response.setCharacterEncoding(StandardCharsets.UTF_8.name()); + response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); - // 检查文件是否存在 - File targetFile = new File(outputPath); - handleExistingFile(targetFile); - - // 使用try-with-resources确保资源自动关闭 - // try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputPath))) { try (BufferedWriter writer = - new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputPath), StandardCharsets.UTF_8))) { + new BufferedWriter(new OutputStreamWriter(response.getOutputStream(), StandardCharsets.UTF_8))) { // 写入UTF-8 BOM,解决Excel打开乱码问题 writer.write('\ufeff'); @@ -86,6 +73,7 @@ public final class CsvFillerUtil { totalCount++; } } + writer.flush(); System.out.printf("CSV文件生成完成,共写入 %d 条记录%n", totalCount); } catch (IOException e) { System.out.printf("做成csv时发生错误:" + e.getMessage()); @@ -166,36 +154,4 @@ public final class CsvFillerUtil { // 用逗号连接所有字段值 return String.join(CommonConstants.Common.COMMA, fieldValues); } - - /** - * 创建当天日期的文件夹 - * - * @param outputPath 父文件夹 - * @param datePathName 日期文件夹名 - */ - public static Boolean makePath(String outputPath, String datePathName) { - try { - // 构建代表新文件夹的File对象 - File newDir = new File(outputPath, datePathName); - - // 检查新文件夹是否已存在 - if (!newDir.exists()) { - // 创建新文件夹 - boolean created = newDir.mkdir(); - - if (created) { - System.out.println("文件夹创建成功:" + newDir.getAbsolutePath()); - return true; - } else { - System.out.println("文件夹创建失败,可能是父文件夹不存在或者没有写入权限:" + newDir.getAbsolutePath()); - return false; - } - } else { - System.out.println("文件夹已存在,不创建新的文件夹:" + newDir.getAbsolutePath()); - return true; - } - } catch (Exception e) { - return false; - } - } } \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/utils/ExcelFillerUtil.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/utils/ExcelFillerUtil.java index d6b59030..032986a3 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/utils/ExcelFillerUtil.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/utils/ExcelFillerUtil.java @@ -6,9 +6,12 @@ import java.io.IOException; import java.lang.reflect.Field; import java.math.BigDecimal; import java.math.RoundingMode; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -17,6 +20,8 @@ import java.util.Map; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import javax.servlet.http.HttpServletResponse; + /** * excel报表做成 * @@ -40,125 +45,117 @@ public final class ExcelFillerUtil { * @throws IOException IO异常 * @throws IllegalAccessException 反射访问异常 */ - public static void makeExcelFile(List dataList, Map headers, String outputPath, String fileName, - Map totalValues) throws IOException, IllegalAccessException { + public static void makeExcelFile(HttpServletResponse response, List dataList, Map headers, + String fileName, Map totalValues) throws IOException, IllegalAccessException { fileName = fileName + "_" + TIME_FORMATTER.format(new Date()) + ".xlsx"; - - // 获取当前日期 - LocalDate currentDate = LocalDate.now(); - // 定义格式(yyyyMMdd) - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); - // 格式化日期 - String formattedDate = currentDate.format(formatter); - // 创建日期文件夹 - Boolean pathFlg = makePath(outputPath, formattedDate); - if (!pathFlg) { - System.err.println("创建文件夹时发生错误"); - } - // 路径加文件名 - String pathName = outputPath + formattedDate + "\\" + fileName; - // 转换为泛型列表 - List genericList = new ArrayList<>(dataList); - // 创建工作簿 - Workbook workbook = new XSSFWorkbook(); - Sheet sheet = workbook.createSheet("数据"); + try (Workbook workbook = new XSSFWorkbook(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { + // 转换为泛型列表 + List genericList = new ArrayList<>(dataList); - // 创建行(第0行,Excel行索引从0开始) - int index = 0; - int columnIndex; - if (totalValues != null) { - // 设置表头上的样式 - CellStyle headerUpStyle = setCellStyle(workbook, BorderStyle.MEDIUM, true); - headerUpStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); // 1. 启用实心填充模式(否则背景色不显示) - headerUpStyle.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.getIndex()); - // 设置表头上的样式 - CellStyle headerUpDateStyle = setCellStyle(workbook, BorderStyle.MEDIUM, true); + Sheet sheet = workbook.createSheet("数据"); - // 填充表头上的数据 - for (Map.Entry entry : totalValues.entrySet()) { - Row totalRow = sheet.createRow(index); - columnIndex = 0; - index++; + // 创建行(第0行,Excel行索引从0开始) + int index = 0; + int columnIndex; + if (totalValues != null) { + // 设置表头上的样式 + CellStyle headerUpStyle = setCellStyle(workbook, BorderStyle.MEDIUM, true); + headerUpStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); // 1. 启用实心填充模式(否则背景色不显示) + headerUpStyle.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.getIndex()); + // 设置表头上的样式 + CellStyle headerUpDateStyle = setCellStyle(workbook, BorderStyle.MEDIUM, true); - Cell cell = totalRow.createCell(columnIndex); - // 项目名 - cell.setCellValue(entry.getKey()); - cell.setCellStyle(headerUpStyle); - columnIndex++; - // 项目值 - cell = setDate(totalRow.createCell(columnIndex), entry.getValue(), sheet, columnIndex); - cell.setCellStyle(headerUpDateStyle); - } + // 填充表头上的数据 + for (Map.Entry entry : totalValues.entrySet()) { + Row totalRow = sheet.createRow(index); + columnIndex = 0; + index++; - // 加一个空白行 - index++; - } - - // 创建表头样式 - CellStyle headerStyle = setCellStyle(workbook, BorderStyle.THIN, true); - headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); // 1. 启用实心填充模式(否则背景色不显示) - headerStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); - // 创建数据单元格样式 - CellStyle dataStyle = setCellStyle(workbook, BorderStyle.THIN, false); - - // 创建表头行 - Row headerRow = sheet.createRow(index); - columnIndex = 0; - - // 填充表头 - for (Map.Entry entry : headers.entrySet()) { - Cell cell = headerRow.createCell(columnIndex);// 创建单元格 - cell.setCellValue(entry.getValue());// 设置列标题 - cell.setCellStyle(headerStyle);// 应用表头样式 - // 调整合计值列宽度 - if (entry.getValue() != null) { - int totalWidth = entry.getValue().getBytes().length * 256; - if (sheet.getColumnWidth(columnIndex) < totalWidth) { - sheet.setColumnWidth(columnIndex, totalWidth); + Cell cell = totalRow.createCell(columnIndex); + // 项目名 + cell.setCellValue(entry.getKey()); + cell.setCellStyle(headerUpStyle); + columnIndex++; + // 项目值 + cell = setDate(totalRow.createCell(columnIndex), entry.getValue(), sheet, columnIndex); + cell.setCellStyle(headerUpDateStyle); } + + // 加一个空白行 + index++; } - columnIndex++; - } - index++; - // 填充数据(通过反射获取DTO字段值) - for (int i = 0; i < genericList.size(); i++) { - Row dataRow = sheet.createRow(i + index);// 数据行 - Object dto = genericList.get(i);// 获取当前DTO对象 - Class dtoClass = dto.getClass();// 获取DTO的类对象 + + // 创建表头样式 + CellStyle headerStyle = setCellStyle(workbook, BorderStyle.THIN, true); + headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); // 1. 启用实心填充模式(否则背景色不显示) + headerStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); + // 创建数据单元格样式 + CellStyle dataStyle = setCellStyle(workbook, BorderStyle.THIN, false); + + // 创建表头行 + Row headerRow = sheet.createRow(index); columnIndex = 0; + // 填充表头 for (Map.Entry entry : headers.entrySet()) { - String fieldName = entry.getKey();// 获取DTO字段名 - Object value = null; - - try { - // 通过反射获取字段值 - Field field = dtoClass.getDeclaredField(fieldName); - field.setAccessible(true); // 允许访问私有字段 - value = field.get(dto); // 获取字段值 - } catch (NoSuchFieldException e) { - // 如果字段不存在,输出警告信息 - System.err.println("DTO中不存在字段: " + fieldName); + Cell cell = headerRow.createCell(columnIndex);// 创建单元格 + cell.setCellValue(entry.getValue());// 设置列标题 + cell.setCellStyle(headerStyle);// 应用表头样式 + // 调整合计值列宽度 + if (entry.getValue() != null) { + int totalWidth = entry.getValue().getBytes().length * 256; + if (sheet.getColumnWidth(columnIndex) < totalWidth) { + sheet.setColumnWidth(columnIndex, totalWidth); + } } - - Cell cell = setDate(dataRow.createCell(columnIndex), value, sheet, columnIndex); - cell.setCellStyle(dataStyle);// 应用数据样式 columnIndex++; } - } + index++; + // 填充数据(通过反射获取DTO字段值) + for (int i = 0; i < genericList.size(); i++) { + Row dataRow = sheet.createRow(i + index);// 数据行 + Object dto = genericList.get(i);// 获取当前DTO对象 + Class dtoClass = dto.getClass();// 获取DTO的类对象 + columnIndex = 0; + + for (Map.Entry entry : headers.entrySet()) { + String fieldName = entry.getKey();// 获取DTO字段名 + Object value = null; + + try { + // 通过反射获取字段值 + Field field = dtoClass.getDeclaredField(fieldName); + field.setAccessible(true); // 允许访问私有字段 + value = field.get(dto); // 获取字段值 + } catch (NoSuchFieldException e) { + // 如果字段不存在,输出警告信息 + System.err.println("DTO中不存在字段: " + fieldName); + } + + Cell cell = setDate(dataRow.createCell(columnIndex), value, sheet, columnIndex); + cell.setCellStyle(dataStyle);// 应用数据样式 + columnIndex++; + } + } - // 写入文件 - try (FileOutputStream outputStream = new FileOutputStream(pathName)) { workbook.write(outputStream); + // 设置响应头 + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setContentLength(outputStream.size()); + + // 处理文件名编码,防止中文乱码 + String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8).replaceAll("\\+", "%20"); + response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName + ".xlsx"); + + // 将字节流写入响应 + response.getOutputStream().write(outputStream.toByteArray()); + response.getOutputStream().flush(); System.out.print("导出Excel完成"); } catch (IOException e) { System.out.printf("导出Excel失败:" + e.getMessage()); } - - // 关闭工作簿 - workbook.close(); } /** @@ -228,36 +225,4 @@ public final class ExcelFillerUtil { } return cell; } - - /** - * 创建当天日期的文件夹 - * - * @param outputPath 父文件夹 - * @param datePathName 日期文件夹名 - */ - public static Boolean makePath(String outputPath, String datePathName) { - try { - // 构建代表新文件夹的File对象 - File newDir = new File(outputPath, datePathName); - - // 检查新文件夹是否已存在 - if (!newDir.exists()) { - // 创建新文件夹 - boolean created = newDir.mkdir(); - - if (created) { - System.out.println("文件夹创建成功:" + newDir.getAbsolutePath()); - return true; - } else { - System.out.println("文件夹创建失败,可能是父文件夹不存在或者没有写入权限:" + newDir.getAbsolutePath()); - return false; - } - } else { - System.out.println("文件夹已存在,不创建新的文件夹:" + newDir.getAbsolutePath()); - return true; - } - } catch (Exception e) { - return false; - } - } } \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbController.java index 795456ca..f649f721 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbController.java @@ -14,6 +14,8 @@ import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Objects; +import java.util.function.Function; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -42,7 +44,9 @@ import com.openhis.common.constant.CommonConstants; import com.openhis.financial.domain.Contract; import com.openhis.financial.service.IContractService; import com.openhis.web.ybmanage.dto.Financial3202WebParam; +import com.openhis.web.ybmanage.dto.FinancialHand3201WebParam; import com.openhis.web.ybmanage.dto.FinancialHand3203AWebParam; +import com.openhis.web.ybmanage.dto.Yb5205SpecialDiseaseWebParam; import com.openhis.web.ybmanage.service.IYbService; import com.openhis.yb.domain.FinancialApplyRecord; import com.openhis.yb.domain.InfoPerson; @@ -252,7 +256,41 @@ public class YbController { @GetMapping("/reconcile-list") public R reconcileGeneralLedgerList(Settlement3201WebParam settlement3201WebParam) { return R.ok(ybDao.reconcileGeneralLedgerDetail(settlement3201WebParam)); + } + /** + * 【3201】手动对账(吉林省) + * + * @param financialHand3203WebParam 3201 入参条件 + * @return 结果 + */ + @PostMapping("/hand-operated-apply-reconcile-accounts") + public R handOperatedApplyReconcileAccounts(@RequestBody FinancialHand3201WebParam financialHand3203WebParam) { + + Financial3201Param financial3201Param = new Financial3201Param(); + + financial3201Param.setInsutype(financialHand3203WebParam.getInsutype()) + .setClrType(financialHand3203WebParam.getClrType()).setSetlOptins(financialHand3203WebParam.getClrOptins()) + .setStmtBegndate(financialHand3203WebParam.getBegndate()) + .setStmtEnddate(financialHand3203WebParam.getEnddate()) + .setMedfeeSumamt(financialHand3203WebParam.getMedfeeSumamt().doubleValue()) + .setFundPaySumamt(financialHand3203WebParam.getFundAppySum().doubleValue()) + .setAcctPay(financialHand3203WebParam.getAcctPay().doubleValue()) + .setFixmedinsSetlCnt(Integer.parseInt(financialHand3203WebParam.getSetlCnt())) + .setInsuplcAdmdvs(SecurityUtils.getLoginUser().getOptionJson().getString("admvs")); + + Result result = ybHttpUtils.reconcileGeneralLedger(financial3201Param); + if (result.getCode().equals(CommonConstant.SC_OK_200)) { + // System.out.println(JSON.parseObject(JSON.toJSONString(result.getResult()))); + Financial3201Output financial3201Output = + JSON.parseObject(JSON.toJSONString(result.getResult()), Financial3201Output.class); + ybDao.saveReconcileGeneralLedger(financial3201Output, financial3201Param); + if ("0".equals(financial3201Output.getStmtRslt())) { + return R.ok("OK"); + } + return R.ok(financial3201Output.getStmtRsltDscr()); + } + return R.fail("医保app通讯失败"); } /** @@ -745,6 +783,51 @@ public class YbController { return R.ok(outputList); } + /** + * 【1312】-医保目录信息批量查询 + * + * @param dateStr 更新时间 + * @return 结果 + */ + @PostMapping("/batch-query-yb-catalogue") + public R batchQueryYbCatalogue(@RequestParam String dateStr) { + // 准备公共参数 + String insuplcAdmdvs = "229900"; + LocalDate localDate = LocalDate.parse(dateStr); + Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + + // 存储所有查询结果 + List allResults = new ArrayList<>(); + String str = + "XC09CAT039A001010300800, XR05XXA175E001010100760, XR03DAA113B002020103257, XC01DAX072A001010500202, XM01ABS120E007010178232, XA10BKD256A001010179096, XA11DAW036A001010103059, XA03FAX226B002010103973, XC08CAA187A001010101678, XM01AEB173X002010100734, ZA12BAF0349010200941, ZA06CBF0034010403496, XC10AXY310B002010178217, XC10ABF021E001010180487, XJ01MAN076A001010204747, XN02BAL023B001060104288, XN02BBQ128A001010103304, XC07AGA031A001010378991, ZA04AAN0111010100169, ZB01BAS0537030100490, XR07AXY034B001010103783, XJ01FAA051E001010201651, XB05XAL211B002050402180, XR06AXL226A001010100784, XJ01XDA231B002020302180, XG03FBC051A001020178890, XR06ADY136B002010101962, XB02BXF031B002010103216, XC08CAZ067A001010702697, XC07ABM062A010020183802, XJ05APL052N001030102120, XM04AAF670A001010401729, ZA04BAK0055010302943, XS01KAB146G010010109920, XC10AAR069A001040104641, ZA12BAS0986010100961, XR05CBA101E005030500066, XJ01MAZ074A001011303307, XB05XAL208B002020203204, XB01AXA223B002010105791, XC01CAJ097B002020100137, XJ01DDT088B001010102918, ZG01BAX0326010105184, XA05BAF632B002010179084, XJ01FAL262A006010801478, XJ01FFK071B002040101017, ZA12BAF0349010100941, ZD02AAF0202010105046, XG03DAH056B002010100874, XB03AED181E001010304032, XA03BAX232B002010104494, XA03FAJ085B002020103257, XB03BAW037B002020203216, ZA06CAF0030020105478, XA10ADM080B002010107103, XA10AEG025B002020181708, ZG01AAS0084010103814, XA11HAW041B002010103257, XC08CAZ067A001010203447, XN01BBA064B002010178765, ZA06CAF0030020205478, XC09DXS255A001030378679, XC02CXY168B002010200239, ZA02BAQ0408010103151, XD10AFH016F001010103223, ZA13BAD0263010103391, ZA12DAQ0082010102767, XC10ABB079A001010101499, ZA02AAH0434010100941, XC01CAS071B002010401984, XA02BCA211E005010104192, ZA04BAP0062010101193, XJ01CAA040E001030402699, XM01ABA196A012010103198, XA10BFA025A001020100002, XA06AGK111S003010101954, ZA12BAG0375010102537, ZA10DAA0094010103357, XJ01DCT162A001010204658, XA11DAW036B002010103257, XR05XXF134A001010103453, XA02ADL183A005010300340, XC01CAS071B002010203204, XB05XAT018B002010202954, XJ01MAM134B002010105759, XB05BBP072B002170102180, XG03DBD084A001010178890, XC09DXS255A001030178679, XC02CXY168A001020179598, XJ01MAM134B002010102763, XC01CAQ120B002010201984, XA07FAD090E001010201161, XA10ABM079B002020107103, XA07AXX082A017010101162, ZG01BAY0711010501752, ZF03AAL0102010100169, XA10BAE021A001010104658, XM01AEB173E003010303370, XB05BBP072B002090102180, XJ01XDR005E001010103464, XR06AXL226A001010200841, XN07XXB025E001010304021, XB03AAF375A017010103454, XA11GAW043A001010100222, XR05CBA198A001010209703, ZA04BAK0055010102748, ZA02AAH0434010300941, XA12AXT201A001010101421, XC09CAE003A001010404647, XA05BAS149E001010200941, XA11GAW043B002020103216, ZA17AAZ0155010102018, ZG01BAY0716040405629, XS01AEZ074G010020109920, XC10AAA067A001020105847, ZG03AAS0381020101385, XS01KAB146G010020209920, XR07ABN040B002010100137, XC09CAT039A001010105805, XA07FAR055A001010203744, XA05BAF632A001010200106, ZA04BAX0048020105337, XJ06BBP063B002010102055, XA10BJS279B002020183568, XB03BBY050A001010300011, XJ06BBP063B001010109588, XJ05APL052B002020104127, XR05CBA198B002010201871, ZG02BAZ0126010102021, XJ01FAA051B001020302770, ZA09FAJ0473010105300, XR05FBF273A001010103304, XA03BAA068B002010103257, ZA12AAQ0060030100941, XC01AAQ133B002010301708, XM09AXF299B001010102557, XN02BED158A001010201162, XA03ADY181B002010201708, XB05BBP072B002040203063, ZZ01AAJ0464010105109, XG03DAH056E001010104735, XA10BDE082A001010304520, XA10ADD335B002020307103, XR05CBA198A001010109703, XB05BBP072B002170502180, XA02BCA211B001020104127, XB05XAL211B002070602180, XJ05ABA075A001010100503, XN07XXD130E002010102774, XS02AAZ074Q010010100547, XJ01MAM122A001010206988, XR03ACS048L028010101740, XC01BBL054B002020203204, XD06BBA075F002020104982, XA10AEG025B002040181708, ZA04BAY0496010102019, XA05BAH112B014020104139, XR03BAB165L023020100545, XH02ABD234B002020203257, XA06ADR050X001010101150, ZA14AAJ0168020105394, XH03AAZ057A001030279462, XB01ACA056A012020279489, XN05BAD088B002010100978, XC01DAX072B002020102902, XJ05AHA218E001010102770, XR06ADY136B002010201962, XS01AAH016G004020104127, XB05BBM115B001010204098, XR05FBF273A001010200228, XA03BAX232B002020103216, ZA04BAL0021020101749, XJ01DDT081B001010200513, XD07CBF231F002010100474, XC09AAY074A001020101747, XJ01MAM122A001010101003, XA05BAH112B001040101066, XN02BBF168B002010103257, ZA09CAL0264030100169, XD01ACM085F002020102529, XA12AAP077B002020402662, ZA09HAC0221010279263, XA07BCM081P001010203714, XG03FBC051A001010178890, ZA02AAH0441010502125, ZG01BAY0713010301752, ZA04BAF0468010103658, ZA09ABR0036010100166, XN07CAF072E001010102529, XP01ABJ070A001010101984, XB05XAL211B002020402180, XC03CAF056B002010203257, XR03ACT022L008010201429, XB03BAJ038A001010205337, XC08CAX211A010010100681, XA10ADJ247B002010107103, ZA05BAW0113010103287, XJ01DDT073E001010602703, XH02ABJ061B001010200933, XA11HAW041B002010203216, ZA02BAF0104010104670, XJ01MAZ083B002040202662, XB01ACL190A001020178814, XR07ABN040B002010304152, XC10AAA067A001010105847, XB05BBP072B002091102180, ZF03AAK0002030105506, XR07ABL271B002020100137, ZB01CAM0031040101954"; + String[] split = str.split(","); + // 循环查询每个医保目录编码 + for (String s : split) { + Catalogue1312QueryParam catalogue1312QueryParam = new Catalogue1312QueryParam(); + catalogue1312QueryParam.setHilistCode(s); + catalogue1312QueryParam.setInsuplcAdmdvs(insuplcAdmdvs); + catalogue1312QueryParam.setUpdtTime(date); + catalogue1312QueryParam.setPageNum(1); + catalogue1312QueryParam.setPageSize(10); + catalogue1312QueryParam.setDecryptFlag("0"); // 不需要解密 + + // 执行查询并收集结果 + List outputList = ybHttpUtils.queryYbCatalogue(catalogue1312QueryParam); + if (outputList != null && !outputList.isEmpty()) { + List list = outputList.stream().filter(Objects::nonNull) + .filter(x -> x.getMemo() != null).filter(x -> !"null".equals(x.getMemo())) + .filter(x -> !"历史数据迁移".equals(x.getMemo())).filter(x -> !"目录变更".equals(x.getMemo())) + .filter(x -> !"0".equals(x.getMemo())).filter(x -> !" ".equals(x.getMemo())) + .collect(Collectors.toMap(Catalogue1312Output::getHilistCode, // 以 hilistCode 作为 key + Function.identity(), // 保留原对象 + (existing, replacement) -> existing // 如果重复,保留第一个 + )).values().stream().toList(); + allResults.addAll(list); + } + } + return R.ok(allResults); + } + /** * 【3101】明细审核事前事中分析服务 * @@ -782,4 +865,28 @@ public class YbController { public R yb4101aUploadFundSettle(@RequestParam("paymentId") Long paymentId) { return ybService.yb4101aUploadFundSettle(paymentId); } + + /** + * 【5205】人员慢特病用药记录查询 + * + * @param yb5205SpecialDiseaseWebParam 付款ID + * @return 结果 + */ + @PostMapping("/special-disease-drug-record-search") + public R + yb5205SpecialDiseaseDrugRecordSearch(@RequestBody Yb5205SpecialDiseaseWebParam yb5205SpecialDiseaseWebParam) { + Yb5205InputSpecialDisease yb5205InputSpecialDisease = + ybDao.yb5205SpecialDiseaseDrugRecordSearch(yb5205SpecialDiseaseWebParam.getPatientId(), + yb5205SpecialDiseaseWebParam.getBegntime(), yb5205SpecialDiseaseWebParam.getEndtime()); + + List yb5205OutputSpecialDiseases = + ybHttpUtils.yb5205SpecialDiseaseDrugRecordSearch(yb5205InputSpecialDisease); + + if (yb5205OutputSpecialDiseases == null) { + return R.fail("获取失败"); + } + + return R.ok(yb5205OutputSpecialDiseases); + + } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/FinancialHand3201WebParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/FinancialHand3201WebParam.java new file mode 100644 index 00000000..1a19eff4 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/FinancialHand3201WebParam.java @@ -0,0 +1,35 @@ +package com.openhis.web.ybmanage.dto; + +import java.math.BigDecimal; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +import lombok.Data; + +@Data +public class FinancialHand3201WebParam { + + @NotEmpty + private String clrType;// 险种类型 + @NotNull + private BigDecimal medfeeSumamt;// 医疗费总额 + @NotNull + private BigDecimal medSumfee;// 医保认可费用总额(0.00) + @NotNull + private BigDecimal fundAppySum;// 基金支付金额 + @NotNull + private BigDecimal cashPayamt;// 现金金额 + @NotNull + private BigDecimal acctPay;// 账户金额 + @NotNull + private String begndate;// 开始时间 + @NotNull + private String enddate;// 结束时间 + @NotEmpty + private String clrOptins; // 必须是准确的6位编码 + @NotNull + private String insutype;// 职工还是居民? + @NotNull + private String setlCnt;// 结算笔数 +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb5205SpecialDiseaseWebParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb5205SpecialDiseaseWebParam.java new file mode 100644 index 00000000..65088db7 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb5205SpecialDiseaseWebParam.java @@ -0,0 +1,41 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import java.util.Date; + +import org.springframework.format.annotation.DateTimeFormat; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; + +/** + * 医保5205接口请求参数 + * + * @author SunJQ + * @date 2025-09-22 + */ +@Data +public class Yb5205SpecialDiseaseWebParam { + + /** + * 患者id + */ + private Long patientId; + + /** + * 开始时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date begntime; + + /** + * 结束时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date endtime; +} diff --git a/openhis-server-new/openhis-application/src/main/resources/application-cd.yml b/openhis-server-new/openhis-application/src/main/resources/application-cd.yml new file mode 100644 index 00000000..83bb7009 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/application-cd.yml @@ -0,0 +1,86 @@ +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: org.postgresql.Driver + druid: + # 主库数据源 + master: + url: jdbc:postgresql://192.168.10.240:5432/openhis?currentSchema=public&characterEncoding=UTF-8&client_encoding=UTF-8 + username: postgres + password: root + # 从库数据源 + slave: + # 从数据源开关/默认关闭 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置连接超时时间 + connectTimeout: 30000 + # 配置网络超时时间 + socketTimeout: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 # FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: openhis + login-password: 123456 + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + # redis 配置 + redis: + # 地址 + host: 192.168.10.240 + port: 6379 + # 数据库索引 + database: 1 + # 密码 + password: redis + # 连接超时时间 + timeout: 10s + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 0 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 8 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: -1ms + # 文言 + messages: + basename: i18n/general_message/messages + encoding: utf-8 \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/application-cloud.yml b/openhis-server-new/openhis-application/src/main/resources/application-cloud.yml new file mode 100644 index 00000000..596c0770 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/application-cloud.yml @@ -0,0 +1,87 @@ +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: org.postgresql.Driver + druid: + # 主库数据源 + master: + url: jdbc:postgresql://60.188.247.175:5432/openhis?currentSchema=public&characterEncoding=UTF-8&client_encoding=UTF-8 + username: postgres + password: root + # 从库数据源 + slave: + # 从数据源开关/默认关闭 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置连接超时时间 + connectTimeout: 30000 + # 配置网络超时时间 + socketTimeout: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 # FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: openhis + login-password: 123456 + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + # redis 配置 + redis: + # 地址 + host: 60.188.247.175 + # 端口,默认为6379 + port: 6379 + # 数据库索引 + database: 0 + # 密码 + password: redis + # 连接超时时间 + timeout: 10s + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 0 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 8 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: -1ms + # 文言 + messages: + basename: i18n/general_message/messages + encoding: utf-8 \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/application-jh.yml b/openhis-server-new/openhis-application/src/main/resources/application-jh.yml new file mode 100644 index 00000000..f0c1747a --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/application-jh.yml @@ -0,0 +1,86 @@ +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: org.postgresql.Driver + druid: + # 主库数据源 + master: + url: jdbc:postgresql://9.139.80.38:5432/openhis?currentSchema=public&characterEncoding=UTF-8&client_encoding=UTF-8 + username: jiahui_health + password: xDQC3P0JZWMS*isc + # 从库数据源 + slave: + # 从数据源开关/默认关闭 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置连接超时时间 + connectTimeout: 30000 + # 配置网络超时时间 + socketTimeout: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 # FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: openhis + login-password: 123456 + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + # redis 配置 + redis: + # 地址 + host: 9.139.86.34 + port: 6379 + # 数据库索引 + database: 0 + # 密码 + password: HWV4cC*ABdY71kef + # 连接超时时间 + timeout: 10s + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 0 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 8 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: -1ms + # 文言 + messages: + basename: i18n/general_message/messages + encoding: utf-8 \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/application-local.yml b/openhis-server-new/openhis-application/src/main/resources/application-local.yml index c5785b00..9c375796 100644 --- a/openhis-server-new/openhis-application/src/main/resources/application-local.yml +++ b/openhis-server-new/openhis-application/src/main/resources/application-local.yml @@ -6,7 +6,7 @@ spring: druid: # 主库数据源 master: - url: jdbc:postgresql://localhost:5432/openhis?currentSchema=public&characterEncoding=UTF-8&client_encoding=UTF-8 + url: jdbc:postgresql://192.168.30.199:5432/openhis?currentSchema=public&characterEncoding=UTF-8&client_encoding=UTF-8 username: postgres password: root # 从库数据源 @@ -62,7 +62,7 @@ spring: # redis 配置 redis: # 地址 - host: 127.0.0.1 + host: 192.168.30.199 # 端口,默认为6379 port: 6379 # 数据库索引 diff --git a/openhis-server-new/openhis-application/src/main/resources/application-nd.yml b/openhis-server-new/openhis-application/src/main/resources/application-nd.yml new file mode 100644 index 00000000..19375d6c --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/application-nd.yml @@ -0,0 +1,87 @@ +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: org.postgresql.Driver + druid: + # 主库数据源 + master: + url: jdbc:postgresql://192.168.1.123:5432/openhis?currentSchema=public&characterEncoding=UTF-8&client_encoding=UTF-8 + username: postgres + password: root + # 从库数据源 + slave: + # 从数据源开关/默认关闭 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置连接超时时间 + connectTimeout: 30000 + # 配置网络超时时间 + socketTimeout: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 # FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: openhis + login-password: 123456 + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + # redis 配置 + redis: + # 地址 + host: 192.168.1.123 + # 端口,默认为6379 + port: 6379 + # 数据库索引 + database: 1 + # 密码 + password: redis + # 连接超时时间 + timeout: 10s + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 0 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 8 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: -1ms + # 文言 + messages: + basename: i18n/general_message/messages + encoding: utf-8 \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/application-sd.yml b/openhis-server-new/openhis-application/src/main/resources/application-sd.yml new file mode 100644 index 00000000..099980a6 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/application-sd.yml @@ -0,0 +1,86 @@ +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: org.postgresql.Driver + druid: + # 主库数据源 + master: + url: jdbc:postgresql://172.16.7.4:5432/openhis?currentSchema=public&characterEncoding=UTF-8&client_encoding=UTF-8 + username: postgres + password: root + # 从库数据源 + slave: + # 从数据源开关/默认关闭 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置连接超时时间 + connectTimeout: 30000 + # 配置网络超时时间 + socketTimeout: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 # FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: openhis + login-password: 123456 + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + # redis 配置 + redis: + # 地址 + host: 172.16.7.4 + port: 6379 + # 数据库索引 + database: 1 + # 密码 + password: redis + # 连接超时时间 + timeout: 10s + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 0 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 8 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: -1ms + # 文言 + messages: + basename: i18n/general_message/messages + encoding: utf-8 \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/application-test.yml b/openhis-server-new/openhis-application/src/main/resources/application-test.yml new file mode 100644 index 00000000..d4370287 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/application-test.yml @@ -0,0 +1,93 @@ +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: org.postgresql.Driver + druid: + # 主库数据源 + # master: + # url: jdbc:postgresql://192.168.1.123:5432/openhistest?currentSchema=public&characterEncoding=UTF-8&client_encoding=UTF-8 + # username: postgres + # password: root + + master: + url: jdbc:postgresql://192.168.30.199:5432/openhistest?currentSchema=public&characterEncoding=UTF-8&client_encoding=UTF-8 + username: postgres + password: root + # 从库数据源 + slave: + # 从数据源开关/默认关闭 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置连接超时时间 + connectTimeout: 30000 + # 配置网络超时时间 + socketTimeout: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 # FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: openhis + login-password: 123456 + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + # redis 配置 + redis: + # 地址 + # host: 192.168.1.123 + host: 192.168.30.199 + # 端口,默认为6379 + port: 6379 + # 数据库索引 + database: 1 + # 密码 + password: redis + # 连接超时时间 + timeout: 10s + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 0 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 8 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: -1ms + # 文言 + messages: + basename: i18n/general_message/messages + encoding: utf-8 \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/application-ty.yml b/openhis-server-new/openhis-application/src/main/resources/application-ty.yml new file mode 100644 index 00000000..7f33d601 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/application-ty.yml @@ -0,0 +1,87 @@ +# 数据源配置 农大 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: org.postgresql.Driver + druid: + # 主库数据源 + master: + url: jdbc:postgresql://localhost:5432/openhis?currentSchema=public&characterEncoding=UTF-8&client_encoding=UTF-8 + username: postgres + password: root + # 从库数据源 + slave: + # 从数据源开关/默认关闭 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置连接超时时间 + connectTimeout: 30000 + # 配置网络超时时间 + socketTimeout: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 # FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: openhis + login-password: 123456 + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + # redis 配置 + redis: + # 地址 + host: 127.0.0.1 + # 端口,默认为6379 + port: 6379 + # 数据库索引 + database: 1 + # 密码 + password: redis + # 连接超时时间 + timeout: 10s + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 0 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 8 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: -1ms + # 文言 + messages: + basename: i18n/general_message/messages + encoding: utf-8 \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/application.yml b/openhis-server-new/openhis-application/src/main/resources/application.yml index 24bca422..c2477556 100644 --- a/openhis-server-new/openhis-application/src/main/resources/application.yml +++ b/openhis-server-new/openhis-application/src/main/resources/application.yml @@ -54,7 +54,7 @@ spring: # 国际化资源文件路径 basename: i18n/messages profiles: - active: local # (天翼云)cloud (本地测试)test (本地)local (生产)prod (农大) nd (长大) cd + active: local # (天翼云)cloud (本地测试)test (本地)local (生产)prod (农大) nd (长大) cd (师大)sd # 文件上传 servlet: multipart: diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ProductTransferMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ProductTransferMapper.xml index 527346fc..7ecee531 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ProductTransferMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ProductTransferMapper.xml @@ -126,6 +126,7 @@ AND T1.inventory_status_enum = #{inventoryStatusEnum} AND T1.location_id = #{sourceLocationId} AND T1.item_table = #{medicationTableName} + AND T1.quantity > 0 UNION ALL SELECT T1.tenant_id, #{device} AS medication_type, @@ -174,6 +175,7 @@ AND T1.inventory_status_enum = #{inventoryStatusEnum} AND T1.location_id = #{sourceLocationId} AND T1.item_table = #{deviceTableName} + AND T1.quantity > 0 ) AS A ${ew.customSqlSegment} @@ -210,6 +212,7 @@ T1.item_id, -- 项目id T2.part_percent, -- 拆零比 T1.remake, -- 备注 + T1.occurrence_time, T9.quantity AS total_source_quantity, -- 库存数量(源库存) T12.quantity AS total_purpose_quantity -- 库存数量(目的库存) FROM wor_supply_request T1 @@ -281,6 +284,7 @@ T1.item_id, -- 项目id T2.part_percent, -- 拆零比 T1.remake, -- 备注 + T1.occurrence_time, T9.quantity AS total_source_quantity, -- 总库存数量(源库存) T12.quantity AS total_purpose_quantity -- 总库存数量(目的库存) FROM wor_supply_request T1 diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/PurchaseInventoryMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/PurchaseInventoryMapper.xml index d0436c3e..c00c9982 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/PurchaseInventoryMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/PurchaseInventoryMapper.xml @@ -80,6 +80,7 @@ T6."name" AS purpose_location_name, T6."id" AS purpose_location_id, T7."name" AS purpose_location_store_name, + T1.occurrence_time, (SELECT SUM(T9.quantity) FROM wor_inventory_item T9 WHERE T9.item_id = T1.item_id @@ -126,6 +127,7 @@ T6."name" AS purpose_location_name, T6."id" AS purpose_location_id, T7."name" AS purpose_location_store_name, + T1.occurrence_time, (SELECT SUM(T9.quantity) FROM wor_inventory_item T9 WHERE T9.item_id = T1.item_id diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/PurchaseReturnMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/PurchaseReturnMapper.xml index aa65a9c9..a7609190 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/PurchaseReturnMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/PurchaseReturnMapper.xml @@ -94,6 +94,7 @@ THEN T1.practitioner_id ELSE NULL END AS practitioner_id, --经手人 + T1.occurrence_time, T4.part_percent --拆零比 FROM wor_supply_request T1 LEFT JOIN wor_inventory_item T2 @@ -223,6 +224,7 @@ THEN T1.practitioner_id ELSE NULL END AS practitioner_id, --经手人 + T1.occurrence_time, T4.part_percent --拆零比 FROM wor_supply_request T1 LEFT JOIN wor_inventory_item T2 @@ -266,7 +268,7 @@ T1.practitioner_id, T1.applicant_id, T1.approver_id, - MIN(T1.create_time) AS create_time, -- 制单时间 + MIN(T1.occurrence_time) AS occurrence_time, -- 制单时间 T1.approval_time FROM wor_supply_request AS T1 WHERE T1.original_bus_no = #{busNo} diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ReceiptApprovalMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ReceiptApprovalMapper.xml index 26e025e2..2729cbd2 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ReceiptApprovalMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ReceiptApprovalMapper.xml @@ -125,9 +125,14 @@ FROM adm_charge_item_definition AS T1 LEFT JOIN adm_charge_item_def_detail AS T2 ON T1.id = T2.definition_id + AND T2.delete_flag = '0' LEFT JOIN med_medication_definition AS T3 ON T1.instance_id = T3.id - WHERE T1.instance_id IN + AND T3.delete_flag = '0' + LEFT JOIN adm_device_definition AS T4 + ON T1.instance_id = T4.id + AND T4.delete_flag = '0' + WHERE T1.instance_id IN #{itemId} diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/RequisitionIssueMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/RequisitionIssueMapper.xml index 6af0280d..3cef1469 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/RequisitionIssueMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/RequisitionIssueMapper.xml @@ -87,6 +87,7 @@ T9."name" AS purpose_location_store_name, -- 目的货位 T1.practitioner_id, -- 经办人 T1.remake, -- 备注 + T1.occurrence_time, T11."name" AS practitioner_name -- 经办人名称 FROM wor_supply_request T1 LEFT JOIN med_medication_definition T2 @@ -157,6 +158,7 @@ T9."name" AS purpose_location_store_name, -- 目的货位 T1.practitioner_id, -- 经办人 T1.remake, -- 备注 + T1.occurrence_time, T11."name" AS practitioner_name -- 经办人名称 FROM wor_supply_request T1 LEFT JOIN adm_device_definition T2 @@ -264,12 +266,7 @@ #{item} - - AND TO_CHAR(T1.occurrence_time, 'yyyy-MM-dd HH24:mi:ss') = #{startTime} - - - AND TO_CHAR(T1.occurrence_time, 'yyyy-MM-dd HH24:mi:ss') BETWEEN #{startTime} AND #{endTime} - + AND TO_CHAR(T1.occurrence_time, 'yyyy-MM-dd HH24:mi:ss') BETWEEN #{startTime} AND #{endTime} AND T1.item_table = #{medicationTableName} AND T1.delete_flag = '0' UNION diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ReturnIssueMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ReturnIssueMapper.xml index a5b022c9..83ced0a0 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ReturnIssueMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ReturnIssueMapper.xml @@ -87,6 +87,7 @@ T7."name" AS purpose_location_store_name, -- 目的仓位 T8."name" AS source_location_name, -- 源仓库 T9."name" AS source_location_store_name, -- 源仓位 + T1.occurrence_time, T1.remake -- 备注 FROM wor_supply_request T1 LEFT JOIN med_medication_definition T2 @@ -157,6 +158,7 @@ T7."name" AS source_location_store_name, -- 源仓位 T8."name" AS purpose_location_name, -- 目的仓库 T9."name" AS purpose_location_store_name, -- 目的货位 + T1.occurrence_time, T1.remake -- 备注 FROM wor_supply_request T1 LEFT JOIN adm_device_definition T2 diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/basedatamanage/PractitionerAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/basedatamanage/PractitionerAppMapper.xml index 41cc01cd..35806d2a 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/basedatamanage/PractitionerAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/basedatamanage/PractitionerAppMapper.xml @@ -21,7 +21,9 @@ T3.address, T3.yb_no, T3.org_id, - T3.phar_prac_cert_no + T3.phar_prac_cert_no, + T3.dr_profttl_code, + T3.signature from ( SELECT T1.tenant_id, T1.id AS practitioner_id, @@ -39,7 +41,9 @@ T1.address, T1.yb_no, T1.org_id, - T1.phar_prac_cert_no + T1.phar_prac_cert_no, + T1.dr_profttl_code, + T1.signature FROM adm_practitioner AS T1 LEFT JOIN sys_user AS T2 ON T2.user_id = T1.user_id AND T2.delete_flag = '0' diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientChargeAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientChargeAppMapper.xml index 01bdff58..c318fb49 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientChargeAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientChargeAppMapper.xml @@ -4,20 +4,21 @@ SELECT ii.tenant_id, ii.item_type, @@ -263,4 +314,195 @@ AND delete_flag = '0' ORDER BY create_time DESC LIMIT 1 + + + + + + diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml index 7e35429a..96c5664f 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml @@ -227,6 +227,7 @@ SELECT T1.id AS inventory_id, T1.item_id, + T1.category_code, T1.item_table, T1.quantity, T1.unit_code, @@ -300,6 +301,15 @@ AND (T1.status_enum = #{status1} OR T1.status_enum = #{status2}) + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationMainAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationMainAppMapper.xml index e5d8a1c3..0081ccd8 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationMainAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationMainAppMapper.xml @@ -55,10 +55,13 @@ LEFT JOIN adm_organization AS T2 ON T1.organization_id = T2.ID AND T2.delete_flag = '0' LEFT JOIN adm_healthcare_service AS T3 ON T1.service_type_id = T3.ID AND T3.delete_flag = '0' LEFT JOIN adm_encounter_participant AS T4 - ON T1.ID = T4.encounter_id AND T4.type_code = #{participantType} AND T4.delete_flag = '0' + ON T1.ID = T4.encounter_id AND T4.type_code = #{participantType} + AND T4.status_enum = #{activityStatus} + AND T4.delete_flag = '0' LEFT JOIN adm_practitioner AS T5 ON T5.ID = T4.practitioner_id AND T5.delete_flag = '0' LEFT JOIN adm_encounter_participant AS aep ON T1.ID = aep.encounter_id AND aep.type_code = #{participantType2} + AND aep.status_enum = #{activityStatus} AND aep.delete_flag = '0' LEFT JOIN adm_practitioner AS ap ON ap.ID = aep.practitioner_id AND ap.delete_flag = '0' diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/ReservationRecordAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/ReservationRecordAppMapper.xml index 95eca535..4cfe3404 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/ReservationRecordAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/ReservationRecordAppMapper.xml @@ -15,7 +15,8 @@ ri.org_name, ri.practitioner_id, ri.practitioner_name, - ri.remark + ri.remark, + ri.tooth_position from (SELECT crr.tenant_id, crr.id, crr.patient_name, @@ -26,14 +27,14 @@ ao.NAME AS org_name, crr.practitioner_id, ap.NAME AS practitioner_name, - crr.remark + crr.remark, + crr.tooth_position FROM cli_reservation_record AS crr LEFT JOIN adm_organization AS ao ON ao.ID = crr.org_id AND ao.delete_flag = '0' LEFT JOIN adm_practitioner AS ap ON ap.ID = crr.practitioner_id AND ap.delete_flag = '0' WHERE crr.delete_flag = '0' - AND (crr.org_id = #{orgId} OR crr.practitioner_id = #{practitionerId}) order by crr.reservation_time) AS ri ${ew.customSqlSegment} diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/document/DocRecordAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/document/DocRecordAppMapper.xml index f7f42d06..16957c14 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/document/DocRecordAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/document/DocRecordAppMapper.xml @@ -32,7 +32,7 @@ t1.end_time, t1.class_enum, t1.primary_menu_enum, - t1.doc_name, + t1.name, t1.tenant_id FROM (SELECT @@ -49,7 +49,7 @@ e.reception_time, e.class_enum, d.primary_menu_enum, - d.name as doc_name, + d.name , t.id, t.definition_id, t.definition_bus_no, @@ -86,6 +86,52 @@ )t1 ${ew.customSqlSegment} - + \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalcharge/AdvancePaymentManageAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalcharge/AdvancePaymentManageAppMapper.xml index fcc0cfe3..7a6d302f 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalcharge/AdvancePaymentManageAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalcharge/AdvancePaymentManageAppMapper.xml @@ -42,17 +42,17 @@ LEFT JOIN adm_encounter_location AS aelw ON aelw.encounter_id = ae.ID AND aelw.delete_flag = '0' AND aelw.form_enum = #{wardEnum} AND - aelw.status_enum = #{encounterLocationStatus} + aelw.status_enum = #{encounterActivityStatus} LEFT JOIN adm_location AS alw ON alw.id = aelw.location_id AND alw.delete_flag = '0' LEFT JOIN adm_encounter_location AS aelh ON aelh.encounter_id = ae.ID AND aelh.delete_flag = '0' AND aelh.form_enum = #{houseEnum} AND - aelh.status_enum = #{encounterLocationStatus} + aelh.status_enum = #{encounterActivityStatus} LEFT JOIN adm_location AS alh ON alh.id = aelh.location_id AND alh.delete_flag = '0' LEFT JOIN adm_encounter_location AS aelb ON aelb.encounter_id = ae.ID AND aelb.delete_flag = '0' AND aelb.form_enum = #{bedEnum} AND - aelb.status_enum = #{encounterLocationStatus} + aelb.status_enum = #{encounterActivityStatus} LEFT JOIN adm_location AS alb ON alb.id = aelb.location_id AND alb.delete_flag = '0' LEFT JOIN adm_account AS aa ON aa.encounter_id = ae.ID AND aa.delete_flag = '0' AND diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/AdviceProcessAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/AdviceProcessAppMapper.xml index 0bc40b20..9d4c0ca3 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/AdviceProcessAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/AdviceProcessAppMapper.xml @@ -300,7 +300,7 @@ T1.therapy_enum AS therapy_enum, NULL AS sort_number, T1.quantity AS execute_num, - NULL AS day_times, + af.day_times, ae.bus_no, ap."name" AS patient_name, al2."name" AS bad_name, @@ -383,6 +383,9 @@ aa.balance_amount ) AS personal_account ON personal_account.encounter_id = ae.id + LEFT JOIN adm_frequency af + ON af.rate_code = T1.rate_code + AND af.delete_flag = '0' WHERE T1.delete_flag = '0' AND CASE WHEN T1.status_enum = #{draft} THEN T1.performer_check_id IS NOT NULL diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/jlau/ReviewPrescriptionRecordsAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/jlau/ReviewPrescriptionRecordsAppMapper.xml new file mode 100644 index 00000000..42cbdf31 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/jlau/ReviewPrescriptionRecordsAppMapper.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/outpatientmanage/OutpatientTreatmentAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/outpatientmanage/OutpatientTreatmentAppMapper.xml index a3244399..9aa0af87 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/outpatientmanage/OutpatientTreatmentAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/outpatientmanage/OutpatientTreatmentAppMapper.xml @@ -1,7 +1,8 @@ - SELECT ii.encounter_id, ii.reception_time, ii.encounter_no, @@ -13,7 +14,7 @@ ii.status_enum FROM ( SELECT T1.tenant_id, - T1.id AS encounter_id, + T1.id AS encounter_id, T1.reception_time, T1.bus_no AS encounter_no, T2.gender_enum, @@ -23,15 +24,15 @@ T2.birth_date, T3.status_enum FROM adm_encounter AS T1 - INNER JOIN adm_patient AS T2 - ON T1.patient_id = T2.id - AND T2.delete_flag = '0' - INNER JOIN wor_service_request AS T3 - ON T1.id = T3.encounter_id - AND T3.refund_service_id IS NULL - AND T3.delete_flag = '0' + INNER JOIN adm_patient AS T2 + ON T1.patient_id = T2.id + AND T2.delete_flag = '0' + INNER JOIN wor_service_request AS T3 + ON T1.id = T3.encounter_id + AND T3.refund_service_id IS NULL + AND T3.delete_flag = '0' WHERE T1.class_enum = #{amb} - AND T1.delete_flag = '0' + AND T1.delete_flag = '0' GROUP BY T1.tenant_id, T1.id, T1.reception_time, @@ -48,180 +49,188 @@ + + + diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/personalization/ActivityDeviceAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/personalization/ActivityDeviceAppMapper.xml index e8277c9a..fa1e33de 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/personalization/ActivityDeviceAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/personalization/ActivityDeviceAppMapper.xml @@ -3,42 +3,44 @@ \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/personalization/OrdersGroupPackageAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/personalization/OrdersGroupPackageAppMapper.xml new file mode 100644 index 00000000..d950a6d6 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/personalization/OrdersGroupPackageAppMapper.xml @@ -0,0 +1,69 @@ + + + + + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/ChineseMedicineDispenseMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/ChineseMedicineDispenseMapper.xml deleted file mode 100644 index 4673d65e..00000000 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/ChineseMedicineDispenseMapper.xml +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - - diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/IDeviceDispenseMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/IDeviceDispenseMapper.xml deleted file mode 100644 index b38537e9..00000000 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/IDeviceDispenseMapper.xml +++ /dev/null @@ -1,233 +0,0 @@ - - - - - - - - diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/InpatientMedicineDispenseMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/InpatientMedicineDispenseMapper.xml deleted file mode 100644 index 88caedfb..00000000 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/InpatientMedicineDispenseMapper.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/InpatientMedicineSummaryDispenseMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/InpatientMedicineSummaryDispenseMapper.xml index 74965391..9433688a 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/InpatientMedicineSummaryDispenseMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/InpatientMedicineSummaryDispenseMapper.xml @@ -1,7 +1,7 @@ - SELECT ii.tenant_id, ii.bus_no,--单据号 ii.request_id,--供应请求id @@ -293,8 +293,7 @@ - - + @@ -325,8 +324,7 @@ - - + diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/MedicalConsumablesDispenseAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/MedicalConsumablesDispenseAppMapper.xml deleted file mode 100644 index a2c0566b..00000000 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/MedicalConsumablesDispenseAppMapper.xml +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/MedicalDeviceDispenseMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/MedicalDeviceDispenseMapper.xml new file mode 100644 index 00000000..26ef59da --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/MedicalDeviceDispenseMapper.xml @@ -0,0 +1,213 @@ + + + + + + + diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/MedicationDetailsMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/MedicationDetailsMapper.xml index 757c64dc..8d1c3686 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/MedicationDetailsMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/MedicationDetailsMapper.xml @@ -42,6 +42,22 @@ WHERE mmd.status_enum = #{refunded} AND mmd.delete_flag = '0' AND mmr.refund_medicine_id IS not null + ), + refund_device_info AS ( + SELECT wdr.refund_device_id, + wdd.dispense_quantity, + wdd.unit_code, + aci.total_price + FROM wor_device_dispense wdd + LEFT JOIN wor_device_request wdr + ON wdd.device_req_id = wdr.id + AND wdr.delete_flag = '0' + INNER JOIN adm_charge_item aci + ON aci.service_id = wdd.device_req_id + AND aci.delete_flag = '0' + WHERE wdd.status_enum = #{refunded} + AND wdd.delete_flag = '0' + AND wdr.refund_device_id IS not null ) SELECT def."name" AS medication_name, def.py_str, @@ -99,7 +115,72 @@ LEFT JOIN adm_supplier sup ON sup.id = wii.supplier_id WHERE mmd.status_enum = #{completed} - AND mmd.dispense_enum = #{amb} + AND mmr.status_enum = #{agree} + + AND mmd.dispense_enum = #{amb} + + AND mmd.delete_flag = '0' + UNION + SELECT def."name" AS medication_name, + def.py_str, + def.bus_no, + def.yb_no, + def.manufacturer_text, + mmr.prescription_no, + ae.bus_no AS outpatient_no, + pat.name AS patient_name, + def.size AS total_volume, + mmd.unit_code, + mmd.bus_no AS dispense_no, + mmd.lot_number, + mmd.dispense_quantity, + mmd.encounter_id, + mmd.performer_id AS practitioner_id, + mmd.dispense_time, + ap.name AS practitioner_name, + mmd.location_id, + aci.total_price AS dispense_price, + ri.dispense_quantity AS refund_quantity, + ri.unit_code AS refund_unit_code, + ri.total_price AS refund_price, + wii.supplier_id, + sup.name AS supplier_name, + mmd.tenant_id + FROM wor_device_dispense mmd + LEFT JOIN wor_device_request mmr + ON mmd.device_req_id = mmr.id + AND mmr.delete_flag = '0' + INNER JOIN adm_charge_item aci + ON aci.service_id = mmr.id + AND aci.delete_flag = '0' + LEFT JOIN adm_device_definition def + ON mmd.device_def_id = def.id + AND def.delete_flag = '0' + LEFT JOIN adm_device mm + ON mm.device_def_id = def.id + AND mm.delete_flag = '0' + LEFT JOIN wor_inventory_item wii + ON wii.item_id = mmd.device_def_id + AND wii.lot_number = mmd.lot_number + AND wii.location_id = mmd.location_id + AND wii.delete_flag = '0' + LEFT JOIN refund_device_info AS ri + ON ri.refund_device_id = mmr.id + LEFT JOIN adm_location al + ON al.id = mmd.location_id + LEFT JOIN adm_practitioner ap + ON ap.id = mmd.performer_id + LEFT JOIN adm_patient pat + ON pat.id = mmd.patient_id + LEFT JOIN adm_encounter ae + ON ae.id = mmd.encounter_id + LEFT JOIN adm_supplier sup + ON sup.id = wii.supplier_id + WHERE mmd.status_enum = #{completed} + AND mmr.status_enum = #{agree} + + AND mmd.dispense_category_enum = #{amb} + AND mmd.delete_flag = '0' ) AS A ${ew.customSqlSegment} diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/ReturnMedicineMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/ReturnMedicineMapper.xml index dfb42448..40f6b351 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/ReturnMedicineMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/ReturnMedicineMapper.xml @@ -1,7 +1,7 @@ - SELECT ii.reception_time, ii.encounter_id, ii.encounter_no, @@ -62,71 +62,6 @@ ${ew.customSqlSegment} ORDER BY ii.reception_time DESC - - - SELECT ii.tenant_id, - ii.encounter_id, + - - SELECT ii.department_name, ii.doctor_name, ii.item_type, @@ -140,8 +112,8 @@ ii.lot_number, ii.request_id, ii.tcm_flag, - ii.medicine_name, - ii.medicine_id, + ii.item_name, + ii.item_id, ii.total_volume, ii.unit_code, ii.encounter_id, @@ -151,10 +123,6 @@ ii.location_id, ii.method_code, ii.dose_unit_code, - ii.max_dose, - ii.first_dose, - ii.first_duration, - ii.dispense_interval, ii.dispense_per_quantity, ii.dispense_per_duration, ii.quantity, @@ -162,16 +130,13 @@ ii.unit_price, ii.total_price, ii.dispense_doctor_name, - ii.preparer_doctor_name, ii.location_name, ii.encounter_bus_no, ii.req_authored_time, - ii.no, - ii.charge_type, - ii.pharmacology_category_code, - ii.med_type_code, ii.skin_test_flag, - ii.group_id + ii.group_id, + ii.manufacturer_text, + ii.trace_no FROM ( SELECT T8."name" AS department_name, T9."name" AS doctor_name, T3.category_code AS item_type, @@ -180,8 +145,8 @@ T2.lot_number, T2.id AS request_id, T2.tcm_flag, - T3."name" AS medicine_name, - T3.id AS medicine_id, + T3."name" AS item_name, + T3.id AS item_id, T4.total_volume, T1.unit_code, T1.encounter_id, @@ -191,10 +156,6 @@ T1.location_id, T1.method_code, T2.dose_unit_code, - T2.max_dose, - T2.first_dose, - T2.first_duration, - T2.dispense_interval, T2.dispense_per_quantity, T2.dispense_per_duration, T1.quantity, @@ -202,17 +163,14 @@ T5.unit_price, T5.total_price, T10."name" AS dispense_doctor_name, - T11."name" AS preparer_doctor_name, T13."name" AS location_name, T6.bus_no AS encounter_bus_no, T2.req_authored_time, - T14.no, - T15.contract_name AS charge_type, - T3.pharmacology_category_code, - T16.med_type_code, T3.skin_test_flag, T2.group_id AS group_id, - T1.tenant_id + T1.tenant_id, + T3.manufacturer_text, + T1.trace_no FROM med_medication_dispense AS T1 LEFT JOIN med_medication_request AS T2 ON T1.med_req_id = T2.id @@ -244,22 +202,9 @@ LEFT JOIN adm_practitioner AS T10 ON T1.practitioner_id = T10.id AND T10.delete_flag = '0' - LEFT JOIN adm_practitioner AS T11 - ON T1.preparer_id = T11.id - AND T11.delete_flag = '0' LEFT JOIN adm_location AS T13 ON T1.location_id = T13.id AND T13.delete_flag = '0' - LEFT JOIN adm_account AS T14 - ON T5.account_id = T14.id - AND T14.delete_flag = '0' - LEFT JOIN fin_contract AS T15 - ON T14.contract_no = T15.bus_no - AND T15.delete_flag = '0' - LEFT JOIN adm_encounter_diagnosis AS T16 - ON T2.encounter_id = T16.encounter_id - AND T2.condition_id = T16.condition_id - AND T16.delete_flag = '0' WHERE T1.delete_flag = '0' -- 因发药配药合并,前台只能看到待发药,已发药状态,但是后台配药发药状态都查 AND @@ -276,60 +221,6 @@ ) AS ii ${ew.customSqlSegment} - - diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/AdviceManageAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/AdviceManageAppMapper.xml index 61094e5b..68d22cb2 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/AdviceManageAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/AdviceManageAppMapper.xml @@ -55,19 +55,19 @@ LEFT JOIN adm_encounter_location AS aelw ON aelw.encounter_id = ae.ID AND aelw.delete_flag = '0' AND aelw.form_enum = #{wardEnum} - AND aelw.status_enum = #{encounterLocationStatus} + AND aelw.status_enum = #{encounterActivityStatus} LEFT JOIN adm_location AS alw ON alw.ID = aelw.location_id AND alw.delete_flag = '0' LEFT JOIN adm_encounter_location AS aelh ON aelh.encounter_id = ae.ID AND aelh.delete_flag = '0' AND aelh.form_enum = #{houseEnum} - AND aelh.status_enum = #{encounterLocationStatus} + AND aelh.status_enum = #{encounterActivityStatus} LEFT JOIN adm_location AS alh ON alh.ID = aelh.location_id AND alh.delete_flag = '0' LEFT JOIN adm_encounter_location AS aelb ON aelb.encounter_id = ae.ID AND aelb.delete_flag = '0' AND aelb.form_enum = #{bedEnum} - AND aelb.status_enum = #{encounterLocationStatus} + AND aelb.status_enum = #{encounterActivityStatus} LEFT JOIN adm_location AS alb ON alb.ID = aelb.location_id AND alb.delete_flag = '0' INNER JOIN adm_account AS aa ON aa.encounter_id = ae.ID @@ -136,7 +136,7 @@ LEFT JOIN adm_location AS al ON al.ID = T1.perform_location AND al.delete_flag = '0' LEFT JOIN cli_condition AS cc ON cc.id = T1.condition_id AND cc.delete_flag = '0' LEFT JOIN cli_condition_definition AS ccd ON ccd.id = cc.definition_id - WHERE T1.delete_flag = '0' AND T1.tcm_flag = 0 AND T1.category_enum = #{categoryEnum} + WHERE T1.delete_flag = '0' AND T1.tcm_flag = 0 AND T1.encounter_id = #{encounterId} @@ -183,7 +183,7 @@ ON T3.service_id = T1.ID AND T3.delete_flag = '0' AND T3.service_table = #{WOR_DEVICE_REQUEST} LEFT JOIN adm_location AS al ON al.ID = T1.perform_location AND al.delete_flag = '0' - WHERE T1.delete_flag = '0' AND T1.category_enum = #{categoryEnum} + WHERE T1.delete_flag = '0' AND T1.encounter_id = #{encounterId} @@ -230,8 +230,9 @@ LEFT JOIN adm_charge_item AS T3 ON T3.service_id = T1.ID AND T3.delete_flag = '0' AND T3.service_table = #{WOR_SERVICE_REQUEST} LEFT JOIN adm_organization AS ao ON ao.ID = T1.org_id AND ao.delete_flag = '0' - WHERE T1.delete_flag = '0' AND T1.category_enum = #{categoryEnum} + WHERE T1.delete_flag = '0' AND T1.based_on_table is null + AND T1.parent_id IS NULL AND T1.encounter_id = #{encounterId} diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml index fd383f15..10c6d2b3 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml @@ -5,7 +5,8 @@ + select A.medication_name, + A.bus_no, + A.yb_no, + A.total_volume, + A.unit_code, + A.dispense_quantity, + A.dispense_price, + A.category_code, + A.dispense_time, + A.tenant_id + from ( + SELECT def."name" AS medication_name, + def.bus_no, + def.yb_no, + mm.total_volume, + mmd.unit_code, + SUM( mmd.dispense_quantity) AS dispense_quantity, + SUM( aci.total_price ) AS dispense_price, + def.category_code, + mmd.dispense_time, + mmd.tenant_id + FROM med_medication_dispense mmd + LEFT JOIN med_medication_request mmr + ON mmd.med_req_id = mmr.id + AND mmr.delete_flag = '0' + INNER JOIN adm_charge_item aci + ON aci.service_id = mmr.id + AND aci.delete_flag = '0' + LEFT JOIN med_medication_definition def + ON mmd.medication_id = def.id + AND def.delete_flag = '0' + LEFT JOIN med_medication mm + ON mm.medication_def_id = def.id + AND mm.delete_flag = '0' + LEFT JOIN med_medication_request mmrr + on mmr.id = mmrr.refund_medicine_id + AND mmrr.delete_flag = '0' + WHERE mmd.status_enum = #{disCompleted} + AND mmr.status_enum = #{reqCompleted} + AND mmr.refund_medicine_id IS NULL + AND mmrr.refund_medicine_id IS NULL + AND mmd.delete_flag = '0' + + AND def.antibiotic_flag = 1 + + + AND def.antibiotic_flag = 0 + + GROUP BY def."name", + def.bus_no, + def.yb_no, + mm.total_volume, + mmd.unit_code, + def.category_code, + mmd.dispense_time, + mmd.tenant_id + ) AS A + ${ew.customSqlSegment} + ORDER BY A.bus_no DESC + + \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/InboundReportMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/InboundReportMapper.xml index ffbb7e2b..49183456 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/InboundReportMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/InboundReportMapper.xml @@ -20,7 +20,7 @@ T10.supplier_id, --供应商id T10.supplier, --供应商 T10.approver_id, --审核人 - T10.create_time, --制单日期 + T10.occurrence_time, --制单日期 T10.approval_time, --审核日期 T10.tenant_id -- 租户ID FROM (SELECT T1.bus_no AS supply_bus_no, --单据号 @@ -39,7 +39,7 @@ T1.supplier_id, --供应商id T9.name AS supplier, --供应商 T1.approver_id, --审核人 - T1.create_time, --制单日期 + T1.occurrence_time, --制单日期 T1.approval_time, --审核日期 T1.tenant_id -- 租户ID FROM wor_supply_request AS T1 @@ -57,6 +57,7 @@ ON T4.definition_id = T3.id AND T4.delete_flag = '0' AND T4.condition_value = T1.lot_number + AND T4.condition_code = '1'--1:批号进价 LEFT JOIN med_medication AS T5 ON T5.medication_def_id = T2.id AND T5.delete_flag = '0' @@ -90,7 +91,7 @@ T1.supplier_id, --供应商id T9.name AS supplier, --供应商 T1.approver_id, --审核人 - T1.create_time, --制单日期 + T1.occurrence_time, --制单日期 T1.approval_time, --审核日期 T1.tenant_id -- 租户ID FROM wor_supply_request AS T1 @@ -108,6 +109,7 @@ ON T4.definition_id = T3.id AND T4.delete_flag = '0' AND T4.condition_value = T1.lot_number + AND T4.condition_code = '1'--1:批号进价 LEFT JOIN adm_location AS T7 ON T7.id = T1.purpose_location_id AND T7.delete_flag = '0' diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/LossReportMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/LossReportMapper.xml index bb1c735b..18221930 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/LossReportMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/LossReportMapper.xml @@ -13,6 +13,14 @@ T9.unit_code, --小单位 T9.item_quantity, --数量 T9.approval_time, --审批时间 + T9.supply_bus_no,--单据号 + T9.purpose_location_id,-- 目的仓库id + T9.price,--采购单价 + T9.location_store_name,--仓库货位 + T9.total_price,--报损金额 + T9.name AS supplier,--供应商 + T9.approver_id, --审核人 + T9.occurrence_time, --制单日期 T9.tenant_id -- 租户ID FROM (SELECT T2.bus_no, --编码 T2.name, --名称 @@ -23,6 +31,14 @@ T1.unit_code, --单位 T1.item_quantity, --数量 T1.approval_time, --审批时间 + T1.bus_no AS supply_bus_no,--单据号 + T1.purpose_location_id,-- 目的仓库id + T1.price,--采购单价 + T4.name AS location_store_name,--仓库货位 + T1.total_price,--报损金额 + T9.name AS supplier,--供应商 + T1.approver_id, --审核人 + T1.occurrence_time, --制单日期 T1.tenant_id -- 租户ID FROM wor_supply_request AS T1 INNER JOIN wor_supply_delivery AS T8 @@ -38,6 +54,12 @@ LEFT JOIN adm_location T5 ON T1.purpose_location_id = T5.id AND T5.delete_flag = '0' + LEFT JOIN adm_location AS T4 + ON T4.id = T1.purpose_location_store_id + AND T4.delete_flag = '0' + LEFT JOIN adm_supplier AS T9 + ON T9.id = T1.supplier_id + AND T9.delete_flag = '0' WHERE T1.type_enum = #{lossReport} AND T1.status_enum = #{supplyStatus} AND T1.item_table = #{medicationTableName} @@ -52,6 +74,14 @@ T1.unit_code, --单位 T1.item_quantity, --数量 T1.approval_time, --审批时间 + T1.bus_no AS supply_bus_no,--单据号 + T1.purpose_location_id,-- 目的仓库id + T1.price,--采购单价 + T4.name AS location_store_name,--仓库货位 + T1.total_price,--报损金额 + T9.name AS supplier,--供应商 + T1.approver_id, --审核人 + T1.occurrence_time, --制单日期 T1.tenant_id -- 租户ID FROM wor_supply_request AS T1 INNER JOIN wor_supply_delivery AS T8 @@ -64,11 +94,17 @@ LEFT JOIN adm_location T5 ON T1.purpose_location_id = T5.id AND T5.delete_flag = '0' + LEFT JOIN adm_location AS T4 + ON T4.id = T1.purpose_location_store_id + AND T4.delete_flag = '0' + LEFT JOIN adm_supplier AS T9 + ON T9.id = T1.supplier_id + AND T9.delete_flag = '0' WHERE T1.type_enum = #{lossReport} AND T1.status_enum = #{supplyStatus} AND T1.item_table = #{deviceTableName} AND T1.delete_flag = '0') AS T9 ${ew.customSqlSegment} - ORDER BY T9.bus_no DESC + ORDER BY T9.supply_bus_no DESC diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/MedicationDeviceReportMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/MedicationDeviceReportMapper.xml index 0a50640b..3b7bab7e 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/MedicationDeviceReportMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/MedicationDeviceReportMapper.xml @@ -11,9 +11,10 @@ manufacturer_text, org_id, SUM(total_quantity) AS total_quantity, - MAX(unit_code) AS unit_code, + unit_code, + unit_price, SUM(total_money) AS total_money, - MAX(dispense_time) AS dispense_time + dispense_time FROM ( /* ---------- 第一段查询 ---------- */ SELECT @@ -33,12 +34,12 @@ T7.total_volume, T1.lot_number, T3.manufacturer_text, - SUM(T1.quantity) AS total_quantity, - MAX(T1.unit_code) AS unit_code, - MAX(T8.unit_price) AS unit_price, - SUM(T1.quantity) * MAX(T8.unit_price) AS total_money, + T1.quantity AS total_quantity, + T1.unit_code unit_code, + T8.unit_price, + T8.total_price AS total_money, T1.org_id, - MAX(T2.dispense_time) AS dispense_time + T2.dispense_time FROM med_medication_request T1 LEFT JOIN med_medication_dispense T2 ON T2.med_req_id = T1.id AND T2.delete_flag = '0' @@ -50,15 +51,15 @@ ON T8.service_table = #{medReqTableName} --'med_medication_request' AND T8.service_id = T1.id AND T8.delete_flag = '0' + LEFT JOIN med_medication_request T17 + on T1.id = T17.refund_medicine_id + AND T17.delete_flag = '0' WHERE T1.status_enum = #{completed} --'3' + AND T2.status_enum = #{eventStatus} --'4' AND T1.delete_flag = '0' AND TO_CHAR(T2.dispense_time, 'yyyy-MM-dd HH24:mi:ss') BETWEEN #{dispenseDateSTime} AND #{dispenseDateETime} - GROUP BY - T3.name, - T7.total_volume, - T1.lot_number, - T3.manufacturer_text, - T1.org_id + AND T1.refund_medicine_id IS NULL + AND T17.refund_medicine_id IS NULL UNION ALL @@ -67,12 +68,12 @@ T6.size AS total_volume, T4.lot_number, T6.manufacturer_text, - SUM(T4.quantity) AS total_quantity, - MAX(T4.unit_code) AS unit_code, - MAX(T9.unit_price) AS unit_price, - SUM(T4.quantity) * MAX(T9.unit_price) AS total_money, + T4.quantity AS total_quantity, + T4.unit_code AS unit_code, + T9.unit_price AS unit_price, + T9.total_price AS total_money, T4.org_id, - MAX(T5.dispense_time) AS dispense_time + T5.dispense_time FROM wor_device_request T4 LEFT JOIN wor_device_dispense T5 ON T5.device_req_id = T4.id AND T5.delete_flag = '0' @@ -82,17 +83,16 @@ ON T9.service_table = #{devReqTableName} --'wor_device_request' AND T9.service_id = T4.id AND T9.delete_flag = '0' + LEFT JOIN wor_device_request T17 + on T4.id = T17.refund_device_id + AND T17.delete_flag = '0' WHERE T4.status_enum = #{completed} --'3' + AND T5.status_enum = #{eventStatus} --'4' AND T4.delete_flag = '0' AND TO_CHAR(T5.dispense_time, 'yyyy-MM-dd HH24:mi:ss') BETWEEN #{dispenseDateSTime} AND #{dispenseDateETime} - GROUP BY - T6.name, - T6.size, - T4.lot_number, - T6.manufacturer_text, - T4.org_id + AND T4.refund_device_id IS NULL + AND T17.refund_device_id IS NULL ) AS q1 - WHERE total_quantity > 0 UNION ALL @@ -104,7 +104,7 @@ manufacturer_text, total_quantity, unit_code, - NULL AS unit_price, -- 第二段已自带总金额,不需要单价 + unit_price, total_money, org_id, dispense_time @@ -116,9 +116,10 @@ manufacturer_text, org_id, SUM(quantity) AS total_quantity, - MAX(unit_code) AS unit_code, + unit_code, + price AS unit_price, SUM(total_price) AS total_money, - MAX(dispense_time) AS dispense_time + dispense_time FROM ( SELECT T10.name, @@ -128,6 +129,7 @@ CASE WHEN T9.type_enum = #{returnIssue} THEN T9.item_quantity * -1 ELSE T9.item_quantity END AS quantity, T9.unit_code, + T9.price, CASE WHEN T9.type_enum = #{returnIssue} THEN T9.total_price * -1 ELSE T9.total_price END AS total_price, CASE WHEN T9.type_enum = #{returnIssue} THEN T9.source_location_id @@ -156,6 +158,7 @@ CASE WHEN T13.type_enum = #{returnIssue} THEN T13.item_quantity * -1 ELSE T13.item_quantity END AS quantity, T13.unit_code, + T13.price, CASE WHEN T13.type_enum = #{returnIssue} THEN T13.total_price * -1 ELSE T13.total_price END AS total_price, CASE WHEN T13.type_enum = #{returnIssue} THEN T13.source_location_id @@ -177,7 +180,10 @@ total_volume, lot_number, manufacturer_text, - org_id + org_id, + unit_code, + price, + dispense_time ) AS q3 ) AS merged WHERE org_id = #{orgId} @@ -188,10 +194,12 @@ total_volume, lot_number, manufacturer_text, - org_id - ORDER BY org_id, - MAX(dispense_time) DESC + unit_code, + unit_price, + dispense_time + ORDER BY + dispense_time DESC @@ -205,7 +213,7 @@ /* ---------- 第一段:药品申领 + 耗材申领 ---------- */ SELECT T1.org_id, T16.name AS org_name, - SUM(T1.quantity * T8_MAX.unit_price_max) AS total_money + SUM(T8.total_price) AS total_money FROM med_medication_request T1 LEFT JOIN med_medication_dispense T2 ON T2.med_req_id = T1.id @@ -213,27 +221,31 @@ /* 时间区间 */ AND TO_CHAR(T2.dispense_time, 'yyyy-MM-dd HH24:mi:ss') BETWEEN #{dispenseDateSTime} AND #{dispenseDateETime} - LEFT JOIN (SELECT T8.service_id, - MAX(T8.unit_price) AS unit_price_max -- 单处方的最高单价 - FROM adm_charge_item T8 - WHERE T8.service_table = #{medReqTableName} --'med_medication_request' - AND T8.delete_flag = '0' - GROUP BY T8.service_id) T8_MAX ON T8_MAX.service_id = T1.ID + LEFT JOIN adm_charge_item T8 + ON T8.service_table = #{medReqTableName} --'med_medication_request' + AND T8.service_id = T1.id + AND T8.delete_flag = '0' + LEFT JOIN med_medication_request T17 + on T1.id = T17.refund_medicine_id + AND T17.delete_flag = '0' LEFT JOIN adm_organization T16 ON T1.org_id = T16.id AND T16.delete_flag = '0' WHERE T1.status_enum = #{completed} --'3' + AND T2.status_enum = #{eventStatus} --'4' AND T1.delete_flag = '0' /* 确保有发放记录才纳入汇总 */ AND T2.dispense_time IS NOT NULL + AND T1.refund_medicine_id IS NULL + AND T17.refund_medicine_id IS NULL GROUP BY T1.org_id, T16.name UNION ALL SELECT T4.org_id, - T16.name AS org_name, - SUM(T4.quantity * T9_MAX.unit_price_max) AS total_money + T16.name AS org_name, + SUM(T9.total_price) AS total_money FROM wor_device_request T4 LEFT JOIN wor_device_dispense T5 ON T5.device_req_id = T4.id @@ -241,18 +253,22 @@ /* 时间区间 */ AND TO_CHAR(T5.dispense_time, 'yyyy-MM-dd HH24:mi:ss') BETWEEN #{dispenseDateSTime} AND #{dispenseDateETime} - LEFT JOIN (SELECT T9.service_id, - MAX(T9.unit_price) AS unit_price_max -- 单处方的最高单价 - FROM adm_charge_item T9 - WHERE T9.service_table = #{devReqTableName} --'wor_device_request' - AND T9.delete_flag = '0' - GROUP BY T9.service_id) T9_MAX ON T9_MAX.service_id = T4.ID + LEFT JOIN adm_charge_item T9 + ON T9.service_table = #{devReqTableName} --'wor_device_request' + AND T9.service_id = T4.id + AND T9.delete_flag = '0' + LEFT JOIN wor_device_request T17 + on T4.id = T17.refund_device_id + AND T17.delete_flag = '0' LEFT JOIN adm_organization T16 ON T4.org_id = T16.id AND T16.delete_flag = '0' WHERE T4.status_enum = #{completed} --'3' + AND T5.status_enum = #{eventStatus} --'4' AND T4.delete_flag = '0' AND T5.dispense_time IS NOT NULL + AND T4.refund_device_id IS NULL + AND T17.refund_device_id IS NULL GROUP BY T4.org_id, T16.name diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/MonthlySettlementReportMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/MonthlySettlementReportMapper.xml index 36184749..208bc050 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/MonthlySettlementReportMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/MonthlySettlementReportMapper.xml @@ -68,7 +68,7 @@ COUNT(DISTINCT bus_no) AS total_number FROM wor_supply_request T1 INNER JOIN wor_supply_delivery T2 ON T1.id = T2.request_id AND T2.delete_flag = '0' - WHERE T1.source_location_id = #{locationId} + WHERE T1.purpose_location_id = #{locationId} AND T1.type_enum IN (#{productStocktaking} ,#{productBatchStocktaking} ) AND T1.status_enum = #{agree}--同意 AND T2.status_enum = #{completed}--已完成 @@ -112,6 +112,7 @@ AND T8.delete_flag = '0' WHERE T2.location_id = #{locationId} AND T1.status_enum = #{completed}--请求状态:已完成 + AND T2.status_enum = #{agree}--请求状态:已发药 AND T1.delete_flag = '0' AND TO_CHAR(T2.dispense_time, 'yyyy-MM-dd HH24:mi:ss') BETWEEN #{startTime} AND #{endTime} GROUP BY @@ -136,6 +137,7 @@ AND T9.delete_flag = '0' WHERE T5.location_id = #{locationId} AND T4.status_enum = #{completed}--请求状态:已完成 + AND T5.status_enum = #{agree}--请求状态:已发药 AND T4.delete_flag = '0' AND TO_CHAR(T5.dispense_time, 'yyyy-MM-dd HH24:mi:ss') BETWEEN #{startTime} AND #{endTime} GROUP BY diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/OutboundReportMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/OutboundReportMapper.xml index 67b5088b..64668c5b 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/OutboundReportMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/OutboundReportMapper.xml @@ -22,6 +22,7 @@ T10.supplier_id, --供应商 T10.approver_id, --审核人 T10.approval_time, --审批时间 + T10.occurrence_time, --制单日期 T10.remake, --出库原因 T10.tenant_id -- 租户ID from ( @@ -43,6 +44,7 @@ T1.supplier_id, --供应商 T1.approver_id, --审核人 T1.approval_time, --审批时间 + T1.occurrence_time, --制单日期 T1.remake, --出库原因(备注) T1.tenant_id -- 租户ID from wor_supply_request as T1 @@ -66,6 +68,7 @@ on T6.id = T7.definition_id and T7.delete_flag = '0' AND T7.condition_value = T1.lot_number + AND T7.condition_code = '1'--1:批号进价 left join adm_organization T8 on T1.purpose_location_id = T8.id and T8.delete_flag = '0' @@ -92,6 +95,7 @@ T1.supplier_id, --供应商 T1.approver_id, --审核人 T1.approval_time, --审批时间 + T1.occurrence_time, --制单日期 T1.remake, --出库原因 T1.tenant_id -- 租户ID from wor_supply_request as T1 @@ -115,6 +119,7 @@ on T6.id = T7.definition_id and T7.delete_flag = '0' AND T7.condition_value = T1.lot_number + AND T7.condition_code = '1'--1:批号进价 left join adm_organization T8 on T1.purpose_location_id = T8.id and T8.delete_flag = '0' diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/PurchaseReturnReportMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/PurchaseReturnReportMapper.xml index 8fd03eab..85af6fed 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/PurchaseReturnReportMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/PurchaseReturnReportMapper.xml @@ -20,7 +20,7 @@ T10.supplier_id, --供应商id T10.supplier, --供应商 T10.approver_id, --审核人 - T10.create_time, --制单日期 + T10.occurrence_time, --制单日期 T10.approval_time, --审核日期 T10.tenant_id -- 租户ID FROM (SELECT T1.bus_no AS supply_bus_no, --单据号 @@ -40,7 +40,7 @@ T1.supplier_id, --供应商id T9.name AS supplier, --供应商 T1.approver_id, --审核人 - T1.create_time, --制单日期 + T1.occurrence_time, --制单日期 T1.approval_time, --审核日期 T1.tenant_id -- 租户ID FROM wor_supply_request AS T1 @@ -58,6 +58,7 @@ ON T4.definition_id = T3.id AND T4.delete_flag = '0' AND T4.condition_value = T1.lot_number + AND T4.condition_code = '1'--1:批号进价 LEFT JOIN med_medication AS T5 ON T5.medication_def_id = T2.id AND T5.delete_flag = '0' @@ -92,7 +93,7 @@ T1.supplier_id, --供应商id T9.name AS supplier, --供应商 T1.approver_id, --审核人 - T1.create_time, --制单日期 + T1.occurrence_time, --制单日期 T1.approval_time, --审核日期 T1.tenant_id -- 租户ID FROM wor_supply_request AS T1 @@ -110,6 +111,7 @@ ON T4.definition_id = T3.id AND T4.delete_flag = '0' AND T4.condition_value = T1.lot_number + AND T4.condition_code = '1'--1:批号进价 LEFT JOIN adm_location AS T7 ON T7.id = T1.purpose_location_id AND T7.delete_flag = '0' diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/ReturnIssueReportMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/ReturnIssueReportMapper.xml index d37c0dda..60c05b84 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/ReturnIssueReportMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/ReturnIssueReportMapper.xml @@ -23,6 +23,7 @@ T10.approver_id, --审核人 T10.approval_time, --审批时间 T10.remake, --退库原因 + T10.occurrence_time, --制单日期 T10.tenant_id -- 租户ID from ( select T1.bus_no as supply_bus_no, --单据号 @@ -44,6 +45,7 @@ T1.approver_id, --审核人 T1.approval_time, --审批时间 T1.remake, --退库原因(备注) + T1.occurrence_time, --制单日期 T1.tenant_id -- 租户ID from wor_supply_request as T1 inner join wor_supply_delivery as T2 @@ -66,6 +68,7 @@ on T6.id = T7.definition_id and T7.delete_flag = '0' AND T7.condition_value = T1.lot_number + AND T7.condition_code = '1'--1:批号进价 left join adm_organization T8 on T1.source_location_id = T8.id and T8.delete_flag = '0' @@ -93,6 +96,7 @@ T1.approver_id, --审核人 T1.approval_time, --审批时间 T1.remake, --退库原因 + T1.occurrence_time, --制单日期 T1.tenant_id -- 租户ID from wor_supply_request as T1 inner join wor_supply_delivery as T2 @@ -115,6 +119,7 @@ on T6.id = T7.definition_id and T7.delete_flag = '0' AND T7.condition_value = T1.lot_number + AND T7.condition_code = '1'--1:批号进价 left join adm_organization T8 on T1.source_location_id = T8.id and T8.delete_flag = '0' diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/StocktakingReportMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/StocktakingReportMapper.xml index 9a19ec16..868d131e 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/StocktakingReportMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/StocktakingReportMapper.xml @@ -9,24 +9,38 @@ T9.name, --名称 T9.total_volume, --规格 T9.manufacturer_text, --厂家 --- T9.item_table, --类型 T9.lot_number, --产品批号 T9.location_name, --目的仓库 T9.unit_code, --小单位 T9.item_quantity, --数量 T9.approval_time, --审批时间 + T9.supply_bus_no,--单据号 + T9.purpose_location_id,-- 目的仓库id + T9.price,--采购单价 + T9.location_store_name,--仓库货位 + T9.total_price,--报损金额 + T9.name AS supplier,--供应商 + T9.approver_id, --审核人 + T9.occurrence_time, --制单日期 T9.tenant_id -- 租户ID FROM (SELECT T1.id, --ID T2.bus_no, --编码 T2.name, --名称 T3.total_volume, --规格 T2.manufacturer_text, --厂家 --- T2.category_code AS item_table, --类型 - T4.lot_number, --产品批号 + T1.lot_number, --产品批号 T5.name AS location_name, --目的仓库 T1.unit_code, --小单位 T1.item_quantity, --盈亏数量 T1.approval_time, --审批时间 + T1.bus_no AS supply_bus_no,--单据号 + T1.purpose_location_id,-- 目的仓库id + T1.price,--采购单价 + T4.name AS location_store_name,--仓库货位 + T1.total_price,--报损金额 + T9.name AS supplier,--供应商 + T1.approver_id, --审核人 + T1.occurrence_time, --制单日期 T1.tenant_id -- 租户ID FROM wor_supply_request AS T1 INNER JOIN wor_supply_delivery AS T8 @@ -39,14 +53,15 @@ LEFT JOIN med_medication AS T3 ON T2.id = T3.medication_def_id AND T3.delete_flag = '0' - LEFT JOIN wor_inventory_item AS T4 - ON T1.item_id = T4.item_id - AND T1.purpose_location_id = T4.location_id - AND T1.lot_number = T4.lot_number - AND T4.delete_flag = '0' LEFT JOIN adm_location T5 ON T1.purpose_location_id = T5.id AND T5.delete_flag = '0' + LEFT JOIN adm_location AS T4 + ON T4.id = T1.purpose_location_store_id + AND T4.delete_flag = '0' + LEFT JOIN adm_supplier AS T9 + ON T9.id = T1.supplier_id + AND T9.delete_flag = '0' WHERE T1.type_enum in (#{stocktakingReport}, #{stocktakingBatchReport}) AND T1.status_enum = #{supplyStatus} AND T1.item_table = #{medicationTableName} @@ -57,12 +72,19 @@ T6.name, --名称 T6.size AS total_volume, --规格(器材规格) T6.manufacturer_text, --厂家 --- T6.category_code AS item_table, --类型 - T4.lot_number, --产品批号 + T1.lot_number, --产品批号 T5.name AS location_name, --目的仓库 T1.unit_code, --小单位 T1.item_quantity, --盈亏数量 T1.approval_time, --审批时间 + T1.bus_no AS supply_bus_no,--单据号 + T1.purpose_location_id,-- 目的仓库id + T1.price,--采购单价 + T4.name AS location_store_name,--仓库货位 + T1.total_price,--报损金额 + T9.name AS supplier,--供应商 + T1.approver_id, --审核人 + T1.occurrence_time, --制单日期 T1.tenant_id -- 租户ID FROM wor_supply_request AS T1 INNER JOIN wor_supply_delivery AS T8 @@ -72,19 +94,122 @@ LEFT JOIN adm_device_definition AS T6 ON T1.item_id = T6.id AND T6.delete_flag = '0' - LEFT JOIN wor_inventory_item AS T4 - ON T1.item_id = T4.item_id - AND T1.purpose_location_id = T4.location_id - AND T1.lot_number = T4.lot_number - AND T4.delete_flag = '0' LEFT JOIN adm_location T5 ON T1.purpose_location_id = T5.id AND T5.delete_flag = '0' + LEFT JOIN adm_location AS T4 + ON T4.id = T1.purpose_location_store_id + AND T4.delete_flag = '0' + LEFT JOIN adm_supplier AS T9 + ON T9.id = T1.supplier_id + AND T9.delete_flag = '0' WHERE T1.type_enum in (#{stocktakingReport}, #{stocktakingBatchReport}) AND T1.status_enum = #{supplyStatus} AND T1.item_table = #{deviceTableName} AND T1.delete_flag = '0') AS T9 ${ew.customSqlSegment} - ORDER BY T9.bus_no DESC + ORDER BY T9.supply_bus_no DESC + + + diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/TransferReportMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/TransferReportMapper.xml index dad4aaf6..ec894cd6 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/TransferReportMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/TransferReportMapper.xml @@ -23,7 +23,7 @@ T6.total_price, -- 总价 T6.applicant_id, -- 申请人(制单人) T6.approver_id, -- 审核人 - T6.create_time, -- 制单日期 + T6.occurrence_time, -- 制单日期 T6.apply_time, -- 申请日期 T6.approval_time, -- 审批时间(调拨日期) T6.tenant_id -- 租户ID @@ -46,7 +46,7 @@ T1.total_price, -- 总价 T1.applicant_id, -- 申请人(制单人) T1.approver_id, -- 审核人 - T1.create_time, -- 制单日期 + T1.occurrence_time, -- 制单日期 T1.apply_time, -- 申请日期 T1.approval_time, -- 审批时间(调拨日期) T1.tenant_id -- 租户ID @@ -94,7 +94,7 @@ T1.total_price, -- 总价 T1.applicant_id, -- 申请人(制单人) T1.approver_id, -- 审核人 - T1.create_time, -- 制单日期 + T1.occurrence_time, -- 制单日期 T1.apply_time, -- 申请日期 T1.approval_time, -- 审批时间(调拨日期) T1.tenant_id -- 租户ID diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ActivityDefCategory.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ActivityDefCategory.java index c181341f..cf4ec26c 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ActivityDefCategory.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ActivityDefCategory.java @@ -8,9 +8,106 @@ import lombok.Getter; @Getter @AllArgsConstructor public enum ActivityDefCategory implements HisEnumInterface { - MEDICAL_SERVICE_ITEM(1, "medical_service_item", "医疗服务项"), - TREATMENT_SURGERY(2, "treatment_surgery", "手术与治疗"); + /** + * 治疗 + */ + TREATMENT(21, "21", "治疗"), + + /** + * 检验 + */ + PROOF(22, "22", "检验"), + + /** + * 检查 + */ + TEST(23, "23", "检查"), + + /** + * 手术 + */ + PROCEDURE(24, "24", "手术"), + + /** + * 麻醉 + */ + ANESTHESIA(25, "25", "麻醉"), + + /** + * 护理 + */ + NURSING(26, "26", "护理"), + + /** + * 膳食 + */ + DIET(27, "27", "膳食"), + + /** + * 输血 + */ + METACHYSIS(28, "28", "输血"), + + /** + * 输氧 + */ + OXYGEN_THERAPY(29, "29", "输氧"), + + /** + * 转科 + */ + TRANSFER(32, "32", "转科"), + + /** + * 术后 + */ + POSTOPERATIVE(33, "33", "术后"), + + /** + * 出院 + */ + DISCHARGE(34, "34", "出院"), + + /** + * 转院 + */ + TRANSFER_HOSPITAL(35, "35", "转院"), + + /** + * 死亡 + */ + death(36, "36", "死亡"), + + /** + * 产后 + */ + POSTPARTUM(37, "37", "产后"), + + /** + * 病情 + */ + CONDITION(38, "38", "病情"), + + /** + * 护理常规 + */ + NURSING_ROUTINE(39, "39", "护理常规"), + + /** + * 体位 + */ + POSITION(40, "40", "体位"), + + /** + * 陪护 + */ + COMPANION_CARE(41, "41", "陪护"), + + /** + * 隔离等级 + */ + ISOLATION_LEVEL(42, "42", "隔离等级"); @EnumValue private final Integer value; diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/BindingType.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/BindingType.java index 3f6ca5c5..1dc47b99 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/BindingType.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/BindingType.java @@ -6,7 +6,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; /** - * 诊断绑定类型 + * 绑定类型 */ @Getter @AllArgsConstructor @@ -14,7 +14,7 @@ public enum BindingType implements HisEnumInterface { PERSONAL(1, "personal", "个人"), - DEFINITION(2, "definition", "科室"), + ORGANIZATION(2, "organization", "科室"), HOSPITAL(3, "hospital", "全院"); diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/EncounterLocationStatus.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/EncounterActivityStatus.java similarity index 78% rename from openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/EncounterLocationStatus.java rename to openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/EncounterActivityStatus.java index f12dff75..b050907d 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/EncounterLocationStatus.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/EncounterActivityStatus.java @@ -7,7 +7,7 @@ import lombok.Getter; @Getter @AllArgsConstructor -public enum EncounterLocationStatus implements HisEnumInterface { +public enum EncounterActivityStatus implements HisEnumInterface { PLANNED(1, "planned", "已安排"), ACTIVE(2, "active", "使用中"), @@ -21,11 +21,11 @@ public enum EncounterLocationStatus implements HisEnumInterface { private final String code; private final String info; - public static EncounterLocationStatus getByValue(Integer value) { + public static EncounterActivityStatus getByValue(Integer value) { if (value == null) { return null; } - for (EncounterLocationStatus val : values()) { + for (EncounterActivityStatus val : values()) { if (val.getValue().equals(value)) { return val; } diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/RequestStatus.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/RequestStatus.java index b44c52a8..a20efada 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/RequestStatus.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/RequestStatus.java @@ -26,9 +26,9 @@ public enum RequestStatus implements HisEnumInterface { ACTIVE(2, "active", "已发送"), /** - * 已校对 + * 已完成 */ - COMPLETED(3, "completed", "已校对"), + COMPLETED(3, "completed", "已完成"), /** * 暂停 diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplyType.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplyType.java index 6473f639..22fee4c2 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplyType.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplyType.java @@ -215,7 +215,7 @@ public enum SupplyType implements HisEnumInterface { /** * 库存明细 */ - INVENTORY_PRODUCT(44, "44", "库存明细"); + INVENTORY_PRODUCT(45, "45", "库存明细"); private Integer value; private String code; diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/medCategoryCode.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/medCategoryCode.java index d008389d..d8a9a54b 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/medCategoryCode.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/medCategoryCode.java @@ -9,7 +9,6 @@ package com.openhis.common.enums; import com.github.pagehelper.util.StringUtil; -import com.openhis.common.enums.ybenums.YbDrugMedWay; import lombok.AllArgsConstructor; import lombok.Getter; @@ -21,7 +20,7 @@ import lombok.Getter; */ @Getter @AllArgsConstructor -public enum medCategoryCode { +public enum MedCategoryCode { TRADITIONAL_CHINESE_MEDICINE("1", "中成药"), @@ -36,11 +35,11 @@ public enum medCategoryCode { private String value; private String description; - public static medCategoryCode getByValue(String value) { + public static MedCategoryCode getByValue(String value) { if (StringUtil.isEmpty(value)) { return null; } - for (medCategoryCode code : values()) { + for (MedCategoryCode code : values()) { if (code.getValue().equals(value)) { return code; } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItem.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItem.java index 899bbc97..20ecc8d7 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItem.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItem.java @@ -67,7 +67,7 @@ public class ChargeItem extends HisBaseEntity { private Long costOrgId; /** 数量 */ - private Integer quantityValue; + private BigDecimal quantityValue; /** 单位 */ private String quantityUnit; diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/EncounterParticipant.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/EncounterParticipant.java index 61d4614f..968879d5 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/EncounterParticipant.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/EncounterParticipant.java @@ -44,5 +44,5 @@ public class EncounterParticipant extends HisBaseEntity { private Long practitionerId; /** 状态 */ - private Long statusEnum; + private Integer statusEnum; } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/Practitioner.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/Practitioner.java index adbb3993..819d4458 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/Practitioner.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/Practitioner.java @@ -100,4 +100,7 @@ public class Practitioner extends HisBaseEntity { /** 开票点编码 */ private String kpdCode; + + /** 签名图片 */ + private String signature; } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/ChargeItemBaseInfoDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/ChargeItemBaseInfoDto.java index f9667267..2c78947c 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/ChargeItemBaseInfoDto.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/ChargeItemBaseInfoDto.java @@ -1,6 +1,10 @@ package com.openhis.administration.dto; +import java.math.BigDecimal; +import java.util.Date; + import com.openhis.administration.domain.ChargeItem; + import lombok.Data; import lombok.experimental.Accessors; @@ -65,8 +69,46 @@ public class ChargeItemBaseInfoDto extends ChargeItem { /** 开单科室医保码 */ private String doctYbNo; - /** 自费还是医保收费 */ + /** 自费还是医保收费 */ private String contractNo; + /** 名称 */ + private String chargeName; + + /** 标题 */ + private String title; + + /** 状态 */ + private Integer statusEnum; + + /** 机构ID */ + private Long orgId; + + /** 描述 */ + private String description; + + /** 代码 */ + private String instanceTable; + + /** 关联项目 */ + private Long instanceId; + + /** 有效时间开始 */ + private Date effectiveStart; + + /** 有效时间结束 */ + private Date effectiveEnd; + + /** 财务类别 */ + private String typeCode; + + /** 医保类别 */ + private String ybType; + + /** 是否使用详细价格规则 */ + private Integer conditionFlag; + + /** 基础价格 */ + private BigDecimal price; } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemService.java index 4da661b9..d27fe392 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemService.java @@ -54,9 +54,9 @@ public interface IChargeItemService extends IService { void updateRefundChargeStatus(List chargeItemIdList); /** - * 根据集合更改收费状态 + * 更新收费状态 * - * @param chargeItemIdList 实体集合 + * @param chargeItemIdList 收费项目id集合 * @param value 状态值 */ void updatePaymentStatus(List chargeItemIdList, Integer value); diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IEncounterLocationService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IEncounterLocationService.java index c4555e19..0adcbe7a 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IEncounterLocationService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IEncounterLocationService.java @@ -5,7 +5,7 @@ import java.util.List; import com.baomidou.mybatisplus.extension.service.IService; import com.openhis.administration.domain.EncounterLocation; -import com.openhis.common.enums.EncounterLocationStatus; +import com.openhis.common.enums.EncounterActivityStatus; import com.openhis.common.enums.LocationForm; /** @@ -70,11 +70,11 @@ public interface IEncounterLocationService extends IService { * 根据就诊id查询就诊位置信息(某个类型)(某个状态) * * @param locationForm 类型 - * @param encounterLocationStatus 状态 + * @param encounterActivityStatus 状态 * @param encounterId 就诊id * @return 就诊位置集合 */ List getEncounterLocationList(Long encounterId, LocationForm locationForm, - EncounterLocationStatus encounterLocationStatus); + EncounterActivityStatus encounterActivityStatus); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemServiceImpl.java index ba13af9c..763fc865 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemServiceImpl.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.core.common.utils.SecurityUtils; import com.openhis.administration.domain.ChargeItem; import com.openhis.administration.dto.ChargeItemBaseInfoDto; import com.openhis.administration.dto.ChargeItemDefInfo; @@ -96,9 +97,16 @@ public class ChargeItemServiceImpl extends ServiceImpl().in(ChargeItem::getId, chargeItemIdList)); } + /** + * 更新收费状态 + * + * @param chargeItemIdList 收费项目id集合 + * @param value 状态值 + */ @Override public void updatePaymentStatus(List chargeItemIdList, Integer value) { - baseMapper.update(new ChargeItem().setStatusEnum(value), + baseMapper.update( + new ChargeItem().setStatusEnum(value).setPerformerId(SecurityUtils.getLoginUser().getPractitionerId()), new LambdaUpdateWrapper().in(ChargeItem::getId, chargeItemIdList)); } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/EncounterLocationServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/EncounterLocationServiceImpl.java index d1ee30e0..0aae96ab 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/EncounterLocationServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/EncounterLocationServiceImpl.java @@ -13,7 +13,7 @@ import com.openhis.administration.domain.EncounterLocation; import com.openhis.administration.mapper.EncounterLocationMapper; import com.openhis.administration.service.IEncounterLocationService; import com.openhis.common.enums.DelFlag; -import com.openhis.common.enums.EncounterLocationStatus; +import com.openhis.common.enums.EncounterActivityStatus; import com.openhis.common.enums.LocationForm; /** @@ -48,7 +48,7 @@ public class EncounterLocationServiceImpl extends ServiceImpl getEncounterLocationInfo(Long encounterId, Long locationId) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() - .eq(EncounterLocation::getStatusEnum, EncounterLocationStatus.ACTIVE.getValue()) + .eq(EncounterLocation::getStatusEnum, EncounterActivityStatus.ACTIVE.getValue()) .eq(EncounterLocation::getDeleteFlag, DelFlag.NO.getCode()); if (locationId != null) { queryWrapper.eq(EncounterLocation::getLocationId, locationId).eq(EncounterLocation::getFormEnum, @@ -118,7 +118,7 @@ public class EncounterLocationServiceImpl extends ServiceImpl() - .set(EncounterLocation::getStatusEnum, EncounterLocationStatus.COMPLETED.getValue()) + .set(EncounterLocation::getStatusEnum, EncounterActivityStatus.COMPLETED.getValue()) .eq(EncounterLocation::getEncounterId, encounterId).in(EncounterLocation::getFormEnum, locationForms)); } @@ -138,13 +138,13 @@ public class EncounterLocationServiceImpl extends ServiceImpl getEncounterLocationList(Long encounterId, LocationForm locationForm, - EncounterLocationStatus encounterLocationStatus) { + EncounterActivityStatus encounterActivityStatus) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper().eq(EncounterLocation::getEncounterId, encounterId) .eq(EncounterLocation::getDeleteFlag, DelFlag.NO.getCode()); @@ -153,8 +153,8 @@ public class EncounterLocationServiceImpl extends ServiceImpl() - .set(EncounterParticipant::getStatusEnum, EncounterLocationStatus.COMPLETED.getValue()) + .set(EncounterParticipant::getStatusEnum, EncounterActivityStatus.COMPLETED.getValue()) .eq(EncounterParticipant::getEncounterId, encounterId).in(EncounterParticipant::getTypeCode, ParticipantType.ATTENDING_DOCTOR.getCode(), ParticipantType.CHIEF_DOCTOR.getCode(), ParticipantType.PRIMARY_NURSE.getCode(), ParticipantType.ADMITTING_DOCTOR.getCode())); @@ -79,7 +79,7 @@ public class EncounterParticipantServiceImpl extends ServiceImpl getEncounterParticipantList(Long encounterId) { return baseMapper.selectList( new LambdaQueryWrapper().eq(EncounterParticipant::getEncounterId, encounterId) - .eq(EncounterParticipant::getStatusEnum, EncounterLocationStatus.ACTIVE.getValue()) + .eq(EncounterParticipant::getStatusEnum, EncounterActivityStatus.ACTIVE.getValue()) .eq(EncounterParticipant::getDeleteFlag, DelFlag.NO.getCode())); } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/PatientServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/PatientServiceImpl.java index d7deb380..f6caf85f 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/PatientServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/PatientServiceImpl.java @@ -138,7 +138,7 @@ public class PatientServiceImpl extends ServiceImpl impl // 设置五笔首拼 patient.setWbStr(ChineseConvertUtils.toWBFirstLetter(patient.getName())); // 不存在重复的证件号,新增患者 - if (idCardExists(patient) == null) { + if (patient.getIdCard() == null || patient.getIdCard().isEmpty() ||idCardExists(patient) == null) { // 添加患者 return baseMapper.insert(patient) > 0; } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/domain/ReservationRecord.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/domain/ReservationRecord.java index ed57bd6a..72f50b2c 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/domain/ReservationRecord.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/domain/ReservationRecord.java @@ -62,4 +62,9 @@ public class ReservationRecord extends HisBaseEntity { */ private String remark; + /** + * 牙位 + */ + private String toothPosition; + } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/domain/DocStatistics.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/domain/DocStatistics.java index 796d24ba..ea506410 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/domain/DocStatistics.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/domain/DocStatistics.java @@ -31,19 +31,15 @@ public class DocStatistics extends HisBaseEntity { /** * 记录科室ID */ - private Long orgnizationId; + private Long organizationId; /** * 统计值 */ private String value; - /** - * 记录日期 yyyy-MM-dd - */ - private Date recordingDate; /** * 记录时间 yyyy-MM-dd HH:mm:ss */ - private Date recordingTime; + private Date recordTime; /** * 记录来源 */ diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/domain/DocTemplate.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/domain/DocTemplate.java index e52c60f4..9cf6aedb 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/domain/DocTemplate.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/domain/DocTemplate.java @@ -2,6 +2,7 @@ package com.openhis.document.domain; import com.baomidou.mybatisplus.annotation.TableName; import com.core.common.core.domain.HisBaseEntity; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/mapper/PaymentReconciliationMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/mapper/PaymentReconciliationMapper.java index 63cd4e34..ad66bf03 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/mapper/PaymentReconciliationMapper.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/mapper/PaymentReconciliationMapper.java @@ -1,9 +1,13 @@ package com.openhis.financial.mapper; +import java.util.List; + +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.openhis.financial.domain.PaymentReconciliation; +import com.openhis.financial.model.PaymentReconciliationAccountDel; /** * 付款管理Mapper接口 @@ -14,4 +18,19 @@ import com.openhis.financial.domain.PaymentReconciliation; @Repository public interface PaymentReconciliationMapper extends BaseMapper { + /** + * 查询实体集合 + * + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param entererId 款员id + * @param contractNo 合同编号 + * @param success 状态 + * @param returnAll 状态 + * @param clinic 类型 + * @return 集合 + */ + List getPaymentAccountContract(@Param("startTime") String startTime, + @Param("endTime") String endTime, @Param("entererId") Long entererId, @Param("contractNo") String contractNo, + @Param("success") Integer success, @Param("returnAll") Integer returnAll, @Param("clinic") Integer clinic); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/model/PaymentReconciliationAccountDel.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/model/PaymentReconciliationAccountDel.java new file mode 100644 index 00000000..2dc984b7 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/model/PaymentReconciliationAccountDel.java @@ -0,0 +1,105 @@ +package com.openhis.financial.model; + +import java.math.BigDecimal; +import java.util.Date; + +import com.core.common.core.domain.HisBaseEntity; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 付款管理Entity实体 + * + * @author system + * @date 2025-02-20 + */ +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class PaymentReconciliationAccountDel extends HisBaseEntity { + + /** ID */ + private Long id; + + /** 状态 */ + private Integer statusEnum; + + /** 关联ID */ + private Long relationId; + + /** 支付的业务标识符 */ + private String paymentNo; + + /** 付款类别 */ + private Integer paymentEnum; + + /** 付款实体ID */ + private Long paymentReconciliationId; + + /** 发起支付的工作流程类别 */ + private Integer kindEnum; + + /** 收款员 */ + private Long entererId; + + /** 支付发起人类型 */ + private Integer issuerEnum; + + /** 支付的患者ID */ + private Long patientId; + + /** 请求支付责任人ID */ + private Long practitionerId; + + /** 付款结果 */ + private Integer outcomeEnum; + + /** 支付位置 */ + private Long locationId; + + /** 到期时间 */ + private Date expirationDate; + + /** 应收金额 */ + private BigDecimal tenderedAmount; + + /** 找零金额 */ + private BigDecimal returnedAmount; + + /** 付款总额 */ + private BigDecimal displayAmount; + + /** 打印标识 */ + private Integer printCount; + + /** 合同编码 */ + private String contractNo;// 2025/05/08李:自付和医保同时付费时只生成一条payment,故此该字段在insert时先为null + + /** 处方号集合 */ + private String chargeItemIds; + + /** 就诊ID */ + private Long encounterId; + + /** 结算时间 */ + private Date billDate; + + /** 发票编号 */ + private Long invoiceId; + + /** 关联账户Id */ + private Long accountId;// 2025/05/08李:自付和医保同时付费时只生成一条payment,故此该字段在insert时先为null + + /** 医保结算id */ + private String ybSettleIds;// 记录医保结算id + + /** 医保清算标志 */ + private Integer ybClearFlag;// 默认值0 未清算 + + /** + * 合同编号 + */ + private String accountContractNo; +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/IPaymentReconciliationService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/IPaymentReconciliationService.java index 166e89fd..6e4954c5 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/IPaymentReconciliationService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/IPaymentReconciliationService.java @@ -8,6 +8,7 @@ import com.openhis.common.enums.PaymentStatus; import com.openhis.common.enums.ybenums.YbMdtrtCertType; import com.openhis.financial.domain.Contract; import com.openhis.financial.domain.PaymentReconciliation; +import com.openhis.financial.model.PaymentReconciliationAccountDel; import com.openhis.financial.model.PaymentResult; import com.openhis.financial.model.PaymentedItemModel; import com.openhis.financial.model.PrePaymentResult; @@ -77,7 +78,8 @@ public interface IPaymentReconciliationService extends IService settleId); + void updatePaymentStatusAndSettleIdsById(Long id, PaymentStatus success, Integer outcomeEnum, + List settleId); /** * 【住院结算】 @@ -95,4 +97,28 @@ public interface IPaymentReconciliationService extends IService getPaymentAccountContract(String startTime, String endTime, Long entererId, + String contractNo, Integer success, Integer returnAll, Integer clinic); + } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/impl/PaymentReconciliationServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/impl/PaymentReconciliationServiceImpl.java index 8cba0cc7..3cb23e95 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/impl/PaymentReconciliationServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/impl/PaymentReconciliationServiceImpl.java @@ -29,6 +29,7 @@ import com.openhis.common.enums.ybenums.YbMedType; import com.openhis.financial.domain.Contract; import com.openhis.financial.domain.PaymentReconciliation; import com.openhis.financial.mapper.PaymentReconciliationMapper; +import com.openhis.financial.model.PaymentReconciliationAccountDel; import com.openhis.financial.model.PaymentResult; import com.openhis.financial.model.PaymentedItemModel; import com.openhis.financial.model.PrePaymentResult; @@ -243,14 +244,16 @@ public class PaymentReconciliationServiceImpl extends ServiceImpl settleId) { - if (settleId.isEmpty()) { - baseMapper.update(new PaymentReconciliation().setStatusEnum(success.getValue()), + public void updatePaymentStatusAndSettleIdsById(Long id, PaymentStatus success, Integer paymentOutcome, + List settleId) { + if (settleId == null || settleId.isEmpty()) { + baseMapper.update( + new PaymentReconciliation().setStatusEnum(success.getValue()).setOutcomeEnum(paymentOutcome), new LambdaQueryWrapper().eq(PaymentReconciliation::getId, id)); } else { baseMapper.update( - new PaymentReconciliation().setStatusEnum(success.getValue()) - .setYbSettleIds(String.join(",", settleId)), + new PaymentReconciliation().setStatusEnum(success.getValue()).setYbSettleIds(String.join(",", settleId)) + .setOutcomeEnum(paymentOutcome), new LambdaQueryWrapper().eq(PaymentReconciliation::getId, id)); } } @@ -268,4 +271,42 @@ public class PaymentReconciliationServiceImpl extends ServiceImpl paymentReconciliations = baseMapper.selectList( + new LambdaQueryWrapper().eq(PaymentReconciliation::getRelationId, paymentId) + .in(PaymentReconciliation::getStatusEnum, PaymentStatus.REFUNDING.getValue(), + PaymentStatus.REFUND_ALL.getValue(), PaymentStatus.REFUND_PART.getValue()) + .eq(PaymentReconciliation::getDeleteFlag, DelFlag.NO.getCode())); + if (paymentReconciliations != null && paymentReconciliations.size() > 0) { + return true; + } + return false; + } + + /** + * 查询实体集合 + * + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param entererId 款员id + * @param contractNo 合同编号 + * @param success 状态 + * @param returnAll 状态 + * @param clinic 类型 + * @return 集合 + */ + @Override + public List getPaymentAccountContract(String startTime, String endTime, + Long entererId, String contractNo, Integer success, Integer returnAll, Integer clinic) { + return baseMapper.getPaymentAccountContract(startTime, endTime, entererId, contractNo, success, returnAll, + clinic); + } } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/jlau/domain/ReviewPrescriptionRecords.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/jlau/domain/ReviewPrescriptionRecords.java new file mode 100644 index 00000000..4f49bf24 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/jlau/domain/ReviewPrescriptionRecords.java @@ -0,0 +1,58 @@ +package com.openhis.jlau.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.core.common.core.domain.HisBaseEntity; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 农大审方记录Entity实体 + * + * @author system + * @date 2025-02-20 + */ +@Data +@TableName("nd_review_prescription_records") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class ReviewPrescriptionRecords extends HisBaseEntity { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + /** + * 处方号 + */ + private String prescriptionNo; + + /** + * 就诊id + */ + private Long encounterId; + + /** + * 药品请求ids + */ + private String medRequestIds; + + /** + * 通过标识 + */ + private Integer passFlag; + + /** + * 原因 + */ + private String reasonText; + + /** + * 审方人id + */ + private Long practitionerId; + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/jlau/mapper/ReviewPrescriptionRecordsMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/jlau/mapper/ReviewPrescriptionRecordsMapper.java new file mode 100644 index 00000000..4c06e5da --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/jlau/mapper/ReviewPrescriptionRecordsMapper.java @@ -0,0 +1,17 @@ +package com.openhis.jlau.mapper; + +import org.springframework.stereotype.Repository; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.openhis.jlau.domain.ReviewPrescriptionRecords; + +/** + * 农大审方记录Mapper接口 + * + * @author system + * @date 2025-02-20 + */ +@Repository +public interface ReviewPrescriptionRecordsMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/jlau/service/IReviewPrescriptionRecordsService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/jlau/service/IReviewPrescriptionRecordsService.java new file mode 100644 index 00000000..610a4ab1 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/jlau/service/IReviewPrescriptionRecordsService.java @@ -0,0 +1,14 @@ +package com.openhis.jlau.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.openhis.jlau.domain.ReviewPrescriptionRecords; + +/** + * 农大审方记录Service接口 + * + * @author system + * @date 2025-02-20 + */ +public interface IReviewPrescriptionRecordsService extends IService { + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/jlau/service/impl/ReviewPrescriptionRecordsServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/jlau/service/impl/ReviewPrescriptionRecordsServiceImpl.java new file mode 100644 index 00000000..12ba0486 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/jlau/service/impl/ReviewPrescriptionRecordsServiceImpl.java @@ -0,0 +1,24 @@ +package com.openhis.jlau.service.impl; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.openhis.jlau.domain.ReviewPrescriptionRecords; +import com.openhis.jlau.mapper.ReviewPrescriptionRecordsMapper; +import com.openhis.jlau.service.IReviewPrescriptionRecordsService; + +import lombok.extern.slf4j.Slf4j; + +/** + * 农大审方记录Service业务层处理 + * + * @author system + * @date 2025-02-20 + */ +@Slf4j +@Service +public class ReviewPrescriptionRecordsServiceImpl + extends ServiceImpl + implements IReviewPrescriptionRecordsService { + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationDispense.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationDispense.java index c0ff73d1..290d49d2 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationDispense.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationDispense.java @@ -68,7 +68,7 @@ public class MedicationDispense extends HisBaseEntity { private String partTypeCode; /** 已发药数量 */ - private Integer dispenseQuantity; + private BigDecimal dispenseQuantity; /** 发药频次 */ private String dispenseFrequencyCode; @@ -113,7 +113,7 @@ public class MedicationDispense extends HisBaseEntity { private BigDecimal maxUnit; /** 发放数量 */ - private Integer quantity; + private BigDecimal quantity; /** 发放单位 */ private String unitCode; diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationRequest.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationRequest.java index 940ba14d..abcb27f0 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationRequest.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationRequest.java @@ -41,7 +41,7 @@ public class MedicationRequest extends HisBaseEntity { private Long packageId; /** 请求数量 */ - private Integer quantity; + private BigDecimal quantity; /** 执行次数 */ private Integer executeNum; @@ -206,7 +206,7 @@ public class MedicationRequest extends HisBaseEntity { /** * 中药付数 */ - private Integer chineseHerbsDoseQuantity; + private BigDecimal chineseHerbsDoseQuantity; /** * 代煎标识 | 0:否 , 1:是 diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationDispenseServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationDispenseServiceImpl.java index 70650d68..418aed20 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationDispenseServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationDispenseServiceImpl.java @@ -1,5 +1,6 @@ package com.openhis.medication.service.impl; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Date; @@ -75,7 +76,7 @@ public class MedicationDispenseServiceImpl extends ServiceImpl selectByRequestIdList(List requestIdList){ - return baseMapper.selectList( new LambdaQueryWrapper().in(MedicationDispense::getMedReqId, requestIdList) - .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); + public List selectByRequestIdList(List requestIdList) { + return baseMapper + .selectList(new LambdaQueryWrapper().in(MedicationDispense::getMedReqId, requestIdList) + .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); } /** @@ -188,8 +191,8 @@ public class MedicationDispenseServiceImpl extends ServiceImpl selectByIdList(@Param("idList") List idList){ - return baseMapper.selectList( new LambdaQueryWrapper().in(MedicationDispense::getId, idList) + public List selectByIdList(@Param("idList") List idList) { + return baseMapper.selectList(new LambdaQueryWrapper().in(MedicationDispense::getId, idList) .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); } @@ -199,7 +202,7 @@ public class MedicationDispenseServiceImpl extends ServiceImpl medDispenseId){ + public void updateDispenseStatusSummarized(List medDispenseId) { baseMapper.update(null, new LambdaUpdateWrapper() .set(MedicationDispense::getStatusEnum, DispenseStatus.SUMMARIZED.getValue()) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/domain/ActivityDevice.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/domain/ActivityDevice.java index 88aea899..b09337d9 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/domain/ActivityDevice.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/domain/ActivityDevice.java @@ -10,6 +10,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import java.math.BigDecimal; + @Data @TableName("tmp_activity_device") @Accessors(chain = true) @@ -38,11 +40,16 @@ public class ActivityDevice extends HisBaseEntity { private String devActTable; /** 耗材数量 */ - private Integer quantity; + private BigDecimal quantity; /** 状态 */ private Integer statusEnum; + /** + * 单位 + */ + private String unitCode; + public ActivityDevice() { this.statusEnum = PublicationStatus.ACTIVE.getValue(); } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/domain/OrdersGroupPackage.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/domain/OrdersGroupPackage.java new file mode 100644 index 00000000..30e5a1aa --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/domain/OrdersGroupPackage.java @@ -0,0 +1,42 @@ +package com.openhis.template.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.core.common.core.domain.HisBaseEntity; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +@Data +@TableName("tmp_orders_group_package") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class OrdersGroupPackage extends HisBaseEntity { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + /** + * 名称 + */ + private String name; + + /** + * 组套包类型 + */ + private Integer packageTypeEnum; + + /** + * 科室id + */ + private Long organizationId; + + /** + * 参与者id + */ + private Long practitionerId; + +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/domain/OrdersGroupPackageDetail.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/domain/OrdersGroupPackageDetail.java new file mode 100644 index 00000000..75eff0fa --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/domain/OrdersGroupPackageDetail.java @@ -0,0 +1,49 @@ +package com.openhis.template.domain; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.core.common.core.domain.HisBaseEntity; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +@Data +@TableName("tmp_orders_group_package_detail") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class OrdersGroupPackageDetail extends HisBaseEntity { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + /** + * 组合套餐id + */ + private Long groupPackageId; + + /** + * 医嘱定义id + */ + private Long orderDefinitionId; + + /** + * 医嘱定义表名 + */ + private String orderDefinitionTable; + + /** + * 数量 + */ + private BigDecimal quantity; + + /** + * 单位 + */ + private String unitCode; + +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/mapper/OrdersGroupPackageDetailMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/mapper/OrdersGroupPackageDetailMapper.java new file mode 100644 index 00000000..b7f29412 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/mapper/OrdersGroupPackageDetailMapper.java @@ -0,0 +1,16 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.template.mapper; + +import org.springframework.stereotype.Repository; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.openhis.template.domain.OrdersGroupPackageDetail; + +/** + * @author zwh + * @date 2025-04-09 + */ +@Repository +public interface OrdersGroupPackageDetailMapper extends BaseMapper {} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/mapper/OrdersGroupPackageMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/mapper/OrdersGroupPackageMapper.java new file mode 100644 index 00000000..cc739c46 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/mapper/OrdersGroupPackageMapper.java @@ -0,0 +1,16 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.template.mapper; + +import org.springframework.stereotype.Repository; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.openhis.template.domain.OrdersGroupPackage; + +/** + * @author zwh + * @date 2025-04-09 + */ +@Repository +public interface OrdersGroupPackageMapper extends BaseMapper {} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/service/IOrdersGroupPackageDetailService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/service/IOrdersGroupPackageDetailService.java new file mode 100644 index 00000000..229c0d4f --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/service/IOrdersGroupPackageDetailService.java @@ -0,0 +1,11 @@ +package com.openhis.template.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.openhis.template.domain.OrdersGroupPackageDetail; + +/** + * + * @author yangmo + * @date 2025-04-10 + */ +public interface IOrdersGroupPackageDetailService extends IService {} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/service/IOrdersGroupPackageService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/service/IOrdersGroupPackageService.java new file mode 100644 index 00000000..22e971b0 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/service/IOrdersGroupPackageService.java @@ -0,0 +1,11 @@ +package com.openhis.template.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.openhis.template.domain.OrdersGroupPackage; + +/** + * + * @author yangmo + * @date 2025-04-10 + */ +public interface IOrdersGroupPackageService extends IService {} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/service/impl/OrdersGroupPackageDetailServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/service/impl/OrdersGroupPackageDetailServiceImpl.java new file mode 100644 index 00000000..52a805cf --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/service/impl/OrdersGroupPackageDetailServiceImpl.java @@ -0,0 +1,20 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.template.service.impl; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.openhis.template.domain.OrdersGroupPackageDetail; +import com.openhis.template.mapper.OrdersGroupPackageDetailMapper; +import com.openhis.template.service.IOrdersGroupPackageDetailService; + +/** + * + * @author yangmo + * @date 2025-04-10 + */ +@Service +public class OrdersGroupPackageDetailServiceImpl extends + ServiceImpl implements IOrdersGroupPackageDetailService {} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/service/impl/OrdersGroupPackageServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/service/impl/OrdersGroupPackageServiceImpl.java new file mode 100644 index 00000000..9e26cbab --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/service/impl/OrdersGroupPackageServiceImpl.java @@ -0,0 +1,20 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.template.service.impl; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.openhis.template.domain.OrdersGroupPackage; +import com.openhis.template.mapper.OrdersGroupPackageMapper; +import com.openhis.template.service.IOrdersGroupPackageService; + +/** + * + * @author yangmo + * @date 2025-04-10 + */ +@Service +public class OrdersGroupPackageServiceImpl extends ServiceImpl + implements IOrdersGroupPackageService {} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/DeviceDispense.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/DeviceDispense.java index 16730e33..d7e01ee2 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/DeviceDispense.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/DeviceDispense.java @@ -8,6 +8,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import java.math.BigDecimal; import java.util.Date; /** @@ -48,7 +49,7 @@ public class DeviceDispense extends HisBaseEntity { private Integer dispenseCategoryEnum; /** 发放数量 */ - private Integer quantity; + private BigDecimal quantity; /** 发放单位 */ private String unitCode; @@ -78,11 +79,14 @@ public class DeviceDispense extends HisBaseEntity { private String partTypeCode; /** 已发药数量 */ - private Integer dispenseQuantity; + private BigDecimal dispenseQuantity; /** 发药频次 */ private String dispenseFrequencyCode; + /** 配药人 */ + private Long preparerId; + /** 配药时间 */ private Date prepareTime; diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/DeviceRequest.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/DeviceRequest.java index 2dac37b1..e12de642 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/DeviceRequest.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/DeviceRequest.java @@ -62,7 +62,7 @@ public class DeviceRequest extends HisBaseEntity { private String deviceTypeCode; /** 请求数量 */ - private Integer quantity; + private BigDecimal quantity; /** 请求单位编码 */ private String unitCode; diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/ServiceRequest.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/ServiceRequest.java index 41df9982..39b62958 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/ServiceRequest.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/ServiceRequest.java @@ -1,5 +1,6 @@ package com.openhis.workflow.domain; +import java.math.BigDecimal; import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; @@ -64,7 +65,7 @@ public class ServiceRequest extends HisBaseEntity { private Long activityId; /** 数量 */ - private Integer quantity; + private BigDecimal quantity; /** 单位 */ private String unitCode; @@ -152,4 +153,14 @@ public class ServiceRequest extends HisBaseEntity { */ private String signCode; + /** + * 用药频次 + */ + private String rateCode; + + /** + * 父id | 适用诊疗套餐 + */ + private Long parentId; + } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/mapper/ActivityDefinitionMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/mapper/ActivityDefinitionMapper.java index db87b281..b709cbbc 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/mapper/ActivityDefinitionMapper.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/mapper/ActivityDefinitionMapper.java @@ -21,7 +21,7 @@ public interface ActivityDefinitionMapper extends BaseMapper * @param activityName 诊疗名称 * @return 诊疗定义id */ - Long getAppointActivityDefinitionId(@Param("skinTestInspection") String skinTestInspection, + Long getAppointActivityDefinitionId(@Param("activityName") String activityName, @Param("status") Integer status); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IDeviceDispenseService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IDeviceDispenseService.java index 64dca4f4..0bf43470 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IDeviceDispenseService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IDeviceDispenseService.java @@ -1,5 +1,6 @@ package com.openhis.workflow.service; +import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -61,7 +62,7 @@ public interface IDeviceDispenseService extends IService { * @param quantity 发药数量 */ DeviceDispense createCompletedDeviceDispense(DeviceDispense deviceDispense, Date now, Practitioner loginUser, - String step, Integer quantity); + String step, BigDecimal quantity); /** * 器材发放状态:已发药 diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/DeviceDispenseServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/DeviceDispenseServiceImpl.java index 61c329be..d30d3a92 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/DeviceDispenseServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/DeviceDispenseServiceImpl.java @@ -1,5 +1,6 @@ package com.openhis.workflow.service.impl; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Date; @@ -76,7 +77,7 @@ public class DeviceDispenseServiceImpl extends ServiceImpl encounterLocationList = iEncounterLocationService.getEncounterLocationList(encounterId, - LocationForm.BED, EncounterLocationStatus.ACTIVE); + LocationForm.BED, EncounterActivityStatus.ACTIVE); if (encounterLocationList.isEmpty()) { throw new ServiceException("未查询到床位信息"); } @@ -2364,7 +2396,7 @@ public class YbDao { } List encounterLocationList = iEncounterLocationService.getEncounterLocationList(encounterId, - LocationForm.BED, EncounterLocationStatus.ACTIVE); + LocationForm.BED, EncounterActivityStatus.ACTIVE); if (encounterLocationList.isEmpty()) { throw new ServiceException("未查询到床位信息"); } @@ -2558,7 +2590,7 @@ public class YbDao { } List encounterLocationList = iEncounterLocationService.getEncounterLocationList(encounterId, - LocationForm.BED, EncounterLocationStatus.ACTIVE); + LocationForm.BED, EncounterActivityStatus.ACTIVE); if (encounterLocationList.isEmpty()) { throw new ServiceException("未查询到床位信息"); } @@ -2719,4 +2751,28 @@ public class YbDao { return yb2405InputInpatient; } + /** + * 【5205】结果 + * + * @param patientId 患者id + * @param begntime 开始时间 + * @param endtime 结束时间 + * @return 5205结果 + */ + public Yb5205InputSpecialDisease yb5205SpecialDiseaseDrugRecordSearch(Long patientId, Date begntime, Date endtime) { + + Patient patient = iPatientService.getById(patientId); + if (patient == null) { + throw new ServiceException("未查询到患者信息"); + } + InfoPerson perInfoByIdCard = iPerinfoService.getPerInfoByIdCard(patient.getIdCard(), patient.getTenantId()); + if (perInfoByIdCard == null) { + throw new ServiceException("未查询到患者医保读卡信息"); + } + + Yb5205InputSpecialDisease yb5205InputSpecialDisease = new Yb5205InputSpecialDisease(); + yb5205InputSpecialDisease.setBegntime(begntime).setEndtime(endtime).setPsnNo(perInfoByIdCard.getPsnNo()); + + return yb5205InputSpecialDisease; + } } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbHttpUtils.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbHttpUtils.java index 738f395b..6b2cf249 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbHttpUtils.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbHttpUtils.java @@ -71,7 +71,7 @@ public class YbHttpUtils { Logger logger = LoggerFactory.getLogger(YbHttpUtils.class); public Info1101Output getPerInfo(Info1101ReadcardParam readcard) { - // 省名参数 + // 声明参数 Result result = null; Info1101Output perinfo = null; // 发送请求 @@ -1014,4 +1014,38 @@ public class YbHttpUtils { } return null; } + + /** + * 【5205】人员慢特病用药记录查询 + * + * @param yb5205InputSpecialDisease + * @return + */ + public List + yb5205SpecialDiseaseDrugRecordSearch(Yb5205InputSpecialDisease yb5205InputSpecialDisease) { + String resultString = + httpPost(SecurityUtils.getLoginUser().getOptionJson().getString("ybUrl") + "/spe-disease-record-search", + yb5205InputSpecialDisease, null); + if (StringUtils.isEmpty(resultString)) { + throw new ServiceException("未接收到医保返回参数"); + } + System.out.println("【5205】返回参数:" + JSON.toJSONString(resultString)); + logger.info("【5205】返回参数:" + resultString); + ObjectMapper mapper = new ObjectMapper(); + Result result = null; + try { + result = mapper.readValue(resultString, Result.class); + if (result == null) { + throw new ServiceException("未接收到医保返回参数"); + } else if (result.getCode() == 200) { + System.out.println(result.getResult().toString()); + return JSON.parseArray(result.getResult().toString(), Yb5205OutputSpecialDisease.class); + } else { + throw new ServiceException(result.getMessage()); + } + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + return null; + } } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbManager.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbManager.java index 32978c77..a27c02d2 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbManager.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbManager.java @@ -510,6 +510,34 @@ public class YbManager { throw new ServiceException("药品对照失败"); } + /** + * 【3301】目录对照(药品) + * + * @param categoryCode 药品分类 + * @param busNo 药品编号 + * @param name 药品编号 + * @param ybNo 医保编码 + */ + public R directoryCheckMedication(String categoryCode, String busNo, String name, String ybNo) { + MedicalDirectory3302Param medicalDirectory3302Param = + ybBaseService.getMedicalDirectory3302ParamMedication(categoryCode, busNo, ybNo); + Result result3302Info = ybHttpService.directoryUnCheck(medicalDirectory3302Param); + if (!result3302Info.getCode().equals(CommonConstant.SC_OK_200)) { + return R.fail("目录对照前,撤销对照失败"); + } + MedicalDirectory3301Param medicalDirectory3301Param = + ybBaseService.getMedicalDirectory3301ParamMedication(categoryCode, busNo, name, ybNo); + ArrayList list = new ArrayList<>(); + list.add(medicalDirectory3301Param); + MedicalDirectory3301ListParam medicalDirectory3301ListParam = new MedicalDirectory3301ListParam(); + medicalDirectory3301ListParam.setData(list); + Result resultInfo = ybHttpService.directoryCheck(medicalDirectory3301ListParam); + if (!resultInfo.getCode().equals(CommonConstant.SC_OK_200)) { + return R.fail("药品对照失败"); + } + return R.ok(); + } + /** * 【3302】目录对照撤销 * @@ -915,9 +943,9 @@ public class YbManager { .setFeeOcurTime(chargeItemBaseInfoDto.getEnteredDate()).setMedListCodg(chargeItemBaseInfoDto.getYbNo()) .setMedinsListCodg(chargeItemBaseInfoDto.getBaseBusNo()) .setDetItemFeeSumamt(chargeItemBaseInfoDto.getTotalPrice()) - .setCnt(new BigDecimal(chargeItemBaseInfoDto.getQuantityValue())) - .setPric(chargeItemBaseInfoDto.getUnitPrice()).setBilgDeptName(chargeItemBaseInfoDto.getDeptName()) - .setBilgDrName(chargeItemBaseInfoDto.getDoctName()).setBilgDeptCodg(chargeItemBaseInfoDto.getDeptYbNo()) + .setCnt(chargeItemBaseInfoDto.getQuantityValue()).setPric(chargeItemBaseInfoDto.getUnitPrice()) + .setBilgDeptName(chargeItemBaseInfoDto.getDeptName()).setBilgDrName(chargeItemBaseInfoDto.getDoctName()) + .setBilgDeptCodg(chargeItemBaseInfoDto.getDeptYbNo()) .setBilgDrCodg(chargeItemBaseInfoDto.getDoctYbNo()); yb2301InputFeeDetailList.add(yb2301InputFeeDetail); diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/util/YbParamBuilderUtil.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/util/YbParamBuilderUtil.java index 5efc4211..8243ee86 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/util/YbParamBuilderUtil.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/util/YbParamBuilderUtil.java @@ -15,12 +15,14 @@ import org.springframework.stereotype.Component; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.core.common.core.domain.model.LoginUser; +import com.core.common.enums.TenantOptionDict; import com.core.common.exception.ServiceException; import com.core.common.utils.AssignSeqUtil; import com.core.common.utils.DateUtils; import com.core.common.utils.SecurityUtils; import com.core.common.utils.StringUtils; import com.core.system.service.impl.SysUserServiceImpl; +import com.core.web.util.TenantOptionUtil; import com.openhis.administration.domain.*; import com.openhis.administration.service.*; import com.openhis.clinical.domain.Condition; @@ -268,7 +270,8 @@ public class YbParamBuilderUtil { List encounterDiagnosis = iEncounterDiagnosisService.list(new LambdaQueryWrapper() .eq(EncounterDiagnosis::getEncounterId, encounterId).eq(EncounterDiagnosis::getTenantId, tenantId) - .eq(EncounterDiagnosis::getMedTypeCode, ybMedType.getValue()));// 2025/08/05 农大患者结算慢病时会上传普通门诊的疾病,医保回复该参保人未做该病种的门慢门特备案,故此修正根据门诊类型去上传 + .eq(EncounterDiagnosis::getMedTypeCode, ybMedType.getValue()));// 2025/08/05 + // 农大患者结算慢病时会上传普通门诊的疾病,医保回复该参保人未做该病种的门慢门特备案,故此修正根据门诊类型去上传 for (EncounterDiagnosis diagnosis : encounterDiagnosis) { if (Objects.equals(Whether.YES.getValue(), diagnosis.getMaindiseFlag())) { mainEncounterDiagnosis = diagnosis; @@ -1219,6 +1222,32 @@ public class YbParamBuilderUtil { return medicalDirectory3301Param; } + /** + * 【3301】医保目录对照参数作成(药品) + * + * @param categoryCode 药品分类 + * @param busNo 药品编号 + * @param name 药品编号 + * @param ybNo 医保编码 + * @return 医保目录对照参数 + */ + public MedicalDirectory3301Param getMedicalDirectory3301ParamMedication(String categoryCode, String busNo, + String name, String ybNo) { + String listType; + if (MedCategoryCode.TRADITIONAL_CHINESE_MEDICINE.getValue().equals(categoryCode) + || MedCategoryCode.WESTERN_MEDICINE.getValue().equals(categoryCode)) { + listType = YbListType.WESTERN_AND_CHINESE_PATENT_MEDICINE.getValue(); + } else if (MedCategoryCode.CHINESE_HERBAL_MEDICINE.getValue().equals(categoryCode)) { + listType = YbListType.IMPORTANT_HERBAL_SLICES.getValue(); + } else { + throw new ServiceException("无效的目录类别"); + } + return new MedicalDirectory3301Param().setFixmedinsHilistId(busNo).setFixmedinsHilistName(name) + .setListType(listType).setMedListCodg(ybNo) + .setBegndate(DateUtils.dateTimeNow(YbCommonConstants.constants.YYYY_MM_DD)) + .setEnddate(YbCommonConstants.constants.END_TIME); + } + /** * 【3302】医保目录对照撤销 * @@ -1289,6 +1318,30 @@ public class YbParamBuilderUtil { return medicalDirectory3302Param; } + /** + * 【3302】医保目录对照撤销参数作成(药品) + * + * @param categoryCode 药品分类 + * @param busNo 药品编号 + * @param ybNo 医保编码 + * @return 医保目录对照撤销参数 + */ + public MedicalDirectory3302Param getMedicalDirectory3302ParamMedication(String categoryCode, String busNo, + String ybNo) { + String listType; + if (MedCategoryCode.TRADITIONAL_CHINESE_MEDICINE.getValue().equals(categoryCode) + || MedCategoryCode.WESTERN_MEDICINE.getValue().equals(categoryCode)) { + listType = YbListType.WESTERN_AND_CHINESE_PATENT_MEDICINE.getValue(); + } else if (MedCategoryCode.CHINESE_HERBAL_MEDICINE.getValue().equals(categoryCode)) { + listType = YbListType.IMPORTANT_HERBAL_SLICES.getValue(); + } else { + throw new ServiceException("无效的目录类别"); + } + return new MedicalDirectory3302Param().setFixmedinsHilistId(busNo) + .setFixmedinsCode(TenantOptionUtil.getOptionContent(TenantOptionDict.FIXMEDINS_CODE)).setListType(listType) + .setMedListCodg(ybNo); + } + /** * * @param clearing3205AWebParma [3205]前台传参 @@ -1824,9 +1877,9 @@ public class YbParamBuilderUtil { .setPharPracCertNo(medDoctor.getPharPracCertNo()).setPsnCertType(mdtrtCertType.getValue()) .setManuLotnum(deviceDispense.getLotNumber()).setManuDate(inventoryItem.getProductionDate()) .setTrdnFlag(flag.getCode()).setRtalDocno(invoice.getId().toString()) - .setSelRetnCnt(new BigDecimal(deviceDispense.getQuantity())) - .setSelRetnTime(deviceDispense.getDispenseTime()).setSelRetnOpterName(performer.getName()) - .setRxFlag(deviceDefinition.getRxFlag().toString()).setExpyEnd(inventoryItem.getExpirationDate()); + .setSelRetnCnt(deviceDispense.getQuantity()).setSelRetnTime(deviceDispense.getDispenseTime()) + .setSelRetnOpterName(performer.getName()).setRxFlag(deviceDefinition.getRxFlag().toString()) + .setExpyEnd(inventoryItem.getExpirationDate()); // 溯源码 SupplyDelivery supplyDelivery = iSupplyDeliveryService.getOne( @@ -2315,6 +2368,10 @@ public class YbParamBuilderUtil { if (jsonObj != null && jsonObj.get("insuplc_admdvs") != null) { baseInfo.setInsuplcAdmdvs(String.valueOf(jsonObj.get("insuplc_admdvs"))); } + // 异地患者问题 + // if (contract.getBusNo() != null) { + // baseInfo.setInsuplcAdmdvs(contract.getBusNo()); + // } if (jsonObj != null && jsonObj.get("decrypt_flag") != null) { baseInfo.setDecryptFlag(String.valueOf(jsonObj.get("decrypt_flag"))); } else { diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/ybcatalog/service/impl/CatalogDrugInfoUsualServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/ybcatalog/service/impl/CatalogDrugInfoUsualServiceImpl.java index 74d05263..0c19a2f6 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/ybcatalog/service/impl/CatalogDrugInfoUsualServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/ybcatalog/service/impl/CatalogDrugInfoUsualServiceImpl.java @@ -16,15 +16,20 @@ import com.openhis.ybcatalog.service.ICatalogDrugInfoUsualService; * @date 2025-07-02 */ @Service -public class CatalogDrugInfoUsualServiceImpl extends ServiceImpl implements ICatalogDrugInfoUsualService { +public class CatalogDrugInfoUsualServiceImpl extends ServiceImpl + implements ICatalogDrugInfoUsualService { /** * 获取药品信息 */ @Override - public Page selectCatalogDrugInfoUsual(Integer pageNo, - Integer pageSize, String searchKey) { + public Page selectCatalogDrugInfoUsual(Integer pageNo, Integer pageSize, String searchKey) { Page page = new Page<>(pageNo, pageSize); - return (baseMapper.selectPage(page, new LambdaQueryWrapper().like(CatalogDrugInfoUsual::getRegisteredName, searchKey).or().like(CatalogDrugInfoUsual::getPinyinCode, searchKey).or().like(CatalogDrugInfoUsual::getWubiCode, searchKey).or().like(CatalogDrugInfoUsual::getApprovalNo, searchKey))); + return (baseMapper.selectPage(page, + new LambdaQueryWrapper().like(CatalogDrugInfoUsual::getRegisteredName, searchKey).or() + .like(CatalogDrugInfoUsual::getPinyinCode, searchKey).or() + .like(CatalogDrugInfoUsual::getWubiCode, searchKey).or() + .like(CatalogDrugInfoUsual::getApprovalNo, searchKey).or() + .like(CatalogDrugInfoUsual::getManufacturerName, searchKey))); } } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/ChargeItemMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/ChargeItemMapper.xml index 66571042..78fabb21 100644 --- a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/ChargeItemMapper.xml +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/ChargeItemMapper.xml @@ -68,11 +68,26 @@ org.yb_no as dept_yb_no, pra."name" as doct_name, pra.yb_no as doct_yb_no, - contract.bus_no as contract_no + contract.bus_no as contract_no, + T2.charge_name, + T2.title, + T2.status_enum, + T2.org_id, + T2.description, + T2.instance_table, + T2.instance_id, + T2.effective_start, + T2.effective_end, + T2.type_code, + T2.yb_type, + T2.condition_flag, + T2.price -- 添加更多需要的字段 FROM adm_charge_item a LEFT JOIN + adm_charge_item_definition T2 ON a.definition_id = T2.ID AND T2.delete_flag = '0' + LEFT JOIN med_medication_request b1 ON a.service_id = b1.id AND a.service_table = 'med_medication_request' LEFT JOIN wor_device_request b2 ON a.service_id = b2.id AND a.service_table = 'wor_device_request' @@ -171,5 +186,6 @@ #{itemId} + AND T1.delete_flag = '0' \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/financial/PaymentReconciliationMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/financial/PaymentReconciliationMapper.xml index 9d188044..b92d5095 100644 --- a/openhis-server-new/openhis-domain/src/main/resources/mapper/financial/PaymentReconciliationMapper.xml +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/financial/PaymentReconciliationMapper.xml @@ -4,4 +4,25 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/jlau/ReviewPrescriptionRecordsMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/jlau/ReviewPrescriptionRecordsMapper.xml new file mode 100644 index 00000000..b75994c9 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/jlau/ReviewPrescriptionRecordsMapper.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/template/OrdersGroupPackageDetailMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/template/OrdersGroupPackageDetailMapper.xml new file mode 100644 index 00000000..81ed8741 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/template/OrdersGroupPackageDetailMapper.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/template/OrdersGroupPackageMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/template/OrdersGroupPackageMapper.xml new file mode 100644 index 00000000..77e3ded8 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/template/OrdersGroupPackageMapper.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/workflow/ActivityDefinitionMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/workflow/ActivityDefinitionMapper.xml index 19c513ba..586740dc 100644 --- a/openhis-server-new/openhis-domain/src/main/resources/mapper/workflow/ActivityDefinitionMapper.xml +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/workflow/ActivityDefinitionMapper.xml @@ -9,7 +9,7 @@ FROM wor_activity_definition WHERE delete_flag = '0' AND status_enum = #{status} - AND NAME = #{skinTestInspection} LIMIT 1 + AND NAME = #{activityName} LIMIT 1 \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/yb/MedicalInsuranceMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/yb/MedicalInsuranceMapper.xml index 953bc9ce..951662fd 100644 --- a/openhis-server-new/openhis-domain/src/main/resources/mapper/yb/MedicalInsuranceMapper.xml +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/yb/MedicalInsuranceMapper.xml @@ -2,7 +2,7 @@ - SELECT sum(T1.tendered_amount) AS med_fee_sum_amt, sum(case when T5.pay_enum = #{ybFund} THEN T5.amount ELSE 0 END) AS fund_pay_sum_amt, sum(case when T5.pay_enum = #{zhPay} THEN T5.amount ELSE 0 END) AS acct_Pay, @@ -21,7 +21,7 @@ AND T1.tenant_id = #{tenantId} GROUP BY t1.id - SELECT sum(T1.tendered_amount) AS med_fee_sum_amt, sum(case when T5.pay_enum = #{ybFund} THEN T5.amount ELSE 0 END) AS fund_pay_sum_amt, sum(case when T5.pay_enum = #{zhPay} THEN T5.amount ELSE 0 END) AS acct_pay, @@ -43,7 +43,7 @@ AND T1.tenant_id = #{tenantId} GROUP BY t1.id - SELECT sum(T1.tendered_amount) AS med_fee_sum_amt, sum(case when T5.pay_enum = #{ybFund} THEN T5.amount ELSE 0 END) AS fund_pay_sum_amt, sum(case when T5.pay_enum = #{zhPay} THEN T5.amount ELSE 0 END) AS acct_pay, @@ -68,7 +68,7 @@ GROUP BY t1.id - SELECT T2.insutype, T4.clr_optins, @@ -122,7 +122,8 @@ t1.result_enum, t2.contract_no, t5.insutype, - t5.med_type + t5.med_type, + t7.medfee_sumamt FROM fin_payment_rec_detail t1 LEFT JOIN adm_account t2 on t1.account_id = t2.id @@ -130,6 +131,7 @@ LEFT JOIN adm_encounter t4 on t2.encounter_id = t4.id LEFT JOIN yb_clinc_reg t5 on t4.bus_no = t5.ipt_otp_no AND t4.delete_flag = '0' LEFT JOIN fin_payment_reconciliation t6 on t6.id = t1.reconciliation_id AND t6.delete_flag = '0' + LEFT JOIN yb_clinc_settle t7 on t1.pay_trans_text = t7.setl_id WHERE 1=1 AND t6.bill_date > #{startTime}