From 6f846f5410912a16eba4a95259579b1e1839ad26 Mon Sep 17 00:00:00 2001 From: abing <410174833@qq.com> Date: Fri, 13 Jun 2025 11:40:16 +0800 Subject: [PATCH 1/9] v0.2 --- .../system/SysTenantController.java | 198 + .../system/SysTenantOptionController.java | 139 + .../com/core/common/enums/DeleteFlag.java | 26 + .../core/common/enums/TenantOptionDict.java | 193 + .../com/core/common/enums/TenantStatus.java | 26 + .../core/framework/config/TenantContext.java | 20 + .../com/core/system/domain/SysTenant.java | 79 + .../core/system/domain/SysTenantOption.java | 75 + .../com/core/system/domain/SysUserTenant.java | 41 + .../system/domain/dto/SysTenantOptionDto.java | 32 + .../core/system/mapper/SysTenantMapper.java | 16 + .../system/mapper/SysTenantOptionMapper.java | 16 + .../system/mapper/SysUserTenantMapper.java | 16 + .../service/ISysTenantOptionService.java | 62 + .../system/service/ISysTenantService.java | 114 + .../system/service/ISysUserTenantService.java | 13 + .../impl/SysTenantOptionServiceImpl.java | 144 + .../service/impl/SysTenantServiceImpl.java | 384 ++ .../impl/SysUserTenantServiceImpl.java | 19 + .../mapper/system/SysTenantMapper.xml | 7 + .../mapper/system/SysTenantOptionMapper.xml | 7 + .../mapper/system/SysUserTenantMapper.xml | 7 + .../java/com/openhis/config/HttpConfig.java | 24 + .../quartz/controller/SysJobController.java | 154 + .../controller/SysJobLogController.java | 83 + .../quartz/service/ISysJobLogService.java | 56 + .../quartz/service/ISysJobService.java | 103 + .../service/impl/SysJobLogServiceImpl.java | 82 + .../service/impl/SysJobServiceImpl.java | 238 + .../com/openhis/quartz/task/ExampleTask.java | 35 + .../java/com/openhis/quartz/task/RyTask.java | 47 + .../quartz/util/AbstractQuartzJob.java | 98 + .../QuartzDisallowConcurrentExecution.java | 21 + .../quartz/util/QuartzJobExecution.java | 19 + .../openhis/quartz/util/ScheduleUtils.java | 123 + .../controller/LocationController.java | 121 + .../dto/LocationAddOrEditDto.java | 42 + .../web/basedatamanage/dto/LocationDto.java | 85 + .../basedatamanage/dto/LocationInfoDto.java | 52 + .../basedatamanage/dto/LocationInitDto.java | 36 + .../basedatamanage/dto/LocationPageParam.java | 37 + .../basedatamanage/dto/OrganizationDto.java | 63 + .../basedatamanage/dto/SelectableOrgDto.java | 28 + .../appservice/ICatalogService.java | 23 + .../appservice/impl/CatalogServiceImpl.java | 296 + .../controller/CatalogController.java | 58 + .../catalogmanage/mapper/CatalogMapper.java | 38 + .../IOutpatientPricingAppService.java | 46 + .../impl/OutpatientPricingAppServiceImpl.java | 72 + .../OutpatientPricingController.java | 71 + .../dto/EncounterPatientRefundDto.java | 105 + .../web/chargemanage/dto/OrgMetadata.java | 27 + .../dto/OutpatientPricingInventoryDto.java | 53 + .../dto/OutpatientPricingPriceDto.java | 46 + .../OutpatientRegistrationSettleParam.java | 22 + .../chargemanage/dto/PricingProjectDto.java | 150 + .../web/chargemanage/dto/RefundItemParam.java | 28 + .../mapper/OutpatientPricingAppMapper.java | 17 + .../web/common/appservice/ICommonService.java | 96 + .../appservice/impl/CommonServiceImpl.java | 294 + .../controller/CommonAppController.java | 146 + .../web/common/dto/InventoryItemDto.java | 110 + .../web/common/dto/InventoryItemParam.java | 47 + .../openhis/web/common/dto/LocationDto.java | 80 + .../web/common/dto/LocationInventoryDto.java | 80 + .../com/openhis/web/common/dto/UnitDto.java | 30 + .../web/common/dto/UnitQuantityDto.java | 26 + .../web/common/mapper/CommonAppMapper.java | 60 + .../appservice/IDiagTreatMAppService.java | 78 + .../appservice/ItemDefinitionAppService.java | 46 + .../impl/DiagTreatMAppServiceImpl.java | 390 ++ .../impl/ItemDefinitionAppServiceImpl.java | 106 + .../dto/ActivityChildJsonDto.java | 25 + .../dto/ItemDefinitionDetailDto.java | 32 + .../dto/ItemDefinitionInitDto.java | 46 + .../mapper/ItemDefinitionAppMapper.java | 49 + .../IDoctorStationAllergyIntolAppService.java | 52 + ...DoctorStationChineseMedicalAppService.java | 80 + ...IDoctorStationElepPrescriptionService.java | 94 + .../IDoctorStationPtDetailsAppService.java | 21 + ...ctorStationAllergyIntolAppServiceImpl.java | 195 + ...orStationChineseMedicalAppServiceImpl.java | 290 + ...torStationElepPrescriptionServiceImpl.java | 407 ++ .../DoctorStationPtDetailsAppServiceImpl.java | 83 + .../DoctorStationAllergyIntolController.java | 81 + ...DoctorStationChineseMedicalController.java | 120 + ...ctorStationElepPrescriptionController.java | 142 + .../DoctorStationPtDetailsController.java | 45 + .../doctorstation/dto/AllergyIntoInfoDto.java | 91 + .../doctorstation/dto/AllergyIntoInitDto.java | 41 + .../dto/DeletePrescriptionInfoParam.java | 23 + .../dto/ElepMedicationInfoDto.java | 63 + .../dto/ElepPrescriptionInfoDto.java | 52 + .../dto/ElepPrescriptionInfoParam.java | 112 + .../dto/ElepPrescriptionInitDto.java | 36 + .../dto/EncounterContractDto.java | 28 + .../doctorstation/dto/PatientDetailsDto.java | 168 + .../web/doctorstation/dto/RequestBaseDto.java | 155 + .../web/doctorstation/dto/UpdateGroupDto.java | 28 + .../doctorstation/dto/UpdateGroupIdParam.java | 20 + .../DoctorStationChineseMedicalAppMapper.java | 24 + .../DoctorStationElepPrescriptionMapper.java | 39 + .../DoctorStationPtDetailsAppMapper.java | 36 + .../web/doctorstation/utils/AdviceUtils.java | 119 + .../utils/PrescriptionUtils.java | 162 + .../appservice/IAdmissionAppService.java | 60 + .../appservice/IDepositAppService.java | 43 + .../impl/AdmissionAppServiceImpl.java | 273 + .../impl/DepositAppServiceImpl.java | 262 + .../controller/DepositController.java | 69 + .../dto/AdmissionSearchParam.java | 17 + .../inpatientmanage/dto/AdmissionUpDto.java | 179 + .../inpatientmanage/dto/DepositDetailDto.java | 98 + .../dto/DepositInitPageDto.java | 21 + .../dto/DepositSearchParam.java | 20 + .../mapper/AdmissionMapper.java | 50 + .../inpatientmanage/mapper/DepositMapper.java | 32 + .../appservice/ILossReportFormAppService.java | 89 + .../appservice/IProductDetailsAppService.java | 52 + .../appservice/IPurchaseReturnAppService.java | 82 + .../IRequisitionIssueAppService.java | 90 + .../appservice/IReturnIssueAppService.java | 88 + .../impl/LossReportFormAppServiceImpl.java | 323 + .../impl/ProductDetailsAppServiceImpl.java | 200 + .../impl/PurchaseReturnAppServiceImpl.java | 242 + .../impl/RequisitionIssueAppServiceImpl.java | 264 + .../impl/ReturnIssueAppServiceImpl.java | 266 + .../controller/LossReportFormController.java | 128 + .../controller/ProductDetailsController.java | 78 + .../controller/PurchaseReturnController.java | 118 + .../RequisitionIssueController.java | 127 + .../controller/ReturnIssueController.java | 124 + .../dto/BatchTransferSearchParam.java | 31 + .../dto/InventoryDetailsPageDto.java | 139 + .../dto/InventoryDetailsSearchParam.java | 45 + .../dto/IssueDepartmentDto.java | 36 + .../inventorymanage/dto/IssueDetailDto.java | 159 + .../web/inventorymanage/dto/IssueDto.java | 118 + .../web/inventorymanage/dto/IssueInitDto.java | 110 + .../web/inventorymanage/dto/IssuePageDto.java | 80 + .../inventorymanage/dto/IssueSearchParam.java | 42 + .../dto/LossReportFormDto.java | 108 + .../dto/LossReportFormInitDto.java | 92 + .../dto/LossReportFormPageDto.java | 65 + .../dto/LossReportSearchParam.java | 34 + .../dto/ProductDetailsInitDto.java | 34 + .../dto/ProductDetailsPageDto.java | 108 + .../dto/ProductDetailsSearchParam.java | 31 + .../dto/ProductStocktakingInitDto.java | 109 + .../dto/ProductStocktakingSearchParam.java | 38 + .../dto/PurchaseReturnDetailDto.java | 164 + .../dto/PurchaseReturnInitDto.java | 39 + .../dto/PurchaseReturnPageDto.java | 83 + .../dto/PurchaseReturnSearchParam.java | 31 + .../dto/StocktakingBatchSearchParam.java | 26 + .../mapper/LossReportFormMapper.java | 48 + .../mapper/ProductDetailsMapper.java | 34 + .../mapper/ProductStocktakingMapper.java | 66 + .../mapper/PurchaseReturnMapper.java | 46 + .../mapper/RequisitionIssueMapper.java | 52 + .../mapper/ReturnIssueMapper.java | 52 + .../INurseStationPendAdmAppService.java | 67 + .../NurseStationPendAdmAppServiceImpl.java | 271 + .../NurseStationPendAdmController.java | 112 + .../nursestation/dto/BedForAdmissionDto.java | 70 + .../dto/BedForAdmissionInitDto.java | 57 + .../nursestation/dto/PendingAdmissionDto.java | 133 + .../mapper/NurseStationPendAdmAppMapper.java | 39 + .../IOutpatientDisposalService.java | 74 + .../IOutpatientInfusionAppService.java | 82 + .../impl/OutpatientDisposalServiceImpl.java | 598 ++ .../OutpatientInfusionAppServiceImpl.java | 276 + .../OutpatientDisposalController.java | 115 + .../OutpatientInfusionController.java | 124 + .../OutpatientDisposalActivityInfoDto.java | 85 + .../dto/OutpatientDisposalDeviceInfoDto.java | 74 + ...utpatientDisposalEncounterInfoPageDto.java | 38 + .../dto/OutpatientDisposalExecuteInfoDto.java | 72 + .../dto/OutpatientDisposalInfoDto.java | 29 + .../dto/OutpatientDisposalInitDto.java | 38 + .../dto/OutpatientDisposalPatientInfoDto.java | 49 + .../dto/OutpatientDisposalTempInfoDto.java | 134 + .../dto/OutpatientInfusionInitDto.java | 35 + .../mapper/OutpatientDisposalMapper.java | 108 + .../mapper/OutpatientInfusionAppMapper.java | 87 + .../dto/PatientInfoSearchParam.java | 18 + .../appservice/IChargeBillService.java | 25 + .../appservice/IEleInvoiceService.java | 74 + .../appservice/IPaymentRecService.java | 93 + .../impl/EleInvoiceServiceImpl.java | 1571 +++++ .../impl/IChargeBillServiceImpl.java | 569 ++ .../impl/PaymentRecServiceImpl.java | 1770 +++++ .../controller/ChargeBillController.java | 50 + .../controller/EleInvoiceController.java | 105 + .../PaymentReconciliationController.java | 181 + .../paymentmanage/dto/CancelPaymentDto.java | 48 + .../dto/CancelRegPaymentDto.java | 53 + .../paymentmanage/dto/ChargeItemDetailVO.java | 31 + .../web/paymentmanage/dto/ChargeItemDto.java | 22 + .../paymentmanage/dto/ChargeItemGroupDto.java | 30 + .../dto/Clinic2206OrderResultDto.java | 91 + .../dto/Clinic2207OrderResultDto.java | 16 + .../dto/Clinic2207OrderResultInfoDto.java | 75 + .../dto/DispenseQuantityDto.java | 28 + .../dto/EleInvoiceChargeDetailDto.java | 37 + .../dto/EleInvoiceListDetailDto.java | 48 + .../dto/EleInvoicePatientInfoDto.java | 75 + .../dto/EleInvoicePaymentInfoDto.java | 65 + .../dto/EleInvoiceResultDto.java | 75 + .../paymentmanage/dto/InvoiceBaseInfoDto.java | 104 + .../web/paymentmanage/dto/MakeInvoiceDto.java | 9 + .../paymentmanage/dto/PaymentDetailDto.java | 34 + .../web/paymentmanage/dto/PaymentDto.java | 48 + .../paymentmanage/dto/PaymentSettleDto.java | 19 + .../web/paymentmanage/dto/PaymentVO.java | 92 + .../web/paymentmanage/dto/PrePaymentDto.java | 45 + .../web/paymentmanage/dto/ReportVo.java | 23 + .../web/paymentmanage/dto/ReturnBillVO.java | 16 + .../mapper/ChargeBillMapper.java | 10 + .../mapper/EleInvoiceMapper.java | 79 + .../paymentmanage/mapper/PaymentMapper.java | 76 + .../web/paymentmanage/util/MD5Util.java | 45 + .../appservice/IActivityDeviceAppService.java | 81 + .../appservice/IOrderGroupAppService.java | 51 + .../impl/ActivityDeviceAppServiceImpl.java | 176 + .../impl/IOrderGroupAppServiceImpl.java | 157 + .../controller/ActivityDeviceController.java | 121 + .../controller/OrderGroupController.java | 85 + .../dto/ActivityDeviceDto.java | 73 + .../dto/ActivityDeviceInitDto.java | 36 + .../personalization/dto/OrderGroupDto.java | 50 + .../dto/OrderGroupInitDto.java | 40 + .../mapper/ActivityDeviceAppMapper.java | 32 + .../mapper/OrderGroupAppMapper.java | 32 + .../IChineseMedicineDispenseAppService.java | 69 + .../IMedicationDetailsAppService.java | 75 + ...MedicineConsumablesDispenseAppService.java | 69 + .../IPendingMedicationDetailsAppService.java | 29 + .../appservice/ReturnMedicineAppService.java | 55 + ...ChineseMedicineDispenseAppServiceImpl.java | 329 + ...cineConsumablesDispenseAppServiceImpl.java | 326 + .../impl/MedicationDetailsAppServiceImpl.java | 120 + ...endingMedicationDetailsAppServiceImpl.java | 65 + .../impl/ReturnMedicineAppServiceImpl.java | 493 ++ .../ChineseMedicineDispenseController.java | 101 + .../MedicationDetailsController.java | 118 + ...MedicineConsumablesDispenseController.java | 110 + .../PendingMedicationDetailsController.java | 52 + .../controller/ReturnMedicineController.java | 85 + .../pharmacymanage/dto/DispenseInitDto.java | 80 + .../dto/DispenseMedicineDto.java | 41 + .../web/pharmacymanage/dto/InventoryDto.java | 51 + .../dto/MedDetailedAccountPageDto.java | 88 + .../pharmacymanage/dto/MedDetailsInitDto.java | 46 + .../dto/MedDetailsSearchParam.java | 41 + .../dto/MedRunningAccountPageDto.java | 81 + .../dto/PendingMedicationPageDto.java | 50 + .../dto/PendingMedicationSearchParam.java | 36 + .../pharmacymanage/dto/ReturnMedicineDto.java | 35 + .../dto/ReturnMedicineInfoDto.java | 75 + .../dto/ReturnMedicineInitDto.java | 61 + .../mapper/ChineseMedicineDispenseMapper.java | 53 + .../mapper/MedicationDetailsMapper.java | 50 + .../MedicineConsumablesDispenseMapper.java | 53 + .../PendingMedicationDetailsMapper.java | 31 + .../mapper/ReturnMedicineMapper.java | 83 + .../appservice/IChargeReportAppService.java | 37 + .../appservice/IInboundReportAppService.java | 38 + .../IInventoryProductReportAppService.java | 31 + .../appservice/ILossReportAppService.java | 32 + .../appservice/IOutboundReportAppService.java | 36 + .../appservice/IPrintReportAppService.java | 75 + .../appservice/IRegisterReportAppService.java | 38 + .../IReturnIssueReportAppService.java | 36 + .../IStocktakingReportAppService.java | 31 + .../appservice/ITransferReportAppService.java | 31 + .../PurchaseReturnReportAppService.java | 38 + .../impl/ChargeReportAppServiceImpl.java | 171 + .../impl/IPrintReportAppServiceImpl.java | 226 + .../impl/InboundReportAppServiceImpl.java | 96 + .../InventoryProductReportAppServiceImpl.java | 73 + .../impl/LossReportAppServiceImpl.java | 69 + .../impl/OutboundReportAppServiceImpl.java | 97 + .../PurchaseReturnReportAppServiceImpl.java | 94 + .../impl/RegisterReportAppServiceImpl.java | 106 + .../impl/ReturnIssueReportAppServiceImpl.java | 93 + .../impl/StocktakingReportAppServiceImpl.java | 73 + .../impl/TransferReportAppServiceImpl.java | 72 + .../controller/ChargeReportController.java | 59 + .../controller/InboundReportController.java | 61 + .../InventoryProductReportController.java | 52 + .../controller/LossReportController.java | 54 + .../controller/OutboundReportController.java | 61 + .../controller/PrintReportController.java | 121 + .../PurchaseReturnReportController.java | 61 + .../controller/RegisterReportController.java | 59 + .../ReturnIssueReportController.java | 61 + .../StocktakingReportController.java | 51 + .../controller/TransferReportController.java | 51 + .../web/reportmanage/dto/BottleLabelDto.java | 105 + .../reportmanage/dto/ChargeReportInitDto.java | 68 + .../reportmanage/dto/ChargeReportPageDto.java | 141 + .../dto/ChargeReportSearchParam.java | 58 + .../web/reportmanage/dto/CkInspAppDto.java | 83 + .../web/reportmanage/dto/DisposalDto.java | 86 + .../dto/InboundReportInitDto.java | 43 + .../dto/InboundReportPageDto.java | 83 + .../dto/InboundReportSearchParam.java | 38 + .../dto/InventoryProductReportPageDto.java | 93 + .../InventoryProductReportSearchParam.java | 41 + .../reportmanage/dto/LossReportPageDto.java | 56 + .../dto/LossReportSearchParam.java | 29 + .../dto/OutboundReportInitDto.java | 43 + .../dto/OutboundReportPageDto.java | 93 + .../dto/OutboundReportSearchParam.java | 42 + .../dto/OutpatientSettlementDto.java | 58 + .../dto/PrescriptionPrintDto.java | 136 + .../dto/PurchaseReturnReportInitDto.java | 43 + .../dto/PurchaseReturnReportPageDto.java | 81 + .../dto/PurchaseReturnReportSearchParam.java | 38 + .../dto/RegisterReportInitDto.java | 43 + .../dto/RegisterReportPageDto.java | 89 + .../dto/RegisterReportSearchParam.java | 26 + .../dto/ReturnIssueReportInitDto.java | 43 + .../dto/ReturnIssueReportPageDto.java | 92 + .../dto/ReturnIssueReportSearchParam.java | 39 + .../dto/StocktakingReportPageDto.java | 65 + .../dto/StocktakingReportSearchParam.java | 32 + .../dto/TransferReportPageDto.java | 104 + .../dto/TransferReportSearchParam.java | 35 + .../mapper/ChargeReportMapper.java | 43 + .../mapper/InboundReportMapper.java | 41 + .../mapper/InventoryProductReportMapper.java | 35 + .../reportmanage/mapper/LossReportMapper.java | 43 + .../mapper/OutboundReportMapper.java | 41 + .../mapper/PrintReportMapper.java | 68 + .../mapper/PurchaseReturnReportMapper.java | 41 + .../mapper/RegisterReportMapper.java | 40 + .../mapper/ReturnIssueReportMapper.java | 41 + .../mapper/StocktakingReportMapper.java | 43 + .../mapper/TransferReportMapper.java | 42 + .../web/ybmanage/config/YbServiceConfig.java | 92 + .../web/ybmanage/controller/YbController.java | 573 ++ .../ybmanage/controller/YbElepController.java | 252 + .../web/ybmanage/dto/Catalogue1312Output.java | 118 + .../ybmanage/dto/Clearing3205AWebParma.java | 28 + .../ybmanage/dto/Clinic2207OrderOutput.java | 114 + .../dto/Clinic2208UnSetlInfoOutput.java | 109 + .../web/ybmanage/dto/ClinicReg2201Output.java | 67 + .../ybmanage/dto/Financial13203WebParam.java | 49 + .../ybmanage/dto/Financial3203AWebParam.java | 36 + .../ybmanage/dto/Financial3203WebParam.java | 42 + .../web/ybmanage/dto/Info1101Output.java | 70 + .../web/ybmanage/dto/PatientInfoDto.java | 85 + .../com/openhis/web/ybmanage/dto/Result.java | 48 + .../openhis/web/ybmanage/dto/ResultBody.java | 40 + .../ybmanage/dto/Settlement3201WebParam.java | 39 + .../ybmanage/dto/Settlement3202WebParam.java | 47 + .../ybmanage/dto/Settlement3209AWebParam.java | 35 + .../dto/VeriPrescriptionDetailInfoDto.java | 98 + .../ybmanage/dto/VeriPrescriptionInfoDto.java | 55 + .../ybmanage/dto/VeriPrescriptionParam.java | 23 + .../web/ybmanage/mapper/YbElepMapper.java | 44 + .../ybmanage/service/IYbEleBaseService.java | 225 + .../ybmanage/service/IYbEleHttpService.java | 63 + .../service/impl/YbEleHttpServiceImpl.java | 245 + .../service/impl/YbElepBaseServiceImpl.java | 607 ++ .../ybmanage/util/YbEleParamBuilderUtil.java | 647 ++ .../web/ybmanage/vo/Financial3203VO.java | 40 + .../ybmanage/vo/Settlement3201DetailVO.java | 23 + .../web/ybmanage/vo/Settlement3201VO.java | 30 + .../web/ybmanage/vo/Settlement3202VO.java | 47 + .../src/main/resources/application-cloud.yml | 87 + .../src/main/resources/application-local.yml | 87 + .../src/main/resources/application-nd.yml | 87 + .../src/main/resources/application-prod.yml | 88 + .../src/main/resources/application-test.yml | 87 + .../src/main/resources/http.yml | 6 + .../Inventorymanage/LossReportFormMapper.xml | 169 + .../Inventorymanage/ProductDetailsMapper.xml | 150 + .../ProductStocktakingMapper.xml | 291 + .../Inventorymanage/PurchaseReturnMapper.xml | 283 + .../RequisitionIssueMapper.xml | 191 + .../Inventorymanage/ReturnIssueMapper.xml | 191 + .../mapper/catalogmanage/CatalogMapper.xml | 677 ++ .../OutpatientPricingAppMapper.xml | 5 + .../mapper/common/CommonAppMapper.xml | 238 + .../ItemDefinitionAppMapper.xml | 67 + .../DoctorStationChineseMedicalAppMapper.xml | 30 + .../DoctorStationElepPrescriptionMapper.xml | 163 + .../DoctorStationPtDetailsAppMapper.xml | 106 + .../inpatientmanage/AdmissionMapper.xml | 160 + .../mapper/inpatientmanage/DepositMapper.xml | 87 + .../NurseStationPendAdmAppMapper.xml | 63 + .../OutpatientDisposalMapper.xml | 376 ++ .../OutpatientInfusionAppMapper.xml | 318 + .../mapper/paymentmanage/ChargeBillMapper.xml | 5 + .../mapper/paymentmanage/EleInvoiceMapper.xml | 275 + .../mapper/paymentmanage/PaymentMapper.xml | 242 + .../ActivityDeviceAppMapper.xml | 44 + .../personalization/OrderGroupAppMapper.xml | 28 + .../ChineseMedicineDispenseMapper.xml | 156 + .../MedicationDetailsMapper.xml | 113 + .../MedicineConsumablesDispenseMapper.xml | 139 + .../PendingMedicationDetailsMapper.xml | 57 + .../pharmacymanage/ReturnMedicineMapper.xml | 339 + .../reportmanage/ChargeReportMapper.xml | 165 + .../reportmanage/InboundReportMapper.xml | 127 + .../InventoryProductReportMapper.xml | 134 + .../mapper/reportmanage/LossReportMapper.xml | 74 + .../reportmanage/OutboundReportMapper.xml | 129 + .../mapper/reportmanage/PrintReportMapper.xml | 249 + .../PurchaseReturnReportMapper.xml | 129 + .../reportmanage/RegisterReportMapper.xml | 101 + .../reportmanage/ReturnIssueReportMapper.xml | 129 + .../reportmanage/StocktakingReportMapper.xml | 90 + .../reportmanage/TransferReportMapper.xml | 128 + .../ybmanage/MedicalInsuranceMapper.xml | 102 + .../mapper/ybmanage/YbElepMapper.xml | 141 + .../main/resources/properties/yb.properties | 5 + .../common/constant/YbCommonConstants.java | 135 + .../openhis/common/enums/AdmissionMethod.java | 37 + .../openhis/common/enums/AdmissionType.java | 38 + .../openhis/common/enums/AdviceOpType.java | 44 + .../com/openhis/common/enums/CatalogType.java | 119 + .../enums/ChargeItemGenerateSource.java | 49 + .../common/enums/ContrastTypeEnum.java | 32 + .../com/openhis/common/enums/Criticality.java | 28 + .../com/openhis/common/enums/DbOpType.java | 64 + .../common/enums/DiagnosisCertainty.java | 44 + .../common/enums/IdentifierStatusEnum.java | 39 + .../openhis/common/enums/InsuranceLevel.java | 27 + .../com/openhis/common/enums/InvoiceType.java | 44 + .../common/enums/LocationOperational.java | 41 + .../openhis/common/enums/OrderGroupType.java | 41 + .../openhis/common/enums/PaymentOutcome.java | 52 + .../common/enums/PrescriptionType.java | 60 + .../com/openhis/common/enums/Severity.java | 27 + .../openhis/common/enums/StatisticsType.java | 36 + .../common/enums/SupplyRequestType.java | 30 + .../openhis/common/enums/medCategoryCode.java | 50 + .../common/enums/ybenums/YbChrgitmLv.java | 48 + .../common/enums/ybenums/YbClrStas.java | 48 + .../common/enums/ybenums/YbClrType.java | 52 + .../common/enums/ybenums/YbClrWay.java | 60 + .../common/enums/ybenums/YbDiagType.java | 47 + .../common/enums/ybenums/YbDoctorTitle.java | 57 + .../common/enums/ybenums/YbDrordBhvr.java | 44 + .../common/enums/ybenums/YbDrordType.java | 43 + .../common/enums/ybenums/YbDrugDosform.java | 18 + .../common/enums/ybenums/YbDrugMedWay.java | 72 + .../enums/ybenums/YbEncounterClass.java | 38 + .../common/enums/ybenums/YbGender.java | 51 + .../common/enums/ybenums/YbHospApprFlag.java | 48 + .../enums/ybenums/YbIdDocumentType.java | 137 + .../common/enums/ybenums/YbInOutDiagType.java | 42 + .../common/enums/ybenums/YbInsuType.java | 86 + .../common/enums/ybenums/YbInvChgType.java | 58 + .../common/enums/ybenums/YbInvDataType.java | 46 + .../enums/ybenums/YbIptDiseTypeCode.java | 92 + .../common/enums/ybenums/YbListType.java | 47 + .../common/enums/ybenums/YbMatnStas.java | 49 + .../common/enums/ybenums/YbMdtrtCertType.java | 61 + .../enums/ybenums/YbMedChrgItmType.java | 99 + .../common/enums/ybenums/YbMedMdtrtType.java | 51 + .../common/enums/ybenums/YbMedType.java | 91 + .../common/enums/ybenums/YbMedinsType.java | 55 + .../common/enums/ybenums/YbPayLoc.java | 56 + .../common/enums/ybenums/YbPayment.java | 328 + .../enums/ybenums/YbPharmacistTitle.java | 67 + .../enums/ybenums/YbPrescriptionItemType.java | 46 + .../enums/ybenums/YbPrescriptionStatus.java | 52 + .../common/enums/ybenums/YbPsnCertType.java | 111 + .../common/enums/ybenums/YbPsnSetlWay.java | 43 + .../common/enums/ybenums/YbRxFlag.java | 42 + .../enums/ybenums/YbRxItemTypeCode.java | 109 + .../common/enums/ybenums/YbUsedFrqu.java | 95 + .../administration/domain/OrgContrast.java | 38 + .../mapper/OrgContrastMapper.java | 17 + .../service/IOrgContrastService.java | 23 + .../service/impl/OrgContrastServiceImpl.java | 33 + .../financial/model/PaymentRecDetailDto.java | 28 + .../financial/model/PaymentResult.java | 121 + .../financial/model/PaymentedItemModel.java | 24 + .../financial/model/PrePaymentResult.java | 85 + .../model/PrePaymentResultModel.java | 23 + .../openhis/sys/domain/OperationRecord.java | 37 + .../java/com/openhis/sys/domain/Option.java | 37 + .../sys/mapper/OperationRecordMapper.java | 17 + .../com/openhis/sys/mapper/OptionMapper.java | 17 + .../sys/service/IOperationRecordService.java | 34 + .../openhis/sys/service/IOptionService.java | 14 + .../impl/OperationRecordServiceImpl.java | 85 + .../sys/service/impl/OptionServiceImpl.java | 24 + .../template/domain/ActivityDevice.java | 49 + .../openhis/template/domain/OrderGroup.java | 49 + .../template/mapper/ActivityDeviceMapper.java | 18 + .../template/mapper/OrderGroupMapper.java | 18 + .../service/IActivityDeviceService.java | 15 + .../template/service/OrderGroupService.java | 12 + .../impl/ActivityDeviceServiceImpl.java | 21 + .../service/impl/OrderGroupServiceImpl.java | 20 + .../domain/ElepMedicationRequest.java | 138 + .../mapper/ElepMedicationRequestMapper.java | 17 + .../IElepMedicationRequestService.java | 51 + .../ElepMedicationRequestServiceImpl.java | 99 + .../openhis/yb/domain/ClinicPreSettle.java | 62 + .../java/com/openhis/yb/domain/ClinicReg.java | 109 + .../com/openhis/yb/domain/ClinicSettle.java | 112 + .../com/openhis/yb/domain/ClinicUnReg.java | 47 + .../com/openhis/yb/domain/ClinicUnSettle.java | 111 + .../yb/domain/DirectoryCheckRecord.java | 46 + .../main/java/com/openhis/yb/domain/File.java | 39 + .../yb/domain/FinancialApplyRecord.java | 71 + .../yb/domain/FinancialReconcileRecord.java | 68 + .../com/openhis/yb/domain/InfoPerson.java | 93 + .../yb/domain/InventoryChangeRecord.java | 95 + .../yb/domain/InventoryCheckRecord.java | 82 + .../openhis/yb/domain/InventoryDelRecord.java | 42 + .../yb/domain/InventoryPurchaseRecord.java | 121 + .../domain/InventoryPurchaseReturnRecord.java | 109 + .../yb/domain/InventorySaleRecord.java | 193 + .../yb/domain/InventorySaleReturnRecord.java | 132 + .../main/java/com/openhis/yb/domain/Sign.java | 76 + .../java/com/openhis/yb/dto/BaseInfo.java | 93 + .../java/com/openhis/yb/dto/BaseParam.java | 14 + .../com/openhis/yb/dto/CancelPaymentDto.java | 59 + .../openhis/yb/dto/CancelRegPaymentDto.java | 50 + .../openhis/yb/dto/Catalogue1312Output.java | 117 + .../yb/dto/Catalogue1312QueryParam.java | 50 + .../openhis/yb/dto/ChargeItemDetailVO.java | 13 + .../com/openhis/yb/dto/ChargeItemDto.java | 22 + .../openhis/yb/dto/ChargeItemGroupDto.java | 30 + .../openhis/yb/dto/Clearing3204AParam.java | 29 + .../openhis/yb/dto/Clearing3205AParma.java | 33 + .../openhis/yb/dto/Clearing3205AResult.java | 91 + .../openhis/yb/dto/Clearing3205AWebParma.java | 27 + .../openhis/yb/dto/Clearing3206AParam.java | 33 + .../openhis/yb/dto/Clearing3206AResult.java | 33 + .../yb/dto/Clinic2203DiseInfoParam.java | 110 + .../com/openhis/yb/dto/Clinic2203Medical.java | 83 + .../yb/dto/Clinic2203MedicalParam.java | 79 + .../yb/dto/Clinic2204FeeDetailParam.java | 242 + .../yb/dto/Clinic2204FeeDetailResult.java | 63 + .../openhis/yb/dto/Clinic2204OrderParam.java | 37 + .../openhis/yb/dto/Clinic2204OrderResult.java | 26 + .../openhis/yb/dto/Clinic2205OrderParam.java | 39 + .../yb/dto/Clinic2206FundPaymentResult.java | 42 + .../openhis/yb/dto/Clinic2206OrderOutput.java | 114 + .../openhis/yb/dto/Clinic2206OrderParam.java | 110 + .../openhis/yb/dto/Clinic2206OrderResult.java | 161 + .../yb/dto/Clinic2206OrderResultDto.java | 90 + .../yb/dto/Clinic2206SetldetaiResult.java | 59 + .../openhis/yb/dto/Clinic2207OrderResult.java | 158 + .../yb/dto/Clinic2207OrderResultDto.java | 14 + .../yb/dto/Clinic2207OrderResultInfoDto.java | 74 + .../yb/dto/Clinic2208UnSetlInfoOutput.java | 106 + .../yb/dto/Clinic2208UnSetlInfoParam.java | 43 + .../yb/dto/Clinic2208UnSetlInfoResult.java | 137 + .../java/com/openhis/yb/dto/ClinicReg.java | 116 + .../openhis/yb/dto/ClinicReg2201Output.java | 66 + .../yb/dto/DispenseInventory3505Dto.java | 103 + .../yb/dto/EleInvoiceChargeDetailDto.java | 34 + .../yb/dto/EleInvoiceListDetailDto.java | 46 + .../yb/dto/EleInvoicePatientInfoDto.java | 75 + .../yb/dto/EleInvoicePaymentInfoDto.java | 60 + .../openhis/yb/dto/EleInvoiceResultDto.java | 73 + .../java/com/openhis/yb/dto/FileDownload.java | 26 + .../java/com/openhis/yb/dto/FileResult.java | 43 + .../openhis/yb/dto/Financial13203Param.java | 53 + .../openhis/yb/dto/Financial13203Result.java | 58 + .../yb/dto/Financial13203WebParam.java | 49 + .../openhis/yb/dto/Financial3201Output.java | 19 + .../openhis/yb/dto/Financial3201Param.java | 81 + .../yb/dto/Financial3202FileParam.java | 69 + .../yb/dto/Financial3202FileResult.java | 56 + .../yb/dto/Financial3202OtherParam.java | 21 + .../openhis/yb/dto/Financial3203AParam.java | 75 + .../yb/dto/Financial3203AWebParam.java | 37 + .../com/openhis/yb/dto/Financial3203Dto.java | 39 + .../openhis/yb/dto/Financial3203Param.java | 72 + .../openhis/yb/dto/Financial3203WebParam.java | 42 + .../openhis/yb/dto/Financial3204Param.java | 32 + .../yb/dto/FinancialSettlement3202Param.java | 68 + .../yb/dto/FinancialSettlement3202Result.java | 37 + .../yb/dto/FinancialSettlement3209AParam.java | 40 + .../dto/FinancialSettlement3209AResult.java | 28 + .../yb/dto/FsiConsultation3101Param.java | 46 + .../openhis/yb/dto/FsiDiagnose3101Param.java | 57 + .../openhis/yb/dto/FsiEncounter3101Param.java | 167 + .../yb/dto/FsiFeedback3103DataParam.java | 27 + .../yb/dto/FsiFeedback3103WarnsParam.java | 31 + .../openhis/yb/dto/FsiOperation3101Param.java | 67 + .../com/openhis/yb/dto/FsiOrder3101Param.java | 168 + .../openhis/yb/dto/FsiPatient3101Param.java | 61 + .../yb/dto/FsiViolation3101Result.java | 72 + .../yb/dto/FsiViolationDetail3101Result.java | 43 + .../yb/dto/HospAdm2401DiseInfoParam.java | 70 + .../yb/dto/HospAdm2401MdtInfoParam.java | 193 + .../yb/dto/HospAdm2402DiseInfoParam.java | 72 + .../yb/dto/HospAdm2402DscgInfoParam.java | 131 + .../yb/dto/HospAdm2403AdmInfoParam.java | 182 + .../yb/dto/HospAdm2403DiseInfoParam.java | 76 + .../yb/dto/HospAdm2404AdmCnlParam.java | 32 + .../yb/dto/HospAdm2406SmAttrUpParam.java | 62 + .../yb/dto/HospAdm2407SmAttrSelectParam.java | 78 + .../yb/dto/HospAdm2407SmAttrSelectResult.java | 67 + .../openhis/yb/dto/HospDept3401AParam.java | 19 + .../com/openhis/yb/dto/HospDept3401Param.java | 89 + .../com/openhis/yb/dto/HospDept3402Param.java | 89 + .../com/openhis/yb/dto/HospDept3403Param.java | 28 + .../yb/dto/HospTrf2501ARefmedinParam.java | 109 + .../yb/dto/HospTrf2501RefmedinParam.java | 108 + .../openhis/yb/dto/HospTrfCxl2502Param.java | 31 + .../com/openhis/yb/dto/Info1101Output.java | 68 + .../openhis/yb/dto/Info1101PerinfoResult.java | 58 + .../openhis/yb/dto/Info1101ReadcardParam.java | 45 + .../com/openhis/yb/dto/Info5301Param.java | 14 + .../dto/Info5301SpecialConditionResult.java | 21 + .../openhis/yb/dto/InvoiceBaseInfoDto.java | 104 + .../openhis/yb/dto/MatAllowReg25007Param.java | 58 + .../yb/dto/MatAllowReg25007Result.java | 84 + .../yb/dto/MatAllowRegSel25008Param.java | 84 + .../com/openhis/yb/dto/Medical3503Param.java | 113 + .../com/openhis/yb/dto/Medical3505Param.java | 179 + .../com/openhis/yb/dto/Medical3505Result.java | 29 + .../com/openhis/yb/dto/Medical3506Param.java | 118 + .../com/openhis/yb/dto/Medical3507Param.java | 29 + .../com/openhis/yb/dto/Medical3508Param.java | 102 + .../com/openhis/yb/dto/Medical3508Result.java | 104 + .../yb/dto/MedicalDirectory3301ListParam.java | 16 + .../yb/dto/MedicalDirectory3301Param.java | 69 + .../yb/dto/MedicalDirectory3302Param.java | 32 + .../yb/dto/MedicalInventory3501Param.java | 72 + .../yb/dto/MedicalInventory3502Param.java | 81 + .../yb/dto/MedicalPurchase3504Param.java | 95 + .../com/openhis/yb/dto/MedicalTraceNoDto.java | 28 + .../com/openhis/yb/dto/PatientInfoDto.java | 84 + .../yb/dto/PaymentDecDetailUniAccountDto.java | 21 + .../com/openhis/yb/dto/PaymentDetailDto.java | 37 + .../java/com/openhis/yb/dto/PaymentDto.java | 62 + .../com/openhis/yb/dto/PaymentSettleDto.java | 19 + .../dto/PersBirthApprovalCnl25004Param.java | 27 + .../dto/PersBirthApprovalSel25005Param.java | 66 + .../yb/dto/PersBirthRecord25003Param.java | 126 + .../openhis/yb/dto/PersChrDis2503Param.java | 83 + .../yb/dto/PersChrDisCxl2504Param.java | 30 + .../openhis/yb/dto/PersDesigPt2505Param.java | 100 + .../yb/dto/PersDesigPtCxl2506Param.java | 30 + .../yb/dto/PersMedApprovalCnl25006Param.java | 26 + .../yb/dto/PersMedRecord25001Param.java | 86 + .../yb/dto/PersMedSelect25002Param.java | 39 + .../yb/dto/PersMedSelect25002Result.java | 91 + .../openhis/yb/dto/PersUnintInj2507Param.java | 168 + .../com/openhis/yb/dto/PrePaymentDto.java | 38 + .../main/java/com/openhis/yb/dto/Result.java | 48 + .../java/com/openhis/yb/dto/ResultBody.java | 39 + .../yb/dto/Settlement3201DetailDto.java | 39 + .../com/openhis/yb/dto/Settlement3201Dto.java | 28 + .../yb/dto/Settlement3201WebParam.java | 38 + .../com/openhis/yb/dto/Settlement3202Dto.java | 45 + .../yb/dto/Settlement3202WebParam.java | 37 + .../yb/dto/Settlement3209AWebParam.java | 30 + .../main/java/com/openhis/yb/dto/Sign.java | 62 + .../com/openhis/yb/dto/Sign1101Param.java | 19 + .../com/openhis/yb/dto/Sign9001Result.java | 24 + .../yb/dto/SupplyItemDetail3503Dto.java | 126 + .../yb/dto/VeriPrescriptionDetailInfoDto.java | 101 + .../yb/dto/VeriPrescriptionInfoDto.java | 53 + .../openhis/yb/dto/VeriPrescriptionParam.java | 21 + .../main/java/com/openhis/yb/dto/extData.java | 96 + .../yb/mapper/ClinicPreSettleMapper.java | 17 + .../openhis/yb/mapper/ClinicSettleMapper.java | 17 + .../openhis/yb/mapper/ClinicUnRegMapper.java | 17 + .../yb/mapper/ClinicUnSettleMapper.java | 17 + .../yb/mapper/DirectoryCheckRecordMapper.java | 17 + .../yb/mapper/FinancialApplyRecordMapper.java | 17 + .../FinancialReconcileRecordMapper.java | 17 + .../mapper/InventoryChangeRecordMapper.java | 17 + .../yb/mapper/InventoryCheckRecordMapper.java | 17 + .../yb/mapper/InventoryDelRecordMapper.java | 17 + .../mapper/InventoryPurchaseRecordMapper.java | 17 + .../InventoryPurchaseReturnRecordMapper.java | 17 + .../yb/mapper/InventorySaleRecordMapper.java | 17 + .../InventorySaleReturnRecordMapper.java | 17 + .../yb/mapper/MedicalInsuranceMapper.java | 60 + .../com/openhis/yb/mapper/PerinfoMapper.java | 11 + .../java/com/openhis/yb/mapper/RegMapper.java | 13 + .../com/openhis/yb/mapper/SignMapper.java | 12 + .../yb/model/CancelRegPaymentModel.java | 51 + .../yb/model/Clinic2207OrderModel.java | 126 + .../yb/model/Clinic2207OrderParam.java | 88 + .../yb/model/OutpatientRegistrationModel.java | 17 + .../yb/service/IClinicPreSettleService.java | 14 + .../yb/service/IClinicSettleService.java | 39 + .../yb/service/IClinicUnRegService.java | 14 + .../yb/service/IClinicUnSettleService.java | 14 + .../service/IDirectoryCheckRecordService.java | 14 + .../service/IFinancialApplyRecordService.java | 14 + .../IFinancialReconcileRecordService.java | 14 + .../IInventoryChangeRecordService.java | 14 + .../service/IInventoryCheckRecordService.java | 14 + .../service/IInventoryDelRecordService.java | 14 + .../IInventoryPurchaseRecordService.java | 14 + ...IInventoryPurchaseReturnRecordService.java | 14 + .../service/IInventorySaleRecordService.java | 14 + .../IInventorySaleReturnRecordService.java | 14 + .../openhis/yb/service/IPerinfoService.java | 13 + .../com/openhis/yb/service/IRegService.java | 23 + .../com/openhis/yb/service/ISignService.java | 11 + .../java/com/openhis/yb/service/YbDao.java | 1676 +++++ .../com/openhis/yb/service/YbHttpUtils.java | 721 ++ .../com/openhis/yb/service/YbManager.java | 880 +++ .../impl/ClinicPreSettleServiceImpl.java | 19 + .../service/impl/ClinicSettleServiceImpl.java | 44 + .../service/impl/ClinicUnRegServiceImpl.java | 20 + .../impl/ClinicUnSettleServiceImpl.java | 19 + .../impl/DirectoryCheckRecordServiceImpl.java | 20 + .../impl/FinancialApplyRecordServiceImpl.java | 19 + .../FinancialReconcileRecordServiceImpl.java | 20 + .../InventoryChangeRecordServiceImpl.java | 19 + .../impl/InventoryCheckRecordServiceImpl.java | 19 + .../impl/InventoryDelRecordServiceImpl.java | 19 + .../InventoryPurchaseRecordServiceImpl.java | 19 + ...entoryPurchaseReturnRecordServiceImpl.java | 19 + .../impl/InventorySaleRecordServiceImpl.java | 19 + .../InventorySaleReturnRecordServiceImpl.java | 19 + .../yb/service/impl/PerinfoServiceImpl.java | 26 + .../yb/service/impl/RegServiceImpl.java | 39 + .../yb/service/impl/SignServiceImpl.java | 16 + .../com/openhis/yb/util/CommonConstant.java | 327 + .../openhis/yb/util/YbParamBuilderUtil.java | 2359 +++++++ .../ybcatalog/domain/CatalogDrugInfo.java | 319 + .../domain/CatalogMedicalConsumables.java | 241 + .../domain/CatalogMedicalHerbInfo.java | 121 + .../domain/CatalogMedicalService.java | 88 + .../domain/CatalogSpecialDisease.java | 70 + .../CatalogSpecialInsuranceDisease.java | 30 + .../CatalogSurgeryStandardDirectory.java | 94 + .../domain/CatalogWesternDisease.java | 94 + .../domain/CatalogZyDiseaseDiagnosis.java | 64 + .../ybcatalog/domain/CatalogZySyndrome.java | 64 + .../mapper/CatalogDrugInfoMapper.java | 17 + .../CatalogMedicalConsumablesMapper.java | 17 + .../mapper/CatalogMedicalHerbInfoMapper.java | 17 + .../mapper/CatalogMedicalServiceMapper.java | 17 + .../mapper/CatalogSpecialDiseaseMapper.java | 17 + ...CatalogSurgeryStandardDirectoryMapper.java | 17 + .../mapper/CatalogWesternDiseaseMapper.java | 17 + .../CatalogZyDiseaseDiagnosisMapper.java | 17 + .../mapper/CatalogZySyndromeMapper.java | 17 + .../service/ICatalogDrugInfoService.java | 28 + .../ICatalogMedicalConsumablesService.java | 14 + .../ICatalogMedicalHerbInfoService.java | 14 + .../ICatalogMedicalServiceService.java | 14 + .../ICatalogSpecialDiseaseService.java | 14 + ...atalogSurgeryStandardDirectoryService.java | 14 + .../ICatalogWesternDiseaseService.java | 14 + .../ICatalogZyDiseaseDiagnosisService.java | 14 + .../service/ICatalogZySyndromeService.java | 14 + .../impl/CatalogDrugInfoServiceImpl.java | 31 + .../CatalogMedicalConsumablesServiceImpl.java | 19 + .../CatalogMedicalHerbInfoServiceImpl.java | 19 + .../CatalogMedicalServiceServiceImpl.java | 19 + .../CatalogSpecialDiseaseServiceImpl.java | 20 + ...ogSurgeryStandardDirectoryServiceImpl.java | 19 + .../CatalogWesternDiseaseServiceImpl.java | 19 + .../CatalogZyDiseaseDiagnosisServiceImpl.java | 19 + .../impl/CatalogZySyndromeServiceImpl.java | 19 + .../ybelep/domain/ElepMedresultDetail.java | 64 + .../ybelep/domain/ElepMedresultInfo.java | 49 + .../ybelep/domain/ElepMedresultInput.java | 49 + .../ybelep/domain/ElepQuerDiagnosisInfo.java | 73 + .../domain/ElepQuerPrescriptionDetail.java | 142 + .../domain/ElepQuerPrescriptionInfo.java | 120 + .../domain/ElepQuerPrescriptionInput.java | 49 + .../ybelep/domain/ElepQuerVisitInfo.java | 109 + .../ybelep/domain/ElepRevokeInput.java | 60 + .../ybelep/domain/ElepRevokeOutput.java | 41 + .../ybelep/domain/ElepSignatureInput.java | 52 + .../ybelep/domain/ElepSignatureOutput.java | 49 + .../ybelep/domain/ElepUploadInput.java | 104 + .../ybelep/domain/ElepUploadOutput.java | 40 + .../ybelep/domain/ElepVeriDiagnosisInfo.java | 86 + .../domain/ElepVeriPrescriptionDetail.java | 157 + .../domain/ElepVeriPrescriptionInfo.java | 126 + .../domain/ElepVeriPrescriptionOutput.java | 36 + .../ybelep/domain/ElepVeriVisitInfo.java | 182 + .../ybelep/domain/InformationInquiry.java | 26 + .../domain/MedicationResultInquiry.java | 41 + .../ybelep/domain/PreCheckPrescription.java | 129 + .../ybelep/domain/QueryPrescription.java | 122 + .../mapper/ElepMedresultDetailMapper.java | 17 + .../mapper/ElepMedresultInfoMapper.java | 17 + .../mapper/ElepMedresultInputMapper.java | 17 + .../mapper/ElepQuerDiagnosisInfoMapper.java | 17 + .../ElepQuerPrescriptionDetailMapper.java | 17 + .../ElepQuerPrescriptionInfoMapper.java | 17 + .../ElepQuerPrescriptionInputMapper.java | 17 + .../mapper/ElepQuerVisitInfoMapper.java | 17 + .../ybelep/mapper/ElepRevokeInputMapper.java | 17 + .../ybelep/mapper/ElepRevokeOutputMapper.java | 17 + .../mapper/ElepSignatureInputMapper.java | 17 + .../mapper/ElepSignatureOutputMapper.java | 17 + .../ybelep/mapper/ElepUploadInputMapper.java | 17 + .../ybelep/mapper/ElepUploadOutputMapper.java | 17 + .../mapper/ElepVeriDiagnosisInfoMapper.java | 17 + .../ElepVeriPrescriptionDetailMapper.java | 17 + .../ElepVeriPrescriptionInfoMapper.java | 17 + .../ElepVeriPrescriptionOutputMapper.java | 17 + .../mapper/ElepVeriVisitInfoMapper.java | 17 + .../service/IElepMedresultDetailService.java | 14 + .../service/IElepMedresultInfoService.java | 14 + .../service/IElepMedresultInputService.java | 14 + .../IElepQuerDiagnosisInfoService.java | 14 + .../IElepQuerPrescriptionDetailService.java | 14 + .../IElepQuerPrescriptionInfoService.java | 14 + .../IElepQuerPrescriptionInputService.java | 14 + .../service/IElepQuerVisitInfoService.java | 14 + .../service/IElepRevokeInputService.java | 14 + .../service/IElepRevokeOutputService.java | 14 + .../service/IElepSignatureInputService.java | 14 + .../service/IElepSignatureOutputService.java | 14 + .../service/IElepUploadInputService.java | 14 + .../service/IElepUploadOutputService.java | 14 + .../IElepVeriDiagnosisInfoService.java | 14 + .../IElepVeriPrescriptionDetailService.java | 14 + .../IElepVeriPrescriptionInfoService.java | 14 + .../IElepVeriPrescriptionOutputService.java | 14 + .../service/IElepVeriVisitInfoService.java | 14 + .../impl/ElepMedresultDetailServiceImpl.java | 19 + .../impl/ElepMedresultInfoServiceImpl.java | 19 + .../impl/ElepMedresultInputServiceImpl.java | 19 + .../ElepQuerDiagnosisInfoServiceImpl.java | 19 + ...ElepQuerPrescriptionDetailServiceImpl.java | 19 + .../ElepQuerPrescriptionInfoServiceImpl.java | 19 + .../ElepQuerPrescriptionInputServiceImpl.java | 19 + .../impl/ElepQuerVisitInfoServiceImpl.java | 19 + .../impl/ElepRevokeInputServiceImpl.java | 19 + .../impl/ElepRevokeOutputServiceImpl.java | 19 + .../impl/ElepSignatureInputServiceImpl.java | 19 + .../impl/ElepSignatureOutputServiceImpl.java | 19 + .../impl/ElepUploadInputServiceImpl.java | 19 + .../impl/ElepUploadOutputServiceImpl.java | 19 + .../ElepVeriDiagnosisInfoServiceImpl.java | 19 + ...ElepVeriPrescriptionDetailServiceImpl.java | 19 + .../ElepVeriPrescriptionInfoServiceImpl.java | 19 + ...ElepVeriPrescriptionOutputServiceImpl.java | 19 + .../impl/ElepVeriVisitInfoServiceImpl.java | 19 + .../administration/OrgContrastMapper.xml | 7 + .../mapper/sys/OperationRecordMapper.xml | 7 + .../resources/mapper/sys/OptionMapper.xml | 7 + .../mapper/template/ActivityDeviceMapper.xml | 7 + .../mapper/template/OrderGroupMapper.xml | 7 + .../workflow/ElepMedicationRequestMapper.xml | 7 + .../resources/mapper/yb/ClincSettleMapper.xml | 7 + .../mapper/yb/ClincUnSettleMapper.xml | 7 + .../mapper/yb/ClinicPreSettleMapper.xml | 7 + .../resources/mapper/yb/ClinicUnRegMapper.xml | 7 + .../mapper/yb/DirectoryCheckRecordMapper.xml | 7 + .../mapper/yb/FinancialApplyRecordMapper.xml | 7 + .../yb/FinancialReconcileRecordMapper.xml | 7 + .../mapper/yb/InventoryChangeRecordMapper.xml | 7 + .../mapper/yb/InventoryCheckRecordMapper.xml | 7 + .../mapper/yb/InventoryDelRecordMapper.xml | 7 + .../yb/InventoryPurchaseRecordMapper.xml | 7 + .../InventoryPurchaseReturnRecordMapper.xml | 7 + .../mapper/yb/InventorySaleRecordMapper.xml | 7 + .../yb/InventorySaleReturnRecordMapper.xml | 7 + .../mapper/yb/MedicalInsuranceMapper.xml | 144 + .../resources/mapper/yb/PerinfoMapper.xml | 4 + .../main/resources/mapper/yb/RegMapper.xml | 102 + .../main/resources/mapper/yb/SignMapper.xml | 4 + .../main/resources/mapper/yb/YbElepMapper.xml | 140 + .../ybcatalog/CatalogDrugInfoMapper.xml | 7 + .../CatalogMedicalConsumablesMapper.xml | 7 + .../CatalogMedicalHerbInfoMapper.xml | 7 + .../ybcatalog/CatalogMedicalServiceMapper.xml | 7 + .../ybcatalog/CatalogSpecialDiseaseMapper.xml | 7 + .../CatalogSurgeryStandardDirectoryMapper.xml | 7 + .../ybcatalog/CatalogWesternDiseaseMapper.xml | 7 + .../CatalogZyDiseaseDiagnosisMapper.xml | 7 + .../ybcatalog/CatalogZySyndromeMapper.xml | 7 + .../ybelep/ElepMedresultDetailMapper.xml | 7 + .../mapper/ybelep/ElepMedresultInfoMapper.xml | 7 + .../ybelep/ElepMedresultInputMapper.xml | 7 + .../ybelep/ElepQuerDiagnosisInfoMapper.xml | 7 + .../ElepQuerPrescriptionDetailMapper.xml | 7 + .../ybelep/ElepQuerPrescriptionInfoMapper.xml | 7 + .../ElepQuerPrescriptionInputMapper.xml | 7 + .../mapper/ybelep/ElepQuerVisitInfoMapper.xml | 7 + .../mapper/ybelep/ElepRevokeInputMapper.xml | 7 + .../mapper/ybelep/ElepRevokeOutputMapper.xml | 7 + .../ybelep/ElepSignatureInputMapper.xml | 7 + .../ybelep/ElepSignatureOutputMapper.xml | 7 + .../mapper/ybelep/ElepUploadInputMapper.xml | 7 + .../mapper/ybelep/ElepUploadOutputMapper.xml | 7 + .../ybelep/ElepVeriDiagnosisInfoMapper.xml | 7 + .../ElepVeriPrescriptionDetailMapper.xml | 7 + .../ybelep/ElepVeriPrescriptionInfoMapper.xml | 7 + .../ElepVeriPrescriptionOutputMapper.xml | 7 + .../mapper/ybelep/ElepVeriVisitInfoMapper.xml | 7 + openhis-server/openhis-ybapp/pom.xml | 154 + .../com/openhis/OpenHisYbApplication.java | 50 + .../openhis/annotation/ElepHandlerInt.java | 19 + .../com/openhis/annotation/HandlerInt.java | 18 + .../component/ElepHandlerIntDispatcher.java | 38 + .../component/HandlerIntDispatcher.java | 34 + .../openhis/config/HospitalInfoConfig.java | 36 + .../com/openhis/config/InterfaceConfig.java | 43 + .../main/java/com/openhis/config/Tenant.java | 227 + .../openhis/constant/ClincStatusConst.java | 11 + .../com/openhis/constant/CommonConstant.java | 327 + .../openhis/constant/InputDataTypeConst.java | 22 + .../constant/InterFaceResultConst.java | 14 + .../context/ElepHandlerServiceContext.java | 38 + .../context/HandlerServiceContext.java | 36 + .../com/openhis/controller/YbController.java | 249 + .../openhis/controller/YbElepController.java | 110 + .../java/com/openhis/domain/BaseRequest.java | 35 + .../java/com/openhis/domain/BaseResponse.java | 39 + .../com/openhis/domain/ClinicPreSettle.java | 62 + .../java/com/openhis/domain/ClinicReg.java | 109 + .../java/com/openhis/domain/ClinicSettle.java | 112 + .../java/com/openhis/domain/ClinicUnReg.java | 47 + .../com/openhis/domain/ClinicUnSettle.java | 111 + .../openhis/domain/DirectoryCheckRecord.java | 42 + .../openhis/domain/ElepMedresultDetail.java | 62 + .../com/openhis/domain/ElepMedresultInfo.java | 45 + .../openhis/domain/ElepMedresultInput.java | 45 + .../openhis/domain/ElepQuerDiagnosisInfo.java | 69 + .../domain/ElepQuerPrescriptionDetail.java | 140 + .../domain/ElepQuerPrescriptionInfo.java | 118 + .../domain/ElepQuerPrescriptionInput.java | 45 + .../com/openhis/domain/ElepQuerVisitInfo.java | 107 + .../com/openhis/domain/ElepRevokeInput.java | 58 + .../com/openhis/domain/ElepRevokeOutput.java | 36 + .../openhis/domain/ElepSignatureInput.java | 48 + .../openhis/domain/ElepSignatureOutput.java | 45 + .../com/openhis/domain/ElepUploadInput.java | 98 + .../com/openhis/domain/ElepUploadOutput.java | 36 + .../openhis/domain/ElepVeriDiagnosisInfo.java | 84 + .../domain/ElepVeriPrescriptionDetail.java | 155 + .../domain/ElepVeriPrescriptionInfo.java | 124 + .../domain/ElepVeriPrescriptionOutput.java | 35 + .../com/openhis/domain/ElepVeriVisitInfo.java | 180 + .../main/java/com/openhis/domain/File.java | 39 + .../openhis/domain/FinancialApplyRecord.java | 69 + .../domain/FinancialReconcileRecord.java | 99 + .../java/com/openhis/domain/InfoPerson.java | 89 + .../openhis/domain/InformationInquiry.java | 26 + .../openhis/domain/InventoryChangeRecord.java | 91 + .../openhis/domain/InventoryCheckRecord.java | 81 + .../openhis/domain/InventoryDelRecord.java | 42 + .../domain/InventoryPurchaseRecord.java | 121 + .../domain/InventoryPurchaseReturnRecord.java | 109 + .../openhis/domain/InventorySaleRecord.java | 190 + .../domain/InventorySaleReturnRecord.java | 129 + .../domain/MedicationResultInquiry.java | 38 + .../openhis/domain/PreCheckPrescription.java | 126 + .../com/openhis/domain/QueryPrescription.java | 118 + .../main/java/com/openhis/domain/Sign.java | 76 + .../com/openhis/enums/ElepServiceAdrEnum.java | 47 + .../com/openhis/enums/ServiceAdrEnum.java | 126 + .../listener/ElepHandlerServiceListener.java | 35 + .../listener/HandlerServiceListener.java | 31 + .../main/java/com/openhis/pojo/InputData.java | 74 + .../java/com/openhis/pojo/PDFInputDto.java | 106 + .../java/com/openhis/pojo/RequestData.java | 15 + .../java/com/openhis/pojo/ResultBody.java | 40 + .../main/java/com/openhis/pojo/TransBody.java | 73 + .../java/com/openhis/service/FileService.java | 248 + .../com/openhis/service/HandlerService.java | 47 + .../openhis/service/IElepHandlerService.java | 40 + .../com/openhis/service/IYbElepService.java | 69 + .../java/com/openhis/service/YbService.java | 250 + .../service/impl/ElepHandlerServiceImpl.java | 165 + .../service/impl/HandlerServiceImpl.java | 187 + .../service/impl/YbElepServiceImpl.java | 330 + .../openhis/service/impl/YbServiceImpl.java | 954 +++ .../clinc/ClinicDiagInfoUpServiceImpl.java | 32 + .../clinc/ClinicFeeDetailDelServiceImpl.java | 30 + .../clinc/ClinicFeeDetailUpServiceImpl.java | 25 + .../impl/clinc/ClinicPreSetlServiceImpl.java | 29 + .../impl/clinc/ClinicReRegServiceImpl.java | 29 + .../impl/clinc/ClinicReSetlServiceImpl.java | 29 + .../impl/clinc/ClinicRegServiceImpl.java | 35 + .../impl/clinc/ClinicSetlServiceImpl.java | 29 + .../impl/common/MedresultServiceImpl.java | 32 + .../PreCheckPrescriptionServiceImpl.java | 37 + .../common/QuerPrescriptionServiceImpl.java | 32 + .../impl/common/RevokeServiceImpl.java | 32 + .../impl/common/SignatureServiceImpl.java | 32 + .../impl/common/UploadServiceImpl.java | 33 + .../directory/DrugContrastUpServiceImpl.java | 29 + .../RepealDrugContrastUpServiceImpl.java | 29 + .../impl/down/DownloadServiceImpl.java | 28 + .../drugstore/DrugPreSetlServiceImpl.java | 29 + .../impl/drugstore/DrugReSetlServiceImpl.java | 29 + .../impl/drugstore/DrugSetlServiceImpl.java | 29 + .../impl/filing/FixmedinsServiceImpl.java | 29 + .../impl/filing/ReFixmedinsServiceImpl.java | 29 + .../impl/filing/ReSlowdiseaseServiceImpl.java | 29 + .../impl/filing/SlowdiseServiceImpl.java | 29 + .../impl/info/CatalogueInfoServiceImpl.java | 31 + .../impl/info/GetMedicalInfoServiceImpl.java | 29 + ...GetPatientSpecialConditionServiceImpl.java | 19 + .../impl/info/GetPersonInfoServiceImpl.java | 30 + .../service/impl/info/SignInServiceImpl.java | 29 + .../service/impl/info/SignOutServiceImpl.java | 29 + .../inhospital/DischargedServiceImpl.java | 29 + .../impl/inhospital/FeeDetailServiceImpl.java | 29 + .../impl/inhospital/HaPreSetlServiceImpl.java | 29 + .../impl/inhospital/HaReSetlServiceImpl.java | 29 + .../impl/inhospital/HaSetlServiceImpl.java | 29 + .../inhospital/HospitalizedServiceImpl.java | 29 + .../inhospital/ReDischargedServiceImpl.java | 29 + .../inhospital/ReFeeDetailServiceImpl.java | 29 + .../inhospital/ReHospitalizedServiceImpl.java | 29 + .../PhysicalInventoryChangeServiceImpl.java | 27 + .../PhysicalInventoryServiceImpl.java | 27 + .../impl/inventory/PurchasingServiceImpl.java | 27 + .../PurgeProductRecordsServiceImpl.java | 27 + .../StockReplenishmentServiceImpl.java | 27 + .../StockUnReplenishmentServiceImpl.java | 27 + .../inventory/UnPurchasingServiceImpl.java | 27 + .../DayReconciliationServiceImpl.java | 27 + .../DetailReconciliationServiceImpl.java | 27 + .../MonthSetlApplyAServiceImpl.java | 29 + .../MonthSetlApplyServiceImpl.java | 27 + .../MonthUnSetlApplyAServiceImpl.java | 27 + .../MonthUnSetlApplyServiceImpl.java | 28 + .../ReconciliationOrgServiceImpl.java | 27 + .../ReconciliationServiceImpl.java | 27 + .../ThreePartReconciliationServiceImpl.java | 27 + .../TotalReconciliationServiceImpl.java | 29 + .../main/java/com/openhis/utils/BCUtils.java | 40 + .../java/com/openhis/utils/BusnessIdUtil.java | 53 + .../openhis/utils/CusAccessObjectUtil.java | 34 + .../java/com/openhis/utils/EasyGmUtils.java | 324 + .../com/openhis/utils/HseEncAndDecUtil.java | 279 + .../com/openhis/utils/HttpClientUtil.java | 92 + .../openhis/utils/PDFTemplateFillerUtil.java | 245 + .../java/com/openhis/utils/RedisUtil.java | 611 ++ .../main/java/com/openhis/utils/SignUtil.java | 177 + .../java/com/openhis/utils/StringUtil.java | 428 ++ .../main/java/com/openhis/vo/BaseInfo.java | 91 + .../main/java/com/openhis/vo/BaseParam.java | 13 + .../java/com/openhis/vo/CancelPaymentDto.java | 59 + .../com/openhis/vo/CancelRegPaymentDto.java | 50 + .../com/openhis/vo/Catalogue1312Output.java | 117 + .../openhis/vo/Catalogue1312QueryParam.java | 48 + .../com/openhis/vo/ChargeItemDetailVO.java | 143 + .../java/com/openhis/vo/ChargeItemDto.java | 152 + .../com/openhis/vo/Clearing3204AParam.java | 29 + .../com/openhis/vo/Clearing3205AParma.java | 33 + .../com/openhis/vo/Clearing3205AResult.java | 91 + .../com/openhis/vo/Clearing3205AWebParma.java | 27 + .../com/openhis/vo/Clearing3206AParam.java | 33 + .../com/openhis/vo/Clearing3206AResult.java | 33 + .../openhis/vo/Clinic2203DiseInfoParam.java | 107 + .../com/openhis/vo/Clinic2203Medical.java | 80 + .../openhis/vo/Clinic2203MedicalParam.java | 77 + .../openhis/vo/Clinic2204FeeDetailParam.java | 239 + .../openhis/vo/Clinic2204FeeDetailResult.java | 83 + .../com/openhis/vo/Clinic2204OrderParam.java | 30 + .../com/openhis/vo/Clinic2204OrderResult.java | 26 + .../com/openhis/vo/Clinic2205OrderParam.java | 35 + .../vo/Clinic2206FundPaymentResult.java | 41 + .../com/openhis/vo/Clinic2206OrderOutput.java | 114 + .../com/openhis/vo/Clinic2206OrderParam.java | 107 + .../com/openhis/vo/Clinic2206OrderResult.java | 161 + .../openhis/vo/Clinic2206OrderResultDto.java | 90 + .../openhis/vo/Clinic2206SetldetaiResult.java | 57 + .../com/openhis/vo/Clinic2207OrderResult.java | 158 + .../openhis/vo/Clinic2207OrderResultDto.java | 14 + .../vo/Clinic2207OrderResultInfoDto.java | 74 + .../vo/Clinic2208UnSetlInfoOutput.java | 106 + .../openhis/vo/Clinic2208UnSetlInfoParam.java | 34 + .../vo/Clinic2208UnSetlInfoResult.java | 137 + .../main/java/com/openhis/vo/ClinicReg.java | 113 + .../com/openhis/vo/ClinicReg2201Output.java | 66 + .../openhis/vo/DispenseInventory3505Dto.java | 103 + .../openhis/vo/EleInvoiceChargeDetailDto.java | 34 + .../openhis/vo/EleInvoiceListDetailDto.java | 46 + .../openhis/vo/EleInvoicePatientInfoDto.java | 75 + .../openhis/vo/EleInvoicePaymentInfoDto.java | 60 + .../com/openhis/vo/EleInvoiceResultDto.java | 73 + .../java/com/openhis/vo/FileDownload.java | 26 + .../main/java/com/openhis/vo/FileResult.java | 43 + .../com/openhis/vo/Financial13203Param.java | 53 + .../com/openhis/vo/Financial13203Result.java | 58 + .../openhis/vo/Financial13203WebParam.java | 49 + .../com/openhis/vo/Financial3201Output.java | 19 + .../com/openhis/vo/Financial3201Param.java | 84 + .../openhis/vo/Financial3202FileParam.java | 48 + .../openhis/vo/Financial3202FileResult.java | 56 + .../com/openhis/vo/Financial3203AParam.java | 67 + .../openhis/vo/Financial3203AWebParam.java | 34 + .../com/openhis/vo/Financial3203Param.java | 72 + .../java/com/openhis/vo/Financial3203VO.java | 39 + .../com/openhis/vo/Financial3203WebParam.java | 42 + .../com/openhis/vo/Financial3204Param.java | 32 + .../vo/FinancialSettlement3202Param.java | 66 + .../vo/FinancialSettlement3202Result.java | 36 + .../vo/FinancialSettlement3209AParam.java | 40 + .../vo/FinancialSettlement3209AResult.java | 28 + .../openhis/vo/FsiConsultation3101Param.java | 45 + .../com/openhis/vo/FsiDiagnose3101Param.java | 56 + .../com/openhis/vo/FsiEncounter3101Param.java | 167 + .../openhis/vo/FsiFeedback3103DataParam.java | 27 + .../openhis/vo/FsiFeedback3103WarnsParam.java | 29 + .../com/openhis/vo/FsiOperation3101Param.java | 68 + .../com/openhis/vo/FsiOrder3101Param.java | 167 + .../com/openhis/vo/FsiPatient3101Param.java | 61 + .../openhis/vo/FsiViolation3101Result.java | 73 + .../vo/FsiViolationDetail3101Result.java | 44 + .../openhis/vo/HospAdm2401DiseInfoParam.java | 68 + .../openhis/vo/HospAdm2401MdtInfoParam.java | 191 + .../openhis/vo/HospAdm2402DiseInfoParam.java | 70 + .../openhis/vo/HospAdm2402DscgInfoParam.java | 129 + .../openhis/vo/HospAdm2403AdmInfoParam.java | 180 + .../openhis/vo/HospAdm2403DiseInfoParam.java | 74 + .../openhis/vo/HospAdm2404AdmCnlParam.java | 32 + .../openhis/vo/HospAdm2406SmAttrUpParam.java | 62 + .../vo/HospAdm2407SmAttrSelectParam.java | 77 + .../vo/HospAdm2407SmAttrSelectResult.java | 67 + .../com/openhis/vo/HospDept3401AParam.java | 16 + .../com/openhis/vo/HospDept3401Param.java | 89 + .../com/openhis/vo/HospDept3402Param.java | 89 + .../com/openhis/vo/HospDept3403Param.java | 28 + .../openhis/vo/HospTrf2501ARefmedinParam.java | 107 + .../openhis/vo/HospTrf2501RefmedinParam.java | 107 + .../com/openhis/vo/HospTrfCxl2502Param.java | 30 + .../java/com/openhis/vo/Info1101Output.java | 68 + .../com/openhis/vo/Info1101PerinfoResult.java | 56 + .../com/openhis/vo/Info1101ReadcardParam.java | 43 + .../java/com/openhis/vo/Info5301Param.java | 14 + .../vo/Info5301SpecialConditionResult.java | 20 + .../com/openhis/vo/InvoiceBaseInfoDto.java | 104 + .../main/java/com/openhis/vo/LoginUser.java | 67 + .../com/openhis/vo/MatAllowReg25007Param.java | 56 + .../openhis/vo/MatAllowReg25007Result.java | 82 + .../openhis/vo/MatAllowRegSel25008Param.java | 82 + .../java/com/openhis/vo/Medical3503Param.java | 113 + .../java/com/openhis/vo/Medical3505Model.java | 176 + .../java/com/openhis/vo/Medical3505Param.java | 179 + .../com/openhis/vo/Medical3505Result.java | 29 + .../java/com/openhis/vo/Medical3506Param.java | 118 + .../java/com/openhis/vo/Medical3507Param.java | 29 + .../java/com/openhis/vo/Medical3508Param.java | 99 + .../com/openhis/vo/Medical3508Result.java | 104 + .../vo/MedicalDirectory3301ListParam.java | 16 + .../openhis/vo/MedicalDirectory3301Param.java | 69 + .../openhis/vo/MedicalDirectory3302Param.java | 27 + .../vo/MedicalDirectory3302ParamDto.java | 33 + .../openhis/vo/MedicalInventory3501Param.java | 72 + .../openhis/vo/MedicalInventory3502Param.java | 82 + .../openhis/vo/MedicalPurchase3504Param.java | 95 + .../com/openhis/vo/MedicalTraceNoDto.java | 26 + .../java/com/openhis/vo/PatientInfoDto.java | 84 + .../java/com/openhis/vo/PaymentDetailDto.java | 37 + .../main/java/com/openhis/vo/PaymentDto.java | 62 + .../java/com/openhis/vo/PaymentSettleDto.java | 19 + .../main/java/com/openhis/vo/PaymentVO.java | 94 + .../vo/PersBirthApprovalCnl25004Param.java | 27 + .../vo/PersBirthApprovalSel25005Param.java | 64 + .../openhis/vo/PersBirthRecord25003Param.java | 124 + .../com/openhis/vo/PersChrDis2503Param.java | 83 + .../openhis/vo/PersChrDisCxl2504Param.java | 29 + .../com/openhis/vo/PersDesigPt2505Param.java | 98 + .../openhis/vo/PersDesigPtCxl2506Param.java | 29 + .../vo/PersMedApprovalCnl25006Param.java | 25 + .../openhis/vo/PersMedRecord25001Param.java | 84 + .../openhis/vo/PersMedSelect25002Param.java | 37 + .../openhis/vo/PersMedSelect25002Result.java | 89 + .../com/openhis/vo/PersUnintInj2507Param.java | 167 + .../java/com/openhis/vo/PrePaymentDto.java | 38 + .../src/main/java/com/openhis/vo/Result.java | 132 + .../main/java/com/openhis/vo/ResultBody.java | 39 + .../openhis/vo/Settlement3201DetailVO.java | 22 + .../java/com/openhis/vo/Settlement3201VO.java | 28 + .../openhis/vo/Settlement3201WebParam.java | 37 + .../java/com/openhis/vo/Settlement3202VO.java | 45 + .../openhis/vo/Settlement3202WebParam.java | 46 + .../openhis/vo/Settlement3209AWebParam.java | 35 + .../src/main/java/com/openhis/vo/Sign.java | 58 + .../java/com/openhis/vo/Sign1101Param.java | 19 + .../java/com/openhis/vo/Sign9001Result.java | 24 + .../openhis/vo/SupplyItemDetail3503Dto.java | 126 + .../vo/VeriPrescriptionDetailInfoDto.java | 101 + .../openhis/vo/VeriPrescriptionInfoDto.java | 53 + .../com/openhis/vo/VeriPrescriptionParam.java | 21 + .../src/main/java/com/openhis/vo/extData.java | 89 + .../src/main/resources/application-druid.yml | 62 + .../src/main/resources/application-prod.yml | 61 + .../src/main/resources/application.yml | 158 + .../src/main/resources/banner.txt | 10 + .../src/main/resources/config.properties | 10 + .../src/main/resources/config/flow.el.xml | 6 + .../config/hospital-config.properties | 0 .../resources/config/sys-config.properties | 21 + .../resources/config/tenant-config.properties | 12 + .../src/main/resources/logback.xml | 115 + .../main/resources/mybatis/mybatis-config.xml | 21 + vue3/.env.development | 8 + vue3/.env.production | 11 + vue3/.env.staging | 11 + vue3/.prettierrc.cjs | 13 + vue3/.stylelintrc.cjs | 45 + vue3/LICENSE | 20 + vue3/README.md | 0 vue3/html/ie.html | 46 + vue3/index.html | 115 + vue3/package.json | 56 + vue3/public/favicon.ico | Bin 0 -> 5663 bytes vue3/src/App.vue | 15 + .../temperatureSheet/ViewConfig.js | 58 + .../nurseStation/temperatureSheet/config.js | 271 + .../temperatureSheet/dataProcess.js | 45 + .../nurseStation/temperatureSheet/datas.js | 3280 +++++++++ .../nurseStation/temperatureSheet/drawfn.js | 690 ++ .../nurseStation/temperatureSheet/index.js | 130 + .../nurseStation/temperatureSheet/line.js | 1696 +++++ .../nurseStation/temperatureSheet/template.js | 264 + .../nurseStation/temperatureSheet/utils.js | 297 + vue3/src/api/login.js | 97 + vue3/src/api/menu.js | 9 + vue3/src/api/monitor/cache.js | 57 + vue3/src/api/monitor/job.js | 71 + vue3/src/api/monitor/jobLog.js | 26 + vue3/src/api/monitor/logininfor.js | 34 + vue3/src/api/monitor/online.js | 18 + vue3/src/api/monitor/operlog.js | 26 + vue3/src/api/monitor/server.js | 9 + vue3/src/api/system/config.js | 60 + vue3/src/api/system/dept.js | 52 + vue3/src/api/system/dict/data.js | 52 + vue3/src/api/system/dict/type.js | 60 + vue3/src/api/system/menu.js | 60 + vue3/src/api/system/notice.js | 44 + vue3/src/api/system/post.js | 44 + vue3/src/api/system/role.js | 119 + vue3/src/api/system/tenant.js | 151 + vue3/src/api/system/user copy.js | 135 + vue3/src/api/system/user.js | 167 + vue3/src/api/tool/gen.js | 85 + vue3/src/assets/401_images/401.gif | Bin 0 -> 164227 bytes vue3/src/assets/404_images/404.png | Bin 0 -> 98071 bytes vue3/src/assets/404_images/404_cloud.png | Bin 0 -> 4766 bytes .../src/assets/fonts/HarmonyOS_Sans_Black.ttf | Bin 0 -> 145696 bytes vue3/src/assets/fonts/HarmonyOS_Sans_Bold.ttf | Bin 0 -> 145860 bytes .../src/assets/fonts/HarmonyOS_Sans_Light.ttf | Bin 0 -> 147552 bytes .../assets/fonts/HarmonyOS_Sans_Medium.ttf | Bin 0 -> 146164 bytes .../assets/fonts/HarmonyOS_Sans_Regular.ttf | Bin 0 -> 146616 bytes vue3/src/assets/fonts/HarmonyOS_Sans_Thin.ttf | Bin 0 -> 148124 bytes vue3/src/assets/icons/svg/404.svg | 1 + vue3/src/assets/icons/svg/bug.svg | 1 + vue3/src/assets/icons/svg/build.svg | 1 + vue3/src/assets/icons/svg/button.svg | 1 + vue3/src/assets/icons/svg/cascader.svg | 1 + vue3/src/assets/icons/svg/chart.svg | 1 + vue3/src/assets/icons/svg/checkbox.svg | 1 + vue3/src/assets/icons/svg/clipboard.svg | 1 + vue3/src/assets/icons/svg/code.svg | 1 + vue3/src/assets/icons/svg/color.svg | 1 + vue3/src/assets/icons/svg/component.svg | 1 + vue3/src/assets/icons/svg/dashboard.svg | 1 + vue3/src/assets/icons/svg/date-range.svg | 1 + vue3/src/assets/icons/svg/date.svg | 1 + vue3/src/assets/icons/svg/dict.svg | 1 + vue3/src/assets/icons/svg/documentation.svg | 1 + vue3/src/assets/icons/svg/download.svg | 1 + vue3/src/assets/icons/svg/drag.svg | 1 + vue3/src/assets/icons/svg/druid.svg | 1 + vue3/src/assets/icons/svg/edit.svg | 1 + vue3/src/assets/icons/svg/education.svg | 1 + vue3/src/assets/icons/svg/email.svg | 1 + vue3/src/assets/icons/svg/example.svg | 1 + vue3/src/assets/icons/svg/excel.svg | 1 + vue3/src/assets/icons/svg/exit-fullscreen.svg | 1 + vue3/src/assets/icons/svg/eye-open.svg | 1 + vue3/src/assets/icons/svg/eye.svg | 1 + vue3/src/assets/icons/svg/form.svg | 1 + vue3/src/assets/icons/svg/fullscreen.svg | 1 + vue3/src/assets/icons/svg/github.svg | 1 + vue3/src/assets/icons/svg/guide.svg | 1 + vue3/src/assets/icons/svg/icon.svg | 1 + vue3/src/assets/icons/svg/input.svg | 1 + vue3/src/assets/icons/svg/international.svg | 1 + vue3/src/assets/icons/svg/job.svg | 1 + vue3/src/assets/icons/svg/language.svg | 1 + vue3/src/assets/icons/svg/link.svg | 1 + vue3/src/assets/icons/svg/list.svg | 1 + vue3/src/assets/icons/svg/lock.svg | 1 + vue3/src/assets/icons/svg/log.svg | 1 + vue3/src/assets/icons/svg/logininfor.svg | 1 + vue3/src/assets/icons/svg/message.svg | 1 + vue3/src/assets/icons/svg/money.svg | 1 + vue3/src/assets/icons/svg/monitor.svg | 2 + vue3/src/assets/icons/svg/nested.svg | 1 + vue3/src/assets/icons/svg/number.svg | 1 + vue3/src/assets/icons/svg/online.svg | 1 + vue3/src/assets/icons/svg/password.svg | 1 + vue3/src/assets/icons/svg/pdf.svg | 1 + vue3/src/assets/icons/svg/people.svg | 1 + vue3/src/assets/icons/svg/peoples.svg | 1 + vue3/src/assets/icons/svg/phone.svg | 1 + vue3/src/assets/icons/svg/post.svg | 1 + vue3/src/assets/icons/svg/qq.svg | 1 + vue3/src/assets/icons/svg/question.svg | 1 + vue3/src/assets/icons/svg/radio.svg | 1 + vue3/src/assets/icons/svg/rate.svg | 1 + vue3/src/assets/icons/svg/redis-list.svg | 2 + vue3/src/assets/icons/svg/redis.svg | 1 + vue3/src/assets/icons/svg/row.svg | 1 + vue3/src/assets/icons/svg/search.svg | 1 + vue3/src/assets/icons/svg/select.svg | 1 + vue3/src/assets/icons/svg/server.svg | 1 + vue3/src/assets/icons/svg/shopping.svg | 1 + vue3/src/assets/icons/svg/size.svg | 1 + vue3/src/assets/icons/svg/skill.svg | 1 + vue3/src/assets/icons/svg/slider.svg | 1 + vue3/src/assets/icons/svg/star.svg | 1 + vue3/src/assets/icons/svg/swagger.svg | 1 + vue3/src/assets/icons/svg/switch.svg | 1 + vue3/src/assets/icons/svg/system.svg | 2 + vue3/src/assets/icons/svg/tab.svg | 1 + vue3/src/assets/icons/svg/table.svg | 1 + vue3/src/assets/icons/svg/textarea.svg | 1 + vue3/src/assets/icons/svg/theme.svg | 1 + vue3/src/assets/icons/svg/time-range.svg | 1 + vue3/src/assets/icons/svg/time.svg | 1 + vue3/src/assets/icons/svg/tool.svg | 1 + vue3/src/assets/icons/svg/tree-table.svg | 1 + vue3/src/assets/icons/svg/tree.svg | 1 + vue3/src/assets/icons/svg/upload.svg | 1 + vue3/src/assets/icons/svg/user.svg | 1 + vue3/src/assets/icons/svg/validCode.svg | 1 + vue3/src/assets/icons/svg/wechat.svg | 1 + vue3/src/assets/icons/svg/zip.svg | 1 + vue3/src/assets/images/ODLS.png | Bin 0 -> 2555 bytes vue3/src/assets/images/dark.svg | 39 + vue3/src/assets/images/jlau.jpg | Bin 0 -> 24861 bytes vue3/src/assets/images/light.svg | 39 + vue3/src/assets/images/login-background.jpg | Bin 0 -> 521275 bytes vue3/src/assets/images/logo_bg.jpg | Bin 0 -> 58953 bytes vue3/src/assets/images/pay.png | Bin 0 -> 140720 bytes vue3/src/assets/images/profile.jpg | Bin 0 -> 81131 bytes vue3/src/assets/images/user.png | Bin 0 -> 9418 bytes vue3/src/assets/logo/logo.png | Bin 0 -> 5663 bytes vue3/src/assets/logo/logoBlack.png | Bin 0 -> 4947 bytes vue3/src/assets/logo/logoNew.png | Bin 0 -> 2748 bytes vue3/src/assets/styles/btn.scss | 99 + vue3/src/assets/styles/element-ui.scss | 96 + vue3/src/assets/styles/font.scss | 48 + vue3/src/assets/styles/index.scss | 215 + vue3/src/assets/styles/mixin.scss | 66 + vue3/src/assets/styles/openhis.scss | 298 + vue3/src/assets/styles/sidebar.scss | 177 + vue3/src/assets/styles/transition.scss | 49 + vue3/src/assets/styles/variables.module.scss | 65 + .../Auto/PfPatientCardB/PfPatientCard.vue | 359 + .../components/Auto/PfPatientCardB/index.js | 6 + .../components/Auto/PfPatientCardB/index.vue | 66 + .../components/Auto/printBills/bedCard.vue | 76 + .../Auto/printBills/changeShiftBill.vue | 120 + .../Auto/printBills/exeOrderSheet.vue | 149 + .../Auto/printBills/injectLabel.vue | 155 + .../Auto/printBills/injectOrderSheet.vue | 113 + .../components/Auto/printBills/labelGroup.vue | 65 + .../components/Auto/printBills/sheetGroup.vue | 69 + .../Auto/printBills/temperatureSheet.vue | 102 + .../Auto/printBills/triageTicket.vue | 77 + .../Auto/printBills/triageTicketGroup.vue | 72 + .../Auto/printBills/triageTicketNew.vue | 192 + .../components/Auto/printBills/wristBill.vue | 115 + vue3/src/components/Breadcrumb/index.vue | 66 + vue3/src/components/Crontab/day.vue | 174 + vue3/src/components/Crontab/hour.vue | 127 + vue3/src/components/Crontab/index.vue | 310 + vue3/src/components/Crontab/min.vue | 126 + vue3/src/components/Crontab/month.vue | 141 + vue3/src/components/Crontab/result.vue | 540 ++ vue3/src/components/Crontab/second.vue | 128 + vue3/src/components/Crontab/week.vue | 197 + vue3/src/components/Crontab/year.vue | 149 + vue3/src/components/DictTag/index.vue | 82 + vue3/src/components/Editor/index.vue | 251 + vue3/src/components/FileUpload/index.vue | 207 + vue3/src/components/Hamburger/index.vue | 41 + vue3/src/components/HeaderSearch/index.vue | 198 + vue3/src/components/IconSelect/index.vue | 111 + .../src/components/IconSelect/requireIcons.js | 8 + vue3/src/components/ImagePreview/index.vue | 92 + vue3/src/components/ImageUpload/index.vue | 213 + vue3/src/components/OpenHis/Doc/index.vue | 13 + .../components/OpenHis/popoverList/index.vue | 91 + vue3/src/components/Pagination/index.vue | 105 + vue3/src/components/ParentView/index.vue | 3 + vue3/src/components/RightToolbar/index.vue | 134 + vue3/src/components/Screenfull/index.vue | 22 + vue3/src/components/SizeSelect/index.vue | 45 + vue3/src/components/SvgIcon/index.vue | 53 + vue3/src/components/SvgIcon/svgicon.js | 10 + vue3/src/components/TopNav/index.vue | 214 + vue3/src/components/TreeSelect/index.vue | 156 + vue3/src/components/iFrame/index.vue | 31 + .../patientBar/components/BallTag.vue | 79 + .../patientBar/inPatientBarDoctorFold.vue | 509 ++ vue3/src/directive/common/clickOutsideRow.js | 22 + vue3/src/directive/common/copyText.js | 66 + vue3/src/directive/common/horizontalScroll.js | 20 + vue3/src/directive/index.js | 13 + vue3/src/directive/permission/hasPermi.js | 28 + vue3/src/directive/permission/hasRole.js | 28 + vue3/src/layout/components/AppMain.vue | 68 + .../layout/components/IframeToggle/index.vue | 25 + .../src/layout/components/InnerLink/index.vue | 24 + vue3/src/layout/components/Navbar.vue | 214 + vue3/src/layout/components/Settings/index.vue | 205 + vue3/src/layout/components/Sidebar/Link.vue | 40 + vue3/src/layout/components/Sidebar/Logo.vue | 112 + .../layout/components/Sidebar/SidebarItem.vue | 102 + vue3/src/layout/components/Sidebar/index.vue | 132 + .../layout/components/TagsView/ScrollPane.vue | 105 + vue3/src/layout/components/TagsView/index.vue | 404 ++ vue3/src/layout/components/index.js | 4 + vue3/src/layout/index.vue | 138 + vue3/src/main.js | 93 + vue3/src/permission.js | 65 + vue3/src/plugins/auth.js | 60 + vue3/src/plugins/cache.js | 77 + vue3/src/plugins/download.js | 79 + vue3/src/plugins/index.js | 18 + vue3/src/plugins/modal.js | 82 + vue3/src/plugins/tab.js | 69 + vue3/src/router/index.js | 203 + vue3/src/settings.js | 47 + vue3/src/store/index.js | 3 + vue3/src/store/modules/app.js | 46 + vue3/src/store/modules/dict.js | 57 + vue3/src/store/modules/permission.js | 142 + vue3/src/store/modules/settings.js | 38 + vue3/src/store/modules/tagsView.js | 190 + vue3/src/store/modules/user.js | 85 + vue3/src/store/store.js | 97 + vue3/src/utils/auth.js | 15 + vue3/src/utils/dict.js | 24 + vue3/src/utils/dynamicTitle.js | 15 + vue3/src/utils/errorCode.js | 6 + vue3/src/utils/his.js | 319 + vue3/src/utils/index.js | 421 ++ vue3/src/utils/jsencrypt.js | 30 + vue3/src/utils/openhis.js | 246 + vue3/src/utils/permission.js | 51 + vue3/src/utils/request.js | 154 + vue3/src/utils/scroll-to.js | 58 + vue3/src/utils/theme.js | 49 + vue3/src/utils/validate.js | 93 + .../basicmanage/automaticBilling/index.vue | 2 + .../views/basicmanage/bargainSets/index.vue | 2 + vue3/src/views/basicmanage/bedspace/index.vue | 2 + .../views/basicmanage/caseTemplates/index.vue | 2 + .../basicmanage/commonlyDiagnosis/index.vue | 2 + .../components/activityList.vue | 66 + .../consumablesBinding/components/api.js | 63 + .../components/consumablesList.vue | 313 + .../components/deviceList.vue | 68 + .../basicmanage/consumablesBinding/index.vue | 123 + vue3/src/views/basicmanage/contract/index.vue | 2 + vue3/src/views/basicmanage/customer/index.vue | 2 + vue3/src/views/basicmanage/fee/index.vue | 2 + .../components/implementDepartment.js | 68 + .../basicmanage/implementDepartment/index.vue | 434 ++ vue3/src/views/basicmanage/lisMerge/index.vue | 2 + .../components/adviceBaseList.vue | 148 + .../ordersCombination/components/api.js | 58 + .../components/prescriptionlist.vue | 1295 ++++ .../basicmanage/ordersCombination/index.vue | 336 + .../organization/components/api.js | 60 + .../views/basicmanage/organization/index.vue | 296 + .../components/pharmacyDepartment.js | 62 + .../basicmanage/pharmacyDepartment/index.vue | 387 ++ .../supplier/components/supplier.js | 81 + vue3/src/views/basicmanage/supplier/index.vue | 533 ++ .../basicmanage/tcmPrescription/index.vue | 2 + .../views/basicmanage/ward/components/api.js | 66 + vue3/src/views/basicmanage/ward/index.vue | 319 + .../warehouseLocation/components/api.js | 44 + .../basicmanage/warehouseLocation/index.vue | 306 + .../components/registrationfee.js | 82 + .../basicservices/registrationfee/index.vue | 769 +++ .../views/catalog/device/components/device.js | 101 + .../device/components/deviceDialog.vue | 606 ++ .../device/components/deviceYbDialog.vue | 111 + vue3/src/views/catalog/device/index.vue | 611 ++ .../components/diagTreYbDialog.vue | 110 + .../components/diagnosisTreatmentDialog.vue | 594 ++ .../components/diagnosistreatment.js | 92 + .../catalog/diagnosistreatment/index.vue | 532 ++ .../catalog/disease/components/disease.js | 71 + vue3/src/views/catalog/disease/index.vue | 507 ++ .../catalog/medicine/components/medicine.js | 101 + .../medicine/components/medicineDialog.vue | 1027 +++ .../medicine/components/medicineYbDialog.vue | 114 + vue3/src/views/catalog/medicine/index.vue | 462 ++ vue3/src/views/catalog/service/index.vue | 2 + .../charge/clinicRecord/components/api.js | 39 + vue3/src/views/charge/clinicRecord/index.vue | 192 + .../charge/cliniccharge/components/api.js | 88 + .../cliniccharge/components/chargeDialog.vue | 512 ++ vue3/src/views/charge/cliniccharge/index.vue | 515 ++ .../charge/clinicrefund/components/api.js | 63 + .../clinicrefund/components/refundDialog.vue | 366 + vue3/src/views/charge/clinicrefund/index.vue | 347 + .../components/chargeDialog.vue | 465 ++ .../components/outpatientregistration.js | 216 + .../components/patientAddDialog.vue | 453 ++ .../components/patientInfoDialog.vue | 182 + .../components/patientList.vue | 58 + .../components/refundDialog.vue | 364 + .../charge/outpatientregistration/index.vue | 1340 ++++ .../views/charge/registerRecords/index.vue | 2 + vue3/src/views/charge/schedule/index.vue | 2 + .../bargain/component/adviceBaseList.vue | 147 + .../clinicmanagement/bargain/component/api.js | 202 + .../bargain/component/prescriptionlist.vue | 797 +++ .../views/clinicmanagement/bargain/index.vue | 327 + .../clinicmanagement/chargeDetail/index.vue | 2 + .../consultationCharge/index.vue | 2 + .../consultationRefund/index.vue | 2 + .../clinicmanagement/dayEnd/component/api.js | 24 + .../views/clinicmanagement/dayEnd/index.vue | 464 ++ .../disposal/components/api.js | 64 + .../views/clinicmanagement/disposal/index.vue | 208 + .../ePrescribing/components/api.js | 126 + .../components/ePrescribingDetailDialog.vue | 138 + .../components/medicinePickupQueryDialog.vue | 204 + .../components/prescriptionQueryDialog.vue | 361 + .../clinicmanagement/ePrescribing/index.vue | 445 ++ .../infusionrecord/component/api.js | 79 + .../clinicmanagement/infusionrecord/index.vue | 510 ++ .../clinicmanagement/lisPascResult/index.vue | 2 + .../clinicmanagement/orderViewPrint/index.vue | 2 + .../clinicmanagement/refundNumber/index.vue | 2 + .../clinicmanagement/requisition/index.vue | 2 + .../returnDrug/components/api.js | 51 + .../clinicmanagement/returnDrug/index.vue | 455 ++ .../skinrecord/component/api.js | 34 + .../clinicmanagement/skinrecord/index.vue | 507 ++ .../clinicmanagement/techExecute/index.vue | 2 + .../techfundApprove/index.vue | 2 + .../clinicmanagement/withdrawal/index.vue | 2 + .../definition/components/definition.js | 43 + .../definition/components/edit.vue | 123 + .../views/datadictionary/definition/index.vue | 773 +++ .../components/adviceBaseList.vue | 158 + .../src/views/doctorstation/components/api.js | 470 ++ .../doctorstation/components/diagnosis.vue | 501 ++ .../components/diagnosisdialog.vue | 126 + .../components/diagnosislist.vue | 56 + .../views/doctorstation/components/emr.vue | 296 + .../doctorstation/components/emrhistory.vue | 73 + .../doctorstation/components/emrtemplate.vue | 69 + .../components/eprescriptiondialog.vue | 798 +++ .../components/eprescriptionlist.vue | 603 ++ .../components/orderGroupDrawer.vue | 81 + .../doctorstation/components/patientlist.vue | 216 + .../components/prescriptionHistory.vue | 119 + .../components/prescriptionlist.vue | 1923 ++++++ .../components/prescriptionmedicineList.vue | 92 + .../components/refundListDialog.vue | 275 + .../components/tcm/tcmAdvice.vue | 1715 +++++ .../components/tcm/tcmMedicineList.vue | 158 + .../components/tcm/tcmdiagnosisDialog.vue | 164 + vue3/src/views/doctorstation/index.vue | 532 ++ vue3/src/views/doctorstation/index1.vue | 878 +++ vue3/src/views/error/401.vue | 82 + vue3/src/views/error/404.vue | 227 + .../charge/advanceDeposit/components/api.js | 39 + .../components/chargeDialog.vue | 294 + .../advanceDeposit/components/patientList.vue | 387 ++ .../charge/advanceDeposit/index.vue | 554 ++ .../components/BasicForm.vue | 158 + .../components/InsuranceForm.vue | 186 + .../components/PatientDetail.vue | 83 + .../components/PatientList.vue | 63 + .../components/SearchForm.vue | 65 + .../feeTypeConversion/components/TopForm.vue | 99 + .../charge/feeTypeConversion/index.vue | 122 + .../register/components/accomplishList.vue | 141 + .../charge/register/components/api.js | 92 + .../charge/register/components/awaitList.vue | 152 + .../charge/register/components/existList.vue | 93 + .../charge/register/components/index.js | 4 + .../register/components/patientInfo.vue | 444 ++ .../register/components/patientRegister.vue | 326 + .../register/components/registerForm.vue | 404 ++ .../charge/register/index.vue | 38 + .../settlement/components/cancel/index.vue | 344 + .../components/home/components/derate.vue | 99 + .../components/home/components/index.ts | 13 + .../components/home/components/index.vue | 400 ++ .../home/components/invoiceSkip.vue | 99 + .../home/components/patientList.vue | 160 + .../home/components/patientListDialog.vue | 72 + .../home/components/preSettlement.vue | 33 + .../components/home/components/receipt.vue | 314 + .../components/home/components/refund.vue | 220 + .../settlement/components/home/index.vue | 742 +++ .../components/midway/components/index.ts | 21 + .../midway/components/patientList.vue | 134 + .../midway/components/selectSettlement.vue | 90 + .../settlement/components/midway/index.vue | 722 ++ .../charge/settlement/index.vue | 61 + .../inpatientDiagnosis/index.vue | 2 + .../inpatientRecord/index.vue | 2 + .../inHospitalManagement/listFee/index.vue | 2 + .../medicalRecord/index.vue | 2 + .../orderManage/index.vue | 2 + .../inHospitalManagement/portal/index.vue | 2 + vue3/src/views/inHospitalManagement/readme.md | 4 + .../surgeryManage/index.vue | 1 + vue3/src/views/index.vue | 93 + .../diagnose/chineseMedicineDialog.vue | 130 + .../diagnose/diagnoseFolder copy.vue | 86 + .../components/diagnose/diagnoseFolder.vue | 95 + .../home/components/diagnose/index.vue | 278 + .../diagnose/westernMedicineDialog.vue | 224 + .../home/components/order/index.vue | 187 + .../home/components/order/useOrder.js | 5883 +++++++++++++++++ .../home/components/patientCard/index.vue | 103 + .../patientCard/patientChildCard.vue | 107 + .../patientCard/patientParentCard.vue | 243 + .../home/components/patientList.vue | 377 ++ vue3/src/views/inpatientDoctor/home/index.js | 10 + vue3/src/views/inpatientDoctor/home/index.vue | 75 + .../inpatientDoctor/home/store/patient.js | 21 + vue3/src/views/inpatientDoctor/readme.md | 2 + .../components/discharged/index.vue | 26 + .../components/discharged/patientList.vue | 73 + .../components/discharged/review.vue | 91 + .../dischargedManagement/components/index.ts | 4 + .../components/waitForDischarge/index.vue | 26 + .../waitForDischarge/medicalOrderList.vue | 187 + .../waitForDischarge/patientList.vue | 72 + .../dischargedManagement/index.vue | 56 + .../drugDistribution/drugDistributionList.vue | 378 ++ .../inpatientNurse/drugDistribution/index.vue | 26 + .../drugDistribution/patientList.vue | 112 + .../inpatientNurse/home/components/api.js | 78 + .../home/components/patientCard.vue | 560 ++ .../home/components/patientDetialDialog.vue | 568 ++ .../home/components/transferDialog.vue | 235 + .../home/components/transferToBedDialog.vue | 162 + vue3/src/views/inpatientNurse/home/index.vue | 446 ++ .../inOut/components/bedAllocation.vue | 101 + .../inOut/components/bedcards.vue | 111 + .../inpatientNurse/inOut/components/index.ts | 11 + .../inOut/components/signEntryDialog.vue | 175 + .../inOut/components/transferInDialog.vue | 268 + vue3/src/views/inpatientNurse/inOut/index.vue | 50 + .../check/MedicalOrderManagement.vue | 301 + .../components/check/patientList.vue | 310 + .../execute/MedicalOrderManagement.vue | 306 + .../components/execute/patientList.vue | 310 + .../medicalOrderManagement/index.vue | 91 + .../components/addNursingRecordDialog.vue | 419 ++ .../nursingRecord/components/api.js | 113 + .../components/recordTemplate.vue | 146 + .../inpatientNurse/nursingRecord/index.vue | 343 + .../tprChart/components/addTprDialog.vue | 948 +++ .../inpatientNurse/tprChart/components/api.js | 124 + .../views/inpatientNurse/tprChart/index.vue | 636 ++ vue3/src/views/login.vue | 506 ++ .../billapproval/components/api.js | 102 + .../billapproval/index.vue | 360 + .../chkstock/chkstockBatch/components/api.js | 122 + .../chkstockBatch/components/medicineList.vue | 98 + .../chkstock/chkstockBatch/index.vue | 2257 +++++++ .../chkstock/chkstockPart/components/api.js | 122 + .../chkstockPart/components/medicineList.vue | 119 + .../chkstock/chkstockPart/index.vue | 2123 ++++++ .../chkstock/chkstockRecord/components/api.js | 107 + .../components/medicineList.vue | 98 + .../chkstock/chkstockRecord/index.vue | 442 ++ .../chkstock/components/api.js | 143 + .../chkstock/components/medicineList.vue | 144 + .../lossReportingManagement/lossReporting.js | 131 + .../components/lossReporting.vue | 138 + .../lossReporting/index.vue | 1660 +++++ .../lossReportingList/index.vue | 507 ++ .../purchaseDocument/components/api.js | 124 + .../components/medicineList.vue | 105 + .../purchaseDocument/index.vue | 1615 +++++ .../components/inventoryReceiptDialog.vue | 1069 +++ .../components/medicineList.vue | 98 + .../components/purchaseinventory.js | 140 + .../purchaseinventory/index.vue | 700 ++ .../requisitionManagement/components/api.js | 212 + .../requisitionManagement/components/list.vue | 115 + .../requisitionInventoryManagement/index.vue | 532 ++ .../requisitionManagement/index.vue | 1515 +++++ .../requisitionManagementList/index.vue | 507 ++ .../returningInventory/index.vue | 1535 +++++ .../returnedPurchase/components/api.js | 121 + .../components/transferManagement.vue | 112 + .../returnedPurchase/index.vue | 1601 +++++ .../awaitingMedicineDetails.vue | 357 + .../chkstockPartDetails.vue | 360 + .../statisticalManagement/index.vue | 568 ++ .../inventoryProductDetails.vue | 472 ++ .../lossReportingDetails.vue | 314 + .../medicationDetails.vue | 864 +++ .../outPatientCharge.vue | 720 ++ .../purchaseDocumentDetsils.vue | 455 ++ .../purchaseReturnDetsils.vue | 472 ++ .../statisticalManagement/reconciliation.vue | 301 + .../reconciliationDetails.vue | 516 ++ .../registrationFeeDetails.vue | 322 + .../requisitionDetails.vue | 516 ++ .../returnOrutboundDetails.vue | 467 ++ .../statisticalManagent.js | 299 + .../transferManagentDetails.vue | 340 + .../transferManagent/batchTransfer/index.vue | 1834 +++++ .../components/transferManagement.js | 153 + .../components/transferManagement.vue | 170 + .../transferManagent/index.vue | 1781 +++++ .../transferManagentList/index.vue | 506 ++ vue3/src/views/monitor/cache/index.vue | 132 + vue3/src/views/monitor/cache/list.vue | 246 + vue3/src/views/monitor/druid/index.vue | 13 + vue3/src/views/monitor/job/index.vue | 483 ++ vue3/src/views/monitor/job/log.vue | 277 + vue3/src/views/monitor/logininfor/index.vue | 225 + vue3/src/views/monitor/online/index.vue | 106 + vue3/src/views/monitor/operlog/index.vue | 301 + vue3/src/views/monitor/server/index.vue | 187 + .../outpatienrecords/component/api.js | 18 + .../outpatienrecords/index.vue | 139 + .../patientmanagement/component/api.js | 36 + .../patientmanagement/index.vue | 622 ++ .../westernmedicine/components/api.js | 59 + .../westernmedicine/index.vue | 833 +++ vue3/src/views/redirect/index.vue | 14 + vue3/src/views/register.vue | 219 + vue3/src/views/system/config/index.vue | 305 + vue3/src/views/system/dept/index.vue | 274 + vue3/src/views/system/dict/data.vue | 451 ++ vue3/src/views/system/dict/index.vue | 312 + vue3/src/views/system/menu/index.vue | 427 ++ vue3/src/views/system/notice/index.vue | 283 + vue3/src/views/system/post/index.vue | 277 + vue3/src/views/system/role/authUser.vue | 172 + vue3/src/views/system/role/index.vue | 559 ++ vue3/src/views/system/role/selectUser.vue | 140 + vue3/src/views/system/tenant/bindUser.vue | 128 + vue3/src/views/system/tenant/index.vue | 295 + vue3/src/views/system/tenant/setOption.vue | 223 + vue3/src/views/system/tenant/setUser.vue | 144 + vue3/src/views/system/user copy/authRole.vue | 112 + vue3/src/views/system/user copy/index.vue | 612 ++ .../views/system/user copy/profile/index.vue | 87 + .../system/user copy/profile/resetPwd.vue | 65 + .../system/user copy/profile/userAvatar.vue | 171 + .../system/user copy/profile/userInfo.vue | 67 + vue3/src/views/system/user/authRole.vue | 112 + vue3/src/views/system/user/index.vue | 1084 +++ vue3/src/views/system/user/profile/index.vue | 87 + .../views/system/user/profile/resetPwd.vue | 57 + .../views/system/user/profile/userAvatar.vue | 171 + .../views/system/user/profile/userInfo.vue | 67 + vue3/src/views/tool/gen/basicInfoForm.vue | 48 + vue3/src/views/tool/gen/createTable.vue | 46 + vue3/src/views/tool/gen/editTable.vue | 198 + vue3/src/views/tool/gen/genInfoForm.vue | 297 + vue3/src/views/tool/gen/importTable.vue | 118 + vue3/src/views/tool/gen/index.vue | 299 + vue3/src/views/tool/swagger/index.vue | 9 + vue3/vite.config.js | 71 + vue3/vite/plugins/auto-import.js | 12 + vue3/vite/plugins/compression.js | 28 + vue3/vite/plugins/index.js | 38 + vue3/vite/plugins/setup-extend.js | 5 + vue3/vite/plugins/svg-icon.js | 10 + "\350\257\264\346\230\216.txt" | 20 + 1787 files changed, 212112 insertions(+) create mode 100644 openhis-server/core-admin/src/main/java/com/core/web/controller/system/SysTenantController.java create mode 100644 openhis-server/core-admin/src/main/java/com/core/web/controller/system/SysTenantOptionController.java create mode 100644 openhis-server/core-common/src/main/java/com/core/common/enums/DeleteFlag.java create mode 100644 openhis-server/core-common/src/main/java/com/core/common/enums/TenantOptionDict.java create mode 100644 openhis-server/core-common/src/main/java/com/core/common/enums/TenantStatus.java create mode 100644 openhis-server/core-framework/src/main/java/com/core/framework/config/TenantContext.java create mode 100644 openhis-server/core-system/src/main/java/com/core/system/domain/SysTenant.java create mode 100644 openhis-server/core-system/src/main/java/com/core/system/domain/SysTenantOption.java create mode 100644 openhis-server/core-system/src/main/java/com/core/system/domain/SysUserTenant.java create mode 100644 openhis-server/core-system/src/main/java/com/core/system/domain/dto/SysTenantOptionDto.java create mode 100644 openhis-server/core-system/src/main/java/com/core/system/mapper/SysTenantMapper.java create mode 100644 openhis-server/core-system/src/main/java/com/core/system/mapper/SysTenantOptionMapper.java create mode 100644 openhis-server/core-system/src/main/java/com/core/system/mapper/SysUserTenantMapper.java create mode 100644 openhis-server/core-system/src/main/java/com/core/system/service/ISysTenantOptionService.java create mode 100644 openhis-server/core-system/src/main/java/com/core/system/service/ISysTenantService.java create mode 100644 openhis-server/core-system/src/main/java/com/core/system/service/ISysUserTenantService.java create mode 100644 openhis-server/core-system/src/main/java/com/core/system/service/impl/SysTenantOptionServiceImpl.java create mode 100644 openhis-server/core-system/src/main/java/com/core/system/service/impl/SysTenantServiceImpl.java create mode 100644 openhis-server/core-system/src/main/java/com/core/system/service/impl/SysUserTenantServiceImpl.java create mode 100644 openhis-server/core-system/src/main/resources/mapper/system/SysTenantMapper.xml create mode 100644 openhis-server/core-system/src/main/resources/mapper/system/SysTenantOptionMapper.xml create mode 100644 openhis-server/core-system/src/main/resources/mapper/system/SysUserTenantMapper.xml create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/config/HttpConfig.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/quartz/controller/SysJobController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/quartz/controller/SysJobLogController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/quartz/service/ISysJobLogService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/quartz/service/ISysJobService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/quartz/service/impl/SysJobLogServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/quartz/service/impl/SysJobServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/quartz/task/ExampleTask.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/quartz/task/RyTask.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/quartz/util/AbstractQuartzJob.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/quartz/util/QuartzDisallowConcurrentExecution.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/quartz/util/QuartzJobExecution.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/quartz/util/ScheduleUtils.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/controller/LocationController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationAddOrEditDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationInfoDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationPageParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/OrganizationDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/SelectableOrgDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/catalogmanage/appservice/ICatalogService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/catalogmanage/appservice/impl/CatalogServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/catalogmanage/controller/CatalogController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/catalogmanage/mapper/CatalogMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/IOutpatientPricingAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientPricingAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/controller/OutpatientPricingController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientRefundDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/OrgMetadata.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/OutpatientPricingInventoryDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/OutpatientPricingPriceDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/OutpatientRegistrationSettleParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/PricingProjectDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/RefundItemParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/mapper/OutpatientPricingAppMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/common/appservice/ICommonService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/common/appservice/impl/CommonServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/common/controller/CommonAppController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/InventoryItemDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/InventoryItemParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/LocationDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/LocationInventoryDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/UnitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/UnitQuantityDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/common/mapper/CommonAppMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IDiagTreatMAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/ItemDefinitionAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DiagTreatMAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/ItemDefinitionAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ActivityChildJsonDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ItemDefinitionDetailDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ItemDefinitionInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/mapper/ItemDefinitionAppMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAllergyIntolAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationChineseMedicalAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationElepPrescriptionService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationPtDetailsAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAllergyIntolAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationElepPrescriptionServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationPtDetailsAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAllergyIntolController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationChineseMedicalController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationElepPrescriptionController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationPtDetailsController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AllergyIntoInfoDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AllergyIntoInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/DeletePrescriptionInfoParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ElepMedicationInfoDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ElepPrescriptionInfoDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ElepPrescriptionInfoParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ElepPrescriptionInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/EncounterContractDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/PatientDetailsDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/RequestBaseDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/UpdateGroupDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/UpdateGroupIdParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationChineseMedicalAppMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationElepPrescriptionMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationPtDetailsAppMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/AdviceUtils.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/PrescriptionUtils.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/IAdmissionAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/IDepositAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/AdmissionAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/DepositAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/controller/DepositController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/AdmissionSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/AdmissionUpDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/DepositDetailDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/DepositInitPageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/DepositSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/mapper/AdmissionMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/mapper/DepositMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/ILossReportFormAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IProductDetailsAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IPurchaseReturnAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IRequisitionIssueAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IReturnIssueAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/LossReportFormAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ProductDetailsAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/PurchaseReturnAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/RequisitionIssueAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ReturnIssueAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/LossReportFormController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ProductDetailsController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/PurchaseReturnController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/RequisitionIssueController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ReturnIssueController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/BatchTransferSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryDetailsPageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryDetailsSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueDepartmentDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueDetailDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssuePageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/LossReportFormDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/LossReportFormInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/LossReportFormPageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/LossReportSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsPageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductStocktakingInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductStocktakingSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnDetailDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnPageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/StocktakingBatchSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/LossReportFormMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ProductDetailsMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ProductStocktakingMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/PurchaseReturnMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/RequisitionIssueMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ReturnIssueMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/appservice/INurseStationPendAdmAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/appservice/impl/NurseStationPendAdmAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/controller/NurseStationPendAdmController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/dto/BedForAdmissionDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/dto/BedForAdmissionInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/dto/PendingAdmissionDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/mapper/NurseStationPendAdmAppMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/IOutpatientDisposalService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/IOutpatientInfusionAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientDisposalServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientInfusionAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/controller/OutpatientDisposalController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/controller/OutpatientInfusionController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalActivityInfoDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalDeviceInfoDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalEncounterInfoPageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalExecuteInfoDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalInfoDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalPatientInfoDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalTempInfoDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientInfusionInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/mapper/OutpatientDisposalMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/mapper/OutpatientInfusionAppMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/patientmanage/dto/PatientInfoSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IChargeBillService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IEleInvoiceService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IPaymentRecService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/EleInvoiceServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/IChargeBillServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/PaymentRecServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/ChargeBillController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/EleInvoiceController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/PaymentReconciliationController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/CancelPaymentDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/CancelRegPaymentDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ChargeItemDetailVO.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ChargeItemDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ChargeItemGroupDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/Clinic2206OrderResultDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/Clinic2207OrderResultDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/Clinic2207OrderResultInfoDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/DispenseQuantityDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoiceChargeDetailDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoiceListDetailDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoicePatientInfoDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoicePaymentInfoDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoiceResultDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/InvoiceBaseInfoDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/MakeInvoiceDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentDetailDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentSettleDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentVO.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PrePaymentDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ReportVo.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ReturnBillVO.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/mapper/ChargeBillMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/mapper/EleInvoiceMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/mapper/PaymentMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/util/MD5Util.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/appservice/IActivityDeviceAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/appservice/IOrderGroupAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/ActivityDeviceAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/IOrderGroupAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/controller/ActivityDeviceController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/controller/OrderGroupController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/dto/ActivityDeviceDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/dto/ActivityDeviceInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrderGroupDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrderGroupInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/mapper/ActivityDeviceAppMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/mapper/OrderGroupAppMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IChineseMedicineDispenseAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicationDetailsAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicineConsumablesDispenseAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IPendingMedicationDetailsAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/ReturnMedicineAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IChineseMedicineDispenseAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IMedicineConsumablesDispenseAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicationDetailsAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/PendingMedicationDetailsAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/ReturnMedicineAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ChineseMedicineDispenseController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicationDetailsController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicineConsumablesDispenseController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/PendingMedicationDetailsController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ReturnMedicineController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseMedicineDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InventoryDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailedAccountPageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailsInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailsSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedRunningAccountPageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PendingMedicationPageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PendingMedicationSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/ReturnMedicineDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/ReturnMedicineInfoDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/ReturnMedicineInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ChineseMedicineDispenseMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicationDetailsMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicineConsumablesDispenseMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/PendingMedicationDetailsMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ReturnMedicineMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IChargeReportAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IInboundReportAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IInventoryProductReportAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/ILossReportAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IOutboundReportAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IPrintReportAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IRegisterReportAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IReturnIssueReportAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IStocktakingReportAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/ITransferReportAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/PurchaseReturnReportAppService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/ChargeReportAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/IPrintReportAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InboundReportAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InventoryProductReportAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/LossReportAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/OutboundReportAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/PurchaseReturnReportAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/RegisterReportAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/ReturnIssueReportAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/StocktakingReportAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/TransferReportAppServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/ChargeReportController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InboundReportController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InventoryProductReportController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/LossReportController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/OutboundReportController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/PrintReportController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/PurchaseReturnReportController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/RegisterReportController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/ReturnIssueReportController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/StocktakingReportController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/TransferReportController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/BottleLabelDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ChargeReportInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ChargeReportPageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ChargeReportSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/CkInspAppDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/DisposalDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InboundReportInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InboundReportPageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InboundReportSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InventoryProductReportPageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InventoryProductReportSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/LossReportPageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/LossReportSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutboundReportInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutboundReportPageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutboundReportSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutpatientSettlementDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PrescriptionPrintDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PurchaseReturnReportInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PurchaseReturnReportPageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PurchaseReturnReportSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/RegisterReportInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/RegisterReportPageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/RegisterReportSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReturnIssueReportInitDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReturnIssueReportPageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReturnIssueReportSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/StocktakingReportPageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/StocktakingReportSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/TransferReportPageDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/TransferReportSearchParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/ChargeReportMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/InboundReportMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/InventoryProductReportMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/LossReportMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/OutboundReportMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/PrintReportMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/PurchaseReturnReportMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/RegisterReportMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/ReturnIssueReportMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/StocktakingReportMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/TransferReportMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/config/YbServiceConfig.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbElepController.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Catalogue1312Output.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clearing3205AWebParma.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clinic2207OrderOutput.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clinic2208UnSetlInfoOutput.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/ClinicReg2201Output.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial13203WebParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3203AWebParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3203WebParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Info1101Output.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/PatientInfoDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Result.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/ResultBody.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3201WebParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3202WebParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3209AWebParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionDetailInfoDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionInfoDto.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionParam.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/mapper/YbElepMapper.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbEleBaseService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbEleHttpService.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbEleHttpServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbElepBaseServiceImpl.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/util/YbEleParamBuilderUtil.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Financial3203VO.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3201DetailVO.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3201VO.java create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3202VO.java create mode 100644 openhis-server/openhis-application/src/main/resources/application-cloud.yml create mode 100644 openhis-server/openhis-application/src/main/resources/application-local.yml create mode 100644 openhis-server/openhis-application/src/main/resources/application-nd.yml create mode 100644 openhis-server/openhis-application/src/main/resources/application-prod.yml create mode 100644 openhis-server/openhis-application/src/main/resources/application-test.yml create mode 100644 openhis-server/openhis-application/src/main/resources/http.yml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/LossReportFormMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/ProductDetailsMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/ProductStocktakingMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/PurchaseReturnMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/RequisitionIssueMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/ReturnIssueMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/catalogmanage/CatalogMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/chargemanage/OutpatientPricingAppMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/common/CommonAppMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/datadictionary/ItemDefinitionAppMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationChineseMedicalAppMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationElepPrescriptionMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationPtDetailsAppMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/inpatientmanage/AdmissionMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/inpatientmanage/DepositMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/nursestation/NurseStationPendAdmAppMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/outpatientmanage/OutpatientDisposalMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/outpatientmanage/OutpatientInfusionAppMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/paymentmanage/ChargeBillMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/paymentmanage/EleInvoiceMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/paymentmanage/PaymentMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/personalization/ActivityDeviceAppMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/personalization/OrderGroupAppMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/ChineseMedicineDispenseMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/MedicationDetailsMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/MedicineConsumablesDispenseMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/PendingMedicationDetailsMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/ReturnMedicineMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/reportmanage/ChargeReportMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/reportmanage/InboundReportMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/reportmanage/InventoryProductReportMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/reportmanage/LossReportMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/reportmanage/OutboundReportMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/reportmanage/PrintReportMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/reportmanage/PurchaseReturnReportMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/reportmanage/RegisterReportMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/reportmanage/ReturnIssueReportMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/reportmanage/StocktakingReportMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/reportmanage/TransferReportMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/ybmanage/MedicalInsuranceMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/mapper/ybmanage/YbElepMapper.xml create mode 100644 openhis-server/openhis-application/src/main/resources/properties/yb.properties create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/constant/YbCommonConstants.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/AdmissionMethod.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/AdmissionType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/AdviceOpType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/CatalogType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ChargeItemGenerateSource.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ContrastTypeEnum.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/Criticality.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/DbOpType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/DiagnosisCertainty.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/IdentifierStatusEnum.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/InsuranceLevel.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/InvoiceType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/LocationOperational.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/OrderGroupType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/PaymentOutcome.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/PrescriptionType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/Severity.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/StatisticsType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/SupplyRequestType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/medCategoryCode.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbChrgitmLv.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbClrStas.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbClrType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbClrWay.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDiagType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDoctorTitle.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDrordBhvr.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDrordType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDrugDosform.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDrugMedWay.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbEncounterClass.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbGender.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbHospApprFlag.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbIdDocumentType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbInOutDiagType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbInsuType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbInvChgType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbInvDataType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbIptDiseTypeCode.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbListType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMatnStas.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMdtrtCertType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedChrgItmType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedMdtrtType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedinsType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPayLoc.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPayment.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPharmacistTitle.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPrescriptionItemType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPrescriptionStatus.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPsnCertType.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPsnSetlWay.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbRxFlag.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbRxItemTypeCode.java create mode 100644 openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbUsedFrqu.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/OrgContrast.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/administration/mapper/OrgContrastMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/IOrgContrastService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrgContrastServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PaymentRecDetailDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PaymentResult.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PaymentedItemModel.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PrePaymentResult.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PrePaymentResultModel.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/sys/domain/OperationRecord.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/sys/domain/Option.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/sys/mapper/OperationRecordMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/sys/mapper/OptionMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/sys/service/IOperationRecordService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/sys/service/IOptionService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/sys/service/impl/OperationRecordServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/sys/service/impl/OptionServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/template/domain/ActivityDevice.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/template/domain/OrderGroup.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/template/mapper/ActivityDeviceMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/template/mapper/OrderGroupMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/template/service/IActivityDeviceService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/template/service/OrderGroupService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/template/service/impl/ActivityDeviceServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/template/service/impl/OrderGroupServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/workflow/domain/ElepMedicationRequest.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/workflow/mapper/ElepMedicationRequestMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/IElepMedicationRequestService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/impl/ElepMedicationRequestServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/domain/ClinicPreSettle.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/domain/ClinicReg.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/domain/ClinicSettle.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/domain/ClinicUnReg.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/domain/ClinicUnSettle.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/domain/DirectoryCheckRecord.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/domain/File.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/domain/FinancialApplyRecord.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/domain/FinancialReconcileRecord.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/domain/InfoPerson.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/domain/InventoryChangeRecord.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/domain/InventoryCheckRecord.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/domain/InventoryDelRecord.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/domain/InventoryPurchaseRecord.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/domain/InventoryPurchaseReturnRecord.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/domain/InventorySaleRecord.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/domain/InventorySaleReturnRecord.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/domain/Sign.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/BaseInfo.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/BaseParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/CancelPaymentDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/CancelRegPaymentDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Catalogue1312Output.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Catalogue1312QueryParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/ChargeItemDetailVO.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/ChargeItemDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/ChargeItemGroupDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clearing3204AParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clearing3205AParma.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clearing3205AResult.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clearing3205AWebParma.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clearing3206AParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clearing3206AResult.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2203DiseInfoParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2203Medical.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2203MedicalParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2204FeeDetailParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2204FeeDetailResult.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2204OrderParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2204OrderResult.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2205OrderParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2206FundPaymentResult.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2206OrderOutput.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2206OrderParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2206OrderResult.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2206OrderResultDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2206SetldetaiResult.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2207OrderResult.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2207OrderResultDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2207OrderResultInfoDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2208UnSetlInfoOutput.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2208UnSetlInfoParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Clinic2208UnSetlInfoResult.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/ClinicReg.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/ClinicReg2201Output.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/DispenseInventory3505Dto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/EleInvoiceChargeDetailDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/EleInvoiceListDetailDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/EleInvoicePatientInfoDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/EleInvoicePaymentInfoDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/EleInvoiceResultDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/FileDownload.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/FileResult.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Financial13203Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Financial13203Result.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Financial13203WebParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Financial3201Output.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Financial3201Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Financial3202FileParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Financial3202FileResult.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Financial3202OtherParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Financial3203AParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Financial3203AWebParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Financial3203Dto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Financial3203Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Financial3203WebParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Financial3204Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/FinancialSettlement3202Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/FinancialSettlement3202Result.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/FinancialSettlement3209AParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/FinancialSettlement3209AResult.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/FsiConsultation3101Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/FsiDiagnose3101Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/FsiEncounter3101Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/FsiFeedback3103DataParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/FsiFeedback3103WarnsParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/FsiOperation3101Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/FsiOrder3101Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/FsiPatient3101Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/FsiViolation3101Result.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/FsiViolationDetail3101Result.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/HospAdm2401DiseInfoParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/HospAdm2401MdtInfoParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/HospAdm2402DiseInfoParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/HospAdm2402DscgInfoParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/HospAdm2403AdmInfoParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/HospAdm2403DiseInfoParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/HospAdm2404AdmCnlParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/HospAdm2406SmAttrUpParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/HospAdm2407SmAttrSelectParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/HospAdm2407SmAttrSelectResult.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/HospDept3401AParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/HospDept3401Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/HospDept3402Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/HospDept3403Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/HospTrf2501ARefmedinParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/HospTrf2501RefmedinParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/HospTrfCxl2502Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Info1101Output.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Info1101PerinfoResult.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Info1101ReadcardParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Info5301Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Info5301SpecialConditionResult.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/InvoiceBaseInfoDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/MatAllowReg25007Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/MatAllowReg25007Result.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/MatAllowRegSel25008Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Medical3503Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Medical3505Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Medical3505Result.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Medical3506Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Medical3507Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Medical3508Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Medical3508Result.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/MedicalDirectory3301ListParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/MedicalDirectory3301Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/MedicalDirectory3302Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/MedicalInventory3501Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/MedicalInventory3502Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/MedicalPurchase3504Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/MedicalTraceNoDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/PatientInfoDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/PaymentDecDetailUniAccountDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/PaymentDetailDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/PaymentDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/PaymentSettleDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/PersBirthApprovalCnl25004Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/PersBirthApprovalSel25005Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/PersBirthRecord25003Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/PersChrDis2503Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/PersChrDisCxl2504Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/PersDesigPt2505Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/PersDesigPtCxl2506Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/PersMedApprovalCnl25006Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/PersMedRecord25001Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/PersMedSelect25002Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/PersMedSelect25002Result.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/PersUnintInj2507Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/PrePaymentDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Result.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/ResultBody.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Settlement3201DetailDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Settlement3201Dto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Settlement3201WebParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Settlement3202Dto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Settlement3202WebParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Settlement3209AWebParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Sign.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Sign1101Param.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/Sign9001Result.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/SupplyItemDetail3503Dto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/VeriPrescriptionDetailInfoDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/VeriPrescriptionInfoDto.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/VeriPrescriptionParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/dto/extData.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/mapper/ClinicPreSettleMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/mapper/ClinicSettleMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/mapper/ClinicUnRegMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/mapper/ClinicUnSettleMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/mapper/DirectoryCheckRecordMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/mapper/FinancialApplyRecordMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/mapper/FinancialReconcileRecordMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/mapper/InventoryChangeRecordMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/mapper/InventoryCheckRecordMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/mapper/InventoryDelRecordMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/mapper/InventoryPurchaseRecordMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/mapper/InventoryPurchaseReturnRecordMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/mapper/InventorySaleRecordMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/mapper/InventorySaleReturnRecordMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/mapper/MedicalInsuranceMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/mapper/PerinfoMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/mapper/RegMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/mapper/SignMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/model/CancelRegPaymentModel.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/model/Clinic2207OrderModel.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/model/Clinic2207OrderParam.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/model/OutpatientRegistrationModel.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/IClinicPreSettleService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/IClinicSettleService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/IClinicUnRegService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/IClinicUnSettleService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/IDirectoryCheckRecordService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/IFinancialApplyRecordService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/IFinancialReconcileRecordService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/IInventoryChangeRecordService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/IInventoryCheckRecordService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/IInventoryDelRecordService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/IInventoryPurchaseRecordService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/IInventoryPurchaseReturnRecordService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/IInventorySaleRecordService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/IInventorySaleReturnRecordService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/IPerinfoService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/IRegService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/ISignService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/YbDao.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/YbHttpUtils.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/YbManager.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/impl/ClinicPreSettleServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/impl/ClinicSettleServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/impl/ClinicUnRegServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/impl/ClinicUnSettleServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/impl/DirectoryCheckRecordServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/impl/FinancialApplyRecordServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/impl/FinancialReconcileRecordServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/impl/InventoryChangeRecordServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/impl/InventoryCheckRecordServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/impl/InventoryDelRecordServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/impl/InventoryPurchaseRecordServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/impl/InventoryPurchaseReturnRecordServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/impl/InventorySaleRecordServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/impl/InventorySaleReturnRecordServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/impl/PerinfoServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/impl/RegServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/service/impl/SignServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/util/CommonConstant.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/yb/util/YbParamBuilderUtil.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/domain/CatalogDrugInfo.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/domain/CatalogMedicalConsumables.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/domain/CatalogMedicalHerbInfo.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/domain/CatalogMedicalService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/domain/CatalogSpecialDisease.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/domain/CatalogSpecialInsuranceDisease.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/domain/CatalogSurgeryStandardDirectory.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/domain/CatalogWesternDisease.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/domain/CatalogZyDiseaseDiagnosis.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/domain/CatalogZySyndrome.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/mapper/CatalogDrugInfoMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/mapper/CatalogMedicalConsumablesMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/mapper/CatalogMedicalHerbInfoMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/mapper/CatalogMedicalServiceMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/mapper/CatalogSpecialDiseaseMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/mapper/CatalogSurgeryStandardDirectoryMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/mapper/CatalogWesternDiseaseMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/mapper/CatalogZyDiseaseDiagnosisMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/mapper/CatalogZySyndromeMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/service/ICatalogDrugInfoService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/service/ICatalogMedicalConsumablesService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/service/ICatalogMedicalHerbInfoService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/service/ICatalogMedicalServiceService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/service/ICatalogSpecialDiseaseService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/service/ICatalogSurgeryStandardDirectoryService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/service/ICatalogWesternDiseaseService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/service/ICatalogZyDiseaseDiagnosisService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/service/ICatalogZySyndromeService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/service/impl/CatalogDrugInfoServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/service/impl/CatalogMedicalConsumablesServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/service/impl/CatalogMedicalHerbInfoServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/service/impl/CatalogMedicalServiceServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/service/impl/CatalogSpecialDiseaseServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/service/impl/CatalogSurgeryStandardDirectoryServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/service/impl/CatalogWesternDiseaseServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/service/impl/CatalogZyDiseaseDiagnosisServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybcatalog/service/impl/CatalogZySyndromeServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/ElepMedresultDetail.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/ElepMedresultInfo.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/ElepMedresultInput.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/ElepQuerDiagnosisInfo.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/ElepQuerPrescriptionDetail.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/ElepQuerPrescriptionInfo.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/ElepQuerPrescriptionInput.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/ElepQuerVisitInfo.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/ElepRevokeInput.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/ElepRevokeOutput.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/ElepSignatureInput.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/ElepSignatureOutput.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/ElepUploadInput.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/ElepUploadOutput.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/ElepVeriDiagnosisInfo.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/ElepVeriPrescriptionDetail.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/ElepVeriPrescriptionInfo.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/ElepVeriPrescriptionOutput.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/ElepVeriVisitInfo.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/InformationInquiry.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/MedicationResultInquiry.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/PreCheckPrescription.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/domain/QueryPrescription.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/mapper/ElepMedresultDetailMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/mapper/ElepMedresultInfoMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/mapper/ElepMedresultInputMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/mapper/ElepQuerDiagnosisInfoMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/mapper/ElepQuerPrescriptionDetailMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/mapper/ElepQuerPrescriptionInfoMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/mapper/ElepQuerPrescriptionInputMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/mapper/ElepQuerVisitInfoMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/mapper/ElepRevokeInputMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/mapper/ElepRevokeOutputMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/mapper/ElepSignatureInputMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/mapper/ElepSignatureOutputMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/mapper/ElepUploadInputMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/mapper/ElepUploadOutputMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/mapper/ElepVeriDiagnosisInfoMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/mapper/ElepVeriPrescriptionDetailMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/mapper/ElepVeriPrescriptionInfoMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/mapper/ElepVeriPrescriptionOutputMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/mapper/ElepVeriVisitInfoMapper.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/IElepMedresultDetailService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/IElepMedresultInfoService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/IElepMedresultInputService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/IElepQuerDiagnosisInfoService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/IElepQuerPrescriptionDetailService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/IElepQuerPrescriptionInfoService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/IElepQuerPrescriptionInputService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/IElepQuerVisitInfoService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/IElepRevokeInputService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/IElepRevokeOutputService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/IElepSignatureInputService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/IElepSignatureOutputService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/IElepUploadInputService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/IElepUploadOutputService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/IElepVeriDiagnosisInfoService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/IElepVeriPrescriptionDetailService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/IElepVeriPrescriptionInfoService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/IElepVeriPrescriptionOutputService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/IElepVeriVisitInfoService.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/impl/ElepMedresultDetailServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/impl/ElepMedresultInfoServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/impl/ElepMedresultInputServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/impl/ElepQuerDiagnosisInfoServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/impl/ElepQuerPrescriptionDetailServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/impl/ElepQuerPrescriptionInfoServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/impl/ElepQuerPrescriptionInputServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/impl/ElepQuerVisitInfoServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/impl/ElepRevokeInputServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/impl/ElepRevokeOutputServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/impl/ElepSignatureInputServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/impl/ElepSignatureOutputServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/impl/ElepUploadInputServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/impl/ElepUploadOutputServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/impl/ElepVeriDiagnosisInfoServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/impl/ElepVeriPrescriptionDetailServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/impl/ElepVeriPrescriptionInfoServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/impl/ElepVeriPrescriptionOutputServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/java/com/openhis/ybelep/service/impl/ElepVeriVisitInfoServiceImpl.java create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/administration/OrgContrastMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/sys/OperationRecordMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/sys/OptionMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/template/ActivityDeviceMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/template/OrderGroupMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/workflow/ElepMedicationRequestMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/yb/ClincSettleMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/yb/ClincUnSettleMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/yb/ClinicPreSettleMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/yb/ClinicUnRegMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/yb/DirectoryCheckRecordMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/yb/FinancialApplyRecordMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/yb/FinancialReconcileRecordMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/yb/InventoryChangeRecordMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/yb/InventoryCheckRecordMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/yb/InventoryDelRecordMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/yb/InventoryPurchaseRecordMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/yb/InventoryPurchaseReturnRecordMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/yb/InventorySaleRecordMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/yb/InventorySaleReturnRecordMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/yb/MedicalInsuranceMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/yb/PerinfoMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/yb/RegMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/yb/SignMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/yb/YbElepMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybcatalog/CatalogDrugInfoMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybcatalog/CatalogMedicalConsumablesMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybcatalog/CatalogMedicalHerbInfoMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybcatalog/CatalogMedicalServiceMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybcatalog/CatalogSpecialDiseaseMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybcatalog/CatalogSurgeryStandardDirectoryMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybcatalog/CatalogWesternDiseaseMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybcatalog/CatalogZyDiseaseDiagnosisMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybcatalog/CatalogZySyndromeMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybelep/ElepMedresultDetailMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybelep/ElepMedresultInfoMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybelep/ElepMedresultInputMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybelep/ElepQuerDiagnosisInfoMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybelep/ElepQuerPrescriptionDetailMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybelep/ElepQuerPrescriptionInfoMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybelep/ElepQuerPrescriptionInputMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybelep/ElepQuerVisitInfoMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybelep/ElepRevokeInputMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybelep/ElepRevokeOutputMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybelep/ElepSignatureInputMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybelep/ElepSignatureOutputMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybelep/ElepUploadInputMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybelep/ElepUploadOutputMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybelep/ElepVeriDiagnosisInfoMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybelep/ElepVeriPrescriptionDetailMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybelep/ElepVeriPrescriptionInfoMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybelep/ElepVeriPrescriptionOutputMapper.xml create mode 100644 openhis-server/openhis-domain/src/main/resources/mapper/ybelep/ElepVeriVisitInfoMapper.xml create mode 100644 openhis-server/openhis-ybapp/pom.xml create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/OpenHisYbApplication.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/annotation/ElepHandlerInt.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/annotation/HandlerInt.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/component/ElepHandlerIntDispatcher.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/component/HandlerIntDispatcher.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/config/HospitalInfoConfig.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/config/InterfaceConfig.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/config/Tenant.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/constant/ClincStatusConst.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/constant/CommonConstant.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/constant/InputDataTypeConst.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/constant/InterFaceResultConst.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/context/ElepHandlerServiceContext.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/context/HandlerServiceContext.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/controller/YbController.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/controller/YbElepController.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/BaseRequest.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/BaseResponse.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ClinicPreSettle.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ClinicReg.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ClinicSettle.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ClinicUnReg.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ClinicUnSettle.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/DirectoryCheckRecord.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ElepMedresultDetail.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ElepMedresultInfo.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ElepMedresultInput.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ElepQuerDiagnosisInfo.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ElepQuerPrescriptionDetail.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ElepQuerPrescriptionInfo.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ElepQuerPrescriptionInput.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ElepQuerVisitInfo.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ElepRevokeInput.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ElepRevokeOutput.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ElepSignatureInput.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ElepSignatureOutput.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ElepUploadInput.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ElepUploadOutput.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ElepVeriDiagnosisInfo.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ElepVeriPrescriptionDetail.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ElepVeriPrescriptionInfo.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ElepVeriPrescriptionOutput.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/ElepVeriVisitInfo.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/File.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/FinancialApplyRecord.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/FinancialReconcileRecord.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/InfoPerson.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/InformationInquiry.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/InventoryChangeRecord.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/InventoryCheckRecord.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/InventoryDelRecord.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/InventoryPurchaseRecord.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/InventoryPurchaseReturnRecord.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/InventorySaleRecord.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/InventorySaleReturnRecord.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/MedicationResultInquiry.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/PreCheckPrescription.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/QueryPrescription.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/domain/Sign.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/enums/ElepServiceAdrEnum.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/enums/ServiceAdrEnum.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/listener/ElepHandlerServiceListener.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/listener/HandlerServiceListener.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/pojo/InputData.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/pojo/PDFInputDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/pojo/RequestData.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/pojo/ResultBody.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/pojo/TransBody.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/FileService.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/HandlerService.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/IElepHandlerService.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/IYbElepService.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/YbService.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/ElepHandlerServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/HandlerServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/YbElepServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/YbServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/clinc/ClinicDiagInfoUpServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/clinc/ClinicFeeDetailDelServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/clinc/ClinicFeeDetailUpServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/clinc/ClinicPreSetlServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/clinc/ClinicReRegServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/clinc/ClinicReSetlServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/clinc/ClinicRegServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/clinc/ClinicSetlServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/common/MedresultServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/common/PreCheckPrescriptionServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/common/QuerPrescriptionServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/common/RevokeServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/common/SignatureServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/common/UploadServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/directory/DrugContrastUpServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/directory/RepealDrugContrastUpServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/down/DownloadServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/drugstore/DrugPreSetlServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/drugstore/DrugReSetlServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/drugstore/DrugSetlServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/filing/FixmedinsServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/filing/ReFixmedinsServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/filing/ReSlowdiseaseServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/filing/SlowdiseServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/info/CatalogueInfoServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/info/GetMedicalInfoServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/info/GetPatientSpecialConditionServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/info/GetPersonInfoServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/info/SignInServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/info/SignOutServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/inhospital/DischargedServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/inhospital/FeeDetailServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/inhospital/HaPreSetlServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/inhospital/HaReSetlServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/inhospital/HaSetlServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/inhospital/HospitalizedServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/inhospital/ReDischargedServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/inhospital/ReFeeDetailServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/inhospital/ReHospitalizedServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/inventory/PhysicalInventoryChangeServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/inventory/PhysicalInventoryServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/inventory/PurchasingServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/inventory/PurgeProductRecordsServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/inventory/StockReplenishmentServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/inventory/StockUnReplenishmentServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/inventory/UnPurchasingServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/reconciliation/DayReconciliationServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/reconciliation/DetailReconciliationServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/reconciliation/MonthSetlApplyAServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/reconciliation/MonthSetlApplyServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/reconciliation/MonthUnSetlApplyAServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/reconciliation/MonthUnSetlApplyServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/reconciliation/ReconciliationOrgServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/reconciliation/ReconciliationServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/reconciliation/ThreePartReconciliationServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/service/impl/reconciliation/TotalReconciliationServiceImpl.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/utils/BCUtils.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/utils/BusnessIdUtil.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/utils/CusAccessObjectUtil.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/utils/EasyGmUtils.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/utils/HseEncAndDecUtil.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/utils/HttpClientUtil.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/utils/PDFTemplateFillerUtil.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/utils/RedisUtil.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/utils/SignUtil.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/utils/StringUtil.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/BaseInfo.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/BaseParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/CancelPaymentDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/CancelRegPaymentDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Catalogue1312Output.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Catalogue1312QueryParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/ChargeItemDetailVO.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/ChargeItemDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clearing3204AParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clearing3205AParma.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clearing3205AResult.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clearing3205AWebParma.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clearing3206AParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clearing3206AResult.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2203DiseInfoParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2203Medical.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2203MedicalParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2204FeeDetailParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2204FeeDetailResult.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2204OrderParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2204OrderResult.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2205OrderParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2206FundPaymentResult.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2206OrderOutput.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2206OrderParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2206OrderResult.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2206OrderResultDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2206SetldetaiResult.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2207OrderResult.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2207OrderResultDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2207OrderResultInfoDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2208UnSetlInfoOutput.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2208UnSetlInfoParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Clinic2208UnSetlInfoResult.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/ClinicReg.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/ClinicReg2201Output.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/DispenseInventory3505Dto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/EleInvoiceChargeDetailDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/EleInvoiceListDetailDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/EleInvoicePatientInfoDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/EleInvoicePaymentInfoDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/EleInvoiceResultDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/FileDownload.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/FileResult.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Financial13203Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Financial13203Result.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Financial13203WebParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Financial3201Output.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Financial3201Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Financial3202FileParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Financial3202FileResult.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Financial3203AParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Financial3203AWebParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Financial3203Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Financial3203VO.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Financial3203WebParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Financial3204Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/FinancialSettlement3202Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/FinancialSettlement3202Result.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/FinancialSettlement3209AParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/FinancialSettlement3209AResult.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/FsiConsultation3101Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/FsiDiagnose3101Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/FsiEncounter3101Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/FsiFeedback3103DataParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/FsiFeedback3103WarnsParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/FsiOperation3101Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/FsiOrder3101Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/FsiPatient3101Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/FsiViolation3101Result.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/FsiViolationDetail3101Result.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/HospAdm2401DiseInfoParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/HospAdm2401MdtInfoParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/HospAdm2402DiseInfoParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/HospAdm2402DscgInfoParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/HospAdm2403AdmInfoParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/HospAdm2403DiseInfoParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/HospAdm2404AdmCnlParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/HospAdm2406SmAttrUpParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/HospAdm2407SmAttrSelectParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/HospAdm2407SmAttrSelectResult.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/HospDept3401AParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/HospDept3401Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/HospDept3402Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/HospDept3403Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/HospTrf2501ARefmedinParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/HospTrf2501RefmedinParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/HospTrfCxl2502Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Info1101Output.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Info1101PerinfoResult.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Info1101ReadcardParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Info5301Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Info5301SpecialConditionResult.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/InvoiceBaseInfoDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/LoginUser.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/MatAllowReg25007Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/MatAllowReg25007Result.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/MatAllowRegSel25008Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Medical3503Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Medical3505Model.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Medical3505Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Medical3505Result.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Medical3506Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Medical3507Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Medical3508Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Medical3508Result.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/MedicalDirectory3301ListParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/MedicalDirectory3301Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/MedicalDirectory3302Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/MedicalDirectory3302ParamDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/MedicalInventory3501Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/MedicalInventory3502Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/MedicalPurchase3504Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/MedicalTraceNoDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/PatientInfoDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/PaymentDetailDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/PaymentDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/PaymentSettleDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/PaymentVO.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/PersBirthApprovalCnl25004Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/PersBirthApprovalSel25005Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/PersBirthRecord25003Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/PersChrDis2503Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/PersChrDisCxl2504Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/PersDesigPt2505Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/PersDesigPtCxl2506Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/PersMedApprovalCnl25006Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/PersMedRecord25001Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/PersMedSelect25002Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/PersMedSelect25002Result.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/PersUnintInj2507Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/PrePaymentDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Result.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/ResultBody.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Settlement3201DetailVO.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Settlement3201VO.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Settlement3201WebParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Settlement3202VO.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Settlement3202WebParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Settlement3209AWebParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Sign.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Sign1101Param.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/Sign9001Result.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/SupplyItemDetail3503Dto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/VeriPrescriptionDetailInfoDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/VeriPrescriptionInfoDto.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/VeriPrescriptionParam.java create mode 100644 openhis-server/openhis-ybapp/src/main/java/com/openhis/vo/extData.java create mode 100644 openhis-server/openhis-ybapp/src/main/resources/application-druid.yml create mode 100644 openhis-server/openhis-ybapp/src/main/resources/application-prod.yml create mode 100644 openhis-server/openhis-ybapp/src/main/resources/application.yml create mode 100644 openhis-server/openhis-ybapp/src/main/resources/banner.txt create mode 100644 openhis-server/openhis-ybapp/src/main/resources/config.properties create mode 100644 openhis-server/openhis-ybapp/src/main/resources/config/flow.el.xml create mode 100644 openhis-server/openhis-ybapp/src/main/resources/config/hospital-config.properties create mode 100644 openhis-server/openhis-ybapp/src/main/resources/config/sys-config.properties create mode 100644 openhis-server/openhis-ybapp/src/main/resources/config/tenant-config.properties create mode 100644 openhis-server/openhis-ybapp/src/main/resources/logback.xml create mode 100644 openhis-server/openhis-ybapp/src/main/resources/mybatis/mybatis-config.xml create mode 100644 vue3/.env.development create mode 100644 vue3/.env.production create mode 100644 vue3/.env.staging create mode 100644 vue3/.prettierrc.cjs create mode 100644 vue3/.stylelintrc.cjs create mode 100644 vue3/LICENSE create mode 100644 vue3/README.md create mode 100644 vue3/html/ie.html create mode 100644 vue3/index.html create mode 100644 vue3/package.json create mode 100644 vue3/public/favicon.ico create mode 100644 vue3/src/App.vue create mode 100644 vue3/src/action/nurseStation/temperatureSheet/ViewConfig.js create mode 100644 vue3/src/action/nurseStation/temperatureSheet/config.js create mode 100644 vue3/src/action/nurseStation/temperatureSheet/dataProcess.js create mode 100644 vue3/src/action/nurseStation/temperatureSheet/datas.js create mode 100644 vue3/src/action/nurseStation/temperatureSheet/drawfn.js create mode 100644 vue3/src/action/nurseStation/temperatureSheet/index.js create mode 100644 vue3/src/action/nurseStation/temperatureSheet/line.js create mode 100644 vue3/src/action/nurseStation/temperatureSheet/template.js create mode 100644 vue3/src/action/nurseStation/temperatureSheet/utils.js create mode 100644 vue3/src/api/login.js create mode 100644 vue3/src/api/menu.js create mode 100644 vue3/src/api/monitor/cache.js create mode 100644 vue3/src/api/monitor/job.js create mode 100644 vue3/src/api/monitor/jobLog.js create mode 100644 vue3/src/api/monitor/logininfor.js create mode 100644 vue3/src/api/monitor/online.js create mode 100644 vue3/src/api/monitor/operlog.js create mode 100644 vue3/src/api/monitor/server.js create mode 100644 vue3/src/api/system/config.js create mode 100644 vue3/src/api/system/dept.js create mode 100644 vue3/src/api/system/dict/data.js create mode 100644 vue3/src/api/system/dict/type.js create mode 100644 vue3/src/api/system/menu.js create mode 100644 vue3/src/api/system/notice.js create mode 100644 vue3/src/api/system/post.js create mode 100644 vue3/src/api/system/role.js create mode 100644 vue3/src/api/system/tenant.js create mode 100644 vue3/src/api/system/user copy.js create mode 100644 vue3/src/api/system/user.js create mode 100644 vue3/src/api/tool/gen.js create mode 100644 vue3/src/assets/401_images/401.gif create mode 100644 vue3/src/assets/404_images/404.png create mode 100644 vue3/src/assets/404_images/404_cloud.png create mode 100644 vue3/src/assets/fonts/HarmonyOS_Sans_Black.ttf create mode 100644 vue3/src/assets/fonts/HarmonyOS_Sans_Bold.ttf create mode 100644 vue3/src/assets/fonts/HarmonyOS_Sans_Light.ttf create mode 100644 vue3/src/assets/fonts/HarmonyOS_Sans_Medium.ttf create mode 100644 vue3/src/assets/fonts/HarmonyOS_Sans_Regular.ttf create mode 100644 vue3/src/assets/fonts/HarmonyOS_Sans_Thin.ttf create mode 100644 vue3/src/assets/icons/svg/404.svg create mode 100644 vue3/src/assets/icons/svg/bug.svg create mode 100644 vue3/src/assets/icons/svg/build.svg create mode 100644 vue3/src/assets/icons/svg/button.svg create mode 100644 vue3/src/assets/icons/svg/cascader.svg create mode 100644 vue3/src/assets/icons/svg/chart.svg create mode 100644 vue3/src/assets/icons/svg/checkbox.svg create mode 100644 vue3/src/assets/icons/svg/clipboard.svg create mode 100644 vue3/src/assets/icons/svg/code.svg create mode 100644 vue3/src/assets/icons/svg/color.svg create mode 100644 vue3/src/assets/icons/svg/component.svg create mode 100644 vue3/src/assets/icons/svg/dashboard.svg create mode 100644 vue3/src/assets/icons/svg/date-range.svg create mode 100644 vue3/src/assets/icons/svg/date.svg create mode 100644 vue3/src/assets/icons/svg/dict.svg create mode 100644 vue3/src/assets/icons/svg/documentation.svg create mode 100644 vue3/src/assets/icons/svg/download.svg create mode 100644 vue3/src/assets/icons/svg/drag.svg create mode 100644 vue3/src/assets/icons/svg/druid.svg create mode 100644 vue3/src/assets/icons/svg/edit.svg create mode 100644 vue3/src/assets/icons/svg/education.svg create mode 100644 vue3/src/assets/icons/svg/email.svg create mode 100644 vue3/src/assets/icons/svg/example.svg create mode 100644 vue3/src/assets/icons/svg/excel.svg create mode 100644 vue3/src/assets/icons/svg/exit-fullscreen.svg create mode 100644 vue3/src/assets/icons/svg/eye-open.svg create mode 100644 vue3/src/assets/icons/svg/eye.svg create mode 100644 vue3/src/assets/icons/svg/form.svg create mode 100644 vue3/src/assets/icons/svg/fullscreen.svg create mode 100644 vue3/src/assets/icons/svg/github.svg create mode 100644 vue3/src/assets/icons/svg/guide.svg create mode 100644 vue3/src/assets/icons/svg/icon.svg create mode 100644 vue3/src/assets/icons/svg/input.svg create mode 100644 vue3/src/assets/icons/svg/international.svg create mode 100644 vue3/src/assets/icons/svg/job.svg create mode 100644 vue3/src/assets/icons/svg/language.svg create mode 100644 vue3/src/assets/icons/svg/link.svg create mode 100644 vue3/src/assets/icons/svg/list.svg create mode 100644 vue3/src/assets/icons/svg/lock.svg create mode 100644 vue3/src/assets/icons/svg/log.svg create mode 100644 vue3/src/assets/icons/svg/logininfor.svg create mode 100644 vue3/src/assets/icons/svg/message.svg create mode 100644 vue3/src/assets/icons/svg/money.svg create mode 100644 vue3/src/assets/icons/svg/monitor.svg create mode 100644 vue3/src/assets/icons/svg/nested.svg create mode 100644 vue3/src/assets/icons/svg/number.svg create mode 100644 vue3/src/assets/icons/svg/online.svg create mode 100644 vue3/src/assets/icons/svg/password.svg create mode 100644 vue3/src/assets/icons/svg/pdf.svg create mode 100644 vue3/src/assets/icons/svg/people.svg create mode 100644 vue3/src/assets/icons/svg/peoples.svg create mode 100644 vue3/src/assets/icons/svg/phone.svg create mode 100644 vue3/src/assets/icons/svg/post.svg create mode 100644 vue3/src/assets/icons/svg/qq.svg create mode 100644 vue3/src/assets/icons/svg/question.svg create mode 100644 vue3/src/assets/icons/svg/radio.svg create mode 100644 vue3/src/assets/icons/svg/rate.svg create mode 100644 vue3/src/assets/icons/svg/redis-list.svg create mode 100644 vue3/src/assets/icons/svg/redis.svg create mode 100644 vue3/src/assets/icons/svg/row.svg create mode 100644 vue3/src/assets/icons/svg/search.svg create mode 100644 vue3/src/assets/icons/svg/select.svg create mode 100644 vue3/src/assets/icons/svg/server.svg create mode 100644 vue3/src/assets/icons/svg/shopping.svg create mode 100644 vue3/src/assets/icons/svg/size.svg create mode 100644 vue3/src/assets/icons/svg/skill.svg create mode 100644 vue3/src/assets/icons/svg/slider.svg create mode 100644 vue3/src/assets/icons/svg/star.svg create mode 100644 vue3/src/assets/icons/svg/swagger.svg create mode 100644 vue3/src/assets/icons/svg/switch.svg create mode 100644 vue3/src/assets/icons/svg/system.svg create mode 100644 vue3/src/assets/icons/svg/tab.svg create mode 100644 vue3/src/assets/icons/svg/table.svg create mode 100644 vue3/src/assets/icons/svg/textarea.svg create mode 100644 vue3/src/assets/icons/svg/theme.svg create mode 100644 vue3/src/assets/icons/svg/time-range.svg create mode 100644 vue3/src/assets/icons/svg/time.svg create mode 100644 vue3/src/assets/icons/svg/tool.svg create mode 100644 vue3/src/assets/icons/svg/tree-table.svg create mode 100644 vue3/src/assets/icons/svg/tree.svg create mode 100644 vue3/src/assets/icons/svg/upload.svg create mode 100644 vue3/src/assets/icons/svg/user.svg create mode 100644 vue3/src/assets/icons/svg/validCode.svg create mode 100644 vue3/src/assets/icons/svg/wechat.svg create mode 100644 vue3/src/assets/icons/svg/zip.svg create mode 100644 vue3/src/assets/images/ODLS.png create mode 100644 vue3/src/assets/images/dark.svg create mode 100644 vue3/src/assets/images/jlau.jpg create mode 100644 vue3/src/assets/images/light.svg create mode 100644 vue3/src/assets/images/login-background.jpg create mode 100644 vue3/src/assets/images/logo_bg.jpg create mode 100644 vue3/src/assets/images/pay.png create mode 100644 vue3/src/assets/images/profile.jpg create mode 100644 vue3/src/assets/images/user.png create mode 100644 vue3/src/assets/logo/logo.png create mode 100644 vue3/src/assets/logo/logoBlack.png create mode 100644 vue3/src/assets/logo/logoNew.png create mode 100644 vue3/src/assets/styles/btn.scss create mode 100644 vue3/src/assets/styles/element-ui.scss create mode 100644 vue3/src/assets/styles/font.scss create mode 100644 vue3/src/assets/styles/index.scss create mode 100644 vue3/src/assets/styles/mixin.scss create mode 100644 vue3/src/assets/styles/openhis.scss create mode 100644 vue3/src/assets/styles/sidebar.scss create mode 100644 vue3/src/assets/styles/transition.scss create mode 100644 vue3/src/assets/styles/variables.module.scss create mode 100644 vue3/src/components/Auto/PfPatientCardB/PfPatientCard.vue create mode 100644 vue3/src/components/Auto/PfPatientCardB/index.js create mode 100644 vue3/src/components/Auto/PfPatientCardB/index.vue create mode 100644 vue3/src/components/Auto/printBills/bedCard.vue create mode 100644 vue3/src/components/Auto/printBills/changeShiftBill.vue create mode 100644 vue3/src/components/Auto/printBills/exeOrderSheet.vue create mode 100644 vue3/src/components/Auto/printBills/injectLabel.vue create mode 100644 vue3/src/components/Auto/printBills/injectOrderSheet.vue create mode 100644 vue3/src/components/Auto/printBills/labelGroup.vue create mode 100644 vue3/src/components/Auto/printBills/sheetGroup.vue create mode 100644 vue3/src/components/Auto/printBills/temperatureSheet.vue create mode 100644 vue3/src/components/Auto/printBills/triageTicket.vue create mode 100644 vue3/src/components/Auto/printBills/triageTicketGroup.vue create mode 100644 vue3/src/components/Auto/printBills/triageTicketNew.vue create mode 100644 vue3/src/components/Auto/printBills/wristBill.vue create mode 100644 vue3/src/components/Breadcrumb/index.vue create mode 100644 vue3/src/components/Crontab/day.vue create mode 100644 vue3/src/components/Crontab/hour.vue create mode 100644 vue3/src/components/Crontab/index.vue create mode 100644 vue3/src/components/Crontab/min.vue create mode 100644 vue3/src/components/Crontab/month.vue create mode 100644 vue3/src/components/Crontab/result.vue create mode 100644 vue3/src/components/Crontab/second.vue create mode 100644 vue3/src/components/Crontab/week.vue create mode 100644 vue3/src/components/Crontab/year.vue create mode 100644 vue3/src/components/DictTag/index.vue create mode 100644 vue3/src/components/Editor/index.vue create mode 100644 vue3/src/components/FileUpload/index.vue create mode 100644 vue3/src/components/Hamburger/index.vue create mode 100644 vue3/src/components/HeaderSearch/index.vue create mode 100644 vue3/src/components/IconSelect/index.vue create mode 100644 vue3/src/components/IconSelect/requireIcons.js create mode 100644 vue3/src/components/ImagePreview/index.vue create mode 100644 vue3/src/components/ImageUpload/index.vue create mode 100644 vue3/src/components/OpenHis/Doc/index.vue create mode 100644 vue3/src/components/OpenHis/popoverList/index.vue create mode 100644 vue3/src/components/Pagination/index.vue create mode 100644 vue3/src/components/ParentView/index.vue create mode 100644 vue3/src/components/RightToolbar/index.vue create mode 100644 vue3/src/components/Screenfull/index.vue create mode 100644 vue3/src/components/SizeSelect/index.vue create mode 100644 vue3/src/components/SvgIcon/index.vue create mode 100644 vue3/src/components/SvgIcon/svgicon.js create mode 100644 vue3/src/components/TopNav/index.vue create mode 100644 vue3/src/components/TreeSelect/index.vue create mode 100644 vue3/src/components/iFrame/index.vue create mode 100644 vue3/src/components/patientBar/components/BallTag.vue create mode 100644 vue3/src/components/patientBar/inPatientBarDoctorFold.vue create mode 100644 vue3/src/directive/common/clickOutsideRow.js create mode 100644 vue3/src/directive/common/copyText.js create mode 100644 vue3/src/directive/common/horizontalScroll.js create mode 100644 vue3/src/directive/index.js create mode 100644 vue3/src/directive/permission/hasPermi.js create mode 100644 vue3/src/directive/permission/hasRole.js create mode 100644 vue3/src/layout/components/AppMain.vue create mode 100644 vue3/src/layout/components/IframeToggle/index.vue create mode 100644 vue3/src/layout/components/InnerLink/index.vue create mode 100644 vue3/src/layout/components/Navbar.vue create mode 100644 vue3/src/layout/components/Settings/index.vue create mode 100644 vue3/src/layout/components/Sidebar/Link.vue create mode 100644 vue3/src/layout/components/Sidebar/Logo.vue create mode 100644 vue3/src/layout/components/Sidebar/SidebarItem.vue create mode 100644 vue3/src/layout/components/Sidebar/index.vue create mode 100644 vue3/src/layout/components/TagsView/ScrollPane.vue create mode 100644 vue3/src/layout/components/TagsView/index.vue create mode 100644 vue3/src/layout/components/index.js create mode 100644 vue3/src/layout/index.vue create mode 100644 vue3/src/main.js create mode 100644 vue3/src/permission.js create mode 100644 vue3/src/plugins/auth.js create mode 100644 vue3/src/plugins/cache.js create mode 100644 vue3/src/plugins/download.js create mode 100644 vue3/src/plugins/index.js create mode 100644 vue3/src/plugins/modal.js create mode 100644 vue3/src/plugins/tab.js create mode 100644 vue3/src/router/index.js create mode 100644 vue3/src/settings.js create mode 100644 vue3/src/store/index.js create mode 100644 vue3/src/store/modules/app.js create mode 100644 vue3/src/store/modules/dict.js create mode 100644 vue3/src/store/modules/permission.js create mode 100644 vue3/src/store/modules/settings.js create mode 100644 vue3/src/store/modules/tagsView.js create mode 100644 vue3/src/store/modules/user.js create mode 100644 vue3/src/store/store.js create mode 100644 vue3/src/utils/auth.js create mode 100644 vue3/src/utils/dict.js create mode 100644 vue3/src/utils/dynamicTitle.js create mode 100644 vue3/src/utils/errorCode.js create mode 100644 vue3/src/utils/his.js create mode 100644 vue3/src/utils/index.js create mode 100644 vue3/src/utils/jsencrypt.js create mode 100644 vue3/src/utils/openhis.js create mode 100644 vue3/src/utils/permission.js create mode 100644 vue3/src/utils/request.js create mode 100644 vue3/src/utils/scroll-to.js create mode 100644 vue3/src/utils/theme.js create mode 100644 vue3/src/utils/validate.js create mode 100644 vue3/src/views/basicmanage/automaticBilling/index.vue create mode 100644 vue3/src/views/basicmanage/bargainSets/index.vue create mode 100644 vue3/src/views/basicmanage/bedspace/index.vue create mode 100644 vue3/src/views/basicmanage/caseTemplates/index.vue create mode 100644 vue3/src/views/basicmanage/commonlyDiagnosis/index.vue create mode 100644 vue3/src/views/basicmanage/consumablesBinding/components/activityList.vue create mode 100644 vue3/src/views/basicmanage/consumablesBinding/components/api.js create mode 100644 vue3/src/views/basicmanage/consumablesBinding/components/consumablesList.vue create mode 100644 vue3/src/views/basicmanage/consumablesBinding/components/deviceList.vue create mode 100644 vue3/src/views/basicmanage/consumablesBinding/index.vue create mode 100644 vue3/src/views/basicmanage/contract/index.vue create mode 100644 vue3/src/views/basicmanage/customer/index.vue create mode 100644 vue3/src/views/basicmanage/fee/index.vue create mode 100644 vue3/src/views/basicmanage/implementDepartment/components/implementDepartment.js create mode 100644 vue3/src/views/basicmanage/implementDepartment/index.vue create mode 100644 vue3/src/views/basicmanage/lisMerge/index.vue create mode 100644 vue3/src/views/basicmanage/ordersCombination/components/adviceBaseList.vue create mode 100644 vue3/src/views/basicmanage/ordersCombination/components/api.js create mode 100644 vue3/src/views/basicmanage/ordersCombination/components/prescriptionlist.vue create mode 100644 vue3/src/views/basicmanage/ordersCombination/index.vue create mode 100644 vue3/src/views/basicmanage/organization/components/api.js create mode 100644 vue3/src/views/basicmanage/organization/index.vue create mode 100644 vue3/src/views/basicmanage/pharmacyDepartment/components/pharmacyDepartment.js create mode 100644 vue3/src/views/basicmanage/pharmacyDepartment/index.vue create mode 100644 vue3/src/views/basicmanage/supplier/components/supplier.js create mode 100644 vue3/src/views/basicmanage/supplier/index.vue create mode 100644 vue3/src/views/basicmanage/tcmPrescription/index.vue create mode 100644 vue3/src/views/basicmanage/ward/components/api.js create mode 100644 vue3/src/views/basicmanage/ward/index.vue create mode 100644 vue3/src/views/basicmanage/warehouseLocation/components/api.js create mode 100644 vue3/src/views/basicmanage/warehouseLocation/index.vue create mode 100644 vue3/src/views/basicservices/registrationfee/components/registrationfee.js create mode 100644 vue3/src/views/basicservices/registrationfee/index.vue create mode 100644 vue3/src/views/catalog/device/components/device.js create mode 100644 vue3/src/views/catalog/device/components/deviceDialog.vue create mode 100644 vue3/src/views/catalog/device/components/deviceYbDialog.vue create mode 100644 vue3/src/views/catalog/device/index.vue create mode 100644 vue3/src/views/catalog/diagnosistreatment/components/diagTreYbDialog.vue create mode 100644 vue3/src/views/catalog/diagnosistreatment/components/diagnosisTreatmentDialog.vue create mode 100644 vue3/src/views/catalog/diagnosistreatment/components/diagnosistreatment.js create mode 100644 vue3/src/views/catalog/diagnosistreatment/index.vue create mode 100644 vue3/src/views/catalog/disease/components/disease.js create mode 100644 vue3/src/views/catalog/disease/index.vue create mode 100644 vue3/src/views/catalog/medicine/components/medicine.js create mode 100644 vue3/src/views/catalog/medicine/components/medicineDialog.vue create mode 100644 vue3/src/views/catalog/medicine/components/medicineYbDialog.vue create mode 100644 vue3/src/views/catalog/medicine/index.vue create mode 100644 vue3/src/views/catalog/service/index.vue create mode 100644 vue3/src/views/charge/clinicRecord/components/api.js create mode 100644 vue3/src/views/charge/clinicRecord/index.vue create mode 100644 vue3/src/views/charge/cliniccharge/components/api.js create mode 100644 vue3/src/views/charge/cliniccharge/components/chargeDialog.vue create mode 100644 vue3/src/views/charge/cliniccharge/index.vue create mode 100644 vue3/src/views/charge/clinicrefund/components/api.js create mode 100644 vue3/src/views/charge/clinicrefund/components/refundDialog.vue create mode 100644 vue3/src/views/charge/clinicrefund/index.vue create mode 100644 vue3/src/views/charge/outpatientregistration/components/chargeDialog.vue create mode 100644 vue3/src/views/charge/outpatientregistration/components/outpatientregistration.js create mode 100644 vue3/src/views/charge/outpatientregistration/components/patientAddDialog.vue create mode 100644 vue3/src/views/charge/outpatientregistration/components/patientInfoDialog.vue create mode 100644 vue3/src/views/charge/outpatientregistration/components/patientList.vue create mode 100644 vue3/src/views/charge/outpatientregistration/components/refundDialog.vue create mode 100644 vue3/src/views/charge/outpatientregistration/index.vue create mode 100644 vue3/src/views/charge/registerRecords/index.vue create mode 100644 vue3/src/views/charge/schedule/index.vue create mode 100644 vue3/src/views/clinicmanagement/bargain/component/adviceBaseList.vue create mode 100644 vue3/src/views/clinicmanagement/bargain/component/api.js create mode 100644 vue3/src/views/clinicmanagement/bargain/component/prescriptionlist.vue create mode 100644 vue3/src/views/clinicmanagement/bargain/index.vue create mode 100644 vue3/src/views/clinicmanagement/chargeDetail/index.vue create mode 100644 vue3/src/views/clinicmanagement/consultationCharge/index.vue create mode 100644 vue3/src/views/clinicmanagement/consultationRefund/index.vue create mode 100644 vue3/src/views/clinicmanagement/dayEnd/component/api.js create mode 100644 vue3/src/views/clinicmanagement/dayEnd/index.vue create mode 100644 vue3/src/views/clinicmanagement/disposal/components/api.js create mode 100644 vue3/src/views/clinicmanagement/disposal/index.vue create mode 100644 vue3/src/views/clinicmanagement/ePrescribing/components/api.js create mode 100644 vue3/src/views/clinicmanagement/ePrescribing/components/ePrescribingDetailDialog.vue create mode 100644 vue3/src/views/clinicmanagement/ePrescribing/components/medicinePickupQueryDialog.vue create mode 100644 vue3/src/views/clinicmanagement/ePrescribing/components/prescriptionQueryDialog.vue create mode 100644 vue3/src/views/clinicmanagement/ePrescribing/index.vue create mode 100644 vue3/src/views/clinicmanagement/infusionrecord/component/api.js create mode 100644 vue3/src/views/clinicmanagement/infusionrecord/index.vue create mode 100644 vue3/src/views/clinicmanagement/lisPascResult/index.vue create mode 100644 vue3/src/views/clinicmanagement/orderViewPrint/index.vue create mode 100644 vue3/src/views/clinicmanagement/refundNumber/index.vue create mode 100644 vue3/src/views/clinicmanagement/requisition/index.vue create mode 100644 vue3/src/views/clinicmanagement/returnDrug/components/api.js create mode 100644 vue3/src/views/clinicmanagement/returnDrug/index.vue create mode 100644 vue3/src/views/clinicmanagement/skinrecord/component/api.js create mode 100644 vue3/src/views/clinicmanagement/skinrecord/index.vue create mode 100644 vue3/src/views/clinicmanagement/techExecute/index.vue create mode 100644 vue3/src/views/clinicmanagement/techfundApprove/index.vue create mode 100644 vue3/src/views/clinicmanagement/withdrawal/index.vue create mode 100644 vue3/src/views/datadictionary/definition/components/definition.js create mode 100644 vue3/src/views/datadictionary/definition/components/edit.vue create mode 100644 vue3/src/views/datadictionary/definition/index.vue create mode 100644 vue3/src/views/doctorstation/components/adviceBaseList.vue create mode 100644 vue3/src/views/doctorstation/components/api.js create mode 100644 vue3/src/views/doctorstation/components/diagnosis.vue create mode 100644 vue3/src/views/doctorstation/components/diagnosisdialog.vue create mode 100644 vue3/src/views/doctorstation/components/diagnosislist.vue create mode 100644 vue3/src/views/doctorstation/components/emr.vue create mode 100644 vue3/src/views/doctorstation/components/emrhistory.vue create mode 100644 vue3/src/views/doctorstation/components/emrtemplate.vue create mode 100644 vue3/src/views/doctorstation/components/eprescriptiondialog.vue create mode 100644 vue3/src/views/doctorstation/components/eprescriptionlist.vue create mode 100644 vue3/src/views/doctorstation/components/orderGroupDrawer.vue create mode 100644 vue3/src/views/doctorstation/components/patientlist.vue create mode 100644 vue3/src/views/doctorstation/components/prescriptionHistory.vue create mode 100644 vue3/src/views/doctorstation/components/prescriptionlist.vue create mode 100644 vue3/src/views/doctorstation/components/prescriptionmedicineList.vue create mode 100644 vue3/src/views/doctorstation/components/refundListDialog.vue create mode 100644 vue3/src/views/doctorstation/components/tcm/tcmAdvice.vue create mode 100644 vue3/src/views/doctorstation/components/tcm/tcmMedicineList.vue create mode 100644 vue3/src/views/doctorstation/components/tcm/tcmdiagnosisDialog.vue create mode 100644 vue3/src/views/doctorstation/index.vue create mode 100644 vue3/src/views/doctorstation/index1.vue create mode 100644 vue3/src/views/error/401.vue create mode 100644 vue3/src/views/error/404.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/advanceDeposit/components/api.js create mode 100644 vue3/src/views/inHospitalManagement/charge/advanceDeposit/components/chargeDialog.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/advanceDeposit/components/patientList.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/advanceDeposit/index.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/feeTypeConversion/components/BasicForm.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/feeTypeConversion/components/InsuranceForm.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/feeTypeConversion/components/PatientDetail.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/feeTypeConversion/components/PatientList.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/feeTypeConversion/components/SearchForm.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/feeTypeConversion/components/TopForm.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/feeTypeConversion/index.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/register/components/accomplishList.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/register/components/api.js create mode 100644 vue3/src/views/inHospitalManagement/charge/register/components/awaitList.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/register/components/existList.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/register/components/index.js create mode 100644 vue3/src/views/inHospitalManagement/charge/register/components/patientInfo.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/register/components/patientRegister.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/register/components/registerForm.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/register/index.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/settlement/components/cancel/index.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/settlement/components/home/components/derate.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/settlement/components/home/components/index.ts create mode 100644 vue3/src/views/inHospitalManagement/charge/settlement/components/home/components/index.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/settlement/components/home/components/invoiceSkip.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/settlement/components/home/components/patientList.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/settlement/components/home/components/patientListDialog.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/settlement/components/home/components/preSettlement.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/settlement/components/home/components/receipt.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/settlement/components/home/components/refund.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/settlement/components/home/index.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/settlement/components/midway/components/index.ts create mode 100644 vue3/src/views/inHospitalManagement/charge/settlement/components/midway/components/patientList.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/settlement/components/midway/components/selectSettlement.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/settlement/components/midway/index.vue create mode 100644 vue3/src/views/inHospitalManagement/charge/settlement/index.vue create mode 100644 vue3/src/views/inHospitalManagement/inpatientDiagnosis/index.vue create mode 100644 vue3/src/views/inHospitalManagement/inpatientRecord/index.vue create mode 100644 vue3/src/views/inHospitalManagement/listFee/index.vue create mode 100644 vue3/src/views/inHospitalManagement/medicalRecord/index.vue create mode 100644 vue3/src/views/inHospitalManagement/orderManage/index.vue create mode 100644 vue3/src/views/inHospitalManagement/portal/index.vue create mode 100644 vue3/src/views/inHospitalManagement/readme.md create mode 100644 vue3/src/views/inHospitalManagement/surgeryManage/index.vue create mode 100644 vue3/src/views/index.vue create mode 100644 vue3/src/views/inpatientDoctor/home/components/diagnose/chineseMedicineDialog.vue create mode 100644 vue3/src/views/inpatientDoctor/home/components/diagnose/diagnoseFolder copy.vue create mode 100644 vue3/src/views/inpatientDoctor/home/components/diagnose/diagnoseFolder.vue create mode 100644 vue3/src/views/inpatientDoctor/home/components/diagnose/index.vue create mode 100644 vue3/src/views/inpatientDoctor/home/components/diagnose/westernMedicineDialog.vue create mode 100644 vue3/src/views/inpatientDoctor/home/components/order/index.vue create mode 100644 vue3/src/views/inpatientDoctor/home/components/order/useOrder.js create mode 100644 vue3/src/views/inpatientDoctor/home/components/patientCard/index.vue create mode 100644 vue3/src/views/inpatientDoctor/home/components/patientCard/patientChildCard.vue create mode 100644 vue3/src/views/inpatientDoctor/home/components/patientCard/patientParentCard.vue create mode 100644 vue3/src/views/inpatientDoctor/home/components/patientList.vue create mode 100644 vue3/src/views/inpatientDoctor/home/index.js create mode 100644 vue3/src/views/inpatientDoctor/home/index.vue create mode 100644 vue3/src/views/inpatientDoctor/home/store/patient.js create mode 100644 vue3/src/views/inpatientDoctor/readme.md create mode 100644 vue3/src/views/inpatientNurse/dischargedManagement/components/discharged/index.vue create mode 100644 vue3/src/views/inpatientNurse/dischargedManagement/components/discharged/patientList.vue create mode 100644 vue3/src/views/inpatientNurse/dischargedManagement/components/discharged/review.vue create mode 100644 vue3/src/views/inpatientNurse/dischargedManagement/components/index.ts create mode 100644 vue3/src/views/inpatientNurse/dischargedManagement/components/waitForDischarge/index.vue create mode 100644 vue3/src/views/inpatientNurse/dischargedManagement/components/waitForDischarge/medicalOrderList.vue create mode 100644 vue3/src/views/inpatientNurse/dischargedManagement/components/waitForDischarge/patientList.vue create mode 100644 vue3/src/views/inpatientNurse/dischargedManagement/index.vue create mode 100644 vue3/src/views/inpatientNurse/drugDistribution/drugDistributionList.vue create mode 100644 vue3/src/views/inpatientNurse/drugDistribution/index.vue create mode 100644 vue3/src/views/inpatientNurse/drugDistribution/patientList.vue create mode 100644 vue3/src/views/inpatientNurse/home/components/api.js create mode 100644 vue3/src/views/inpatientNurse/home/components/patientCard.vue create mode 100644 vue3/src/views/inpatientNurse/home/components/patientDetialDialog.vue create mode 100644 vue3/src/views/inpatientNurse/home/components/transferDialog.vue create mode 100644 vue3/src/views/inpatientNurse/home/components/transferToBedDialog.vue create mode 100644 vue3/src/views/inpatientNurse/home/index.vue create mode 100644 vue3/src/views/inpatientNurse/inOut/components/bedAllocation.vue create mode 100644 vue3/src/views/inpatientNurse/inOut/components/bedcards.vue create mode 100644 vue3/src/views/inpatientNurse/inOut/components/index.ts create mode 100644 vue3/src/views/inpatientNurse/inOut/components/signEntryDialog.vue create mode 100644 vue3/src/views/inpatientNurse/inOut/components/transferInDialog.vue create mode 100644 vue3/src/views/inpatientNurse/inOut/index.vue create mode 100644 vue3/src/views/inpatientNurse/medicalOrderManagement/components/check/MedicalOrderManagement.vue create mode 100644 vue3/src/views/inpatientNurse/medicalOrderManagement/components/check/patientList.vue create mode 100644 vue3/src/views/inpatientNurse/medicalOrderManagement/components/execute/MedicalOrderManagement.vue create mode 100644 vue3/src/views/inpatientNurse/medicalOrderManagement/components/execute/patientList.vue create mode 100644 vue3/src/views/inpatientNurse/medicalOrderManagement/index.vue create mode 100644 vue3/src/views/inpatientNurse/nursingRecord/components/addNursingRecordDialog.vue create mode 100644 vue3/src/views/inpatientNurse/nursingRecord/components/api.js create mode 100644 vue3/src/views/inpatientNurse/nursingRecord/components/recordTemplate.vue create mode 100644 vue3/src/views/inpatientNurse/nursingRecord/index.vue create mode 100644 vue3/src/views/inpatientNurse/tprChart/components/addTprDialog.vue create mode 100644 vue3/src/views/inpatientNurse/tprChart/components/api.js create mode 100644 vue3/src/views/inpatientNurse/tprChart/index.vue create mode 100644 vue3/src/views/login.vue create mode 100644 vue3/src/views/medicationmanagement/billapproval/components/api.js create mode 100644 vue3/src/views/medicationmanagement/billapproval/index.vue create mode 100644 vue3/src/views/medicationmanagement/chkstock/chkstockBatch/components/api.js create mode 100644 vue3/src/views/medicationmanagement/chkstock/chkstockBatch/components/medicineList.vue create mode 100644 vue3/src/views/medicationmanagement/chkstock/chkstockBatch/index.vue create mode 100644 vue3/src/views/medicationmanagement/chkstock/chkstockPart/components/api.js create mode 100644 vue3/src/views/medicationmanagement/chkstock/chkstockPart/components/medicineList.vue create mode 100644 vue3/src/views/medicationmanagement/chkstock/chkstockPart/index.vue create mode 100644 vue3/src/views/medicationmanagement/chkstock/chkstockRecord/components/api.js create mode 100644 vue3/src/views/medicationmanagement/chkstock/chkstockRecord/components/medicineList.vue create mode 100644 vue3/src/views/medicationmanagement/chkstock/chkstockRecord/index.vue create mode 100644 vue3/src/views/medicationmanagement/chkstock/components/api.js create mode 100644 vue3/src/views/medicationmanagement/chkstock/components/medicineList.vue create mode 100644 vue3/src/views/medicationmanagement/lossReportingManagement/lossReporting.js create mode 100644 vue3/src/views/medicationmanagement/lossReportingManagement/lossReporting/components/lossReporting.vue create mode 100644 vue3/src/views/medicationmanagement/lossReportingManagement/lossReporting/index.vue create mode 100644 vue3/src/views/medicationmanagement/lossReportingManagement/lossReportingList/index.vue create mode 100644 vue3/src/views/medicationmanagement/purchaseDocument/components/api.js create mode 100644 vue3/src/views/medicationmanagement/purchaseDocument/components/medicineList.vue create mode 100644 vue3/src/views/medicationmanagement/purchaseDocument/index.vue create mode 100644 vue3/src/views/medicationmanagement/purchaseinventory/components/inventoryReceiptDialog.vue create mode 100644 vue3/src/views/medicationmanagement/purchaseinventory/components/medicineList.vue create mode 100644 vue3/src/views/medicationmanagement/purchaseinventory/components/purchaseinventory.js create mode 100644 vue3/src/views/medicationmanagement/purchaseinventory/index.vue create mode 100644 vue3/src/views/medicationmanagement/requisitionManagement/components/api.js create mode 100644 vue3/src/views/medicationmanagement/requisitionManagement/components/list.vue create mode 100644 vue3/src/views/medicationmanagement/requisitionManagement/requisitionInventoryManagement/index.vue create mode 100644 vue3/src/views/medicationmanagement/requisitionManagement/requisitionManagement/index.vue create mode 100644 vue3/src/views/medicationmanagement/requisitionManagement/requisitionManagementList/index.vue create mode 100644 vue3/src/views/medicationmanagement/requisitionManagement/returningInventory/index.vue create mode 100644 vue3/src/views/medicationmanagement/returnedPurchase/components/api.js create mode 100644 vue3/src/views/medicationmanagement/returnedPurchase/components/transferManagement.vue create mode 100644 vue3/src/views/medicationmanagement/returnedPurchase/index.vue create mode 100644 vue3/src/views/medicationmanagement/statisticalManagement/awaitingMedicineDetails.vue create mode 100644 vue3/src/views/medicationmanagement/statisticalManagement/chkstockPartDetails.vue create mode 100644 vue3/src/views/medicationmanagement/statisticalManagement/index.vue create mode 100644 vue3/src/views/medicationmanagement/statisticalManagement/inventoryProductDetails.vue create mode 100644 vue3/src/views/medicationmanagement/statisticalManagement/lossReportingDetails.vue create mode 100644 vue3/src/views/medicationmanagement/statisticalManagement/medicationDetails.vue create mode 100644 vue3/src/views/medicationmanagement/statisticalManagement/outPatientCharge.vue create mode 100644 vue3/src/views/medicationmanagement/statisticalManagement/purchaseDocumentDetsils.vue create mode 100644 vue3/src/views/medicationmanagement/statisticalManagement/purchaseReturnDetsils.vue create mode 100644 vue3/src/views/medicationmanagement/statisticalManagement/reconciliation.vue create mode 100644 vue3/src/views/medicationmanagement/statisticalManagement/reconciliationDetails.vue create mode 100644 vue3/src/views/medicationmanagement/statisticalManagement/registrationFeeDetails.vue create mode 100644 vue3/src/views/medicationmanagement/statisticalManagement/requisitionDetails.vue create mode 100644 vue3/src/views/medicationmanagement/statisticalManagement/returnOrutboundDetails.vue create mode 100644 vue3/src/views/medicationmanagement/statisticalManagement/statisticalManagent.js create mode 100644 vue3/src/views/medicationmanagement/statisticalManagement/transferManagentDetails.vue create mode 100644 vue3/src/views/medicationmanagement/transferManagent/batchTransfer/index.vue create mode 100644 vue3/src/views/medicationmanagement/transferManagent/components/transferManagement.js create mode 100644 vue3/src/views/medicationmanagement/transferManagent/components/transferManagement.vue create mode 100644 vue3/src/views/medicationmanagement/transferManagent/transferManagent/index.vue create mode 100644 vue3/src/views/medicationmanagement/transferManagent/transferManagentList/index.vue create mode 100644 vue3/src/views/monitor/cache/index.vue create mode 100644 vue3/src/views/monitor/cache/list.vue create mode 100644 vue3/src/views/monitor/druid/index.vue create mode 100644 vue3/src/views/monitor/job/index.vue create mode 100644 vue3/src/views/monitor/job/log.vue create mode 100644 vue3/src/views/monitor/logininfor/index.vue create mode 100644 vue3/src/views/monitor/online/index.vue create mode 100644 vue3/src/views/monitor/operlog/index.vue create mode 100644 vue3/src/views/monitor/server/index.vue create mode 100644 vue3/src/views/patientmanagement/outpatienrecords/component/api.js create mode 100644 vue3/src/views/patientmanagement/outpatienrecords/index.vue create mode 100644 vue3/src/views/patientmanagement/patientmanagement/component/api.js create mode 100644 vue3/src/views/patientmanagement/patientmanagement/index.vue create mode 100644 vue3/src/views/pharmacymanagement/westernmedicine/components/api.js create mode 100644 vue3/src/views/pharmacymanagement/westernmedicine/index.vue create mode 100644 vue3/src/views/redirect/index.vue create mode 100644 vue3/src/views/register.vue create mode 100644 vue3/src/views/system/config/index.vue create mode 100644 vue3/src/views/system/dept/index.vue create mode 100644 vue3/src/views/system/dict/data.vue create mode 100644 vue3/src/views/system/dict/index.vue create mode 100644 vue3/src/views/system/menu/index.vue create mode 100644 vue3/src/views/system/notice/index.vue create mode 100644 vue3/src/views/system/post/index.vue create mode 100644 vue3/src/views/system/role/authUser.vue create mode 100644 vue3/src/views/system/role/index.vue create mode 100644 vue3/src/views/system/role/selectUser.vue create mode 100644 vue3/src/views/system/tenant/bindUser.vue create mode 100644 vue3/src/views/system/tenant/index.vue create mode 100644 vue3/src/views/system/tenant/setOption.vue create mode 100644 vue3/src/views/system/tenant/setUser.vue create mode 100644 vue3/src/views/system/user copy/authRole.vue create mode 100644 vue3/src/views/system/user copy/index.vue create mode 100644 vue3/src/views/system/user copy/profile/index.vue create mode 100644 vue3/src/views/system/user copy/profile/resetPwd.vue create mode 100644 vue3/src/views/system/user copy/profile/userAvatar.vue create mode 100644 vue3/src/views/system/user copy/profile/userInfo.vue create mode 100644 vue3/src/views/system/user/authRole.vue create mode 100644 vue3/src/views/system/user/index.vue create mode 100644 vue3/src/views/system/user/profile/index.vue create mode 100644 vue3/src/views/system/user/profile/resetPwd.vue create mode 100644 vue3/src/views/system/user/profile/userAvatar.vue create mode 100644 vue3/src/views/system/user/profile/userInfo.vue create mode 100644 vue3/src/views/tool/gen/basicInfoForm.vue create mode 100644 vue3/src/views/tool/gen/createTable.vue create mode 100644 vue3/src/views/tool/gen/editTable.vue create mode 100644 vue3/src/views/tool/gen/genInfoForm.vue create mode 100644 vue3/src/views/tool/gen/importTable.vue create mode 100644 vue3/src/views/tool/gen/index.vue create mode 100644 vue3/src/views/tool/swagger/index.vue create mode 100644 vue3/vite.config.js create mode 100644 vue3/vite/plugins/auto-import.js create mode 100644 vue3/vite/plugins/compression.js create mode 100644 vue3/vite/plugins/index.js create mode 100644 vue3/vite/plugins/setup-extend.js create mode 100644 vue3/vite/plugins/svg-icon.js create mode 100644 "\350\257\264\346\230\216.txt" diff --git a/openhis-server/core-admin/src/main/java/com/core/web/controller/system/SysTenantController.java b/openhis-server/core-admin/src/main/java/com/core/web/controller/system/SysTenantController.java new file mode 100644 index 00000000..f08e4751 --- /dev/null +++ b/openhis-server/core-admin/src/main/java/com/core/web/controller/system/SysTenantController.java @@ -0,0 +1,198 @@ +package com.core.web.controller.system; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.core.common.annotation.Anonymous; +import com.core.common.core.controller.BaseController; +import com.core.common.core.domain.R; +import com.core.common.core.domain.entity.SysUser; +import com.core.system.domain.SysTenant; +import com.core.system.service.ISysTenantService; + +/** + * 租户信息controller + * + * @author system + */ +@RestController +@RequestMapping("/system/tenant") +public class SysTenantController extends BaseController { + @Autowired + private ISysTenantService sysTenantService; + + /** + * 查询租户分页列表 + * + * @param tenantId 租户ID查询 + * @param tenantCode 租户编码模糊查询 + * @param tenantName 租户名称模糊查询 + * @param status 状态 + * @param pageNum 当前页 + * @param pageSize 每页多少条 + * @return 租户分页列表 + */ + @PreAuthorize("@ss.hasPermi('system:tenant:operate')") + @GetMapping("/page") + public R> getTenantPage(@RequestParam(required = false) Integer tenantId, + @RequestParam(required = false) String tenantCode, @RequestParam(required = false) String tenantName, + @RequestParam(required = false) String status, @RequestParam(defaultValue = "1") Integer pageNum, + @RequestParam(defaultValue = "10") Integer pageSize) { + return sysTenantService.getTenantPage(tenantId, tenantCode, tenantName, status, pageNum, pageSize); + } + + /** + * 查询租户详情 + * + * @param tenantId 租户ID + * @return 租户分页列表 + */ + @PreAuthorize("@ss.hasPermi('system:tenant:operate')") + @GetMapping("/{tenantId}") + public R getTenantDetail(@PathVariable Integer tenantId) { + return R.ok(sysTenantService.getById(tenantId)); + } + + /** + * 查询租户所属用户分页列表 + * + * @param tenantId 租户ID查询 + * @param userName 用户昵称模糊查询 + * @param nickName 用户昵称模糊查询 + * @param phoneNumber 手机号码模糊查询 + * @param pageNum 当前页 + * @param pageSize 每页多少条 + * @return 租户所属用户分页列表 + */ + @PreAuthorize("@ss.hasPermi('system:tenant:operate')") + @GetMapping("/user/page") + public R> getTenantUserPage(@RequestParam(required = false) Integer tenantId, + @RequestParam(required = false) String userName, @RequestParam(required = false) String nickName, + @RequestParam(required = false) String phoneNumber, @RequestParam(defaultValue = "1") Integer pageNum, + @RequestParam(defaultValue = "10") Integer pageSize) { + return sysTenantService.getTenantUserPage(tenantId, userName, nickName, phoneNumber, pageNum, pageSize); + } + + /** + * 新增租户 + * + * @param sysTenant 租户实体 + * @return 结果 + */ + @PreAuthorize("@ss.hasPermi('system:tenant:operate')") + @PostMapping + public R addTenant(@RequestBody SysTenant sysTenant) { + sysTenantService.save(sysTenant); + return R.ok("新增成功"); + } + + /** + * 修改租户 + * + * @param sysTenant 租户实体 + * @return 结果 + */ + @PreAuthorize("@ss.hasPermi('system:tenant:operate')") + @PutMapping + public R editTenant(@RequestBody SysTenant sysTenant) { + sysTenantService.updateById(sysTenant); + return R.ok("修改成功"); + } + + /** + * 删除租户 + * + * @param tenantIdList 租户ID列表 + * @return 结果 + */ + @PreAuthorize("@ss.hasPermi('system:tenant:operate')") + @DeleteMapping + public R delTenant(@RequestBody List tenantIdList) { + return sysTenantService.delTenant(tenantIdList); + } + + /** + * 启用租户 + * + * @param tenantIdList 租户ID列表 + * @return 结果 + */ + @PreAuthorize("@ss.hasPermi('system:tenant:operate')") + @PutMapping("/enable") + public R enableTenant(@RequestBody List tenantIdList) { + sysTenantService.enableTenant(tenantIdList); + return R.ok("启用成功"); + } + + /** + * 停用租户 + * + * @param tenantIdList 租户ID列表 + * @return 结果 + */ + @PreAuthorize("@ss.hasPermi('system:tenant:operate')") + @PutMapping("/disable") + public R disableTenant(@RequestBody List tenantIdList) { + sysTenantService.disableTenant(tenantIdList); + return R.ok("停用成功"); + } + + /** + * 查询租户未绑定的用户列表 + * + * @param tenantId 租户ID + * @param pageNum 当前页 + * @param pageSize 每页多少条 + * @return 结果 + */ + @PreAuthorize("@ss.hasPermi('system:tenant:operate')") + @GetMapping("/{tenantId}/unbind-users") + public R> getUnbindTenantUserList(@PathVariable Integer tenantId, + @RequestParam(required = false) String userName, @RequestParam(required = false) String nickName, + @RequestParam(required = false) String phoneNumber, @RequestParam(defaultValue = "1") Integer pageNum, + @RequestParam(defaultValue = "10") Integer pageSize) { + return sysTenantService.getUnbindTenantUserList(tenantId, userName, nickName, phoneNumber, pageNum, pageSize); + } + + /** + * 绑定租户用户 + * + * @param tenantId 租户ID + * @param userIdList 用户ID列表 + * @return 结果 + */ + @PreAuthorize("@ss.hasPermi('system:tenant:operate')") + @PostMapping("/{tenantId}/bind-users") + public R bindTenantUser(@PathVariable Integer tenantId, @RequestBody List userIdList) { + return sysTenantService.bindTenantUser(tenantId, userIdList); + } + + /** + * 解绑租户用户 + * + * @param tenantId 租户ID + * @param userIdList 用户ID列表 + * @return 结果 + */ + @PreAuthorize("@ss.hasPermi('system:tenant:operate')") + @PostMapping("/{tenantId}/unbind-users") + public R unbindTenantUser(@PathVariable Integer tenantId, @RequestBody List userIdList) { + return sysTenantService.unbindTenantUser(tenantId, userIdList); + } + + /** + * 查询用户绑定的租户列表 + * + * @param username 用户账号 + * @return 用户绑定的租户列表 + */ + @Anonymous + @GetMapping("/user-bind/{username}") + public R> getUserBindTenantList(@PathVariable String username) { + return sysTenantService.getUserBindTenantList(username); + } +} diff --git a/openhis-server/core-admin/src/main/java/com/core/web/controller/system/SysTenantOptionController.java b/openhis-server/core-admin/src/main/java/com/core/web/controller/system/SysTenantOptionController.java new file mode 100644 index 00000000..a2421dd3 --- /dev/null +++ b/openhis-server/core-admin/src/main/java/com/core/web/controller/system/SysTenantOptionController.java @@ -0,0 +1,139 @@ +package com.core.web.controller.system; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.core.common.core.controller.BaseController; +import com.core.common.core.domain.R; +import com.core.common.enums.TenantOptionDict; +import com.core.system.domain.SysTenantOption; +import com.core.system.domain.dto.SysTenantOptionDto; +import com.core.system.service.ISysTenantOptionService; + +/** + * 租户配置项信息controller + * + * @author system + */ +@RestController +@RequestMapping("/system/tenant-option") +public class SysTenantOptionController extends BaseController { + @Autowired + private ISysTenantOptionService sysTenantOptionService; + + /** + * 查询租户配置项分页列表 + * + * @param tenantId 租户ID查询 + * @param pageNum 当前页 + * @param pageSize 每页多少条 + * @return 租户配置项分页列表 + */ + @PreAuthorize("@ss.hasPermi('system:tenant:operate')") + @GetMapping("/page") + public R> getTenantOptionPage(@RequestParam Integer tenantId, + @RequestParam(required = false) String optionCode, @RequestParam(defaultValue = "1") Integer pageNum, + @RequestParam(defaultValue = "10") Integer pageSize) { + return sysTenantOptionService.getTenantOptionPage(tenantId, optionCode, pageNum, pageSize); + } + + /** + * 查询租户配置项详情 + * + * @param id ID + * @return 租户配置项详情 + */ + @PreAuthorize("@ss.hasPermi('system:tenant:operate')") + @GetMapping("/{id}") + public R getTenantOptionDetail(@PathVariable Long id) { + return R.ok(sysTenantOptionService.getById(id)); + } + + /** + * 新增租户配置项 + * + * @param sysTenantOption 租户配置项实体 + * @return 结果 + */ + @PreAuthorize("@ss.hasPermi('system:tenant:operate')") + @PostMapping + public R addTenantOption(@RequestBody SysTenantOption sysTenantOption) { + return sysTenantOptionService.addTenantOption(sysTenantOption); + } + + /** + * 修改租户配置项 + * + * @param sysTenantOption 租户配置项实体 + * @return 结果 + */ + @PreAuthorize("@ss.hasPermi('system:tenant:operate')") + @PutMapping + public R editTenantOption(@RequestBody SysTenantOption sysTenantOption) { + sysTenantOptionService.updateById(sysTenantOption); + return R.ok("修改成功"); + } + + /** + * 删除租户配置项 + * + * @param tenantIdList 租户配置项ID列表 + * @return 结果 + */ + @PreAuthorize("@ss.hasPermi('system:tenant:operate')") + @DeleteMapping + public R delTenantOption(@RequestBody List tenantIdList) { + sysTenantOptionService.removeBatchByIds(tenantIdList); + return R.ok("删除成功"); + } + + /** + * 查询租户配置项下拉列表 + * + * @return 租户配置项下拉列表 + */ + @PreAuthorize("@ss.hasPermi('system:tenant:operate')") + @GetMapping("/dropdown") + public R> getDropdown() { + return R.ok(sysTenantOptionService.getTenantOptionDropdown()); + } + + // TODO: 出于安全性考虑,下面两项配置接口是否开放再议 + + /** + * 查询全部租户配置项 + * + * @param tenantId 租户ID + * @return 全部租户配置项 + */ + // @GetMapping("/all") + public R> getAllTenantOption(@RequestParam Integer tenantId) { + return R.ok(sysTenantOptionService.getAllTenantOption(tenantId)); + } + + /** + * 查询指定的租户配置项内容 + * + * @param tenantId 租户ID + * @param optionCode 配置项编码 + * @return 指定的租户配置项内容(不存在返回NULL) + */ + // @GetMapping("/content") + public R getTenantOptionContent(@RequestParam Integer tenantId, + @RequestParam String optionCode) { + TenantOptionDict tenantOptionDict = TenantOptionDict.getByCode(optionCode); + if (tenantOptionDict == null) { + return R.fail("未知配置项"); + } + SysTenantOptionDto sysTenantOptionDto = + sysTenantOptionService.getTenantOptionContent(tenantId, tenantOptionDict); + if (sysTenantOptionDto == null) { + return R.fail("此项未配置"); + } + return R.ok(sysTenantOptionDto); + } +} diff --git a/openhis-server/core-common/src/main/java/com/core/common/enums/DeleteFlag.java b/openhis-server/core-common/src/main/java/com/core/common/enums/DeleteFlag.java new file mode 100644 index 00000000..1668d536 --- /dev/null +++ b/openhis-server/core-common/src/main/java/com/core/common/enums/DeleteFlag.java @@ -0,0 +1,26 @@ +package com.core.common.enums; + +/** + * 删除标志 + * + * @author system + */ +public enum DeleteFlag { + NOT_DELETED("0", "未删除"), DELETED("1", "已删除"); + + private final String code; + private final String info; + + DeleteFlag(String code, String info) { + this.code = code; + this.info = info; + } + + public String getCode() { + return code; + } + + public String getInfo() { + return info; + } +} diff --git a/openhis-server/core-common/src/main/java/com/core/common/enums/TenantOptionDict.java b/openhis-server/core-common/src/main/java/com/core/common/enums/TenantOptionDict.java new file mode 100644 index 00000000..898d1efc --- /dev/null +++ b/openhis-server/core-common/src/main/java/com/core/common/enums/TenantOptionDict.java @@ -0,0 +1,193 @@ +package com.core.common.enums; + +/** + * 租户配置项字典(不存在DB中,以此文件为基准,新增修改只需在这里改) + * + * @author system + */ +public enum TenantOptionDict { + /** + * 医院名称 + */ + HOSPITAL_NAME("hospitalName", "医院名称"), + /** + * 定点医药机构编号 + */ + FIXMEDINS_CODE("fixmedinsCode", "定点医药机构编号"), + /** + * 电子发票appid + */ + APP_ID("app_id", "电子发票appid"), + /** + * 电子发票key + */ + KEY("key", "电子发票key"), + /** + * 电子发票url + */ + URL("url", "电子发票url"), + /** + * 医保开关 + */ + YB_SWITCH("yb_switch", "医保开关"), + /** + * 客户端私钥 + */ + CLI_PRV_KEY("cliPrvKey", "客户端私钥"), + /** + * 客户端公钥 + */ + CLI_PUB_KEY("cliPubKey", "客户端公钥"), + /** + * 服务端公钥 + */ + SERVER_PUB_KEY("serverPubKey", "服务端公钥"), + /** + * 定点医药机构名称 + */ + FIXMEDINS_NAME("fixmedinsName", "定点医药机构名称"), + /** + * 行政区划 + */ + ADMVS("admvs", "行政区划"), + /** + * 授权范围 + */ + SCOPE("scope", "授权范围"), + /** + * 授权类型 + */ + GRANT_TYPE("grantType", "授权类型"), + /** + * 密码 + */ + PASSWORD("password", "密码"), + /** + * 用户名 + */ + USERNAME("username", "用户名"), + /** + * 客户端安全码 + */ + CLIENT_SECRET("clientSecret", "客户端安全码"), + /** + * 客户端ID + */ + CLIENT_ID("clientId", "客户端ID"), + /** + * 生产环境客户端公钥 + */ + PROD_CLI_PUB_KEY("prod_cliPubKey", "生产环境客户端公钥"), + /** + * 生产环境客户端私钥 + */ + PROD_CLI_PRV_KEY("prod_cliPrvKey", "生产环境客户端私钥"), + /** + * 生产环境客户端ID + */ + PROD_CLIENT_ID("prod_clientId", "生产环境客户端ID"), + /** + * 文件路径 + */ + FILE_PATH("filePath", "文件路径"), + /** + * 电子地址 + */ + ELE_ADDRESS("eleAddress", "电子地址"), + /** + * 服务地址 + */ + ADDRESS("address", "服务地址"), + /** + * 超时时间 + */ + TIME("time", "超时时间"), + /** + * 是否加密 + */ + IS_ENCRYPT("isEncrypt", "是否加密"), + /** + * 医保区划 + */ + INSUPLC_ADMDVS("insuplc_admdvs", "医保区划"), + /** + * 电子处方appId + */ + PRE_APP_ID("pre_app_id", "电子处方appId"), + /** + * 电子处方appSecret + */ + PRE_APP_SECRET("pre_app_secret", "电子处方appSecret"), + /** + * 电子处方私钥 + */ + APP_PRVKEY("APP_PRVKEY", "电子处方私钥"), + /** + * 电子处方公钥 + */ + PLAF_PUBKEY("PLAF_PUBKEY", "电子处方公钥"), + /** + * 医保客户端ID + */ + YB_CLIENT_ID("ybClientId", "医保客户端ID"), + /** + * 医保客户端安全码 + */ + YB_CLIENT_SECRET("ybClientSecret", "医保客户端安全码"), + /** + * 医保用户名 + */ + YB_USERNAME("ybUsername", "医保用户名"), + /** + * 医保密码 + */ + YB_PASSWORD("ybPassword", "医保密码"), + /** + * 医保授权类型 + */ + YB_GRANT_TYPE("ybGrantType", "医保授权类型"), + /** + * 医保授权范围 + */ + YB_SCOPE("ybScope", "医保授权范围"), + /** + * 医保密钥 + */ + YB_CLI_PRV_KEY("ybCliPrvKey", "医保密钥"), + /** + * 医保服务URL + */ + YB_URL("ybUrl", "医保服务URL"), + /** + * 医院等级 + */ + HOSPITAL_LV("hospital_lv", "医院等级"); + + private final String code; + private final String name; + + TenantOptionDict(String code, String name) { + this.code = code; + this.name = name; + } + + public String getCode() { + return code; + } + + public String getName() { + return name; + } + + public static TenantOptionDict getByCode(String code) { + if (code == null) { + return null; + } + for (TenantOptionDict val : values()) { + if (val.getCode().equals(code)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/core-common/src/main/java/com/core/common/enums/TenantStatus.java b/openhis-server/core-common/src/main/java/com/core/common/enums/TenantStatus.java new file mode 100644 index 00000000..171f63de --- /dev/null +++ b/openhis-server/core-common/src/main/java/com/core/common/enums/TenantStatus.java @@ -0,0 +1,26 @@ +package com.core.common.enums; + +/** + * 租户状态 + * + * @author system + */ +public enum TenantStatus { + ENABLE("0", "启用"), DISABLE("1", "停用"); + + private final String code; + private final String info; + + TenantStatus(String code, String info) { + this.code = code; + this.info = info; + } + + public String getCode() { + return code; + } + + public String getInfo() { + return info; + } +} diff --git a/openhis-server/core-framework/src/main/java/com/core/framework/config/TenantContext.java b/openhis-server/core-framework/src/main/java/com/core/framework/config/TenantContext.java new file mode 100644 index 00000000..9dc3c2d9 --- /dev/null +++ b/openhis-server/core-framework/src/main/java/com/core/framework/config/TenantContext.java @@ -0,0 +1,20 @@ +package com.core.framework.config; + +/** + * TenantContext类 来管理线程局部变量中的租户ID + */ +public class TenantContext { + private static final ThreadLocal CURRENT_TENANT = new ThreadLocal<>(); + + public static void setCurrentTenant(Integer tenantId) { + CURRENT_TENANT.set(tenantId); + } + + public static Integer getCurrentTenant() { + return CURRENT_TENANT.get(); + } + + public static void clear() { + CURRENT_TENANT.remove(); + } +} diff --git a/openhis-server/core-system/src/main/java/com/core/system/domain/SysTenant.java b/openhis-server/core-system/src/main/java/com/core/system/domain/SysTenant.java new file mode 100644 index 00000000..34f828ee --- /dev/null +++ b/openhis-server/core-system/src/main/java/com/core/system/domain/SysTenant.java @@ -0,0 +1,79 @@ +package com.core.system.domain; + +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.*; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 租户信息表 + * + * @author system + */ +@Data +@TableName("sys_tenant") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class SysTenant implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 租户ID(使用数据库序列生成) + */ + @TableId(type = IdType.AUTO) + private Integer id; + + /** + * 租户编码 + */ + private String tenantCode; + + /** + * 租户名称 + */ + private String tenantName; + + /** + * 状态(0正常 1停用) + */ + private String status; + + /** + * 删除状态(0未删除 1已删除) + */ + private String deleteFlag; + + /** + * 创建人 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 更新人 + */ + @TableField(fill = FieldFill.UPDATE) + private String updateBy; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.UPDATE) + private Date updateTime; + + /** + * 备注 + */ + private String remark; + +} diff --git a/openhis-server/core-system/src/main/java/com/core/system/domain/SysTenantOption.java b/openhis-server/core-system/src/main/java/com/core/system/domain/SysTenantOption.java new file mode 100644 index 00000000..554f6c13 --- /dev/null +++ b/openhis-server/core-system/src/main/java/com/core/system/domain/SysTenantOption.java @@ -0,0 +1,75 @@ +package com.core.system.domain; + +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.*; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 租户配置项表 + * + * @author system + */ +@Data +@TableName("sys_tenant_option") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class SysTenantOption implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * ID(使用数据库序列生成) + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 租户ID + */ + private Integer tenantId; + + /** + * 配置项编码 + */ + private String optionCode; + + /** + * 配置项名称 + */ + @TableField(exist = false) + private String optionName; + + /** + * 配置项内容 + */ + private String optionContent; + + /** + * 创建人 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 更新人 + */ + @TableField(fill = FieldFill.UPDATE) + private String updateBy; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.UPDATE) + private Date updateTime; + +} diff --git a/openhis-server/core-system/src/main/java/com/core/system/domain/SysUserTenant.java b/openhis-server/core-system/src/main/java/com/core/system/domain/SysUserTenant.java new file mode 100644 index 00000000..afdea430 --- /dev/null +++ b/openhis-server/core-system/src/main/java/com/core/system/domain/SysUserTenant.java @@ -0,0 +1,41 @@ +package com.core.system.domain; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 用户租户绑定表 + * + * @author system + */ +@Data +@TableName("sys_user_tenant") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class SysUserTenant implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 用户ID + */ + private Long userId; + + /** + * 租户ID + */ + private Integer tenantId; + +} diff --git a/openhis-server/core-system/src/main/java/com/core/system/domain/dto/SysTenantOptionDto.java b/openhis-server/core-system/src/main/java/com/core/system/domain/dto/SysTenantOptionDto.java new file mode 100644 index 00000000..04498c81 --- /dev/null +++ b/openhis-server/core-system/src/main/java/com/core/system/domain/dto/SysTenantOptionDto.java @@ -0,0 +1,32 @@ +package com.core.system.domain.dto; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 租户配置项Dto + * + * @author system + */ +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class SysTenantOptionDto { + + /** + * 编码 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 内容 + */ + private String content; + +} diff --git a/openhis-server/core-system/src/main/java/com/core/system/mapper/SysTenantMapper.java b/openhis-server/core-system/src/main/java/com/core/system/mapper/SysTenantMapper.java new file mode 100644 index 00000000..ebe73880 --- /dev/null +++ b/openhis-server/core-system/src/main/java/com/core/system/mapper/SysTenantMapper.java @@ -0,0 +1,16 @@ +package com.core.system.mapper; + +import org.apache.ibatis.annotations.Mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.core.system.domain.SysTenant; + +/** + * 租户信息表Mapper接口 + * + * @author system + */ +@Mapper +public interface SysTenantMapper extends BaseMapper { + +} diff --git a/openhis-server/core-system/src/main/java/com/core/system/mapper/SysTenantOptionMapper.java b/openhis-server/core-system/src/main/java/com/core/system/mapper/SysTenantOptionMapper.java new file mode 100644 index 00000000..458df210 --- /dev/null +++ b/openhis-server/core-system/src/main/java/com/core/system/mapper/SysTenantOptionMapper.java @@ -0,0 +1,16 @@ +package com.core.system.mapper; + +import org.apache.ibatis.annotations.Mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.core.system.domain.SysTenantOption; + +/** + * 租户配置项表Mapper接口 + * + * @author system + */ +@Mapper +public interface SysTenantOptionMapper extends BaseMapper { + +} diff --git a/openhis-server/core-system/src/main/java/com/core/system/mapper/SysUserTenantMapper.java b/openhis-server/core-system/src/main/java/com/core/system/mapper/SysUserTenantMapper.java new file mode 100644 index 00000000..35b8fa63 --- /dev/null +++ b/openhis-server/core-system/src/main/java/com/core/system/mapper/SysUserTenantMapper.java @@ -0,0 +1,16 @@ +package com.core.system.mapper; + +import org.apache.ibatis.annotations.Mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.core.system.domain.SysUserTenant; + +/** + * 用户租户绑定表Mapper接口 + * + * @author system + */ +@Mapper +public interface SysUserTenantMapper extends BaseMapper { + +} diff --git a/openhis-server/core-system/src/main/java/com/core/system/service/ISysTenantOptionService.java b/openhis-server/core-system/src/main/java/com/core/system/service/ISysTenantOptionService.java new file mode 100644 index 00000000..9979a176 --- /dev/null +++ b/openhis-server/core-system/src/main/java/com/core/system/service/ISysTenantOptionService.java @@ -0,0 +1,62 @@ +package com.core.system.service; + +import java.util.List; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.core.common.core.domain.R; +import com.core.common.enums.TenantOptionDict; +import com.core.system.domain.SysTenantOption; +import com.core.system.domain.dto.SysTenantOptionDto; + +/** + * 租户配置项表Service接口 + * + * @author system + */ +public interface ISysTenantOptionService extends IService { + + /** + * 查询租户配置项分页列表 + * + * @param tenantId 租户ID查询 + * @param optionCode 配置项编码查询 + * @param pageNum 当前页 + * @param pageSize 每页多少条 + * @return 租户配置项分页列表 + */ + R> getTenantOptionPage(Integer tenantId, String optionCode, Integer pageNum, + Integer pageSize); + + /** + * 新增租户配置项 + * + * @param sysTenantOption 租户配置项实体 + * @return 结果 + */ + R addTenantOption(SysTenantOption sysTenantOption); + + /** + * 查询租户配置项下拉列表 + * + * @return 租户配置项下拉列表 + */ + List getTenantOptionDropdown(); + + /** + * 查询全部租户配置项 + * + * @param tenantId 租户ID + * @return 全部租户配置项 + */ + List getAllTenantOption(Integer tenantId); + + /** + * 查询指定的租户配置项内容 + * + * @param tenantId 租户ID + * @param tenantOptionDict 配置项字典枚举 + * @return 指定的租户配置项内容(不存在返回NULL) + */ + SysTenantOptionDto getTenantOptionContent(Integer tenantId, TenantOptionDict tenantOptionDict); +} diff --git a/openhis-server/core-system/src/main/java/com/core/system/service/ISysTenantService.java b/openhis-server/core-system/src/main/java/com/core/system/service/ISysTenantService.java new file mode 100644 index 00000000..552981f2 --- /dev/null +++ b/openhis-server/core-system/src/main/java/com/core/system/service/ISysTenantService.java @@ -0,0 +1,114 @@ +package com.core.system.service; + +import java.util.List; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.core.common.core.domain.R; +import com.core.common.core.domain.entity.SysUser; +import com.core.system.domain.SysTenant; + +/** + * 租户信息表Service接口 + * + * @author system + */ +public interface ISysTenantService extends IService { + + /** + * 查询租户分页列表 + * + * @param tenantId 租户ID查询 + * @param tenantCode 租户编码模糊查询 + * @param tenantName 租户名称模糊查询 + * @param status 状态 + * @param pageNum 当前页 + * @param pageSize 每页多少条 + * @return 租户分页列表 + */ + R> getTenantPage(Integer tenantId, String tenantCode, String tenantName, String status, + Integer pageNum, Integer pageSize); + + /** + * 查询租户所属用户分页列表 + * + * @param tenantId 租户ID查询 + * @param userName 用户名称模糊查询 + * @param nickName 用户昵称模糊查询 + * @param phoneNumber 手机号码模糊查询 + * @param pageNum 当前页 + * @param pageSize 每页多少条 + * @return 租户所属用户分页列表 + */ + R> getTenantUserPage(Integer tenantId, String userName, String nickName, String phoneNumber, + Integer pageNum, Integer pageSize); + + /** + * 删除租户 + * + * @param tenantIdList 租户ID列表 + * @return 结果 + */ + R delTenant(List tenantIdList); + + /** + * 启用租户 + * + * @param tenantIdList 租户ID列表 + */ + void enableTenant(List tenantIdList); + + /** + * 停用租户 + * + * @param tenantIdList 租户ID列表 + */ + void disableTenant(List tenantIdList); + + /** + * 查询租户未绑定的用户列表 + * + * @param tenantId 租户ID + * @param userName 用户名称模糊查询 + * @param nickName 用户昵称模糊查询 + * @param phoneNumber 手机号码模糊查询 + * @param pageNum 当前页 + * @param pageSize 每页多少条 + * @return 结果 + */ + R> getUnbindTenantUserList(Integer tenantId, String userName, String nickName, String phoneNumber, + Integer pageNum, Integer pageSize); + + /** + * 绑定租户用户 + * + * @param tenantId 租户ID + * @param userIdList 用户ID列表 + * @return 结果 + */ + R bindTenantUser(Integer tenantId, List userIdList); + + /** + * 解绑租户用户 + * + * @param tenantId 租户ID + * @param userIdList 用户ID列表 + * @return 结果 + */ + R unbindTenantUser(Integer tenantId, List userIdList); + + /** + * 查询用户绑定的租户列表 + * + * @param username 用户账号 + * @return 用户绑定的租户列表 + */ + R> getUserBindTenantList(String username); + + /** + * 初始化租户绑定 + * + * @param userId 用户ID + */ + void initTenantBind(Long userId); +} diff --git a/openhis-server/core-system/src/main/java/com/core/system/service/ISysUserTenantService.java b/openhis-server/core-system/src/main/java/com/core/system/service/ISysUserTenantService.java new file mode 100644 index 00000000..1252a33a --- /dev/null +++ b/openhis-server/core-system/src/main/java/com/core/system/service/ISysUserTenantService.java @@ -0,0 +1,13 @@ +package com.core.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.core.system.domain.SysUserTenant; + +/** + * 用户租户绑定表Service接口 + * + * @author system + */ +public interface ISysUserTenantService extends IService { + +} diff --git a/openhis-server/core-system/src/main/java/com/core/system/service/impl/SysTenantOptionServiceImpl.java b/openhis-server/core-system/src/main/java/com/core/system/service/impl/SysTenantOptionServiceImpl.java new file mode 100644 index 00000000..5fd09cf2 --- /dev/null +++ b/openhis-server/core-system/src/main/java/com/core/system/service/impl/SysTenantOptionServiceImpl.java @@ -0,0 +1,144 @@ +package com.core.system.service.impl; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.core.common.core.domain.R; +import com.core.common.enums.TenantOptionDict; +import com.core.common.utils.StringUtils; +import com.core.system.domain.SysTenantOption; +import com.core.system.domain.dto.SysTenantOptionDto; +import com.core.system.mapper.SysTenantOptionMapper; +import com.core.system.service.ISysTenantOptionService; + +/** + * 租户配置项表Service业务层处理 + * + * @author system + */ +@Service +public class SysTenantOptionServiceImpl extends ServiceImpl + implements ISysTenantOptionService { + + /** + * 查询租户配置项分页列表 + * + * @param tenantId 租户ID查询 + * @param optionCode 配置项编码查询 + * @param pageNum 当前页 + * @param pageSize 每页多少条 + * @return 租户配置项分页列表 + */ + @Override + public R> getTenantOptionPage(Integer tenantId, String optionCode, Integer pageNum, + Integer pageSize) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + // 指定租户ID + if (tenantId != null) { + lambdaQueryWrapper.eq(SysTenantOption::getTenantId, tenantId); + } + // 指定配置项编码 + if (StringUtils.isNotEmpty(optionCode)) { + lambdaQueryWrapper.eq(SysTenantOption::getOptionCode, optionCode); + } + IPage page = baseMapper.selectPage(new Page<>(pageNum, pageSize), lambdaQueryWrapper); + // 获取配置项名称 + for (SysTenantOption record : page.getRecords()) { + TenantOptionDict tenantOptionDict = TenantOptionDict.getByCode(record.getOptionCode()); + if (tenantOptionDict != null) { + record.setOptionName(tenantOptionDict.getName()); + } + } + return R.ok(page); + } + + /** + * 新增租户配置项 + * + * @param sysTenantOption 租户配置项实体 + * @return 结果 + */ + @Override + public R addTenantOption(SysTenantOption sysTenantOption) { + List existOptionCodeList = baseMapper.selectList( + new LambdaQueryWrapper().eq(SysTenantOption::getTenantId, sysTenantOption.getTenantId()) + .eq(SysTenantOption::getOptionCode, sysTenantOption.getOptionCode())); + if (!existOptionCodeList.isEmpty()) { + return R.fail("当前租户已存在该配置项"); + } + baseMapper.insert(sysTenantOption); + return R.ok(); + } + + /** + * 查询租户配置项下拉列表 + * + * @return 租户配置项下拉列表 + */ + @Override + public List getTenantOptionDropdown() { + List optionDtoList = new ArrayList<>(); + SysTenantOptionDto optionDto; + // 遍历租户配置项字典枚举类 + for (TenantOptionDict dict : TenantOptionDict.values()) { + optionDto = new SysTenantOptionDto(); + optionDto.setCode(dict.getCode()); + optionDto.setName(dict.getName()); + optionDtoList.add(optionDto); + } + return optionDtoList; + } + + /** + * 查询全部租户配置项 + * + * @param tenantId 租户ID + * @return 全部租户配置项 + */ + @Override + public List getAllTenantOption(Integer tenantId) { + List sysTenantOptionList = + baseMapper.selectList(new LambdaQueryWrapper().eq(SysTenantOption::getTenantId, tenantId)); + List optionDtoList = new ArrayList<>(); + SysTenantOptionDto optionDto; + // 遍历该租户的所有配置 + for (SysTenantOption option : sysTenantOptionList) { + optionDto = new SysTenantOptionDto(); + // 获取配置项名称 + TenantOptionDict tenantOptionDict = TenantOptionDict.getByCode(option.getOptionCode()); + if (tenantOptionDict != null) { + optionDto.setName(tenantOptionDict.getName()); + } + optionDto.setCode(option.getOptionCode()); + optionDto.setContent(option.getOptionContent()); + optionDtoList.add(optionDto); + } + return optionDtoList; + } + + /** + * 查询指定的租户配置项内容 + * + * @param tenantId 租户ID + * @param tenantOptionDict 配置项字典枚举 + * @return 指定的租户配置项内容(不存在返回NULL) + */ + @Override + public SysTenantOptionDto getTenantOptionContent(Integer tenantId, TenantOptionDict tenantOptionDict) { + List sysTenantOptionList = baseMapper.selectList(new LambdaQueryWrapper() + .eq(SysTenantOption::getTenantId, tenantId).eq(SysTenantOption::getOptionCode, tenantOptionDict.getCode())); + if (sysTenantOptionList.isEmpty()) { + return null; + } + SysTenantOption sysTenantOption = sysTenantOptionList.get(0); + return new SysTenantOptionDto().setCode(sysTenantOption.getOptionCode()) + .setName(sysTenantOption.getOptionName()).setContent(sysTenantOption.getOptionContent()); + } + +} diff --git a/openhis-server/core-system/src/main/java/com/core/system/service/impl/SysTenantServiceImpl.java b/openhis-server/core-system/src/main/java/com/core/system/service/impl/SysTenantServiceImpl.java new file mode 100644 index 00000000..c0c3d938 --- /dev/null +++ b/openhis-server/core-system/src/main/java/com/core/system/service/impl/SysTenantServiceImpl.java @@ -0,0 +1,384 @@ +package com.core.system.service.impl; + +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +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.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.core.common.constant.CacheConstants; +import com.core.common.core.domain.R; +import com.core.common.core.domain.entity.SysUser; +import com.core.common.core.domain.model.LoginUser; +import com.core.common.core.redis.RedisCache; +import com.core.common.enums.DeleteFlag; +import com.core.common.enums.TenantStatus; +import com.core.common.utils.SecurityUtils; +import com.core.common.utils.StringUtils; +import com.core.system.domain.SysTenant; +import com.core.system.domain.SysUserTenant; +import com.core.system.mapper.SysTenantMapper; +import com.core.system.mapper.SysUserMapper; +import com.core.system.mapper.SysUserTenantMapper; +import com.core.system.service.ISysTenantService; + +/** + * 租户信息表Service业务层处理 + * + * @author system + */ +@Service +public class SysTenantServiceImpl extends ServiceImpl implements ISysTenantService { + @Autowired + private SysUserTenantMapper sysUserTenantMapper; + @Autowired + private SysUserMapper sysUserMapper; + @Autowired + private RedisCache redisCache; + + /** + * 查询租户分页列表 + * + * @param tenantId 租户ID查询 + * @param tenantCode 租户编码模糊查询 + * @param tenantName 租户名称模糊查询 + * @param status 状态 + * @param pageNum 当前页 + * @param pageSize 每页多少条 + * @return 租户分页列表 + */ + @Override + public R> getTenantPage(Integer tenantId, String tenantCode, String tenantName, String status, + Integer pageNum, Integer pageSize) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + // 指定租户ID + if (tenantId != null) { + lambdaQueryWrapper.eq(SysTenant::getId, tenantId); + } + // 指定租户编码 + if (StringUtils.isNotEmpty(tenantCode)) { + lambdaQueryWrapper.like(SysTenant::getTenantCode, tenantCode); + } + // 指定租户名称 + if (StringUtils.isNotEmpty(tenantName)) { + lambdaQueryWrapper.like(SysTenant::getTenantName, tenantName); + } + // 指定状态 + if (StringUtils.isNotEmpty(status)) { + lambdaQueryWrapper.eq(SysTenant::getStatus, status); + } + // 未删除 + lambdaQueryWrapper.eq(SysTenant::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode()); + lambdaQueryWrapper.orderByDesc(SysTenant::getId); + return R.ok(baseMapper.selectPage(new Page<>(pageNum, pageSize), lambdaQueryWrapper)); + } + + /** + * 查询租户所属用户分页列表 + * + * @param tenantId 租户ID查询 + * @param userName 用户名称模糊查询 + * @param nickName 用户昵称模糊查询 + * @param phoneNumber 手机号码模糊查询 + * @param pageNum 当前页 + * @param pageSize 每页多少条 + * @return 租户所属用户分页列表 + */ + @Override + public R> getTenantUserPage(Integer tenantId, String userName, String nickName, String phoneNumber, + Integer pageNum, Integer pageSize) { + // 租户ID不可为空 + if (tenantId == null) { + return R.fail("请指定租户"); + } + // 查询租户绑定的所有用户ID + List userTenantList = sysUserTenantMapper + .selectList(new LambdaUpdateWrapper().eq(SysUserTenant::getTenantId, tenantId)); + IPage page = new Page<>(pageNum, pageSize); + if (userTenantList.isEmpty()) { + // 无人绑定返回空分页列表 + page.setTotal(0L); + page.setRecords(Collections.emptyList()); + return R.ok(page); + } + List userIdList = userTenantList.stream().map(SysUserTenant::getUserId).collect(Collectors.toList()); + // 查询租户绑定的用户分页列表 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + if (StringUtils.isNotEmpty(userName)) { + lambdaQueryWrapper.like(SysUser::getUserName, userName); + } + if (StringUtils.isNotEmpty(nickName)) { + lambdaQueryWrapper.like(SysUser::getNickName, nickName); + } + if (StringUtils.isNotEmpty(phoneNumber)) { + lambdaQueryWrapper.like(SysUser::getPhonenumber, phoneNumber); + } + lambdaQueryWrapper.in(SysUser::getUserId, userIdList); + lambdaQueryWrapper.orderByDesc(SysUser::getUserId); + return R.ok(sysUserMapper.selectPage(page, lambdaQueryWrapper)); + } + + /** + * 删除租户 + * + * @param tenantIdList 租户ID列表 + */ + @Override + public R delTenant(List tenantIdList) { + if (!tenantIdList.isEmpty()) { + List sysUserTenantList = sysUserTenantMapper + .selectList(new LambdaQueryWrapper().in(SysUserTenant::getTenantId, tenantIdList)); + if (!sysUserTenantList.isEmpty()) { + return R.fail("该租户还存在绑定的用户,请确认"); + } + baseMapper.update(new SysTenant(), new LambdaUpdateWrapper() + .set(SysTenant::getDeleteFlag, DeleteFlag.DELETED.getCode()).in(SysTenant::getId, tenantIdList)); + } + return R.ok(); + } + + /** + * 启用租户 + * + * @param tenantIdList 租户ID列表 + */ + @Override + public void enableTenant(List tenantIdList) { + if (!tenantIdList.isEmpty()) { + baseMapper.update(new SysTenant(), new LambdaUpdateWrapper() + .set(SysTenant::getStatus, TenantStatus.ENABLE.getCode()).in(SysTenant::getId, tenantIdList)); + } + } + + /** + * 停用租户 + * + * @param tenantIdList 租户ID列表 + */ + @Override + public void disableTenant(List tenantIdList) { + if (!tenantIdList.isEmpty()) { + baseMapper.update(new SysTenant(), new LambdaUpdateWrapper() + .set(SysTenant::getStatus, TenantStatus.DISABLE.getCode()).in(SysTenant::getId, tenantIdList)); + // 强退租户所属的所有用户 + forceLogoutByTenantId(tenantIdList); + } + } + + /** + * 查询租户未绑定的用户列表 + * + * @param tenantId 租户ID + * @param userName 用户名称模糊查询 + * @param nickName 用户昵称模糊查询 + * @param phoneNumber 手机号码模糊查询 + * @param pageNum 当前页 + * @param pageSize 每页多少条 + * @return 结果 + */ + @Override + public R> getUnbindTenantUserList(Integer tenantId, String userName, String nickName, + String phoneNumber, Integer pageNum, Integer pageSize) { + // 租户ID不可为空 + if (tenantId == null) { + return R.fail("请指定租户"); + } + // 查询已绑定的用户ID + List sysUserTenantList = sysUserTenantMapper + .selectList(new LambdaUpdateWrapper().eq(SysUserTenant::getTenantId, tenantId)); + List userIdList = sysUserTenantList.stream().map(SysUserTenant::getUserId).collect(Collectors.toList()); + // 查询未绑定的用户列表 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + if (!userIdList.isEmpty()) { + lambdaQueryWrapper.notIn(SysUser::getUserId, userIdList); + } + if (StringUtils.isNotEmpty(phoneNumber)) { + lambdaQueryWrapper.like(SysUser::getPhonenumber, phoneNumber); + } + if (StringUtils.isNotEmpty(nickName)) { + lambdaQueryWrapper.like(SysUser::getNickName, nickName); + } + if (StringUtils.isNotEmpty(userName)) { + lambdaQueryWrapper.like(SysUser::getUserName, userName); + } + lambdaQueryWrapper.eq(SysUser::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode()); + lambdaQueryWrapper.orderByDesc(SysUser::getUserId); + return R.ok(sysUserMapper.selectPage(new Page<>(pageNum, pageSize), lambdaQueryWrapper)); + } + + /** + * 绑定租户用户 + * + * @param tenantId 租户ID + * @param userIdList 用户ID列表 + * @return 结果 + */ + @Override + public R bindTenantUser(Integer tenantId, List userIdList) { + // 租户ID不可为空 + if (tenantId == null) { + return R.fail("请指定租户"); + } + // 用户ID列表不可为空 + if (userIdList.isEmpty()) { + return R.fail("请选择绑定的用户"); + } + // 创建用户与租户间的绑定 + SysUserTenant sysUserTenant; + for (Long userId : userIdList) { + sysUserTenant = new SysUserTenant(); + sysUserTenant.setTenantId(tenantId).setUserId(userId); + sysUserTenantMapper.insert(sysUserTenant); + } + return R.ok(); + } + + /** + * 解绑租户用户 + * + * @param tenantId 租户ID + * @param userIdList 用户ID列表 + * @return 结果 + */ + @Override + public R unbindTenantUser(Integer tenantId, List userIdList) { + // 租户ID不可为空 + if (tenantId == null) { + return R.fail("请指定租户"); + } + // 用户ID列表不可为空 + if (userIdList.isEmpty()) { + return R.fail("请选择解绑的用户"); + } + // 删除用户与租户间的绑定 + sysUserTenantMapper.delete(new LambdaQueryWrapper().eq(SysUserTenant::getTenantId, tenantId) + .in(SysUserTenant::getUserId, userIdList)); + // 强退用户 + forceLogoutByUserId(tenantId, userIdList); + return R.ok(); + } + + /** + * 查询用户绑定的租户列表 + * + * @param username 用户账号 + * @return 用户绑定的租户列表 + */ + @Override + public R> getUserBindTenantList(String username) { + SysUser sysUser = sysUserMapper.selectUserByUserName(username); + if (sysUser == null) { + return R.ok(Collections.emptyList()); + } + // 查询已绑定的租户列表 + List sysUserTenantList = sysUserTenantMapper + .selectList(new LambdaUpdateWrapper().eq(SysUserTenant::getUserId, sysUser.getUserId())); + List tenantIdList = + sysUserTenantList.stream().map(SysUserTenant::getTenantId).collect(Collectors.toList()); + if (tenantIdList.isEmpty()) { + return R.ok(Collections.emptyList()); + } + List userBindTenantList = + baseMapper.selectList(new LambdaUpdateWrapper().in(SysTenant::getId, tenantIdList)); + // 优先将上次选择的租户排在前面 + try { + Integer cacheTenant = redisCache.getCacheObject(CacheConstants.LOGIN_SELECTED_TENANT + username); + if (cacheTenant != null) { + userBindTenantList + .sort(Comparator.comparing(e -> !cacheTenant.equals(e.getId()), Comparator.naturalOrder())); + } + } catch (Exception ignored) { + } + return R.ok(userBindTenantList); + } + + /** + * 初始化租户绑定 + * + * @param userId 用户ID + */ + @Override + public void initTenantBind(Long userId) { + if (userId == null) { + return; + } + // 查询当前登录者租户 + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (loginUser == null) { + return; + } + if (loginUser.getTenantId() == null) { + return; + } + // 查询绑定是否已存在 + List existBind = sysUserTenantMapper.selectList(new LambdaQueryWrapper() + .eq(SysUserTenant::getUserId, userId).eq(SysUserTenant::getTenantId, loginUser.getTenantId())); + if (!existBind.isEmpty()) { + return; + } + // 新增绑定关系 + sysUserTenantMapper.insert(new SysUserTenant().setUserId(userId).setTenantId(loginUser.getTenantId())); + } + + /** + * 强退租户所属的所有用户 + * + * @param tenantIdList 租户ID列表 + */ + private void forceLogoutByTenantId(List tenantIdList) { + if (tenantIdList.isEmpty()) { + return; + } + // 查询租户所属的所有用户信息 + List sysUserTenantList = sysUserTenantMapper + .selectList(new LambdaQueryWrapper().in(SysUserTenant::getTenantId, tenantIdList)); + if (sysUserTenantList.isEmpty()) { + return; + } + List tenantUserStringList = + sysUserTenantList.stream().map(e -> e.getTenantId() + "_" + e.getUserId()).collect(Collectors.toList()); + // 遍历所有当前登录用户,强退该租户的用户 + Collection keys = redisCache.keys(CacheConstants.LOGIN_TOKEN_KEY + "*"); + for (String key : keys) { + LoginUser user = redisCache.getCacheObject(key); + if (user != null) { + if (user.getTenantId() != null && user.getUserId() != null) { + if (tenantUserStringList.contains(user.getTenantId() + "_" + user.getUserId())) { + redisCache.deleteObject(key); + } + } + } + } + } + + /** + * 强退用户 + * + * @param tenantId 租户ID + * @param userIdList 用户ID列表 + */ + private void forceLogoutByUserId(Integer tenantId, List userIdList) { + if (tenantId == null || userIdList.isEmpty()) { + return; + } + // 遍历所有当前登录用户,强退该用户 + Collection keys = redisCache.keys(CacheConstants.LOGIN_TOKEN_KEY + "*"); + for (String key : keys) { + LoginUser user = redisCache.getCacheObject(key); + if (user != null) { + if (tenantId.equals(user.getTenantId()) && userIdList.contains(user.getUserId())) { + redisCache.deleteObject(key); + } + } + } + } + +} diff --git a/openhis-server/core-system/src/main/java/com/core/system/service/impl/SysUserTenantServiceImpl.java b/openhis-server/core-system/src/main/java/com/core/system/service/impl/SysUserTenantServiceImpl.java new file mode 100644 index 00000000..376b8fc1 --- /dev/null +++ b/openhis-server/core-system/src/main/java/com/core/system/service/impl/SysUserTenantServiceImpl.java @@ -0,0 +1,19 @@ +package com.core.system.service.impl; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.core.system.domain.SysUserTenant; +import com.core.system.mapper.SysUserTenantMapper; +import com.core.system.service.ISysUserTenantService; + +/** + * 用户租户绑定表Service业务层处理 + * + * @author system + */ +@Service +public class SysUserTenantServiceImpl extends ServiceImpl + implements ISysUserTenantService { + +} diff --git a/openhis-server/core-system/src/main/resources/mapper/system/SysTenantMapper.xml b/openhis-server/core-system/src/main/resources/mapper/system/SysTenantMapper.xml new file mode 100644 index 00000000..b309ce1c --- /dev/null +++ b/openhis-server/core-system/src/main/resources/mapper/system/SysTenantMapper.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/openhis-server/core-system/src/main/resources/mapper/system/SysTenantOptionMapper.xml b/openhis-server/core-system/src/main/resources/mapper/system/SysTenantOptionMapper.xml new file mode 100644 index 00000000..26b6021c --- /dev/null +++ b/openhis-server/core-system/src/main/resources/mapper/system/SysTenantOptionMapper.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/openhis-server/core-system/src/main/resources/mapper/system/SysUserTenantMapper.xml b/openhis-server/core-system/src/main/resources/mapper/system/SysUserTenantMapper.xml new file mode 100644 index 00000000..b309ce1c --- /dev/null +++ b/openhis-server/core-system/src/main/resources/mapper/system/SysUserTenantMapper.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/config/HttpConfig.java b/openhis-server/openhis-application/src/main/java/com/openhis/config/HttpConfig.java new file mode 100644 index 00000000..6737821c --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/config/HttpConfig.java @@ -0,0 +1,24 @@ +package com.openhis.config; + +import lombok.Data; +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.PropertySource; +import org.springframework.stereotype.Component; + +/** + * http相关配置 + * + * @author system + */ +@Data +@Component +@ConfigurationProperties(prefix = "http") +@PropertySource(value = {"classpath:http.yml"}) +public class HttpConfig { + private String appId; + private String key; + private String url; + private String fixmedinsCode; +} \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/quartz/controller/SysJobController.java b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/controller/SysJobController.java new file mode 100644 index 00000000..09e797f8 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/controller/SysJobController.java @@ -0,0 +1,154 @@ +package com.openhis.quartz.controller; + +import java.util.List; + +import javax.servlet.http.HttpServletResponse; + +import org.quartz.SchedulerException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import com.core.common.annotation.Log; +import com.core.common.constant.Constants; +import com.core.common.core.controller.BaseController; +import com.core.common.core.domain.AjaxResult; +import com.core.common.core.page.TableDataInfo; +import com.core.common.enums.BusinessType; +import com.core.common.exception.job.TaskException; +import com.core.common.utils.StringUtils; +import com.core.common.utils.poi.ExcelUtil; +import com.core.quartz.domain.SysJob; +import com.core.quartz.util.CronUtils; +import com.openhis.quartz.service.ISysJobService; +import com.openhis.quartz.util.ScheduleUtils; + +/** + * 调度任务信息操作处理 + * + * @author system + */ +@RestController +@RequestMapping("/monitor/job") +public class SysJobController extends BaseController { + @Autowired + private ISysJobService jobService; + + /** + * 查询定时任务列表 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:list')") + @GetMapping("/list") + public TableDataInfo list(SysJob sysJob) { + startPage(); + List list = jobService.selectJobList(sysJob); + return getDataTable(list); + } + + /** + * 导出定时任务列表 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:export')") + @Log(title = "定时任务", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, SysJob sysJob) { + List list = jobService.selectJobList(sysJob); + ExcelUtil util = new ExcelUtil(SysJob.class); + util.exportExcel(response, list, "定时任务"); + } + + /** + * 获取定时任务详细信息 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:query')") + @GetMapping(value = "/{jobId}") + public AjaxResult getInfo(@PathVariable("jobId") Long jobId) { + return success(jobService.selectJobById(jobId)); + } + + /** + * 新增定时任务 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:add')") + @Log(title = "定时任务", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SysJob job) throws SchedulerException, TaskException { + if (!CronUtils.isValid(job.getCronExpression())) { + return error("新增任务'" + job.getJobName() + "'失败,Cron表达式不正确"); + } else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI)) { + return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'rmi'调用"); + } else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), + new String[] {Constants.LOOKUP_LDAP, Constants.LOOKUP_LDAPS})) { + return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'ldap(s)'调用"); + } else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), + new String[] {Constants.HTTP, Constants.HTTPS})) { + return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'http(s)'调用"); + } else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), Constants.JOB_ERROR_STR)) { + return error("新增任务'" + job.getJobName() + "'失败,目标字符串存在违规"); + } else if (!ScheduleUtils.whiteList(job.getInvokeTarget())) { + return error("新增任务'" + job.getJobName() + "'失败,目标字符串不在白名单内"); + } + job.setCreateBy(getUsername()); + return toAjax(jobService.insertJob(job)); + } + + /** + * 修改定时任务 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:edit')") + @Log(title = "定时任务", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SysJob job) throws SchedulerException, TaskException { + if (!CronUtils.isValid(job.getCronExpression())) { + return error("修改任务'" + job.getJobName() + "'失败,Cron表达式不正确"); + } else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI)) { + return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'rmi'调用"); + } else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), + new String[] {Constants.LOOKUP_LDAP, Constants.LOOKUP_LDAPS})) { + return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'ldap(s)'调用"); + } else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), + new String[] {Constants.HTTP, Constants.HTTPS})) { + return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'http(s)'调用"); + } else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), Constants.JOB_ERROR_STR)) { + return error("修改任务'" + job.getJobName() + "'失败,目标字符串存在违规"); + } else if (!ScheduleUtils.whiteList(job.getInvokeTarget())) { + return error("修改任务'" + job.getJobName() + "'失败,目标字符串不在白名单内"); + } + job.setUpdateBy(getUsername()); + return toAjax(jobService.updateJob(job)); + } + + /** + * 定时任务状态修改 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:changeStatus')") + @Log(title = "定时任务", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public AjaxResult changeStatus(@RequestBody SysJob job) throws SchedulerException { + SysJob newJob = jobService.selectJobById(job.getJobId()); + newJob.setStatus(job.getStatus()); + return toAjax(jobService.changeStatus(newJob)); + } + + /** + * 定时任务立即执行一次 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:changeStatus')") + @Log(title = "定时任务", businessType = BusinessType.UPDATE) + @PutMapping("/run") + public AjaxResult run(@RequestBody SysJob job) throws SchedulerException { + boolean result = jobService.run(job); + return result ? success() : error("任务不存在或已过期!"); + } + + /** + * 删除定时任务 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:remove')") + @Log(title = "定时任务", businessType = BusinessType.DELETE) + @DeleteMapping("/{jobIds}") + public AjaxResult remove(@PathVariable Long[] jobIds) throws SchedulerException, TaskException { + jobService.deleteJobByIds(jobIds); + return success(); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/quartz/controller/SysJobLogController.java b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/controller/SysJobLogController.java new file mode 100644 index 00000000..d4886a54 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/controller/SysJobLogController.java @@ -0,0 +1,83 @@ +package com.openhis.quartz.controller; + +import java.util.List; + +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import com.core.common.annotation.Log; +import com.core.common.core.controller.BaseController; +import com.core.common.core.domain.AjaxResult; +import com.core.common.core.page.TableDataInfo; +import com.core.common.enums.BusinessType; +import com.core.common.utils.poi.ExcelUtil; +import com.core.quartz.domain.SysJobLog; +import com.openhis.quartz.service.ISysJobLogService; + +/** + * 调度日志操作处理 + * + * @author system + */ +@RestController +@RequestMapping("/monitor/jobLog") +public class SysJobLogController extends BaseController { + @Autowired + private ISysJobLogService jobLogService; + + /** + * 查询定时任务调度日志列表 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:list')") + @GetMapping("/list") + public TableDataInfo list(SysJobLog sysJobLog) { + startPage(); + List list = jobLogService.selectJobLogList(sysJobLog); + return getDataTable(list); + } + + /** + * 导出定时任务调度日志列表 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:export')") + @Log(title = "任务调度日志", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, SysJobLog sysJobLog) { + List list = jobLogService.selectJobLogList(sysJobLog); + ExcelUtil util = new ExcelUtil(SysJobLog.class); + util.exportExcel(response, list, "调度日志"); + } + + /** + * 根据调度编号获取详细信息 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:query')") + @GetMapping(value = "/{jobLogId}") + public AjaxResult getInfo(@PathVariable Long jobLogId) { + return success(jobLogService.selectJobLogById(jobLogId)); + } + + /** + * 删除定时任务调度日志 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:remove')") + @Log(title = "定时任务调度日志", businessType = BusinessType.DELETE) + @DeleteMapping("/{jobLogIds}") + public AjaxResult remove(@PathVariable Long[] jobLogIds) { + return toAjax(jobLogService.deleteJobLogByIds(jobLogIds)); + } + + /** + * 清空定时任务调度日志 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:remove')") + @Log(title = "调度日志", businessType = BusinessType.CLEAN) + @DeleteMapping("/clean") + public AjaxResult clean() { + jobLogService.cleanJobLog(); + return success(); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/quartz/service/ISysJobLogService.java b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/service/ISysJobLogService.java new file mode 100644 index 00000000..fd60d906 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/service/ISysJobLogService.java @@ -0,0 +1,56 @@ +package com.openhis.quartz.service; + +import java.util.List; + +import com.core.quartz.domain.SysJobLog; + +/** + * 定时任务调度日志信息信息 服务层 + * + * @author system + */ +public interface ISysJobLogService { + /** + * 获取quartz调度器日志的计划任务 + * + * @param jobLog 调度日志信息 + * @return 调度任务日志集合 + */ + public List selectJobLogList(SysJobLog jobLog); + + /** + * 通过调度任务日志ID查询调度信息 + * + * @param jobLogId 调度任务日志ID + * @return 调度任务日志对象信息 + */ + public SysJobLog selectJobLogById(Long jobLogId); + + /** + * 新增任务日志 + * + * @param jobLog 调度日志信息 + */ + public void addJobLog(SysJobLog jobLog); + + /** + * 批量删除调度日志信息 + * + * @param logIds 需要删除的日志ID + * @return 结果 + */ + public int deleteJobLogByIds(Long[] logIds); + + /** + * 删除任务日志 + * + * @param jobId 调度日志ID + * @return 结果 + */ + public int deleteJobLogById(Long jobId); + + /** + * 清空任务日志 + */ + public void cleanJobLog(); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/quartz/service/ISysJobService.java b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/service/ISysJobService.java new file mode 100644 index 00000000..d54359c4 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/service/ISysJobService.java @@ -0,0 +1,103 @@ +package com.openhis.quartz.service; + +import java.util.List; + +import org.quartz.SchedulerException; + +import com.core.common.exception.job.TaskException; +import com.core.quartz.domain.SysJob; + +/** + * 定时任务调度信息信息 服务层 + * + * @author system + */ +public interface ISysJobService { + /** + * 获取quartz调度器的计划任务 + * + * @param job 调度信息 + * @return 调度任务集合 + */ + public List selectJobList(SysJob job); + + /** + * 通过调度任务ID查询调度信息 + * + * @param jobId 调度任务ID + * @return 调度任务对象信息 + */ + public SysJob selectJobById(Long jobId); + + /** + * 暂停任务 + * + * @param job 调度信息 + * @return 结果 + */ + public int pauseJob(SysJob job) throws SchedulerException; + + /** + * 恢复任务 + * + * @param job 调度信息 + * @return 结果 + */ + public int resumeJob(SysJob job) throws SchedulerException; + + /** + * 删除任务后,所对应的trigger也将被删除 + * + * @param job 调度信息 + * @return 结果 + */ + public int deleteJob(SysJob job) throws SchedulerException; + + /** + * 批量删除调度信息 + * + * @param jobIds 需要删除的任务ID + * @return 结果 + */ + public void deleteJobByIds(Long[] jobIds) throws SchedulerException; + + /** + * 任务调度状态修改 + * + * @param job 调度信息 + * @return 结果 + */ + public int changeStatus(SysJob job) throws SchedulerException; + + /** + * 立即运行任务 + * + * @param job 调度信息 + * @return 结果 + */ + public boolean run(SysJob job) throws SchedulerException; + + /** + * 新增任务 + * + * @param job 调度信息 + * @return 结果 + */ + public int insertJob(SysJob job) throws SchedulerException, TaskException; + + /** + * 更新任务 + * + * @param job 调度信息 + * @return 结果 + */ + public int updateJob(SysJob job) throws SchedulerException, TaskException; + + /** + * 校验cron表达式是否有效 + * + * @param cronExpression 表达式 + * @return 结果 + */ + public boolean checkCronExpressionIsValid(String cronExpression); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/quartz/service/impl/SysJobLogServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/service/impl/SysJobLogServiceImpl.java new file mode 100644 index 00000000..65cddcf8 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/service/impl/SysJobLogServiceImpl.java @@ -0,0 +1,82 @@ +package com.openhis.quartz.service.impl; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.core.quartz.domain.SysJobLog; +import com.core.quartz.mapper.SysJobLogMapper; +import com.openhis.quartz.service.ISysJobLogService; + +/** + * 定时任务调度日志信息 服务层 + * + * @author system + */ +@Service +public class SysJobLogServiceImpl implements ISysJobLogService { + @Autowired + private SysJobLogMapper jobLogMapper; + + /** + * 获取quartz调度器日志的计划任务 + * + * @param jobLog 调度日志信息 + * @return 调度任务日志集合 + */ + @Override + public List selectJobLogList(SysJobLog jobLog) { + return jobLogMapper.selectJobLogList(jobLog); + } + + /** + * 通过调度任务日志ID查询调度信息 + * + * @param jobLogId 调度任务日志ID + * @return 调度任务日志对象信息 + */ + @Override + public SysJobLog selectJobLogById(Long jobLogId) { + return jobLogMapper.selectJobLogById(jobLogId); + } + + /** + * 新增任务日志 + * + * @param jobLog 调度日志信息 + */ + @Override + public void addJobLog(SysJobLog jobLog) { + jobLogMapper.insertJobLog(jobLog); + } + + /** + * 批量删除调度日志信息 + * + * @param logIds 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteJobLogByIds(Long[] logIds) { + return jobLogMapper.deleteJobLogByIds(logIds); + } + + /** + * 删除任务日志 + * + * @param jobId 调度日志ID + */ + @Override + public int deleteJobLogById(Long jobId) { + return jobLogMapper.deleteJobLogById(jobId); + } + + /** + * 清空任务日志 + */ + @Override + public void cleanJobLog() { + jobLogMapper.cleanJobLog(); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/quartz/service/impl/SysJobServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/service/impl/SysJobServiceImpl.java new file mode 100644 index 00000000..30fcd39b --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/service/impl/SysJobServiceImpl.java @@ -0,0 +1,238 @@ +package com.openhis.quartz.service.impl; + +import java.util.List; + +import javax.annotation.PostConstruct; + +import org.quartz.JobDataMap; +import org.quartz.JobKey; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.core.common.constant.ScheduleConstants; +import com.core.common.exception.job.TaskException; +import com.core.quartz.domain.SysJob; +import com.core.quartz.mapper.SysJobMapper; +import com.core.quartz.util.CronUtils; +import com.openhis.quartz.service.ISysJobService; +import com.openhis.quartz.util.ScheduleUtils; + +/** + * 定时任务调度信息 服务层 + * + * @author system + */ +@Service +public class SysJobServiceImpl implements ISysJobService { + @Autowired + private Scheduler scheduler; + + @Autowired + private SysJobMapper jobMapper; + + /** + * 项目启动时,初始化定时器 主要是防止手动修改数据库导致未同步到定时任务处理(注:不能手动修改数据库ID和任务组名,否则会导致脏数据) + */ + @PostConstruct + public void init() throws SchedulerException, TaskException { + scheduler.clear(); + List jobList = jobMapper.selectJobAll(); + for (SysJob job : jobList) { + ScheduleUtils.createScheduleJob(scheduler, job); + } + } + + /** + * 获取quartz调度器的计划任务列表 + * + * @param job 调度信息 + * @return + */ + @Override + public List selectJobList(SysJob job) { + return jobMapper.selectJobList(job); + } + + /** + * 通过调度任务ID查询调度信息 + * + * @param jobId 调度任务ID + * @return 调度任务对象信息 + */ + @Override + public SysJob selectJobById(Long jobId) { + return jobMapper.selectJobById(jobId); + } + + /** + * 暂停任务 + * + * @param job 调度信息 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int pauseJob(SysJob job) throws SchedulerException { + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + job.setStatus(ScheduleConstants.Status.PAUSE.getValue()); + int rows = jobMapper.updateJob(job); + if (rows > 0) { + scheduler.pauseJob(ScheduleUtils.getJobKey(jobId, jobGroup)); + } + return rows; + } + + /** + * 恢复任务 + * + * @param job 调度信息 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int resumeJob(SysJob job) throws SchedulerException { + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + job.setStatus(ScheduleConstants.Status.NORMAL.getValue()); + int rows = jobMapper.updateJob(job); + if (rows > 0) { + scheduler.resumeJob(ScheduleUtils.getJobKey(jobId, jobGroup)); + } + return rows; + } + + /** + * 删除任务后,所对应的trigger也将被删除 + * + * @param job 调度信息 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteJob(SysJob job) throws SchedulerException { + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + int rows = jobMapper.deleteJobById(jobId); + if (rows > 0) { + scheduler.deleteJob(ScheduleUtils.getJobKey(jobId, jobGroup)); + } + return rows; + } + + /** + * 批量删除调度信息 + * + * @param jobIds 需要删除的任务ID + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteJobByIds(Long[] jobIds) throws SchedulerException { + for (Long jobId : jobIds) { + SysJob job = jobMapper.selectJobById(jobId); + deleteJob(job); + } + } + + /** + * 任务调度状态修改 + * + * @param job 调度信息 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int changeStatus(SysJob job) throws SchedulerException { + int rows = 0; + String status = job.getStatus(); + if (ScheduleConstants.Status.NORMAL.getValue().equals(status)) { + rows = resumeJob(job); + } else if (ScheduleConstants.Status.PAUSE.getValue().equals(status)) { + rows = pauseJob(job); + } + return rows; + } + + /** + * 立即运行任务 + * + * @param job 调度信息 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public boolean run(SysJob job) throws SchedulerException { + boolean result = false; + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + SysJob properties = selectJobById(job.getJobId()); + // 参数 + JobDataMap dataMap = new JobDataMap(); + dataMap.put(ScheduleConstants.TASK_PROPERTIES, properties); + JobKey jobKey = ScheduleUtils.getJobKey(jobId, jobGroup); + if (scheduler.checkExists(jobKey)) { + result = true; + scheduler.triggerJob(jobKey, dataMap); + } + return result; + } + + /** + * 新增任务 + * + * @param job 调度信息 调度信息 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertJob(SysJob job) throws SchedulerException, TaskException { + job.setStatus(ScheduleConstants.Status.PAUSE.getValue()); + int rows = jobMapper.insertJob(job); + if (rows > 0) { + ScheduleUtils.createScheduleJob(scheduler, job); + } + return rows; + } + + /** + * 更新任务的时间表达式 + * + * @param job 调度信息 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateJob(SysJob job) throws SchedulerException, TaskException { + SysJob properties = selectJobById(job.getJobId()); + int rows = jobMapper.updateJob(job); + if (rows > 0) { + updateSchedulerJob(job, properties.getJobGroup()); + } + return rows; + } + + /** + * 更新任务 + * + * @param job 任务对象 + * @param jobGroup 任务组名 + */ + public void updateSchedulerJob(SysJob job, String jobGroup) throws SchedulerException, TaskException { + Long jobId = job.getJobId(); + // 判断是否存在 + JobKey jobKey = ScheduleUtils.getJobKey(jobId, jobGroup); + if (scheduler.checkExists(jobKey)) { + // 防止创建时存在数据问题 先移除,然后在执行创建操作 + scheduler.deleteJob(jobKey); + } + ScheduleUtils.createScheduleJob(scheduler, job); + } + + /** + * 校验cron表达式是否有效 + * + * @param cronExpression 表达式 + * @return 结果 + */ + @Override + public boolean checkCronExpressionIsValid(String cronExpression) { + return CronUtils.isValid(cronExpression); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/quartz/task/ExampleTask.java b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/task/ExampleTask.java new file mode 100644 index 00000000..b50ecb95 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/task/ExampleTask.java @@ -0,0 +1,35 @@ +package com.openhis.quartz.task; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.core.common.core.domain.R; +import com.core.common.utils.DateUtils; +import com.openhis.web.basedatamanage.appservice.IOrganizationAppService; + +import lombok.extern.slf4j.Slf4j; + +/** + * 定时任务例子 + * + * @author system + */ +@Slf4j +@Component("exampleTask") +public class ExampleTask { + + @Autowired + private IOrganizationAppService organizationAppService; + + /** + * 定时获取机构信息 + */ + public void getOrgInfo() { + log.info("定时获取机构信息START,时间:{}", DateUtils.getDate()); + + // 处理部分 + R r = organizationAppService.getOrgInfo(1907249098877554689L); + + log.info("定时获取机构信息END,机构信息:{},时间:{}", r.getData(), DateUtils.getDate()); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/quartz/task/RyTask.java b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/task/RyTask.java new file mode 100644 index 00000000..caed4d7f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/task/RyTask.java @@ -0,0 +1,47 @@ +package com.openhis.quartz.task; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Component; + +import com.core.common.utils.StringUtils; +import com.core.framework.config.TenantContext; +import com.openhis.administration.domain.Location; +import com.openhis.administration.service.ILocationService; + +/** + * 定时任务调度测试 + * + * @author system + */ +@Component("ryTask") +public class RyTask { + + @Resource + ILocationService locationService; + + public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) { + // 定时任务指定租户id,示例 + try { + Integer tenantId = i; + // 设置当前线程的租户ID + TenantContext.setCurrentTenant(tenantId); + List pharmacyList = locationService.getPharmacyList(); + System.out.println(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i)); + } finally { + // 清除线程局部变量,防止内存泄漏 + TenantContext.clear(); + } + + } + + public void ryParams(String params) { + System.out.println("执行有参方法:" + params); + } + + public void ryNoParams() { + System.out.println("执行无参方法"); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/quartz/util/AbstractQuartzJob.java b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/util/AbstractQuartzJob.java new file mode 100644 index 00000000..47903160 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/util/AbstractQuartzJob.java @@ -0,0 +1,98 @@ +package com.openhis.quartz.util; + +import java.util.Date; + +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.core.common.constant.Constants; +import com.core.common.constant.ScheduleConstants; +import com.core.common.utils.ExceptionUtil; +import com.core.common.utils.StringUtils; +import com.core.common.utils.bean.BeanUtils; +import com.core.common.utils.spring.SpringUtils; +import com.core.quartz.domain.SysJob; +import com.core.quartz.domain.SysJobLog; +import com.openhis.quartz.service.ISysJobLogService; + +/** + * 抽象quartz调用 + * + * @author system + */ +public abstract class AbstractQuartzJob implements Job { + private static final Logger log = LoggerFactory.getLogger(AbstractQuartzJob.class); + + /** + * 线程本地变量 + */ + private static ThreadLocal threadLocal = new ThreadLocal<>(); + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + SysJob sysJob = new SysJob(); + BeanUtils.copyBeanProp(sysJob, context.getMergedJobDataMap().get(ScheduleConstants.TASK_PROPERTIES)); + try { + before(context, sysJob); + if (sysJob != null) { + doExecute(context, sysJob); + } + after(context, sysJob, null); + } catch (Exception e) { + log.error("任务执行异常 - :", e); + after(context, sysJob, e); + } + } + + /** + * 执行前 + * + * @param context 工作执行上下文对象 + * @param sysJob 系统计划任务 + */ + protected void before(JobExecutionContext context, SysJob sysJob) { + threadLocal.set(new Date()); + } + + /** + * 执行后 + * + * @param context 工作执行上下文对象 + * @param sysJob 系统计划任务 + */ + protected void after(JobExecutionContext context, SysJob sysJob, Exception e) { + Date startTime = threadLocal.get(); + threadLocal.remove(); + + final SysJobLog sysJobLog = new SysJobLog(); + sysJobLog.setJobName(sysJob.getJobName()); + sysJobLog.setJobGroup(sysJob.getJobGroup()); + sysJobLog.setInvokeTarget(sysJob.getInvokeTarget()); + sysJobLog.setStartTime(startTime); + sysJobLog.setStopTime(new Date()); + long runMs = sysJobLog.getStopTime().getTime() - sysJobLog.getStartTime().getTime(); + sysJobLog.setJobMessage(sysJobLog.getJobName() + " 总共耗时:" + runMs + "毫秒"); + if (e != null) { + sysJobLog.setStatus(Constants.FAIL); + String errorMsg = StringUtils.substring(ExceptionUtil.getExceptionMessage(e), 0, 2000); + sysJobLog.setExceptionInfo(errorMsg); + } else { + sysJobLog.setStatus(Constants.SUCCESS); + } + + // 写入数据库当中 + SpringUtils.getBean(ISysJobLogService.class).addJobLog(sysJobLog); + } + + /** + * 执行方法,由子类重载 + * + * @param context 工作执行上下文对象 + * @param sysJob 系统计划任务 + * @throws Exception 执行过程中的异常 + */ + protected abstract void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/quartz/util/QuartzDisallowConcurrentExecution.java b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/util/QuartzDisallowConcurrentExecution.java new file mode 100644 index 00000000..3f606dfa --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/util/QuartzDisallowConcurrentExecution.java @@ -0,0 +1,21 @@ +package com.openhis.quartz.util; + +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; + +import com.core.quartz.domain.SysJob; +import com.core.quartz.util.JobInvokeUtil; + +/** + * 定时任务处理(禁止并发执行) + * + * @author system + * + */ +@DisallowConcurrentExecution +public class QuartzDisallowConcurrentExecution extends AbstractQuartzJob { + @Override + protected void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception { + JobInvokeUtil.invokeMethod(sysJob); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/quartz/util/QuartzJobExecution.java b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/util/QuartzJobExecution.java new file mode 100644 index 00000000..df899b24 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/util/QuartzJobExecution.java @@ -0,0 +1,19 @@ +package com.openhis.quartz.util; + +import org.quartz.JobExecutionContext; + +import com.core.quartz.domain.SysJob; +import com.core.quartz.util.JobInvokeUtil; + +/** + * 定时任务处理(允许并发执行) + * + * @author system + * + */ +public class QuartzJobExecution extends AbstractQuartzJob { + @Override + protected void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception { + JobInvokeUtil.invokeMethod(sysJob); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/quartz/util/ScheduleUtils.java b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/util/ScheduleUtils.java new file mode 100644 index 00000000..446bf92d --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/quartz/util/ScheduleUtils.java @@ -0,0 +1,123 @@ +package com.openhis.quartz.util; + +import org.quartz.*; + +import com.core.common.constant.Constants; +import com.core.common.constant.ScheduleConstants; +import com.core.common.exception.job.TaskException; +import com.core.common.exception.job.TaskException.Code; +import com.core.common.utils.StringUtils; +import com.core.common.utils.spring.SpringUtils; +import com.core.quartz.domain.SysJob; +import com.core.quartz.util.CronUtils; + +/** + * 定时任务工具类 + * + * @author system + * + */ +public class ScheduleUtils { + /** + * 得到quartz任务类 + * + * @param sysJob 执行计划 + * @return 具体执行任务类 + */ + private static Class getQuartzJobClass(SysJob sysJob) { + boolean isConcurrent = "0".equals(sysJob.getConcurrent()); + return isConcurrent ? QuartzJobExecution.class : QuartzDisallowConcurrentExecution.class; + } + + /** + * 构建任务触发对象 + */ + public static TriggerKey getTriggerKey(Long jobId, String jobGroup) { + return TriggerKey.triggerKey(ScheduleConstants.TASK_CLASS_NAME + jobId, jobGroup); + } + + /** + * 构建任务键对象 + */ + public static JobKey getJobKey(Long jobId, String jobGroup) { + return JobKey.jobKey(ScheduleConstants.TASK_CLASS_NAME + jobId, jobGroup); + } + + /** + * 创建定时任务 + */ + public static void createScheduleJob(Scheduler scheduler, SysJob job) throws SchedulerException, TaskException { + Class jobClass = getQuartzJobClass(job); + // 构建job信息 + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(getJobKey(jobId, jobGroup)).build(); + + // 表达式调度构建器 + CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression()); + cronScheduleBuilder = handleCronScheduleMisfirePolicy(job, cronScheduleBuilder); + + // 按新的cronExpression表达式构建一个新的trigger + CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(jobId, jobGroup)) + .withSchedule(cronScheduleBuilder).build(); + + // 放入参数,运行时的方法可以获取 + jobDetail.getJobDataMap().put(ScheduleConstants.TASK_PROPERTIES, job); + + // 判断是否存在 + if (scheduler.checkExists(getJobKey(jobId, jobGroup))) { + // 防止创建时存在数据问题 先移除,然后在执行创建操作 + scheduler.deleteJob(getJobKey(jobId, jobGroup)); + } + + // 判断任务是否过期 + if (StringUtils.isNotNull(CronUtils.getNextExecution(job.getCronExpression()))) { + // 执行调度任务 + scheduler.scheduleJob(jobDetail, trigger); + } + + // 暂停任务 + if (job.getStatus().equals(ScheduleConstants.Status.PAUSE.getValue())) { + scheduler.pauseJob(ScheduleUtils.getJobKey(jobId, jobGroup)); + } + } + + /** + * 设置定时任务策略 + */ + public static CronScheduleBuilder handleCronScheduleMisfirePolicy(SysJob job, CronScheduleBuilder cb) + throws TaskException { + switch (job.getMisfirePolicy()) { + case ScheduleConstants.MISFIRE_DEFAULT: + return cb; + case ScheduleConstants.MISFIRE_IGNORE_MISFIRES: + return cb.withMisfireHandlingInstructionIgnoreMisfires(); + case ScheduleConstants.MISFIRE_FIRE_AND_PROCEED: + return cb.withMisfireHandlingInstructionFireAndProceed(); + case ScheduleConstants.MISFIRE_DO_NOTHING: + return cb.withMisfireHandlingInstructionDoNothing(); + default: + throw new TaskException( + "The task misfire policy '" + job.getMisfirePolicy() + "' cannot be used in cron schedule tasks", + Code.CONFIG_ERROR); + } + } + + /** + * 检查包名是否为白名单配置 + * + * @param invokeTarget 目标字符串 + * @return 结果 + */ + public static boolean whiteList(String invokeTarget) { + String packageName = StringUtils.substringBefore(invokeTarget, "("); + int count = StringUtils.countMatches(packageName, "."); + if (count > 1) { + return StringUtils.containsAnyIgnoreCase(invokeTarget, Constants.JOB_WHITELIST_STR); + } + Object obj = SpringUtils.getBean(StringUtils.split(invokeTarget, ".")[0]); + String beanPackageName = obj.getClass().getPackage().getName(); + return StringUtils.containsAnyIgnoreCase(beanPackageName, Constants.JOB_WHITELIST_STR) + && !StringUtils.containsAnyIgnoreCase(beanPackageName, Constants.JOB_ERROR_STR); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/controller/LocationController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/controller/LocationController.java new file mode 100644 index 00000000..0a3cd91c --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/controller/LocationController.java @@ -0,0 +1,121 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.basedatamanage.controller; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import com.core.common.core.domain.R; +import com.openhis.web.basedatamanage.appservice.ILocationAppService; +import com.openhis.web.basedatamanage.dto.LocationAddOrEditDto; +import com.openhis.web.basedatamanage.dto.LocationPageParam; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * 位置管理Controller业务层处理 + * + * @author + * @date 2025-02-21 + */ +@RestController +@RequestMapping("/base-data-manage/location") +@Slf4j +@AllArgsConstructor +public class LocationController { + + @Resource + private ILocationAppService locationAppService; + + /** + * 位置初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R init() { + return locationAppService.locationInit(); + } + + /** + * 位置分页列表-树型 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 位置分页列表 + */ + @GetMapping(value = "/location-page-tree") + public R getLocationPage(@RequestParam(required = false, value = "formKey", defaultValue = "") Integer formKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return locationAppService.getLocationTree(formKey, pageNo, pageSize); + } + + /** + * 位置分页列表 + * + * @param locationPageParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询条件 + * @param request 请求 + * @return 位置分页列表 + */ + @GetMapping(value = "/location-page") + public R getLocationPage(LocationPageParam locationPageParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return locationAppService.getLocationPage(locationPageParam, searchKey, pageNo, pageSize, request); + } + + /** + * 获取位置信息详情 + * + * @param locationId 位置Id + * @return 位置信息 + */ + @GetMapping("/location") + public R getLocationById(@RequestParam Long locationId) { + return locationAppService.getLocationById(locationId); + } + + /** + * 新增位置信息 + * + * @param locationAddOrEditDto 库房位置信息 + * @return 操作结果 + */ + @PostMapping("/location") + public R addLocation(@Validated @RequestBody LocationAddOrEditDto locationAddOrEditDto) { + return locationAppService.addLocation(locationAddOrEditDto); + } + + /** + * 编辑位置信息 + * + * @param locationAddOrEditDto 库房位置信息 + * @return 操作结果 + */ + @PutMapping("/location") + public R editLocation(@Validated @RequestBody LocationAddOrEditDto locationAddOrEditDto) { + return locationAppService.editLocation(locationAddOrEditDto); + } + + /** + * 删除位置信息 + * + * @param busNo 位置信息编码 + * @return 操作结果 + */ + @DeleteMapping("/location") + public R deleteLocation(@RequestParam String busNo) { + return locationAppService.deleteLocation(busNo); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationAddOrEditDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationAddOrEditDto.java new file mode 100644 index 00000000..f6adc4e2 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationAddOrEditDto.java @@ -0,0 +1,42 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.basedatamanage.dto; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 位置信息新增编辑dto + * + * @author zwh + * @date 2025-03-31 + */ +@Data +@Accessors(chain = true) +public class LocationAddOrEditDto { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + /** 编码 */ + private String busNo; + + /** 名称 */ + @NotNull + private String name; + + /** 物理形式枚举 */ + @NotNull + private String formEnum; + + /** 机构编码 */ + private Long organizationId; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationDto.java new file mode 100644 index 00000000..e5cdacbf --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationDto.java @@ -0,0 +1,85 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.basedatamanage.dto; + +import java.util.ArrayList; +import java.util.List; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * @author + * @date 2025-02-21 + */ +@Data +@Accessors(chain = true) +public class LocationDto { + /** ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 编码 */ + @NotBlank(message = "位置编码不能为空") + private String busNo; + + /** 名称 */ + @NotBlank(message = "位置名称不能为空") + private String name; + + /** 状态编码 */ + @NotNull(message = "状态编码不能为空") + // private LocationStatus statusEnum; + private Integer statusEnum; + private String statusEnum_enumText; + + /** 操作状态 */ + @NotNull(message = "操作状态不能为空") + // private LocationBedStatus operationalEnum; + private Integer operationalEnum; + private String operationalEnum_enumText; + + /** 模式编码 */ + @NotNull(message = "模式编码不能为空") + // private LocationMode modeEnum; + private Integer modeEnum; + private String modeEnum_enumText; + + /** 模式编码 */ + private String typeCode; + + /** 功能编码 */ + @NotBlank(message = "功能编码不能为空") + private String typeJson; + + /** 拼音码 */ + private String pyStr; + + /** 五笔码 */ + private String wbStr; + + /** 物理形式枚举 */ + @NotNull(message = "物理形式枚举不能为空") + // private LocationForm formEnum; + private Integer formEnum; + private String formEnum_enumText; + + /** 机构编码 */ + @NotNull(message = "机构编码不能为空") + @JsonSerialize(using = ToStringSerializer.class) + private Long organizationId; + + /** 显示顺序 */ + private Integer displayOrder; + + /** 子集合 */ + private List children = new ArrayList<>(); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationInfoDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationInfoDto.java new file mode 100644 index 00000000..73550b14 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationInfoDto.java @@ -0,0 +1,52 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.basedatamanage.dto; + +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; + +/** + * 位置信息 + * + * @author zwh + * @date 2025-03-31 + */ +@Data +@Accessors(chain = true) +public class LocationInfoDto { + + /** ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 编码 */ + private String busNo; + + /** 名称 */ + private String name; + + /** 状态编码 */ + private Integer statusEnum; + private String statusEnum_enumText; + + /** 操作状态 */ + private Integer operationalEnum; + private String operationalEnum_enumText; + + /** 物理形式枚举 */ + private Integer formEnum; + private String formEnum_enumText; + + /** 机构编码 */ + @Dict(dictCode = "id",dictText = "name",dictTable = "adm_organization") + @JsonSerialize(using = ToStringSerializer.class) + private Long organizationId; + private String organizationId_dictText; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationInitDto.java new file mode 100644 index 00000000..2f9a8782 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationInitDto.java @@ -0,0 +1,36 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.basedatamanage.dto; + +import java.util.List; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 位置信息初始化dto + * + * @author zwh + * @date 2025-03-31 + */ +@Data +@Accessors(chain = true) +public class LocationInitDto { + + private List locationStatusOptions; + + /** + * 位置状态 + */ + @Data + public static class locationStatusOption { + private Integer value; + private String info; + + public locationStatusOption(Integer value, String info) { + this.value = value; + this.info = info; + } + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationPageParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationPageParam.java new file mode 100644 index 00000000..023545b7 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/LocationPageParam.java @@ -0,0 +1,37 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.basedatamanage.dto; + +import java.util.List; + +import javax.validation.constraints.NotEmpty; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 位置信息分页查询条件 + * + * @author zwh + * @date 2025-03-31 + */ +@Data +@Accessors(chain = true) +public class LocationPageParam { + + /** 编码 */ + private String busNo; + + /** 状态编码 */ + private Integer statusEnum; + + /** 位置类型 */ + private Integer formEnum; + + /** + * 位置分页默认初始类型(前端传) + */ + @NotEmpty + private List locationFormList; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/OrganizationDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/OrganizationDto.java new file mode 100644 index 00000000..5e094ed2 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/OrganizationDto.java @@ -0,0 +1,63 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.basedatamanage.dto; + +import java.util.ArrayList; +import java.util.List; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.openhis.common.enums.OrganizationClass; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * @author + * @date 2025-02-21 + */ +@Data +@Accessors(chain = true) +public class OrganizationDto { + + /** ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 编码 */ + private String busNo; + + /** 名称 */ + private String name; + + /** 活动标识 */ + private Integer activeFlag; + private String activeFlag_dictText; + + /** 机构类型枚举 */ + private Integer typeEnum; + private String typeEnum_dictText; + + /** 机构分类枚举 */ + private Integer classEnum; + private String classEnum_dictText; + + /** 拼音码 */ + private String pyStr; + + /** 五笔码 */ + private String wbStr; + + /** 医保码 */ + private String ybNo; + + /** 医保名称 */ + private String ybName; + + /** 显示顺序 */ + private Integer displayOrder; + + /** 子集合 */ + private List children = new ArrayList<>(); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/SelectableOrgDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/SelectableOrgDto.java new file mode 100644 index 00000000..5aff6dde --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/dto/SelectableOrgDto.java @@ -0,0 +1,28 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.basedatamanage.dto; + +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 SelectableOrgDto { + + /** 科室ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long orgId; + + /** + * 科室名称 + */ + private String orgName; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/catalogmanage/appservice/ICatalogService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/catalogmanage/appservice/ICatalogService.java new file mode 100644 index 00000000..261efaa1 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/catalogmanage/appservice/ICatalogService.java @@ -0,0 +1,23 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.catalogmanage.appservice; + +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.openhis.ybcatalog.domain.CatalogZySyndrome; + +import javax.servlet.http.HttpServletRequest; + +/** + * 医保目录服务层 + * + * @author SunJQ + * @date 2025-04-09 + */ + +public interface ICatalogService { + R getPage(Integer catalogType, String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/catalogmanage/appservice/impl/CatalogServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/catalogmanage/appservice/impl/CatalogServiceImpl.java new file mode 100644 index 00000000..93b40bbf --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/catalogmanage/appservice/impl/CatalogServiceImpl.java @@ -0,0 +1,296 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.catalogmanage.appservice.impl; + +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.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.constant.YbCommonConstants; +import com.openhis.common.enums.CatalogType; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.catalogmanage.appservice.ICatalogService; +import com.openhis.web.catalogmanage.mapper.CatalogMapper; +import com.openhis.ybcatalog.domain.*; +import com.openhis.ybcatalog.service.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.HashSet; + +/** + * 医保目录服务层 + * + * @author SunJQ + * @date 2025-04-09 + */ +@Service +public class CatalogServiceImpl implements ICatalogService { + + @Autowired + CatalogMapper catalogMapper; + @Autowired + ICatalogDrugInfoService iCatalogDrugInfoService; + @Autowired + ICatalogMedicalServiceService iCatalogMedicalServiceService; + @Autowired + ICatalogMedicalConsumablesService iCatalogMedicalConsumablesService; + @Autowired + ICatalogSurgeryStandardDirectoryService iCatalogSurgeryStandardDirectoryService; + @Autowired + ICatalogZyDiseaseDiagnosisService iCatalogZyDiseaseDiagnosisService; + @Autowired + ICatalogWesternDiseaseService iCatalogWesternDiseaseService; + @Autowired + ICatalogZySyndromeService iCatalogZySyndromeService; + @Autowired + ICatalogMedicalHerbInfoService iCatalogMedicalHerbInfoService; + + @Override + public R getPage(Integer catalogType, String searchKey, Integer pageNo, Integer pageSize, + HttpServletRequest request) { + // 分类 + CatalogType catalog = CatalogType.getByValue(catalogType); + if (catalog == null) { + return R.fail( + MessageUtils.createMessage(PromptMsgConstant.Yb.M00001, new String[] {String.valueOf(catalogType)})); + } + // 查询对应的目录 + switch (catalog) { + case CATALOG_TYPE_1301: + return get1301Page(searchKey, pageNo, pageSize, request); + case CATALOG_TYPE_1302: + return get1302Page(searchKey, pageNo, pageSize, request); + case CATALOG_TYPE_1305: + return get1305Page(searchKey, pageNo, pageSize, request); + case CATALOG_TYPE_1306: + return get1306Page(searchKey, pageNo, pageSize, request); + case CATALOG_TYPE_1307: + return get1307Page(searchKey, pageNo, pageSize, request); + case CATALOG_TYPE_1308: + return get1308Page(searchKey, pageNo, pageSize, request); + case CATALOG_TYPE_1314: + return get1314Page(searchKey, pageNo, pageSize, request); + case CATALOG_TYPE_1315: + return get1315Page(searchKey, pageNo, pageSize, request); + default: + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Yb.M00001, + new String[] {String.valueOf(catalogType)})); + } + } + + /** + * 中医证候目录 + * + * @param searchKey 模糊条件 + * @param pageNo 分页参数 + * @param pageSize 分页参数 + * @param request 请求参数 + * @return 分页内容 + */ + private R get1315Page(String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request) { + // 构建查询条件 + // QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper( + // null, searchKey, new HashSet<>(Arrays.asList(YBCommonConstants.FieldName.SyndromeTypeCode, + // YBCommonConstants.FieldName.SyndromeTypeName, YBCommonConstants.FieldName.UniqueRecordId)), + // request); + // + // return R.ok(catalogMapper.get1315Page(new Page(pageNo, pageSize), queryWrapper)); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(YbCommonConstants.FieldName.SyndromeTypeCode, searchKey).or() + .like(YbCommonConstants.FieldName.SyndromeTypeName, searchKey).or() + .like(YbCommonConstants.FieldName.UniqueRecordId, searchKey); + return R.ok(iCatalogZySyndromeService.page(new Page<>(pageNo, pageSize), queryWrapper)); + } + + /** + * 中医疾病目录 + * + * @param searchKey 模糊条件 + * @param pageNo 分页参数 + * @param pageSize 分页参数 + * @param request 请求参数 + * @return 分页内容 + */ + private R get1314Page(String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request) { + // 构建查询条件 + // QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper( + // null, searchKey, new HashSet<>(Arrays.asList(YBCommonConstants.FieldName.DiseaseCategoryName, + // YBCommonConstants.FieldName.DiseaseCategoryCode, YBCommonConstants.FieldName.UniqueRecordId)), + // request); + // + // return R.ok(catalogMapper.get1314Page(new Page(pageNo, pageSize), queryWrapper)); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(YbCommonConstants.FieldName.DiseaseCategoryName, searchKey).or() + .like(YbCommonConstants.FieldName.DiseaseCategoryCode, searchKey).or() + .like(YbCommonConstants.FieldName.UniqueRecordId, searchKey); + return R.ok(iCatalogZyDiseaseDiagnosisService.page(new Page<>(pageNo, pageSize), queryWrapper)); + } + + /** + * 手术标准目录 + * + * @param searchKey 模糊条件 + * @param pageNo 分页参数 + * @param pageSize 分页参数 + * @param request 请求参数 + * @return 分页内容 + */ + private R get1308Page(String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request) { + // 构建查询条件 + // QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper( + // null, searchKey, new HashSet<>(Arrays.asList(YBCommonConstants.FieldName.CategoryName, + // YBCommonConstants.FieldName.SubcategoryName, YBCommonConstants.FieldName.ItemName, + // YBCommonConstants.FieldName.ItemName, YBCommonConstants.FieldName.OperationName, + // YBCommonConstants.FieldName.OperationCode)), + // request); + // + // return R.ok(catalogMapper.get1308Page(new Page(pageNo, pageSize), queryWrapper)); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(YbCommonConstants.FieldName.CategoryName, searchKey).or() + .like(YbCommonConstants.FieldName.SubcategoryName, searchKey).or() + .like(YbCommonConstants.FieldName.ItemName, searchKey).or() + .like(YbCommonConstants.FieldName.OperationName, searchKey).or() + .like(YbCommonConstants.FieldName.OperationCode, searchKey); + return R.ok(iCatalogSurgeryStandardDirectoryService.page(new Page<>(pageNo, pageSize), queryWrapper)); + } + + /** + * 疾病与诊断目录 + * + * @param searchKey 模糊条件 + * @param pageNo 分页参数 + * @param pageSize 分页参数 + * @param request 请求参数 + * @return 分页内容 + */ + private R get1307Page(String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request) { + // 构建查询条件 + // QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper( + // null, searchKey, new HashSet<>(Arrays.asList(YBCommonConstants.FieldName.CategoryName, + // YBCommonConstants.FieldName.SubcategoryName, YBCommonConstants.FieldName.ItemName, + // YBCommonConstants.FieldName.ItemName, YBCommonConstants.FieldName.OperationName, + // YBCommonConstants.FieldName.OperationCode)), + // request); + // + // return R.ok(catalogMapper.get1307Page(new Page(pageNo, pageSize), queryWrapper)); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(YbCommonConstants.FieldName.CategoryName, searchKey).or() + .like(YbCommonConstants.FieldName.SubcategoryName, searchKey).or() + .like(YbCommonConstants.FieldName.ChapterName, searchKey).or() + .like(YbCommonConstants.FieldName.SectionName, searchKey); + return R.ok(iCatalogWesternDiseaseService.page(new Page<>(pageNo, pageSize), queryWrapper)); + } + + /** + * 医用耗材目录 + * + * @param searchKey 模糊条件 + * @param pageNo 分页参数 + * @param pageSize 分页参数 + * @param request 请求参数 + * @return 分页内容 + */ + private R get1306Page(String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request) { + // 构建查询条件 + // QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper( + // null, searchKey, new HashSet<>(Arrays.asList(YBCommonConstants.FieldName.MedicalCatalogCode, + // YBCommonConstants.FieldName.ConsumableCategory, YBCommonConstants.FieldName.MaterialType, + // YBCommonConstants.FieldName.Specification)), + // request); + // + // return R.ok(catalogMapper.get1306Page(new Page(pageNo, pageSize), queryWrapper)); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(YbCommonConstants.FieldName.MedicalCatalogCode, searchKey).or() + .like(YbCommonConstants.FieldName.ConsumableName, searchKey).or() + .like(YbCommonConstants.FieldName.ConsumableCategory, searchKey).or() + .like(YbCommonConstants.FieldName.MaterialType, searchKey).or() + .like(YbCommonConstants.FieldName.Specification, searchKey); + return R.ok(iCatalogMedicalConsumablesService.page(new Page<>(pageNo, pageSize), queryWrapper)); + } + + /** + * 医疗服务目录 + * + * @param searchKey 模糊条件 + * @param pageNo 分页参数 + * @param pageSize 分页参数 + * @param request 请求参数 + * @return 分页内容 + */ + private R get1305Page(String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request) { + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(null, searchKey, + new HashSet<>(Arrays.asList(YbCommonConstants.FieldName.MedicalCatalogCode, + YbCommonConstants.FieldName.MedicalServiceName, YbCommonConstants.FieldName.UniqueRecordId)), + request); + // 只保留每组中 version_number 最大的记录 + queryWrapper.eq(YbCommonConstants.FieldName.RowNumMax, 1); + Integer tenantId = SecurityUtils.getLoginUser().getTenantId(); + return R.ok(catalogMapper.get1305Page(new Page(pageNo, pageSize), queryWrapper, tenantId)); + + // QueryWrapper queryWrapper = new QueryWrapper<>(); + // queryWrapper.like(YbCommonConstants.FieldName.MedicalServiceName, searchKey).or() + // .like(YbCommonConstants.FieldName.UniqueRecordId, searchKey); + // return R.ok(iCatalogMedicalServiceService.page(new Page<>(pageNo, pageSize), queryWrapper)); + } + + /** + * 中药饮片目录 + * + * @param searchKey 模糊条件 + * @param pageNo 分页参数 + * @param pageSize 分页参数 + * @param request 请求参数 + * @return 分页内容 + */ + private R get1302Page(String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request) { + // 构建查询条件 + // QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper( + // null, searchKey, new HashSet<>(Arrays.asList(YBCommonConstants.FieldName.MedicalServiceName, + // YBCommonConstants.FieldName.UniqueRecordId)), + // request); + // + // return R.ok(catalogMapper.get1302Page(new Page(pageNo, pageSize), queryWrapper)); + QueryWrapper queryWrapper = new QueryWrapper<>(); + // queryWrapper.like(YBCommonConstants.FieldName.MedicalServiceName, searchKey).or() + // .like(YBCommonConstants.FieldName.UniqueRecordId, searchKey); + return R.ok(iCatalogMedicalHerbInfoService.page(new Page<>(pageNo, pageSize), queryWrapper)); + } + + /** + * 西药中成药目录 + * + * @param searchKey 模糊条件 + * @param pageNo 分页参数 + * @param pageSize 分页参数 + * @param request 请求参数 + * @return 分页内容 + */ + private R get1301Page(String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request) { + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(null, searchKey, + new HashSet<>(Arrays.asList(YbCommonConstants.FieldName.MedicalCatalogCode, + YbCommonConstants.FieldName.RegisteredName, YbCommonConstants.FieldName.ApprovalNo, + YbCommonConstants.FieldName.UniqueRecordId)), + request); + + // 只保留每组中 version_number 最大的记录 + queryWrapper.eq(YbCommonConstants.FieldName.RowNumMax, 1); + Integer tenantId = SecurityUtils.getLoginUser().getTenantId(); + return R.ok(catalogMapper.get1301Page(new Page(pageNo, pageSize), queryWrapper, tenantId)); + + // QueryWrapper queryWrapper = new QueryWrapper<>(); + // queryWrapper.like(YbCommonConstants.FieldName.MedicalCatalogCode, searchKey).or() + // .like(YbCommonConstants.FieldName.RegisteredName, searchKey).or() + // .like(YbCommonConstants.FieldName.ApprovalNo, searchKey).or() + // .like(YbCommonConstants.FieldName.UniqueRecordId, searchKey); + // return R.ok(iCatalogDrugInfoService.page(new Page<>(pageNo, pageSize), queryWrapper)); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/catalogmanage/controller/CatalogController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/catalogmanage/controller/CatalogController.java new file mode 100644 index 00000000..173be8f4 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/catalogmanage/controller/CatalogController.java @@ -0,0 +1,58 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.catalogmanage.controller; + +import com.core.common.annotation.Anonymous; +import com.core.common.core.domain.R; +import com.openhis.web.catalogmanage.appservice.ICatalogService; +import com.openhis.web.patientmanage.appservice.IPatientInformationService; +import com.openhis.web.patientmanage.dto.PatientInfoSearchParam; +import com.openhis.web.ybmanage.config.YbServiceConfig; +import io.swagger.models.auth.In; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +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 javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; + +/** + * 医保目录 + * + * @author SunJQ + * @date 2025-04-09 + */ +@RestController +@RequestMapping("/catalog") +@Slf4j +@AllArgsConstructor +public class CatalogController { + + @Autowired + ICatalogService iCatalogService; + @Autowired + YbServiceConfig ybServiceConfig; + /** + * 分页查询医保目录信息,可选条件 + * + * @param catalogType 查询参数 + * @param searchKey 查询条件-模糊查询 + * @param pageNo 页码(默认为1) + * @param pageSize 每页大小(默认为10) + */ + @Anonymous + @GetMapping("/page") + public R getPage(Integer catalogType, + @RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { + + System.out.println(ybServiceConfig.getUrl()); + return R.ok(iCatalogService.getPage(catalogType, searchKey, pageNo, pageSize,request)); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/catalogmanage/mapper/CatalogMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/catalogmanage/mapper/CatalogMapper.java new file mode 100644 index 00000000..6526141c --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/catalogmanage/mapper/CatalogMapper.java @@ -0,0 +1,38 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.catalogmanage.mapper; + +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.ybcatalog.domain.*; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +/** + * 医保目录Mapper + * + * @author SunJQ + * @date 2025-04-09 + */ +@Repository +public interface CatalogMapper { + + IPage get1315Page(@Param("page")Page page, @Param(Constants.WRAPPER)QueryWrapper queryWrapper); + + IPage get1314Page(@Param("page")Page page, @Param(Constants.WRAPPER)QueryWrapper queryWrapper); + + IPage get1308Page(@Param("page")Page page, @Param(Constants.WRAPPER)QueryWrapper queryWrapper); + + IPage get1307Page(@Param("page")Page page, @Param(Constants.WRAPPER)QueryWrapper queryWrapper); + + IPage get1306Page(@Param("page")Page page, @Param(Constants.WRAPPER)QueryWrapper queryWrapper); + + IPage get1305Page(@Param("page")Page page, @Param(Constants.WRAPPER)QueryWrapper queryWrapper,@Param("tenantId") Integer tenantId); + + IPage get1302Page(@Param("page")Page page, @Param(Constants.WRAPPER)QueryWrapper queryWrapper); + + IPage get1301Page(@Param("page")Page page, @Param(Constants.WRAPPER)QueryWrapper queryWrapper,@Param("tenantId") Integer tenantId); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/IOutpatientPricingAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/IOutpatientPricingAppService.java new file mode 100644 index 00000000..d5a5defe --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/IOutpatientPricingAppService.java @@ -0,0 +1,46 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.chargemanage.appservice; + +import javax.servlet.http.HttpServletRequest; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.openhis.web.doctorstation.dto.AdviceBaseDto; +import com.openhis.web.doctorstation.dto.PatientInfoDto; + +/** + * 门诊划价 service + * + * @author yangmo + * @date 2025-04-14 + */ +public interface IOutpatientPricingAppService { + + /** + * 查询就诊患者信息 + * + * @param patientInfoDto 查询条件 (前端可传 statusEnum 区分就诊状态tab) + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 就诊患者信息 + */ + IPage getPatientInfo(PatientInfoDto patientInfoDto, String searchKey, Integer pageNo, + Integer pageSize, HttpServletRequest request); + + /** + * 查询医嘱信息 + * + * @param adviceBaseDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param locationId 药房id + * @param organizationId 患者挂号对应的科室id + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 医嘱信息 + */ + IPage getAdviceBaseInfo(AdviceBaseDto adviceBaseDto, String searchKey, Long locationId, + Long organizationId, Integer pageNo, Integer pageSize); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientPricingAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientPricingAppServiceImpl.java new file mode 100644 index 00000000..17852af9 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientPricingAppServiceImpl.java @@ -0,0 +1,72 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.chargemanage.appservice.impl; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.openhis.common.enums.Whether; +import com.openhis.web.chargemanage.appservice.IOutpatientPricingAppService; +import com.openhis.web.chargemanage.mapper.OutpatientPricingAppMapper; +import com.openhis.web.doctorstation.appservice.IDoctorStationAdviceAppService; +import com.openhis.web.doctorstation.appservice.IDoctorStationMainAppService; +import com.openhis.web.doctorstation.dto.AdviceBaseDto; +import com.openhis.web.doctorstation.dto.PatientInfoDto; + +/** + * 门诊划价 impl + * + * @author yangmo + * @date 2025-04-14 + */ +@Service +public class OutpatientPricingAppServiceImpl implements IOutpatientPricingAppService { + + @Resource + OutpatientPricingAppMapper outpatientPricingAppMapper; + + @Resource + IDoctorStationMainAppService iDoctorStationMainAppService; + + @Resource + IDoctorStationAdviceAppService iDoctorStationAdviceAppService; + + /** + * 查询就诊患者信息 + * + * @param patientInfoDto 查询条件 (前端传 statusEnum 区分就诊状态tab) + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 就诊患者信息 + */ + @Override + public IPage getPatientInfo(PatientInfoDto patientInfoDto, String searchKey, Integer pageNo, + Integer pageSize, HttpServletRequest request) { + return iDoctorStationMainAppService.getPatientInfo(patientInfoDto, searchKey, pageNo, pageSize, request, + Whether.YES.getValue()); + } + + /** + * 查询医嘱信息 + * + * @param adviceBaseDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param locationId 药房id + * @param organizationId 患者挂号对应的科室id + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 医嘱信息 + */ + @Override + public IPage getAdviceBaseInfo(AdviceBaseDto adviceBaseDto, String searchKey, Long locationId, + Long organizationId, Integer pageNo, Integer pageSize) { + return iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, searchKey, locationId, null, + organizationId, pageNo, pageSize, Whether.YES.getValue()); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/controller/OutpatientPricingController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/controller/OutpatientPricingController.java new file mode 100644 index 00000000..0b11a63d --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/controller/OutpatientPricingController.java @@ -0,0 +1,71 @@ +package com.openhis.web.chargemanage.controller; + +import javax.servlet.http.HttpServletRequest; + +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.chargemanage.appservice.IOutpatientPricingAppService; +import com.openhis.web.doctorstation.dto.AdviceBaseDto; +import com.openhis.web.doctorstation.dto.PatientInfoDto; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * 门诊划价 controller + * + * @author yangmo + * @date 2025-04-14 + */ +@RestController +@RequestMapping("/charge-manage/pricing") +@Slf4j +@AllArgsConstructor +public class OutpatientPricingController { + + private final IOutpatientPricingAppService iOutpatientPricingAppService; + + /** + * 查询就诊患者信息 + * + * @param patientInfoDto 查询条件 (前端可传 statusEnum 区分就诊状态tab) + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 就诊患者信息 + */ + @GetMapping(value = "/patient-info") + public R getPatientInfo(PatientInfoDto patientInfoDto, + @RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { + return R.ok(iOutpatientPricingAppService.getPatientInfo(patientInfoDto, searchKey, pageNo, pageSize, request)); + } + + /** + * 查询医嘱信息 + * + * @param adviceBaseDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param locationId 药房id + * @param organizationId 患者挂号对应的科室id + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 医嘱信息 + */ + @GetMapping(value = "/advice-base-info") + public R getAdviceBaseInfo(AdviceBaseDto adviceBaseDto, + @RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "locationId", required = false) Long locationId, + @RequestParam(value = "organizationId") Long organizationId, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return R.ok(iOutpatientPricingAppService.getAdviceBaseInfo(adviceBaseDto, searchKey, locationId, organizationId, + pageNo, pageSize)); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientRefundDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientRefundDto.java new file mode 100644 index 00000000..8ad19c9d --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientRefundDto.java @@ -0,0 +1,105 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.chargemanage.dto; + +import java.math.BigDecimal; +import java.util.Date; +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 com.openhis.web.paymentmanage.dto.PaymentDetailDto; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 患者退款信息列表 + * + * @author zwh + * @date 2025-05-05 + */ +@Data +@Accessors(chain = true) +public class EncounterPatientRefundDto { + + /** 支付ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long paymentId; + + /** 收款人ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long entererId; + + /** 就诊ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterId; + + /** 支付的患者ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long patientId; + + /** 处方号 */ + private String prescriptionNo; + + /** 收费项目编号 */ + private String busNo; + + /** 合同编号 */ + private String contractNo; + + /** 项目名 */ + private String itemName; + + /** 项目名 */ + private String orgName; + + /** 收费项目ids */ + private String chargeItemIds; + + /** 收款人 */ + private String entererName; + + /** 收费状态 */ + private Integer chargeStatus; + private String chargeStatus_enumText; + + /** 支付状态 */ + private Integer paymentStatus; + private String paymentStatus_enumText; + + /** 发放状态 */ + private Integer dispenseStatus; + private String dispenseStatus_enumText; + + /** 执行状态 */ + private Integer serviceStatus; + private String serviceStatus_enumText; + + /** 数量 */ + private Integer quantityValue; + + /** 已发药数量 */ + private Integer dispenseQuantity; + + /** 单位 */ + @Dict(dictCode = "unit_code") + private String quantityUnit; + private String quantityUnit_dictText; + + /** 单价 */ + private BigDecimal unitPrice; + + /** 总价 */ + private BigDecimal totalPrice; + + /** 结算时间 */ + private Date billDate; + + /** + * 支付明细列表 + */ + private List paymentDetailList; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/OrgMetadata.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/OrgMetadata.java new file mode 100644 index 00000000..476e3d04 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/OrgMetadata.java @@ -0,0 +1,27 @@ +package com.openhis.web.chargemanage.dto; + +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 OrgMetadata { + + /** + * ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** + * 科室名称 + */ + private String name; + + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/OutpatientPricingInventoryDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/OutpatientPricingInventoryDto.java new file mode 100644 index 00000000..e347501f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/OutpatientPricingInventoryDto.java @@ -0,0 +1,53 @@ +package com.openhis.web.chargemanage.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 lombok.Data; +import lombok.experimental.Accessors; + +/** + * 门诊划价库存 dto + */ +@Data +@Accessors(chain = true) +public class OutpatientPricingInventoryDto { + + /** 物理表名 */ + private String itemTable; + + /** 实例id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long itemId; + + /** 当前库存数量 ,对应小单位*/ + private BigDecimal quantity; + + /** 单位 , 对应小单位*/ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 产品批号 */ + private String lotNumber; + + /** 库位 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long locationStoreId; + + /** 库房id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long locationId; + + /** + * 库房名称 + */ + private String locationName; + + /** 采购单价(进价) */ + private BigDecimal price; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/OutpatientPricingPriceDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/OutpatientPricingPriceDto.java new file mode 100644 index 00000000..1daaab5b --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/OutpatientPricingPriceDto.java @@ -0,0 +1,46 @@ +package com.openhis.web.chargemanage.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 lombok.Data; +import lombok.experimental.Accessors; + +/** + * 门诊划价价格 dto + */ +@Data +@Accessors(chain = true) +public class OutpatientPricingPriceDto { + + /** + * 费用定价名称 + */ + private String chargeName; + + /** 费用定价主表ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long definitionId; + + /** 费用定价子表ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long definitionDetailId; + + /** 命中条件 */ + private String conditionCode; + + /** 命中值 */ + private String conditionValue; + + /** 价格 */ + private BigDecimal price; + + /** 单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/OutpatientRegistrationSettleParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/OutpatientRegistrationSettleParam.java new file mode 100644 index 00000000..2971f890 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/OutpatientRegistrationSettleParam.java @@ -0,0 +1,22 @@ +package com.openhis.web.chargemanage.dto; + +import com.openhis.web.paymentmanage.dto.PaymentDetailDto; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.Valid; +import java.util.List; + +@Data +@Accessors(chain = true) +public class OutpatientRegistrationSettleParam { + + OutpatientRegistrationAddParam outpatientRegistrationAddParam; + + String chrgBchno;//收费批次号 付款时必传 + + String busNo;//挂号no + + List paymentDetails;//支付渠道 付款时必传 + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/PricingProjectDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/PricingProjectDto.java new file mode 100644 index 00000000..80b0bf3e --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/PricingProjectDto.java @@ -0,0 +1,150 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.chargemanage.dto; + +import com.core.common.utils.SecurityUtils; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.openhis.common.enums.EncounterClass; +import com.openhis.common.enums.RequestStatus; +import com.openhis.common.enums.TherapyTimeType; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +/** + * 划价项目 dto + * + * @author zwh + * @date 2025-04-10 + */ +@Data +@Accessors(chain = true) +public class PricingProjectDto { + + /** 医嘱类型 */ + private Integer adviceType; // 1:药品 , 2: 耗材 , 3:项目 + + /** + * 医嘱详细分类 + */ + private String categoryCode; + + /** 拆零比 */ + private BigDecimal partPercent; + + /** 执行次数 */ + private Integer executeNum; // 当医嘱类型为药品时,选填 + + /** 请求数量 */ + private Integer quantity; + + /** 请求单位编码 */ + private String unitCode; + + /** 单价 */ + private BigDecimal unitPrice; + + /** 总价 */ + private BigDecimal totalPrice; + + /** 费用定价主表ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long definitionId; + + /** 费用定价子表ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long definitionDetailId; + + /** 产品批号 */ + private String lotNumber; + + /** + * 请求状态 + */ + private Integer statusEnum; + + /** 请求类型 */ + private Integer categoryEnum; + + /** 耗材ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long deviceId; + + /** + * 医嘱对应表名 + */ + private String adviceTableName; + + /** 患者 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long patientId; + + /** 开方医生 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long practitionerId; + + /** 请求发起的位置 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long locationId; + + /** 发放位置 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long performLocation; + + /** 所属科室 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long orgId; + + /** 就诊id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterId; + + /** + * 账户id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long accountId; + + /** + * 诊断ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long conditionId; + + /** 治疗类型 */ + private Integer therapyEnum; + + /** 用法 */ + private String methodCode; + + /** 用药频次 */ + private String rateCode; + + /** 单次剂量 */ + private BigDecimal dose; + + /** 剂量单位 */ + private String doseUnitCode; + + /** 组套id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long packageId; + + /** 活动(项目)定义id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long activityId; + + /** + * 设置默认值 + */ + public PricingProjectDto() { + this.statusEnum = RequestStatus.ACTIVE.getValue(); + this.categoryEnum = EncounterClass.AMB.getValue(); + this.therapyEnum = TherapyTimeType.TEMPORARY.getValue(); + this.practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + this.orgId = SecurityUtils.getLoginUser().getOrgId(); // 开方人科室 + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/RefundItemParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/RefundItemParam.java new file mode 100644 index 00000000..0dc60cca --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/RefundItemParam.java @@ -0,0 +1,28 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.chargemanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 退费项目id列表 dto + * + * @author yangmo + * @date 2025-04-15 + */ +@Data +@Accessors(chain = true) +public class RefundItemParam { + + /** 付款ID */ + private Long paymentId; + + /** 收费项ID */ + private Long chargeItemId; + + /** 退费标志 */ + private Boolean refundFlg; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/mapper/OutpatientPricingAppMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/mapper/OutpatientPricingAppMapper.java new file mode 100644 index 00000000..6d17f2ae --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/chargemanage/mapper/OutpatientPricingAppMapper.java @@ -0,0 +1,17 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.chargemanage.mapper; + +import org.springframework.stereotype.Repository; + +/** + * 门诊划价 appMapper + * + * @author yangmo + * @date 2025-04-14 + */ +@Repository +public interface OutpatientPricingAppMapper { + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/common/appservice/ICommonService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/appservice/ICommonService.java new file mode 100644 index 00000000..c1ba63ab --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/appservice/ICommonService.java @@ -0,0 +1,96 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.common.appservice; + +import java.util.List; + +import com.core.common.core.domain.R; +import com.openhis.web.common.dto.InventoryItemParam; +import com.openhis.web.common.dto.LocationDto; + +/** + * app常用接口 + * + * @author zwh + * @date 2025-04-01 + */ +public interface ICommonService { + + /** + * 药房列表 + * + * @return 药房列表 + */ + List getPharmacyList(); + + /** + * 药房列表(库房用) + * + * @return 药房列表 + */ + List getInventoryPharmacyList(); + + /** + * 药库列表 + * + * @return 药库列表 + */ + List getCabinetList(); + + /** + * 药库列表(库房用) + * + * @return 药库列表 + */ + List getInventoryCabinetList(); + + /** + * 药房药库列表 + * + * @return 药房药库列表 + */ + List getPharmacyCabinetList(); + + /** + * 获取病区列表 + * + * @return 药库列表 + */ + List getWardList(); + + /** + * 库存项目下拉列表(药库业务使用) + * + * @param inventoryItemParam 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 库存项目信息 + */ + R getInventoryItemList(InventoryItemParam inventoryItemParam, String searchKey, Integer pageNo, + Integer pageSize); + + /** + * 根据项目相关信息查询项目库存相关信息 + * + * @param inventoryItemParam 项目id + * @return 项目库存相关信息 + */ + R getInventoryItemInfo(InventoryItemParam inventoryItemParam); + + /** + * 科室列表 + * + * @return 科室列表 + */ + R getDepartmentList(); + + /** + * 根据追溯码获取药品/耗材信息 + * + * @param traceNoList 追溯码列表 + * @return 项目信息 + */ + R getItemInfoByTraceNo(List traceNoList); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/common/appservice/impl/CommonServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/appservice/impl/CommonServiceImpl.java new file mode 100644 index 00000000..23ec406f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/appservice/impl/CommonServiceImpl.java @@ -0,0 +1,294 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.common.appservice.impl; + +import java.util.*; + +import javax.annotation.Resource; + +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.core.metadata.IPage; +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.StringUtils; +import com.core.common.utils.bean.BeanUtils; +import com.openhis.administration.domain.Location; +import com.openhis.administration.service.ILocationService; +import com.openhis.administration.service.IOrganizationService; +import com.openhis.administration.service.IPractitionerRoleService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.enums.ConditionCode; +import com.openhis.common.enums.ItemType; +import com.openhis.common.enums.OrganizationType; +import com.openhis.common.enums.PublicationStatus; +import com.openhis.common.utils.EnumUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.common.appservice.ICommonService; +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; + +/** + * app常用接口 + * + * @author zwh + * @date 2025-04-01 + */ +@Service +public class CommonServiceImpl implements ICommonService { + + @Resource + private CommonAppMapper commonAppMapper; + + @Resource + private ILocationService locationService; + + @Resource + private IPractitionerRoleService practitionerRoleService; + + @Resource + private IOrganizationService organizationService; + + @Resource + private IInventoryItemService iInventoryItemService; + + /** + * 获取药房列表 + * + * @return 药房列表 + */ + @Override + public List getPharmacyList() { + + List pharmacyList = locationService.getPharmacyList(); + List locationDtoList = new ArrayList<>(); + LocationDto locationDto; + for (Location location : pharmacyList) { + locationDto = new LocationDto(); + BeanUtils.copyProperties(location, locationDto); + locationDtoList.add(locationDto); + } + return locationDtoList; + } + + /** + * 获取药房列表(库房用) + * + * @return 药房列表 + */ + @Override + public List getInventoryPharmacyList() { + + // 用户id + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + // 根据用户id获得管理库房信息 + List locationIds = practitionerRoleService.getLocationIdsByPractitionerId(practitionerId); + + List pharmacyList = locationService.getPharmacyList(); + List locationDtoList = new ArrayList<>(); + LocationDto locationDto; + for (Location location : pharmacyList) { + for (Long locationId : locationIds) { + if (location.getId().equals(locationId)) { + locationDto = new LocationDto(); + BeanUtils.copyProperties(location, locationDto); + locationDtoList.add(locationDto); + } + } + } + return locationDtoList; + } + + /** + * 获取药库列表 + * + * @return 药库列表 + */ + @Override + public List getCabinetList() { + List pharmacyList = locationService.getCabinetList(); + List locationDtoList = new ArrayList<>(); + LocationDto locationDto; + for (Location location : pharmacyList) { + locationDto = new LocationDto(); + BeanUtils.copyProperties(location, locationDto); + locationDtoList.add(locationDto); + } + return locationDtoList; + } + + /** + * 获取药库列表(库房用) + * + * @return 药库列表 + */ + @Override + public List getInventoryCabinetList() { + // 用户id + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + // 根据用户id获得管理库房信息 + List locationIds = practitionerRoleService.getLocationIdsByPractitionerId(practitionerId); + + List pharmacyList = locationService.getCabinetList(); + List locationDtoList = new ArrayList<>(); + LocationDto locationDto; + for (Location location : pharmacyList) { + for (Long locationId : locationIds) { + if (location.getId().equals(locationId)) { + locationDto = new LocationDto(); + BeanUtils.copyProperties(location, locationDto); + locationDtoList.add(locationDto); + } + } + } + return locationDtoList; + } + + /** + * 药房药库列表 + * + * @return 药房药库列表 + */ + @Override + public List getPharmacyCabinetList() { + List pharmacyCabinetList = locationService.getPharmacyCabinetList(); + List locationDtoList = new ArrayList<>(); + LocationDto locationDto; + for (Location location : pharmacyCabinetList) { + locationDto = new LocationDto(); + BeanUtils.copyProperties(location, locationDto); + locationDtoList.add(locationDto); + } + return locationDtoList; + } + + /** + * 获取病区列表 + * + * @return 病区列表 + */ + @Override + public List getWardList() { + List getWardList = locationService.getWardList(); + List locationDtoList = new ArrayList<>(); + LocationDto locationDto; + for (Location location : getWardList) { + locationDto = new LocationDto(); + BeanUtils.copyProperties(location, locationDto); + locationDtoList.add(locationDto); + } + return locationDtoList; + } + + /** + * 库存项目下拉列表(药库业务使用) + * + * @param inventoryItemParam 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 库存项目信息 + */ + @Override + public R getInventoryItemList(InventoryItemParam inventoryItemParam, String searchKey, Integer pageNo, + Integer pageSize) { + Integer purchaseFlag = inventoryItemParam.getPurchaseFlag(); + inventoryItemParam.setPurchaseFlag(null); + + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(inventoryItemParam, searchKey, + new HashSet<>(Arrays.asList(CommonConstants.FieldName.Name, CommonConstants.FieldName.PyStr, + CommonConstants.FieldName.WbStr)), + null); + // 查询库存项目信息 + IPage inventoryItems = commonAppMapper.selectInventoryItemList(new Page<>(pageNo, pageSize), + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, + ItemType.MEDICINE.getValue(), ItemType.DEVICE.getValue(), purchaseFlag, ConditionCode.PURCHASE.getCode(), + PublicationStatus.RETIRED.getValue(), queryWrapper); + List inventoryItemDtoList = inventoryItems.getRecords(); + inventoryItemDtoList.forEach(e -> { + // 项目类型 + e.setItemType_enumText(EnumUtils.getInfoByValue(ItemType.class, e.getItemType())); + }); + for (InventoryItemDto inventoryItem : inventoryItemDtoList) { + List unitList = new ArrayList<>(); + UnitDto unitDto = new UnitDto(); + // 单位列表 + unitDto.setUnitCode(inventoryItem.getUnitCode()).setMinUnitCode(inventoryItem.getMinUnitCode()); + unitList.add(unitDto); + inventoryItem.setUnitList(unitList); + } + return R.ok(inventoryItemDtoList); + } + + /** + * 根据项目相关信息查询项目库存相关信息 + * + * @param inventoryItemParam 项目id + * @return 项目库存相关信息 + */ + @Override + public R getInventoryItemInfo(InventoryItemParam inventoryItemParam) { + // 查询项目库存相关信息 + List locationInventoryDtoList = commonAppMapper.selectInventoryItemInfo( + inventoryItemParam.getOrgLocationId(), CommonConstants.TableName.MED_MEDICATION_DEFINITION, + CommonConstants.TableName.ADM_DEVICE_DEFINITION, inventoryItemParam.getObjLocationId(), + inventoryItemParam.getLotNumber(), inventoryItemParam.getItemId(), ConditionCode.PURCHASE.getCode()); + + // 医保编码和生产厂家校验 + for (LocationInventoryDto dto : locationInventoryDtoList) { + if (StringUtils.isNotEmpty(dto.getYbNo()) && StringUtils.isEmpty(dto.getManufacturer())) { + return R.fail("生产厂家不能为空,请到药品目录维护"); + } + } + + return R.ok(locationInventoryDtoList); + } + + /** + * 科室列表 + * + * @return 科室列表 + */ + @Override + public R getDepartmentList() { + return R.ok(organizationService.getList(OrganizationType.DEPARTMENT.getValue(), null)); + } + + /** + * 根据追溯码获取药品/耗材信息 + * + * @param traceNoList 追溯码列表 + * @return 项目信息 + */ + @Override + public R getItemInfoByTraceNo(List traceNoList) { + Map traceNoMap = new HashMap<>(); + for (String traceNo : traceNoList) { + if (traceNo != null && !StringUtils.isEmpty(traceNo)) { + InventoryItem inventoryItem = iInventoryItemService.getOne( + new LambdaQueryWrapper().like(InventoryItem::getTraceNo, traceNo).last("LIMIT 1")); + if (inventoryItem != null) { + String itemId = inventoryItem.getItemId().toString(); + // 如果map中已经存在该itemId,拼接traceNo,否则直接添加 + if (traceNoMap.containsKey(itemId)) { + String existingTraceNos = traceNoMap.get(itemId); + traceNoMap.put(itemId, existingTraceNos + CommonConstants.Common.COMMA + traceNo); + } else { + traceNoMap.put(itemId, traceNo); + } + } else { + return R.ok(null); + } + } + } + return R.ok(traceNoMap); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/common/controller/CommonAppController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/controller/CommonAppController.java new file mode 100644 index 00000000..8c9949e2 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/controller/CommonAppController.java @@ -0,0 +1,146 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.common.controller; + +import javax.annotation.Resource; + +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.common.appservice.ICommonService; +import com.openhis.web.common.dto.InventoryItemParam; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import java.util.List; + +/** + * app常用接口 + * + * @author zwh + * @date 2025-04-01 + */ +@RestController +@RequestMapping("/app-common") +@Slf4j +@AllArgsConstructor +public class CommonAppController { + + @Resource + private ICommonService commonService; + + /** + * 药房列表 + * + * @return 药房列表 + */ + @GetMapping(value = "/pharmacy-list") + public R getPharmacyList() { + return R.ok(commonService.getPharmacyList()); + } + + /** + * 药房列表(库房用) + * + * @return 药房列表 + */ + @GetMapping(value = "/inventory-pharmacy-list") + public R getInventoryPharmacyList() { + return R.ok(commonService.getInventoryPharmacyList()); + } + + /** + * 药库列表 + * + * @return 药库列表 + */ + @GetMapping(value = "/cabinet-list") + public R getCabinetList() { + return R.ok(commonService.getCabinetList()); + } + + /** + * 药库列表(库房用) + * + * @return 药库列表 + */ + @GetMapping(value = "/inventory-cabinet-list") + public R getInventoryCabinetList() { + return R.ok(commonService.getInventoryCabinetList()); + } + + /** + * 药房药库列表 + * + * @return 药房药库列表 + */ + @GetMapping(value = "/pharmacy-cabinet-list") + public R getPharmacyCabinetList() { + return R.ok(commonService.getPharmacyCabinetList()); + } + + /** + * 病区列表 + * + * @return 病区列表 + */ + @GetMapping(value = "/ward-list") + public R getWardList() { + return R.ok(commonService.getWardList()); + } + + /** + * 科室列表 + * + * @return 科室列表 + */ + @GetMapping(value = "/department-list") + public R getDepartmentList() { + return commonService.getDepartmentList(); + } + + /** + * 库存项目下拉列表(药库业务使用) + * + * @param inventoryItemParam 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 库存项目信息 + */ + @GetMapping(value = "/inventory-item") + public R getInventoryItemList(InventoryItemParam inventoryItemParam, + @RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "50") Integer pageSize) { + return commonService.getInventoryItemList(inventoryItemParam, searchKey, pageNo, pageSize); + } + + /** + * 根据项目相关信息查询项目库存相关信息 + * + * @param inventoryItemParam 项目id + * @return 项目库存相关信息 + */ + @GetMapping(value = "/inventory-item-info") + public R getInventoryItemInfo(InventoryItemParam inventoryItemParam) { + return commonService.getInventoryItemInfo(inventoryItemParam); + } + + /** + * 根据追溯码获取药品/耗材信息 + * + * @param traceNoList 追溯码列表 + * @return 项目信息 + */ + @GetMapping(value = "/item-trace-no") + public R getItemInfoByTraceNo(@RequestParam List traceNoList) { + return commonService.getItemInfoByTraceNo(traceNoList); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/InventoryItemDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/InventoryItemDto.java new file mode 100644 index 00000000..93754555 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/InventoryItemDto.java @@ -0,0 +1,110 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.common.dto; + +import java.math.BigDecimal; +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.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +/** + * 库存项目dto + * + * @author zwh + * @date 2025-04-01 + */ +@Data +@Accessors(chain = true) +public class InventoryItemDto { + + /** 项目类型 */ + private Integer itemType; // 1:药品 , 2: 耗材 , 3:诊疗 + private String itemType_enumText; + + /** + * 药品/耗材类型 + */ + private String categoryCode; + + /** 拆零比 */ + private BigDecimal partPercent; + + /** 采购单价 */ + private BigDecimal purchaseAmount; + + /** 项目定义ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long definitionId; + + /** 项目名称 */ + private String name; + + /** + * 项目名称 + */ + private String itemBusNo; + + /** 拼音码 */ + private String pyStr; + + /** 五笔码 */ + private String wbStr; + + /** 医保编码 */ + private String ybNo; + + /** 商品名称 */ + private String productName; + + /** 包装单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 最小单位 */ + @Dict(dictCode = "unit_code") + private String minUnitCode; + private String minUnitCode_dictText; + + /** + * 规格 + */ + private String volume; + + /** + * 供应商名称 + */ + private String supplier; + + /** + * 生产厂家 + */ + private String manufacturer; + + /** + * 项目对应表名 + */ + private String itemTableName; + + /** + * 产品批号 + */ + private String lotNumber; + + /** 原仓库 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long orgLocation; + + /** + * 单位列表 + */ + private List unitList; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/InventoryItemParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/InventoryItemParam.java new file mode 100644 index 00000000..767854ab --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/InventoryItemParam.java @@ -0,0 +1,47 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.common.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 库存项目筛选条件 + * + * @author zwh + * @date 2025-04-19 + */ +@Data +@Accessors(chain = true) +public class InventoryItemParam { + + /** 项目类型 */ + private Integer itemType; // 1:药品 , 2: 耗材 , 3:诊疗 + + /** 项目id */ + private Long itemId; + + /** 项目名称 */ + private String name; + + /** 拼音码 */ + private String pyStr; + + /** 五笔码 */ + private String wbStr; + + /** 源仓库 */ + private Long orgLocationId; + + /** 目的仓库 */ + private Long objLocationId; + + /** 采购标志 */ + private Integer purchaseFlag; + + /** + * 产品批号 + */ + private String lotNumber; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/LocationDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/LocationDto.java new file mode 100644 index 00000000..d3706dbb --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/LocationDto.java @@ -0,0 +1,80 @@ +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 system + * @date 2025-02-20 + */ +@Data +@Accessors(chain = true) +public class LocationDto { + + /** + * ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** + * 编码 + */ + private String busNo; + + /** + * 名称 + */ + private String name; + + /** + * 状态编码 + */ + private Integer statusEnum; + + /** + * 操作状态 + */ + private Integer operationalEnum; + + /** + * 模式编码 + */ + private Integer modeEnum; + + /** + * 功能编码 + */ + private String typeJson; + + /** + * 拼音码 + */ + private String pyStr; + + /** + * 五笔码 + */ + private String wbStr; + + /** + * 物理形式枚举 + */ + private Integer formEnum; + + /** + * 机构编码 + */ + private Long organizationId; + + /** + * 显示顺序 + */ + private Integer displayOrder; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/LocationInventoryDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/LocationInventoryDto.java new file mode 100644 index 00000000..e1dd7c7e --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/LocationInventoryDto.java @@ -0,0 +1,80 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.common.dto; + +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 zwh + * @date 2025-04-01 + */ +@Data +@Accessors(chain = true) +public class LocationInventoryDto { + + /** 物理表名 */ + private String itemTable; + + /** 实例id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long itemId; + + /** 采购单价 */ + private BigDecimal price; + + /** 产品批号 */ + private String lotNumber; + + /** 生产日期 */ + private Date productionDate; + + /** 失效日期 */ + private Date expirationDate; + + /** 仓库类型 */ + private String formEnum; + + /** 库位 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long locationStoreId; + + /** 仓库 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long locationId; + + /** 库房名称 */ + private String locationName; + + /** 货位名称 */ + private String locationStoreName; + + /** 原仓库数量(最小单位) */ + private BigDecimal orgQuantity; + + /** 目的仓库数量(最小单位) */ + private BigDecimal objQuantity; + + /** 供应商id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long supplierId; + + /** 供应商名称 */ + private String supplierName; + + /** 医保编码 */ + private String ybNo; + + /** 生产厂家 */ + private String manufacturer; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/UnitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/UnitDto.java new file mode 100644 index 00000000..1bafa463 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/UnitDto.java @@ -0,0 +1,30 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.common.dto; + +import com.openhis.common.annotation.Dict; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 单位列表 + * + * @author zwh + * @date 2025-04-01 + */ +@Data +@Accessors(chain = true) +public class UnitDto { + + + /** 包装单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 最小单位 */ + @Dict(dictCode = "unit_code") + private String minUnitCode; + private String minUnitCode_dictText; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/UnitQuantityDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/UnitQuantityDto.java new file mode 100644 index 00000000..d44964ab --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/dto/UnitQuantityDto.java @@ -0,0 +1,26 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.common.dto; + +import java.math.BigDecimal; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 单位数量列表 + * + * @author zwh + * @date 2025-04-01 + */ +@Data +@Accessors(chain = true) +public class UnitQuantityDto { + + /** 当前库存数量(最小单位) */ + private BigDecimal minQuantity; + + /** 当前库存数量(包装单位) */ + private BigDecimal maxQuantity; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/common/mapper/CommonAppMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/mapper/CommonAppMapper.java new file mode 100644 index 00000000..c1c0903b --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/common/mapper/CommonAppMapper.java @@ -0,0 +1,60 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.common.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +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; + +/** + * app常用接口 mapper + * + * @author zwh + * @date 2025-04-01 + */ +@Repository +public interface CommonAppMapper { + + /** + * 查询库存项目信息 + * + * @param page 分页 + * @param medicationTableName 药品表名 + * @param deviceTableName 耗材表名 + * @param purchaseFlag 是否入库 + * @param purchase 命中条件:采购 + * @param retired 停用 + * @param queryWrapper 查询条件 + * @return 库存项目信息 + */ + IPage selectInventoryItemList(@Param("page") Page page, + @Param("medicationTableName") String medicationTableName, @Param("deviceTableName") String deviceTableName, + @Param("medicine") Integer medicine, @Param("device") Integer device, + @Param("purchaseFlag") Integer purchaseFlag, @Param("purchase") String purchase, + @Param("retired") Integer retired, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + /** + * 查询项目库存相关信息 + * + * @param itemId 项目id + * @param lotNumber 批号 + * @param orgLocationId 源仓库 + * @param objLocationId 目的仓库 + * @param purchase 价格命中条件:采购 + * @return 项目库存相关信息 + */ + List selectInventoryItemInfo(@Param("orgLocationId") Long orgLocationId, + @Param("medicationTableName") String medicationTableName, @Param("deviceTableName") String deviceTableName, + @Param("objLocationId") Long objLocationId, @Param("lotNumber") String lotNumber, @Param("itemId") Long itemId, + @Param("purchase") String purchase); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IDiagTreatMAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IDiagTreatMAppService.java new file mode 100644 index 00000000..bbdf1494 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IDiagTreatMAppService.java @@ -0,0 +1,78 @@ +package com.openhis.web.datadictionary.appservice; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.datadictionary.dto.DiagnosisTreatmentSelParam; +import com.openhis.web.datadictionary.dto.DiagnosisTreatmentUpDto; + +/** + * 诊疗目录 + * + * @author liuhr + * @date 2025/3/28 + */ +public interface IDiagTreatMAppService { + + /** + * 诊疗目录初期查询 + * + * @return + */ + R getDiseaseTreatmentInit(); + + /** + * 查询诊疗目录分页列表 + * + * @param DiagnosisTreatmentSelParam 查询条件 + * @param searchKey 查询条件-模糊查询 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return + */ + R getDiseaseTreatmentPage(DiagnosisTreatmentSelParam DiagnosisTreatmentSelParam, String searchKey, + Integer pageNo, Integer pageSize, HttpServletRequest request); + + /** + * 根据id查询诊疗详情 + * + * @param id 诊疗ID + * @return + */ + R getDiseaseTreatmentOne(Long id); + + /** + * 诊疗目录编辑 + * + * @param diagnosisTreatmentUpDto 诊疗目录列表 + * @return + */ + R editDiseaseTreatment(DiagnosisTreatmentUpDto diagnosisTreatmentUpDto); + + /** + * 诊疗目录停用 + * + * @param ids 诊疗目录ID列表 + * @return + */ + R editDiseaseTreatmentStop(List ids); + + /** + * 诊疗目录启用 + * + * @param ids 诊疗目录ID列表 + * @return + */ + R editDiseaseTreatmentStart(List ids); + + /** + * 新增外来诊疗目录 + * + * @param diagnosisTreatmentUpDto 诊疗目录 + * @return + */ + R addDiseaseTreatment(DiagnosisTreatmentUpDto diagnosisTreatmentUpDto); + +} \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/ItemDefinitionAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/ItemDefinitionAppService.java new file mode 100644 index 00000000..b7b4fe59 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/ItemDefinitionAppService.java @@ -0,0 +1,46 @@ +package com.openhis.web.datadictionary.appservice; + +import java.math.BigDecimal; +import java.util.List; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.core.common.core.domain.R; +import com.openhis.web.datadictionary.dto.ItemDefinitionDetailDto; +import com.openhis.web.datadictionary.dto.ItemDefinitionDto; + +/** + * 项目定价 应用Service + */ +public interface ItemDefinitionAppService { + + /** + * 项目定价 分页 + * + * @param itemDefinitionDto dto + * @param searchKey 模糊查询关键字 + * @param chargeItemContext 收费项目类型 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 项目定价 + */ + IPage getChargeItemInfo(ItemDefinitionDto itemDefinitionDto, Integer chargeItemContext, + String searchKey, Integer pageNo, Integer pageSize); + + /** + * 项目定价详细 + * + * @param id id + * @return 项目定价详细 + */ + List getChargeItemInfoDetail(Long id); + + /** + * 改价 + * + * @param id id + * @param price 价格 + * @return 结果 + */ + R updateChargeItemInfo(Long id, BigDecimal price); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DiagTreatMAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DiagTreatMAppServiceImpl.java new file mode 100644 index 00000000..f27ee165 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DiagTreatMAppServiceImpl.java @@ -0,0 +1,390 @@ +package com.openhis.web.datadictionary.appservice.impl; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +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 com.openhis.yb.service.YbManager; +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.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.utils.*; +import com.core.common.utils.bean.BeanUtils; +import com.core.system.service.ISysDictTypeService; +import com.openhis.administration.domain.ChargeItemDefinition; +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.sys.service.IOperationRecordService; +import com.openhis.web.common.appservice.ICommonService; +import com.openhis.web.datadictionary.appservice.IDiagTreatMAppService; +import com.openhis.web.datadictionary.appservice.IItemDefinitionService; +import com.openhis.web.datadictionary.dto.*; +import com.openhis.web.datadictionary.mapper.ActivityDefinitionManageMapper; +import com.openhis.workflow.domain.ActivityDefinition; +import com.openhis.workflow.mapper.ActivityDefinitionMapper; +import com.openhis.workflow.service.IActivityDefinitionService; + +/** + * 诊疗实现类 + * + * @author Wuser + * @date 2025/3/28 + */ +@Service +public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService { + + @Autowired + private IActivityDefinitionService iActivityDefinitionService; + @Autowired + private ActivityDefinitionMapper activityDefinitionMapper; + @Autowired + private IOrganizationService iOrganizationService; + @Autowired + private ISysDictTypeService iSysDictTypeService; + @Resource + private ActivityDefinitionManageMapper activityDefinitionManageMapper; + @Autowired + private IItemDefinitionService itemDefinitionServic; + @Autowired + private ISysDictTypeService sysDictTypeService; + + @Autowired + private ICommonService commonService; + + @Autowired(required = false) + AssignSeqUtil assignSeqUtil; + + @Autowired + YbManager ybService; + + @Autowired + IOperationRecordService iOperationRecordService; + + /** + * 诊疗目录初期查询 + * + * @return + */ + @Override + public R getDiseaseTreatmentInit() { + DiagnosisTreatmentInitDto diagnosisTreatmentInitDto = new DiagnosisTreatmentInitDto(); + // 获取状态 + List statusEnumOptions = Stream.of(PublicationStatus.values()) + .map(status -> new DiagnosisTreatmentInitDto.statusEnumOption(status.getValue(), status.getInfo())) + .collect(Collectors.toList()); + diagnosisTreatmentInitDto.setStatusFlagOptions(statusEnumOptions); + // 获取执行科室 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Organization::getTypeEnum, OrganizationType.DEPARTMENT); + List organizations = iOrganizationService.list(queryWrapper); + List exeOrganizations = organizations.stream() + .map(exeOrg -> new DiagnosisTreatmentInitDto.exeOrganization(exeOrg.getId(), exeOrg.getName())) + .collect(Collectors.toList()); + diagnosisTreatmentInitDto.setExeOrganizations(exeOrganizations); + + // 获取诊目录疗分类 + List diagnosisList = + sysDictTypeService.selectDictDataByType(CommonConstants.DictName.DIAGNOSIS_CATEGORY_CODE); + // 获取诊疗录疗分类 + List diagnosisCategories = diagnosisList.stream() + .map(category -> new DiagnosisTreatmentInitDto.dictCategoryCode(category.getDictValue(), + category.getDictLabel())) + .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<>(); + // + // //获取目录分类 + // DiagnosisTreatmentInitDto.diseaseTreatmentCategory diseaseTreatmentCategory = + // new DiagnosisTreatmentInitDto.diseaseTreatmentCategory(ActivityDefCategory.MEDICAL_SERVICE_ITEM.getValue(), + // ActivityDefCategory.MEDICAL_SERVICE_ITEM.getInfo()); + // diseaseTreatmentCategory.setChildren(diseaseTreatmentCategoryList); + // diseaseTreatmentCategories.add(diseaseTreatmentCategory); + // diagnosisTreatmentInitDto.setDiseaseTreatmentCategoryList(diseaseTreatmentCategories); + // + // // 查询手术与治疗类型 + // List medical_service_items2 = + // iSysDictTypeService.selectDictDataByType(ActivityDefCategory.TREATMENT_SURGERY.getCode()); + // // 获取手术与治疗List + // List diseaseTreatmentCategoryList2 = medical_service_items2 + // .stream().map(status -> new DiagnosisTreatmentInitDto.diseaseTreatmentType(status.getDictValue(), + // status.getDictLabel())) + // .collect(Collectors.toList()); + // + // DiagnosisTreatmentInitDto.diseaseTreatmentCategory diseaseTreatmentCategory2 = + // new DiagnosisTreatmentInitDto.diseaseTreatmentCategory(ActivityDefCategory.TREATMENT_SURGERY.getValue(), + // ActivityDefCategory.TREATMENT_SURGERY.getInfo()); + // diseaseTreatmentCategory2.setChildren(diseaseTreatmentCategoryList2); + // diseaseTreatmentCategories.add(diseaseTreatmentCategory2); + // + // diagnosisTreatmentInitDto.setDiseaseTreatmentCategoryList(diseaseTreatmentCategories); + + // 获取类型 + List typeEnumOptions = Stream.of(ActivityType.values()) + .map(status -> new DiagnosisTreatmentInitDto.statusEnumOption(status.getValue(), status.getInfo())) + .collect(Collectors.toList()); + diagnosisTreatmentInitDto.setTypeEnumOptions(typeEnumOptions); + + // 获取是/否 列表 + // 获取状态 + List statusWeatherOption = Stream.of(Whether.values()) + .map(status -> new DiagnosisTreatmentInitDto.statusEnumOption(status.getValue(), status.getInfo())) + .collect(Collectors.toList()); + diagnosisTreatmentInitDto.setStatusWeatherOption(statusWeatherOption); + + return R.ok(diagnosisTreatmentInitDto); + } + + /** + * 查询诊疗目录分页列表 + * + * @param DiagnosisTreatmentSelParam 查询条件 + * @param searchKey 查询条件-模糊查询 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return + */ + @Override + public R getDiseaseTreatmentPage(DiagnosisTreatmentSelParam DiagnosisTreatmentSelParam, String searchKey, + Integer pageNo, Integer pageSize, HttpServletRequest request) { + + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(DiagnosisTreatmentSelParam, + searchKey, new HashSet<>(Arrays.asList("bus_no", "name", "py_str", "wb_str")), request); + + // 分页查询 + IPage diseaseTreatmentPage = + activityDefinitionManageMapper.getDiseaseTreatmentPage(new Page<>(pageNo, pageSize), queryWrapper); + + diseaseTreatmentPage.getRecords().forEach(e -> { + // 医保标记枚举类回显赋值 + e.setYbFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getYbFlag())); + // 医保对码标记枚举类回显赋值 + e.setYbMatchFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getYbMatchFlag())); + // 类型举类回显赋值 + e.setTypeEnum_enumText(EnumUtils.getInfoByValue(ActivityType.class, e.getTypeEnum())); + // 状态举类回显赋值 + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(PublicationStatus.class, e.getStatusEnum())); + // 划价标记 + e.setPricingFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getPricingFlag())); + }); + + // 返回【诊疗目录列表DTO】分页 + return R.ok(diseaseTreatmentPage); + } + + /** + * 根据id查询诊疗详情 + * + * @param id 诊疗ID + * @return + */ + @Override + public R getDiseaseTreatmentOne(Long id) { + + // 获取租户ID + Integer tenantId = SecurityUtils.getLoginUser().getTenantId(); + // 根据ID查询【诊疗目录】 + return R.ok(activityDefinitionManageMapper.getDiseaseTreatmentOne(id, tenantId)); + + } + + /** + * 诊疗目录编辑 + * + * @param diagnosisTreatmentUpDto 诊疗目录列表 + * @return + */ + @Override + public R editDiseaseTreatment(DiagnosisTreatmentUpDto diagnosisTreatmentUpDto) { + + ActivityDefinition activityDefinition = new ActivityDefinition(); + BeanUtils.copyProperties(diagnosisTreatmentUpDto, activityDefinition); + + // 拼音码 + activityDefinition.setPyStr(ChineseConvertUtils.toPinyinFirstLetter(activityDefinition.getName())); + // 五笔码 + activityDefinition.setWbStr(ChineseConvertUtils.toWBFirstLetter(activityDefinition.getName())); + + // 更新诊疗信息 + if (iActivityDefinitionService.updateById(activityDefinition)) { + // 调用医保目录对照接口 + String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关 + if (Whether.YES.getCode().equals(ybSwitch) && StringUtils.isNotEmpty(activityDefinition.getYbNo()) ) { + R r = ybService.directoryCheck(CommonConstants.TableName.WOR_ACTIVITY_DEFINITION, + activityDefinition.getId()); + if (200 != r.getCode()) { + throw new RuntimeException("医保目录对照接口异常"); + } + } + + ChargeItemDefinition chargeItemDefinition = new ChargeItemDefinition(); + chargeItemDefinition.setYbType(diagnosisTreatmentUpDto.getYbType()) + .setTypeCode(diagnosisTreatmentUpDto.getItemTypeCode()) + .setInstanceTable(CommonConstants.TableName.WOR_ACTIVITY_DEFINITION) + .setInstanceId(diagnosisTreatmentUpDto.getId()).setPrice(diagnosisTreatmentUpDto.getRetailPrice()) + .setChargeName(diagnosisTreatmentUpDto.getName()); + // 插入操作记录 + iOperationRecordService.addEntityOperationRecord(DbOpType.UPDATE.getCode(), + CommonConstants.TableName.WOR_ACTIVITY_DEFINITION, activityDefinition); + + // 更新价格表 + boolean upItemDef = itemDefinitionServic.updateItem(chargeItemDefinition); + // 更新子表,修改零售价,条件:单位 + boolean upItemDetail1 = itemDefinitionServic.updateItemDetail(chargeItemDefinition, + diagnosisTreatmentUpDto.getRetailPrice(), ConditionCode.UNIT.getCode()); + // 更新子表,修改最高零售价,条件:限制 + boolean upItemDetail2 = itemDefinitionServic.updateItemDetail(chargeItemDefinition, + diagnosisTreatmentUpDto.getMaximumRetailPrice(), ConditionCode.LIMIT.getCode()); + + // 更新价格表 + return upItemDef && upItemDetail1 && upItemDetail2 + ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"诊疗目录"})) + : R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + + } + return R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + /** + * 诊疗目录停用 + * + * @param ids 诊疗目录ID列表 + * @return + */ + @Override + public R editDiseaseTreatmentStop(List ids) { + + List ActivityDefinitionList = new CopyOnWriteArrayList<>(); + + // 取得更新值 + for (Long detail : ids) { + ActivityDefinition ActivityDefinition = new ActivityDefinition(); + ActivityDefinition.setId(detail); + ActivityDefinition.setStatusEnum(PublicationStatus.RETIRED.getValue()); + ActivityDefinitionList.add(ActivityDefinition); + } + // 插入操作记录 + iOperationRecordService.addIdsOperationRecord(DbOpType.STOP.getCode(), + CommonConstants.TableName.WOR_ACTIVITY_DEFINITION, ids); + // 更新诊疗信息 + return iActivityDefinitionService.updateBatchById(ActivityDefinitionList) + ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"诊疗目录"})) + : R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + + } + + /** + * 诊疗目录启用 + * + * @param ids 诊疗目录ID列表 + * @return + */ + @Override + public R editDiseaseTreatmentStart(List ids) { + + List ActivityDefinitionList = new CopyOnWriteArrayList<>(); + + // 取得更新值 + for (Long detail : ids) { + ActivityDefinition ActivityDefinition = new ActivityDefinition(); + ActivityDefinition.setId(detail); + ActivityDefinition.setStatusEnum(PublicationStatus.ACTIVE.getValue()); + ActivityDefinitionList.add(ActivityDefinition); + } + // 插入操作记录 + iOperationRecordService.addIdsOperationRecord(DbOpType.START.getCode(), + CommonConstants.TableName.WOR_ACTIVITY_DEFINITION, ids); + // 更新诊疗信息 + return iActivityDefinitionService.updateBatchById(ActivityDefinitionList) + ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"诊疗目录"})) + : R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + + } + + /** + * 新增外来诊疗目录 + * + * @param diagnosisTreatmentUpDto 诊疗目录 + * @return + */ + @Override + public R addDiseaseTreatment(DiagnosisTreatmentUpDto diagnosisTreatmentUpDto) { + + if (diagnosisTreatmentUpDto.getOrgId() == null) { + // 如果为空,设置当前登录所在的医院 + Long orgId = SecurityUtils.getLoginUser().getHospitalId(); + diagnosisTreatmentUpDto.setOrgId(orgId); + } + + ActivityDefinition activityDefinition = new ActivityDefinition(); + BeanUtils.copyProperties(diagnosisTreatmentUpDto, activityDefinition); + // 使用10位数基础采番 + String code = assignSeqUtil.getSeq(AssignSeqEnum.ACTIVITY_DEFINITION_NUM.getPrefix(), 10); + activityDefinition.setBusNo(code); + // 拼音码 + activityDefinition.setPyStr(ChineseConvertUtils.toPinyinFirstLetter(activityDefinition.getName())); + // 五笔码 + activityDefinition.setWbStr(ChineseConvertUtils.toWBFirstLetter(activityDefinition.getName())); + + // 新增外来诊疗目录 + activityDefinition.setStatusEnum(PublicationStatus.ACTIVE.getValue()); + if (iActivityDefinitionService.addDiagnosisTreatment(activityDefinition)) { + // 调用医保目录对照接口 + String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关 + if (Whether.YES.getCode().equals(ybSwitch) && StringUtils.isNotEmpty(activityDefinition.getYbNo()) ) { + R r = ybService.directoryCheck(CommonConstants.TableName.WOR_ACTIVITY_DEFINITION, + activityDefinition.getId()); + if (200 != r.getCode()) { + throw new RuntimeException("医保目录对照接口异常"); + } + } + // 插入操作记录 + iOperationRecordService.addEntityOperationRecord(DbOpType.INSERT.getCode(), + CommonConstants.TableName.WOR_ACTIVITY_DEFINITION, activityDefinition); + + ItemUpFromDirectoryDto itemUpFromDirectoryDto = new ItemUpFromDirectoryDto(); + BeanUtils.copyProperties(diagnosisTreatmentUpDto, itemUpFromDirectoryDto); + itemUpFromDirectoryDto.setTypeCode(diagnosisTreatmentUpDto.getItemTypeCode()) + .setUnitCode(diagnosisTreatmentUpDto.getPermittedUnitCode()) + .setInstanceTable(CommonConstants.TableName.WOR_ACTIVITY_DEFINITION) + .setEffectiveStart(DateUtils.getNowDate()).setStatusEnum(PublicationStatus.ACTIVE.getValue()) + .setConditionFlag(Whether.YES.getValue()).setChargeName(diagnosisTreatmentUpDto.getName()) + .setInstanceId(activityDefinition.getId()).setPrice(diagnosisTreatmentUpDto.getRetailPrice()); + + return itemDefinitionServic.addItem(itemUpFromDirectoryDto) + ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"诊疗目录"})) + : R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00008, null)); + + } + return R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00008, null)); + + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/ItemDefinitionAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/ItemDefinitionAppServiceImpl.java new file mode 100644 index 00000000..29ca363b --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/ItemDefinitionAppServiceImpl.java @@ -0,0 +1,106 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.datadictionary.appservice.impl; + +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.core.common.core.domain.R; +import com.core.common.utils.MessageUtils; +import com.openhis.administration.domain.ChargeItemDefinition; +import com.openhis.administration.service.IChargeItemDefinitionService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.ConditionCode; +import com.openhis.common.enums.PublicationStatus; +import com.openhis.common.utils.EnumUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.datadictionary.appservice.ItemDefinitionAppService; +import com.openhis.web.datadictionary.dto.ItemDefinitionDetailDto; +import com.openhis.web.datadictionary.dto.ItemDefinitionDto; +import com.openhis.web.datadictionary.mapper.ItemDefinitionAppMapper; + +/** + * 项目定价 应用impl + */ +@Service +public class ItemDefinitionAppServiceImpl implements ItemDefinitionAppService { + + @Resource + ItemDefinitionAppMapper itemDefinitionAppMapper; + + @Resource + IChargeItemDefinitionService iChargeItemDefinitionService; + + /** + * 项目定价 分页 + * + * @param itemDefinitionDto dto + * @param searchKey 模糊查询关键字 + * @param chargeItemContext 收费项目类型 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 项目定价 + */ + @Override + public IPage getChargeItemInfo(ItemDefinitionDto itemDefinitionDto, Integer chargeItemContext, + String searchKey, Integer pageNo, Integer pageSize) { + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(itemDefinitionDto, searchKey, + new HashSet<>(Arrays.asList("charge_name")), null); + IPage chargeItemInfo = itemDefinitionAppMapper.getChargeItemInfo( + new Page<>(pageNo, pageSize), chargeItemContext, CommonConstants.TableName.MED_MEDICATION_DEFINITION, + CommonConstants.TableName.ADM_DEVICE_DEFINITION, CommonConstants.TableName.WOR_ACTIVITY_DEFINITION, + CommonConstants.TableName.ADM_HEALTHCARE_SERVICE, queryWrapper); + List records = chargeItemInfo.getRecords(); + for (ItemDefinitionDto record : records) { + // 状态 + record.setStatusEnum_enumText(EnumUtils.getInfoByValue(PublicationStatus.class, record.getStatusEnum())); + } + return chargeItemInfo; + } + + /** + * 项目定价详细 + * + * @param id id + * @return 项目定价详细 + */ + @Override + public List getChargeItemInfoDetail(Long id) { + List chargeItemInfoDetail = itemDefinitionAppMapper.getChargeItemInfoDetail(id); + for (ItemDefinitionDetailDto itemDefinitionDetailDto : chargeItemInfoDetail) { + // 条件 + itemDefinitionDetailDto.setConditionCode_enumText( + EnumUtils.getInfoByValue(ConditionCode.class, itemDefinitionDetailDto.getConditionCode())); + } + return chargeItemInfoDetail; + } + + /** + * 改价 + * + * @param id id + * @param price 价格 + * @return 结果 + */ + @Override + public R updateChargeItemInfo(Long id, BigDecimal price) { + ChargeItemDefinition chargeItemDefinition = new ChargeItemDefinition(); + chargeItemDefinition.setId(id); + chargeItemDefinition.setPrice(price); + iChargeItemDefinitionService.updateById(chargeItemDefinition); + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"项目定价"})); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ActivityChildJsonDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ActivityChildJsonDto.java new file mode 100644 index 00000000..2ed99d52 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ActivityChildJsonDto.java @@ -0,0 +1,25 @@ +package com.openhis.web.datadictionary.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 诊疗子项JSON + */ +@Data +@Accessors(chain = true) +public class ActivityChildJsonDto { + + /** 诊疗医嘱定义ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long adviceDefinitionId; + + /** + * 子项请求数量 + */ + private Integer childrenRequestNum; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ItemDefinitionDetailDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ItemDefinitionDetailDto.java new file mode 100644 index 00000000..4a76a3a9 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ItemDefinitionDetailDto.java @@ -0,0 +1,32 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.datadictionary.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 lombok.Data; +import lombok.experimental.Accessors; + +/** + * 收费项目详情 dto + * + * @author zxy + * @date 2025-02-21 + */ +@Data +@Accessors(chain = true) +public class ItemDefinitionDetailDto { + + /** 条件 */ + private Integer conditionCode; + private String conditionCode_enumText; + + /** 价格 */ + private BigDecimal amount; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ItemDefinitionInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ItemDefinitionInitDto.java new file mode 100644 index 00000000..211b6f67 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ItemDefinitionInitDto.java @@ -0,0 +1,46 @@ +package com.openhis.web.datadictionary.dto; + +import java.util.List; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 项目定价 init基础数据 + */ +@Data +@Accessors(chain = true) +public class ItemDefinitionInitDto { + + private List publicationStatusOptions; + private List chargeItemContextOptions; + + /** + * 状态 + */ + @Data + public static class PublicationStatusOption { + private Integer value; + private String label; + + public PublicationStatusOption(Integer value, String label) { + this.value = value; + this.label = label; + } + } + + /** + * 收费项目类型 + */ + @Data + public static class ChargeItemContextOption { + private Integer value; + private String label; + + public ChargeItemContextOption(Integer value, String label) { + this.value = value; + this.label = label; + } + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/mapper/ItemDefinitionAppMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/mapper/ItemDefinitionAppMapper.java new file mode 100644 index 00000000..66b9a9e0 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/datadictionary/mapper/ItemDefinitionAppMapper.java @@ -0,0 +1,49 @@ +package com.openhis.web.datadictionary.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +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.datadictionary.dto.ItemDefinitionDetailDto; +import com.openhis.web.datadictionary.dto.ItemDefinitionDto; + +/** + * 项目定价 应用Mapper + */ +@Repository +public interface ItemDefinitionAppMapper { + + /** + * 查询项目定价信息 + * + * @param page 分页参数 + * @param chargeItemContext 收费项目类型 + * @param MED_MEDICATION_DEFINITION 药品定义 + * @param ADM_DEVICE_DEFINITION 器材定义 + * @param WOR_ACTIVITY_DEFINITION 活动定义 + * @param ADM_HEALTHCARE_SERVICE 服务管理 + * @param queryWrapper 查询条件 + * @return 项目定价信息 + */ + IPage getChargeItemInfo(@Param("page") Page page, + @Param("chargeItemContext") Integer chargeItemContext, + @Param("MED_MEDICATION_DEFINITION") String MED_MEDICATION_DEFINITION, + @Param("ADM_DEVICE_DEFINITION") String ADM_DEVICE_DEFINITION, + @Param("WOR_ACTIVITY_DEFINITION") String WOR_ACTIVITY_DEFINITION, + @Param("ADM_HEALTHCARE_SERVICE") String ADM_HEALTHCARE_SERVICE, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + /** + * 项目定价详细 + * + * @param id id + * @return 项目定价详细 + */ + List getChargeItemInfoDetail(@Param("id") Long id); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAllergyIntolAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAllergyIntolAppService.java new file mode 100644 index 00000000..7e5e70a2 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAllergyIntolAppService.java @@ -0,0 +1,52 @@ +package com.openhis.web.doctorstation.appservice; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.web.bind.annotation.GetMapping; + +import com.core.common.core.domain.R; +import com.openhis.web.doctorstation.dto.AllergyIntoInfoDto; + +/** + * 医生站-患者过敏与不耐受管理的应用类 + * + * @author liuhr + * @date 2025/4/10 + */ +public interface IDoctorStationAllergyIntolAppService { + + /** + * 患者过敏与不耐受数据初始化 + * + * @return 基础数据 + */ + @GetMapping(value = "/init") + R init(); + + /** + * 查询患者过敏与不耐受信息 + * + * @param patientId 患者Id + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 患者过敏与不耐受信息 + */ + R getAllergyIntoleranceInfo(Long patientId, Integer pageNo, Integer pageSize, HttpServletRequest request); + + /** + * 作废当条患者过敏与不耐受信息 + * + * @param allergyIntoInfoDto 患者过敏与不耐受信息 + * @return + */ + R invalidateAllergyIntolerance(AllergyIntoInfoDto allergyIntoInfoDto); + + /** + * 新增患者过敏与不耐受信息 + * + * @param allergyIntoInfoDto 患者过敏与不耐受信息 + * @return + */ + R addAllergyIntoleranceInfo(AllergyIntoInfoDto allergyIntoInfoDto); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationChineseMedicalAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationChineseMedicalAppService.java new file mode 100644 index 00000000..1deb91bc --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationChineseMedicalAppService.java @@ -0,0 +1,80 @@ +package com.openhis.web.doctorstation.appservice; + +import java.util.List; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.core.common.core.domain.R; +import com.openhis.web.doctorstation.dto.AdviceBaseDto; +import com.openhis.web.doctorstation.dto.AdviceSaveParam; +import com.openhis.web.doctorstation.dto.ConditionDefinitionMetadata; +import com.openhis.web.doctorstation.dto.SaveDiagnosisParam; + +/** + * 医生站-中医 应用Service + */ +public interface IDoctorStationChineseMedicalAppService { + + /** + * 查询中医诊断数据 + * + * @param searchKey 关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 中医诊断数据 + */ + Page getConditionInfo(String searchKey, Integer pageNo, Integer pageSize); + + /** + * 查询中医证候数据 + * + * @param searchKey 关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 中医证候数据 + */ + Page getSyndromeInfo(String searchKey, Integer pageNo, Integer pageSize); + + /** + * 保存中医诊断 + * + * @param saveDiagnosisParam 诊断信息 + * @return 结果 + */ + R saveTcmDiagnosis(SaveDiagnosisParam saveDiagnosisParam); + + /** + * 查询中医就诊诊断信息 + * + * @param encounterId 就诊id + * @return 中医就诊诊断信息 + */ + R getTcmEncounterDiagnosis(Long encounterId); + + /** + * 查询中医医嘱信息 + * + * @param adviceBaseDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param locationId 药房id + * @param adviceDefinitionIdParamList 医嘱定义id参数集合 + * @param organizationId 患者挂号对应的科室id + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @param pricingFlag 划价标记 + * @return 中医医嘱信息 + */ + IPage getTcmAdviceBaseInfo(AdviceBaseDto adviceBaseDto, String searchKey, Long locationId, + List adviceDefinitionIdParamList, Long organizationId, Integer pageNo, Integer pageSize, + Integer pricingFlag); + + /** + * 门诊保存(签发)中医医嘱 + * + * @param adviceSaveParam 医嘱表单信息 + * @param adviceOpType 保存或签发 + * @return 结果 + */ + R saveOrSignTcmAdvice(AdviceSaveParam adviceSaveParam, String adviceOpType); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationElepPrescriptionService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationElepPrescriptionService.java new file mode 100644 index 00000000..71cf88c9 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationElepPrescriptionService.java @@ -0,0 +1,94 @@ +package com.openhis.web.doctorstation.appservice; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.core.common.core.domain.R; +import com.openhis.common.enums.AssignSeqEnum; +import com.openhis.web.doctorstation.dto.AdviceBaseDto; +import com.openhis.web.doctorstation.dto.AdviceSaveParam; +import com.openhis.web.doctorstation.dto.DeletePrescriptionInfoParam; +import com.openhis.web.doctorstation.dto.ElepPrescriptionInfoParam; + +import java.util.List; + +/** + * 医生站-电子处方 应用Service + */ +public interface IDoctorStationElepPrescriptionService { + + /** + * 电子处方下拉框 + * + * @return 下拉框信息 + */ + R elepPrescriptionInit(); + + /** + * 获取全部药品信息 + * + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @param searchKey 模糊查询关键字 + * @return 药品信息 + */ + R getAllMedicationInfo(String searchKey, Integer pageNo, Integer pageSize); + + /** + * 获取处方信息 + * + * @param patientId 患者id + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 药品信息 + */ + R getPrescriptionInfo(Long patientId, Integer pageNo, Integer pageSize); + + /** + * 获取药品信息 + * + * @param prescriptionNo 处方号 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 药品详细信息 + */ + R getMedicationInfo(String prescriptionNo, Integer pageNo, Integer pageSize); + + /** + * 获取处方编号 + * + * @return 初始化信息 + */ + R prescriptionNoInit(); + + /** + * 保存处方 + * + * @param prescriptionInfo 处方信息 + * @return 执行结果 + */ + R savePrescriptionInfo(ElepPrescriptionInfoParam prescriptionInfo); + + /** + * 修改处方 + * + * @param prescriptionInfo 处方信息 + * @return 执行结果 + */ + R updatePrescriptionInfo(ElepPrescriptionInfoParam prescriptionInfo); + + /** + * 删除处方 + * + * @param deletePrescriptionInfoParam 处方信息 + * @return 执行结果 + */ + R deletePrescriptionInfo(DeletePrescriptionInfoParam deletePrescriptionInfoParam); + + /** + * 签发处方 + * + * @param prescriptionNoList 处方号 + * @return 药品详细信息 + */ + R issuancePrescription(List prescriptionNoList); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationPtDetailsAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationPtDetailsAppService.java new file mode 100644 index 00000000..2a95abfb --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationPtDetailsAppService.java @@ -0,0 +1,21 @@ +package com.openhis.web.doctorstation.appservice; + +import com.core.common.core.domain.R; + +/** + * 医生站-患者详情应用类 + * + * @author liuhr + * @date 2025/4/10 + */ +public interface IDoctorStationPtDetailsAppService { + + /** + * 查询患者详情 + * + * @param encounterId 就诊Id + * @return 患者详情 + */ + R getPtDetails(Long encounterId); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAllergyIntolAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAllergyIntolAppServiceImpl.java new file mode 100644 index 00000000..55994afc --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAllergyIntolAppServiceImpl.java @@ -0,0 +1,195 @@ +package com.openhis.web.doctorstation.appservice.impl; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javax.servlet.http.HttpServletRequest; + +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.DateUtils; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.openhis.clinical.domain.AllergyIntolerance; +import com.openhis.clinical.mapper.AllergyIntoleranceMapper; +import com.openhis.clinical.service.IAllergyIntoleranceService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.ClinicalStatus; +import com.openhis.common.enums.Criticality; +import com.openhis.common.enums.Severity; +import com.openhis.common.enums.VerificationStatus; +import com.openhis.common.utils.EnumUtils; +import com.openhis.common.utils.HisPageUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.doctorstation.appservice.IDoctorStationAllergyIntolAppService; +import com.openhis.web.doctorstation.dto.AllergyIntoInfoDto; +import com.openhis.web.doctorstation.dto.AllergyIntoInitDto; + +/** + * 医生站-患者过敏与不耐受管理的实现 + * + * @author liuhr + * @date 2025/4/10 + */ +@Service +public class DoctorStationAllergyIntolAppServiceImpl implements IDoctorStationAllergyIntolAppService { + + @Autowired + private IAllergyIntoleranceService allergyIntoleranceService; + + @Autowired + private AllergyIntoleranceMapper allergyIntoleranceMapper; + + /** + * 患者过敏与不耐受数据初始化 + * + * @return 基础数据 + */ + @Override + public R init() { + + AllergyIntoInitDto initDto = new AllergyIntoInitDto(); + + // 获取临床状况列表 + List statusEnumOption1 = Stream.of(ClinicalStatus.values()) + .map(status -> new AllergyIntoInitDto.statusEnumOption(status.getValue(), status.getInfo())) + .collect(Collectors.toList()); + initDto.setClinicalStatusOptions(statusEnumOption1); + + // 获取临床状况列表 + List statusEnumOption2 = Stream.of(VerificationStatus.values()) + .map(status -> new AllergyIntoInitDto.statusEnumOption(status.getValue(), status.getInfo())) + .collect(Collectors.toList()); + initDto.setVerificationStatusOptions(statusEnumOption2); + + // 获取危险程度列表 + List statusEnumOption3 = Stream.of(Criticality.values()) + .map(status -> new AllergyIntoInitDto.statusEnumOption(status.getValue(), status.getInfo())) + .collect(Collectors.toList()); + initDto.setCriticalityOptions(statusEnumOption3); + + // 获取严重程度列表 + List statusEnumOption4 = Stream.of(Severity.values()) + .map(status -> new AllergyIntoInitDto.statusEnumOption(status.getValue(), status.getInfo())) + .collect(Collectors.toList()); + initDto.setSeverityOptions(statusEnumOption4); + + return R.ok(initDto); + + } + + /** + * 查询患者过敏与不耐受信息 + * + * @param patientId 患者Id + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 患者过敏与不耐受信息 + */ + @Override + public R getAllergyIntoleranceInfo(Long patientId, Integer pageNo, Integer pageSize, + HttpServletRequest request) { + + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(null, null, null, request); + + // 根据患者ID查询过敏与不耐受记录 + queryWrapper.eq(CommonConstants.FieldName.PatientId, patientId); + // 设置排序 + queryWrapper.orderByAsc(CommonConstants.FieldName.CreateTime); + // 分页查询 + Page allergyIntolerancePage = + HisPageUtils.selectPage(allergyIntoleranceMapper, queryWrapper, pageNo, pageSize, AllergyIntoInfoDto.class); + + allergyIntolerancePage.getRecords().forEach(e -> { + // 临床状况回显赋值 + e.setClinicalStatusEnum_enumText(EnumUtils.getInfoByValue(ClinicalStatus.class, e.getClinicalStatusEnum())); + // 验证状态回显赋值 + e.setVerificationStatusEnum_enumText( + EnumUtils.getInfoByValue(VerificationStatus.class, e.getVerificationStatusEnum())); + // 危险程度回显赋值 + e.setCriticalityEnum_enumText(EnumUtils.getInfoByValue(Criticality.class, e.getCriticalityEnum())); + // 严重程度回显赋值 + e.setSeverityEnum_enumText(EnumUtils.getInfoByValue(Severity.class, e.getSeverityEnum())); + + }); + + // 返回【患者过敏与不耐受信息】分页 + return R.ok(allergyIntolerancePage); + + } + + /** + * 作废当条患者过敏与不耐受信息 + * + * @param allergyIntoInfoDto 患者过敏与不耐受信息 + * @return + */ + @Override + public R invalidateAllergyIntolerance(AllergyIntoInfoDto allergyIntoInfoDto) { + + AllergyIntolerance allergyIntolerance = new AllergyIntolerance(); + + // 获取当前登录账号的参与者id + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + + allergyIntolerance.setId(allergyIntoInfoDto.getId()).setClinicalStatusEnum(ClinicalStatus.RESOLVED.getValue()) + .setVerificationStatusEnum(VerificationStatus.REFUTED.getValue()) + .setTypeEnum(allergyIntoInfoDto.getTypeEnum()).setCategoryCode(allergyIntoInfoDto.getCategoryCode()) + .setCriticalityEnum(allergyIntoInfoDto.getCriticalityEnum()).setCode(allergyIntoInfoDto.getCode()) + .setPatientId(allergyIntoInfoDto.getPatientId()).setDescription(allergyIntoInfoDto.getDescription()) + .setSeverityEnum(allergyIntoInfoDto.getSeverityEnum()) + .setOnsetDateTime(allergyIntoInfoDto.getOnsetDateTime()).setCheckPractitionerId(practitionerId) + .setLastReactionOccurrence(allergyIntoInfoDto.getLastReactionOccurrence()) + .setNote(allergyIntoInfoDto.getNote()); + + boolean result = allergyIntoleranceService.saveOrUpdateAllergyIntolerance(allergyIntolerance); + + if (result) { + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"过敏与不耐受"})); + } else { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + } + + /** + * 新增患者过敏与不耐受信息 + * + * @param allergyIntoInfoDto 患者过敏与不耐受信息 + * @return + */ + @Override + public R addAllergyIntoleranceInfo(AllergyIntoInfoDto allergyIntoInfoDto) { + + AllergyIntolerance allergyIntolerance = new AllergyIntolerance(); + // 获取当前登录账号的参与者id + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + + allergyIntolerance.setId(allergyIntoInfoDto.getId()).setClinicalStatusEnum(ClinicalStatus.ACTIVE.getValue()) + .setVerificationStatusEnum(VerificationStatus.CONFIRMED.getValue()) + .setTypeEnum(allergyIntoInfoDto.getTypeEnum()).setCategoryCode(allergyIntoInfoDto.getCategoryCode()) + .setCriticalityEnum(allergyIntoInfoDto.getCriticalityEnum()).setCode(allergyIntoInfoDto.getCode()) + .setPatientId(allergyIntoInfoDto.getPatientId()).setDescription(allergyIntoInfoDto.getDescription()) + .setSeverityEnum(allergyIntoInfoDto.getSeverityEnum()) + .setOnsetDateTime(allergyIntoInfoDto.getOnsetDateTime()).setPractitionerId(practitionerId) + .setRecordedDate(DateUtils.getNowDate()) + .setLastReactionOccurrence(allergyIntoInfoDto.getLastReactionOccurrence()) + .setNote(allergyIntoInfoDto.getNote()); + + boolean result = allergyIntoleranceService.saveOrUpdateAllergyIntolerance(allergyIntolerance); + + if (result) { + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00001, new Object[] {"过敏与不耐受"})); + } else { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null)); + } + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java new file mode 100644 index 00000000..048ccd13 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java @@ -0,0 +1,290 @@ +package com.openhis.web.doctorstation.appservice.impl; + +import java.util.*; +import java.util.stream.Collectors; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.core.common.core.domain.R; +import com.core.common.utils.AssignSeqUtil; +import com.core.common.utils.MessageUtils; +import com.openhis.administration.domain.ChargeItem; +import com.openhis.administration.domain.EncounterDiagnosis; +import com.openhis.administration.service.IEncounterDiagnosisService; +import com.openhis.clinical.domain.Condition; +import com.openhis.clinical.domain.ConditionDefinition; +import com.openhis.clinical.mapper.ConditionDefinitionMapper; +import com.openhis.clinical.service.IConditionService; +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.HisPageUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.medication.domain.MedicationRequest; +import com.openhis.web.doctorstation.appservice.IDoctorStationAdviceAppService; +import com.openhis.web.doctorstation.appservice.IDoctorStationChineseMedicalAppService; +import com.openhis.web.doctorstation.dto.*; +import com.openhis.web.doctorstation.mapper.DoctorStationChineseMedicalAppMapper; +import com.openhis.web.doctorstation.utils.AdviceUtils; + +/** + * 医生站-中医 应用实现类 + */ +@Service +public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStationChineseMedicalAppService { + + @Resource + DoctorStationChineseMedicalAppMapper doctorStationChineseMedicalAppMapper; + + @Resource + ConditionDefinitionMapper conditionDefinitionMapper; + + @Resource + IConditionService iConditionService; + + @Resource + IEncounterDiagnosisService iEncounterDiagnosisService; + + @Resource + IDoctorStationAdviceAppService iDoctorStationAdviceAppService; + + @Resource + AssignSeqUtil assignSeqUtil; + + @Resource + AdviceUtils adviceUtils; + + /** + * 查询中医诊断数据 + * + * @param searchKey 关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 中医诊断数据 + */ + @Override + public Page getConditionInfo(String searchKey, Integer pageNo, Integer pageSize) { + // 构建查询条件 + ConditionDefinition conditionDefinition = new ConditionDefinition(); + // 查询状态是有效的 + conditionDefinition.setStatusEnum(PublicationStatus.ACTIVE.getValue()); + // 中医诊断 + conditionDefinition.setSourceEnum(ConditionDefinitionSource.TRADITIONAL_CHINESE_MEDICINE_DIAGNOSIS.getValue()); + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(conditionDefinition, searchKey, + new HashSet<>(Arrays.asList("name", "py_str", "wb_str")), null); + // 设置排序 + queryWrapper.orderByDesc("update_time"); + // 诊断信息 + Page conditionDefinitionMetadataPage = HisPageUtils + .selectPage(conditionDefinitionMapper, queryWrapper, pageNo, pageSize, ConditionDefinitionMetadata.class); + conditionDefinitionMetadataPage.getRecords().forEach(e -> { + // 所属分类 + e.setSourceEnum_enumText(EnumUtils.getInfoByValue(ConditionDefinitionSource.class, e.getSourceEnum())); + // 中医诊断 + e.setTypeName(CommonConstants.BusinessName.TCM_DIAGNOSIS); + // 医保标记 + e.setYbFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getYbFlag())); + // 医保对码标记 + e.setYbMatchFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getYbMatchFlag())); + }); + return conditionDefinitionMetadataPage; + } + + /** + * 查询中医证候数据 + * + * @param searchKey 关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 中医证候数据 + */ + @Override + public Page getSyndromeInfo(String searchKey, Integer pageNo, Integer pageSize) { + // 构建查询条件 + ConditionDefinition conditionDefinition = new ConditionDefinition(); + // 查询状态是有效的 + conditionDefinition.setStatusEnum(PublicationStatus.ACTIVE.getValue()); + // 中医证候 + conditionDefinition + .setSourceEnum(ConditionDefinitionSource.TRADITIONAL_CHINESE_MEDICINE_SYNDROME_CATALOG.getValue()); + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(conditionDefinition, searchKey, + new HashSet<>(Arrays.asList("name", "py_str", "wb_str")), null); + // 设置排序 + queryWrapper.orderByDesc("update_time"); + // 诊断信息 + Page conditionDefinitionMetadataPage = HisPageUtils + .selectPage(conditionDefinitionMapper, queryWrapper, pageNo, pageSize, ConditionDefinitionMetadata.class); + conditionDefinitionMetadataPage.getRecords().forEach(e -> { + // 所属分类 + e.setSourceEnum_enumText(EnumUtils.getInfoByValue(ConditionDefinitionSource.class, e.getSourceEnum())); + // 中医证候 + e.setTypeName(CommonConstants.BusinessName.TCM_SYNDROME_CATALOG); + // 医保标记 + e.setYbFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getYbFlag())); + // 医保对码标记 + e.setYbMatchFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getYbMatchFlag())); + }); + return conditionDefinitionMetadataPage; + } + + /** + * 保存中医诊断 + * + * @param saveDiagnosisParam 诊断信息 + * @return 结果 + */ + @Override + public R saveTcmDiagnosis(SaveDiagnosisParam saveDiagnosisParam) { + // 患者id + Long patientId = saveDiagnosisParam.getPatientId(); + // 就诊ID + Long encounterId = saveDiagnosisParam.getEncounterId(); + // 诊断定义集合 + List diagnosisChildList = saveDiagnosisParam.getDiagnosisChildList(); + // 先删除再保存 (中医) + iEncounterDiagnosisService.deleteEncounterDiagnosisInfos(encounterId); + // 保存诊断管理 + Condition condition; + for (SaveDiagnosisChildParam saveDiagnosisChildParam : diagnosisChildList) { + condition = new Condition(); + condition.setVerificationStatusEnum(saveDiagnosisChildParam.getVerificationStatusEnum()); + condition.setPatientId(patientId); + condition.setDefinitionId(saveDiagnosisChildParam.getDefinitionId()); + condition.setYbNo(saveDiagnosisChildParam.getYbNo()); + condition.setTcmFlag(Whether.YES.getValue());// 中医标识 + // 返回诊断id + Long conditionId = iConditionService.saveConditionByDoctor(condition); + saveDiagnosisChildParam.setConditionId(conditionId); + } + // 保存就诊诊断 + EncounterDiagnosis encounterDiagnosis; + for (SaveDiagnosisChildParam saveDiagnosisChildParam : diagnosisChildList) { + encounterDiagnosis = new EncounterDiagnosis(); + encounterDiagnosis.setEncounterId(encounterId); + encounterDiagnosis.setConditionId(saveDiagnosisChildParam.getConditionId()); + encounterDiagnosis.setMaindiseFlag(saveDiagnosisChildParam.getMaindiseFlag()); + encounterDiagnosis.setDiagSrtNo(saveDiagnosisChildParam.getDiagSrtNo()); // 排序号 + encounterDiagnosis.setMedTypeCode(saveDiagnosisChildParam.getMedTypeCode());// 医疗类型 + encounterDiagnosis.setTcmFlag(Whether.YES.getValue());// 中医标识 + encounterDiagnosis.setSyndromeGroupNo(saveDiagnosisChildParam.getSyndromeGroupNo());// 中医证候组号 + iEncounterDiagnosisService.save(encounterDiagnosis); + } + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"中医诊断"})); + } + + /** + * 查询中医就诊诊断信息 + * + * @param encounterId 就诊id + * @return 中医就诊诊断信息 + */ + @Override + public R getTcmEncounterDiagnosis(Long encounterId) { + HashMap resultMap = new HashMap<>(); + // 中医就诊诊断信息 + List tcmEncounterDiagnosis = + doctorStationChineseMedicalAppMapper.getTcmEncounterDiagnosis(encounterId); + // 病 + List illness = tcmEncounterDiagnosis.stream().filter( + e -> ConditionDefinitionSource.TRADITIONAL_CHINESE_MEDICINE_DIAGNOSIS.getValue().equals(e.getSourceEnum())) + .collect(Collectors.toList()); + // 症 + List symptom = tcmEncounterDiagnosis.stream() + .filter(e -> ConditionDefinitionSource.TRADITIONAL_CHINESE_MEDICINE_SYNDROME_CATALOG.getValue() + .equals(e.getSourceEnum())) + .collect(Collectors.toList()); + resultMap.put("illness", illness); + resultMap.put("symptom", symptom); + return R.ok(resultMap); + } + + /** + * 查询中医医嘱信息 + * + * @param adviceBaseDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param locationId 药房id + * @param adviceDefinitionIdParamList 医嘱定义id参数集合 + * @param organizationId 患者挂号对应的科室id + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @param pricingFlag 划价标记 + * @return 中医医嘱信息 + */ + @Override + public IPage getTcmAdviceBaseInfo(AdviceBaseDto adviceBaseDto, String searchKey, Long locationId, + List adviceDefinitionIdParamList, Long organizationId, Integer pageNo, Integer pageSize, + Integer pricingFlag) { + adviceBaseDto.setAdviceType(1); // 医嘱类型为药品 + adviceBaseDto.setCategoryCode(medCategoryCode.CHINESE_HERBAL_MEDICINE.getValue());// 中草药 + return iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, searchKey, locationId, + adviceDefinitionIdParamList, organizationId, pageNo, pageSize, pricingFlag); + } + + /** + * 门诊保存(签发)中医医嘱 + * + * @param adviceSaveParam 医嘱表单信息 + * @param adviceOpType 保存或签发 + * @return 结果 + */ + @Override + public R saveOrSignTcmAdvice(AdviceSaveParam adviceSaveParam, String adviceOpType) { + // 医嘱分类信息 (中草药) + List medicineList = adviceSaveParam.getAdviceSaveList(); + // 保存操作 + boolean is_save = AdviceOpType.SAVE_ADVICE.getCode().equals(adviceOpType); + // 签发操作 + boolean is_sign = AdviceOpType.SIGN_ADVICE.getCode().equals(adviceOpType); + // 当前时间 + Date curDate = new Date(); + // 患者挂号对应的科室id + Long organizationId = adviceSaveParam.getOrganizationId(); + // 保存时,校验库存 + if (is_save) { + List needCheckList = medicineList.stream() + .filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); + // 校验库存 + String tipRes = adviceUtils.checkInventory(needCheckList); + if (tipRes != null) { + return R.fail(null, tipRes); + } + } + // 药品请求 + MedicationRequest medicationRequest; + // 费用项 + ChargeItem chargeItem; + // 是否代煎 + Integer sufferingFlag = adviceSaveParam.getSufferingFlag(); + for (AdviceSaveDto adviceSaveDto : medicineList) { + // 中药付数 + Integer chineseHerbsDoseQuantity = adviceSaveDto.getChineseHerbsDoseQuantity(); + medicationRequest = new MedicationRequest(); + medicationRequest.setTcmFlag(Whether.YES.getValue());// 中医标识 + medicationRequest.setId(adviceSaveDto.getRequestId()); // 主键id + medicationRequest.setStatusEnum(is_save ? RequestStatus.DRAFT.getValue() : RequestStatus.ACTIVE.getValue()); // 请求状态 + // 只有保存时才处理的字段属性 + if (is_save) { + medicationRequest.setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.MEDICATION_RES_NO.getPrefix(), 10)); + medicationRequest.setChineseHerbsDoseQuantity(chineseHerbsDoseQuantity); // 中药付数 + medicationRequest.setSufferingFlag(sufferingFlag); // 代煎标识 + medicationRequest.setQuantity(adviceSaveDto.getQuantity() * chineseHerbsDoseQuantity); // 请求数量 + + } + + // 代煎,生成中药代煎的request,及对应的账单 + if (Whether.YES.getValue().equals(sufferingFlag)) { + + } + } + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"门诊中医医嘱"})); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationElepPrescriptionServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationElepPrescriptionServiceImpl.java new file mode 100644 index 00000000..431bef6a --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationElepPrescriptionServiceImpl.java @@ -0,0 +1,407 @@ +package com.openhis.web.doctorstation.appservice.impl; + +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javax.annotation.Resource; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.core.common.core.domain.model.LoginUser; +import com.core.common.utils.DateUtils; +import com.core.common.utils.SecurityUtils; +import com.openhis.administration.domain.Practitioner; +import com.openhis.administration.service.IPractitionerService; +import com.openhis.common.enums.ybenums.YbRxItemTypeCode; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.doctorstation.appservice.IDoctorStationElepPrescriptionService; +import com.openhis.web.doctorstation.mapper.DoctorStationElepPrescriptionMapper; +import com.openhis.workflow.domain.ElepMedicationRequest; +import com.openhis.workflow.domain.SupplyRequest; +import com.openhis.workflow.service.IElepMedicationRequestService; +import com.openhis.ybcatalog.domain.CatalogDrugInfo; +import com.openhis.ybcatalog.service.ICatalogDrugInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.core.common.core.domain.R; +import com.core.common.utils.AssignSeqUtil; +import com.core.common.utils.MessageUtils; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.*; +import com.openhis.common.utils.EnumUtils; +import com.openhis.web.doctorstation.dto.*; + +/** + * 医生站-电子处方 应用实现类 + */ +@Service +public class DoctorStationElepPrescriptionServiceImpl implements IDoctorStationElepPrescriptionService { + @Autowired + ICatalogDrugInfoService catalogDrugInfoService; + @Autowired + DoctorStationElepPrescriptionMapper elepPrescriptionMapper; + @Autowired + IElepMedicationRequestService elepMedicationRequestService; + @Resource + IPractitionerService practitionerService; + @Resource + private AssignSeqUtil assignSeqUtil; + + /** + * 电子处方下拉框 + * + * @return 下拉框信息 + */ + @Override + public R elepPrescriptionInit() { + + ElepPrescriptionInitDto initDto = new ElepPrescriptionInitDto(); + + // 处方类别 + List rxTypeCodeListOptions = Stream.of(YbRxItemTypeCode.values()) + .map(prescriptionType -> new ElepPrescriptionInitDto.commonStatusOption(prescriptionType.getValue(), + prescriptionType.getDescription())) + .collect(Collectors.toList()); + + initDto.setRxTypeCodeListOptions(rxTypeCodeListOptions); + return R.ok(initDto); + } + + /** + * 获取药品信息 + * + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @param searchKey 模糊查询关键字 + * @return 药品信息 + */ + @Override + public R getAllMedicationInfo(String searchKey, Integer pageNo, Integer pageSize) { + IPage medicationInfo = catalogDrugInfoService.selectCatalogDrugInfo(pageNo, pageSize, searchKey); + return R.ok(medicationInfo); + } + + /** + * 获取处方信息 + * + * @param patientId 患者id + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 药品信息 + */ + @Override + public R getPrescriptionInfo(Long patientId, Integer pageNo, Integer pageSize) { + // 处方信息查询 + IPage prescriptionInfo = + elepPrescriptionMapper.selectElepPrescriptionInfo(new Page<>(pageNo, pageSize), patientId); + // 状态转换 + prescriptionInfo.getRecords().forEach(infoDto -> { + infoDto.setStatusEnum_enumText(EnumUtils.getInfoByValue(RequestStatus.class, infoDto.getStatusEnum())); + infoDto.setRxTypeCode_enumText(EnumUtils.getInfoByValue(PrescriptionType.class, infoDto.getRxTypeCode())); + }); + return R.ok(prescriptionInfo); + } + + /** + * 获取药品信息 + * + * @param prescriptionNo 处方号 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 药品详细信息 + */ + @Override + public R getMedicationInfo(String prescriptionNo, Integer pageNo, Integer pageSize) { + // 药品详细查询 + IPage medicationInfo = + elepPrescriptionMapper.selectMedicationInfo(new Page<>(pageNo, pageSize), prescriptionNo); + return R.ok(medicationInfo); + } + + /** + * 获取处方编号 + * + * @return 初始化信息 + */ + @Override + public R prescriptionNoInit() { + // 单据号 + String prescriptionNo = assignSeqUtil.getSeqByDay(AssignSeqEnum.ELEP_MEDICATION_NO.getPrefix(), 10); + + return R.ok(prescriptionNo); + } + + /** + * 保存处方 + * + * @param prescriptionInfo 处方信息 + * @return 执行结果 + */ + @Override + public R savePrescriptionInfo(ElepPrescriptionInfoParam prescriptionInfo) { + // 获取当前登陆用户信息 + LoginUser loginUser = SecurityUtils.getLoginUser(); + Practitioner user = practitionerService.getPractitionerByUserId(loginUser.getUserId()); + // 获取当前时间 + Date now = DateUtils.getNowDate(); + + // 根据处方号查询处方信息 + List requestList = elepMedicationRequestService.selectElepMedicationRequestByPrescriptionNo(prescriptionInfo.getPrescriptionNo()); + if (!requestList.isEmpty()) { + List idList = requestList.stream().map(ElepMedicationRequest::getId).collect(Collectors.toList()); + // 处方信息删除 + elepMedicationRequestService.removeByIds(idList); + } + + // 搜索更表需要信息 + ElepPrescriptionInfoParam info = elepPrescriptionMapper.selectSaveInfo(prescriptionInfo.getEncounterId()); + if(info.getConditionId() == null){ + return R.fail("请先新增主诊断"); + } + + // 设置处方信息 + List elepMedicationRequestList = new ArrayList<>(); + ElepMedicationRequest elepMedicationRequest; + for (ElepMedicationInfoDto item : prescriptionInfo.getMedicationInfoList()) { + elepMedicationRequest = new ElepMedicationRequest(); + elepMedicationRequest + // ID + .setId(null) + // 医院内部处方编号 + .setPrescriptionNo(prescriptionInfo.getPrescriptionNo()) + // 医院id + .setOrganizationId(info.getOrganizationId()) + // 门诊/住院病历号 + .setIptOtpNo(info.getIptOtpNo()) + // 科室病区 + .setDepartmentWard(info.getDepartmentWard()) + // 医保类型 + .setInsuranceEnum(info.getInsuranceEnum()) + // 开具日期 + .setIssueTime(now) + // 开具科室 + .setOrgId(user.getOrgId()) + // 患者 + .setPatientId(prescriptionInfo.getPatientId()) + // 就诊id + .setEncounterId(prescriptionInfo.getEncounterId()) + // 诊断id + .setConditionId(info.getConditionId()) + // 有效天数 + .setValidityDays(prescriptionInfo.getValidityDays()) + // 药品定义id + .setMedicationId(item.getMedicationId()) + // 药品剂量 + .setMedDosage(item.getMedDosage()) + // 药品剂量单位 + .setMedDosageUnitCode(item.getMedDosageUnitCode()) + // 药品频率 + .setMedFrequency(item.getMedFrequency()) + // 药品途径 + .setMedRoute(item.getMedRoute()) + // 请求数量 + .setQuantity(item.getQuantity()) + // 请求单位 + .setUnitCode(item.getUnitCode()) + // 开方医师 + .setPrescribingDrId(user.getId()) + // 处方状态 + .setStatusEnum(RequestStatus.DRAFT.getValue()) + // 延长原因 + .setExtensionReason(prescriptionInfo.getExtensionReason()) + // 处方类别 + .setRxTypeCode(item.getRxTypeCode()) + // 支持用药信息 + .setSupportInfo(item.getSupportInfo()) + // 服药时间(开始) + .setEffectiveDoseStart(item.getEffectiveDoseStart()) + // 服药时间(结束) + .setEffectiveDoseEnd(item.getEffectiveDoseEnd()) + // 给药间隔 + .setDispenseInterval(item.getDispenseInterval()) + // 单次发药数 + .setDispensePerQuantity(item.getDispensePerQuantity()) + // 每次发药供应天数 + .setDispensePerDuration(item.getDispensePerDuration()); + elepMedicationRequestList.add(elepMedicationRequest); + } + + // 保存处方 + boolean flg = elepMedicationRequestService.saveBatch(elepMedicationRequestList); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null)); + } + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"电子处方"})); + } + + /** + * 修改处方 + * + * @param prescriptionInfo 处方信息 + * @return 执行结果 + */ + @Override + public R updatePrescriptionInfo(ElepPrescriptionInfoParam prescriptionInfo) { + // 获取当前登陆用户信息 + LoginUser loginUser = SecurityUtils.getLoginUser(); + Practitioner user = practitionerService.getPractitionerByUserId(loginUser.getUserId()); + // 获取当前时间 + Date now = DateUtils.getNowDate(); + + // 设置处方信息 + ElepMedicationRequest elepMedicationRequest; + List elepMedicationRequestList; + + // 修改处方信息 + if (prescriptionInfo.getId() == null) { + elepMedicationRequestList = elepMedicationRequestService + .selectElepMedicationRequestByPrescriptionNo(prescriptionInfo.getPrescriptionNo()); + // 判断信息是否存在 + if (elepMedicationRequestList == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00006, null)); + } + for (ElepMedicationRequest item : elepMedicationRequestList) { + item + // 开具日期 + .setIssueTime(now) + // 开具科室 + .setOrgId(user.getOrgId()) + // 开方医师 + .setPrescribingDrId(user.getId()) + // 有效天数 + .setValidityDays(prescriptionInfo.getValidityDays()) + // 延长原因 + .setExtensionReason(prescriptionInfo.getExtensionReason()) + // 处方类别 + .setRxTypeCode(prescriptionInfo.getRxTypeCode()); + } + // 修改处方 + boolean flg = elepMedicationRequestService.updateBatchById(elepMedicationRequestList); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null)); + } + } + // 修改药品信息 + else { + elepMedicationRequest = elepMedicationRequestService.getById(prescriptionInfo.getId()); + // 判断信息是否存在 + if (elepMedicationRequest == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00006, null)); + } + elepMedicationRequest + // 开具日期 + .setIssueTime(now) + // 开具科室 + .setOrgId(user.getOrgId()) + // 开方医师 + .setPrescribingDrId(user.getId()) + // 药品定义id + .setMedicationId(prescriptionInfo.getMedicationId()) + // 药品剂量 + .setMedDosage(prescriptionInfo.getMedDosage()) + // 药品剂量单位 + .setMedDosageUnitCode(prescriptionInfo.getMedDosageUnitCode()) + // 药品频率 + .setMedFrequency(prescriptionInfo.getMedFrequency()) + // 药品途径 + .setMedRoute(prescriptionInfo.getMedRoute()) + // 请求数量 + .setQuantity(prescriptionInfo.getQuantity()) + // 请求单位 + .setUnitCode(prescriptionInfo.getUnitCode()) + // 支持用药信息 + .setSupportInfo(prescriptionInfo.getSupportInfo()) + // 服药时间(开始) + .setEffectiveDoseStart(prescriptionInfo.getEffectiveDoseStart()) + // 服药时间(结束) + .setEffectiveDoseEnd(prescriptionInfo.getEffectiveDoseEnd()) + // 给药间隔 + .setDispenseInterval(prescriptionInfo.getDispenseInterval()) + // 单次发药数 + .setDispensePerQuantity(prescriptionInfo.getDispensePerQuantity()) + // 每次发药供应天数 + .setDispensePerDuration(prescriptionInfo.getDispensePerDuration()); + + // 修改处方 + boolean flg = elepMedicationRequestService.updateById(elepMedicationRequest); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null)); + } + } + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"电子处方"})); + } + + /** + * 删除处方 + * + * @param deletePrescriptionInfoParam 删除处方信息 + * @return 执行结果 + */ + @Override + public R deletePrescriptionInfo(DeletePrescriptionInfoParam deletePrescriptionInfoParam) { + + // 设置处方信息 + List elepMedicationRequestList; + + if (deletePrescriptionInfoParam.getIdList().isEmpty()) { + elepMedicationRequestList = elepMedicationRequestService + .selectElepMedicationRequestByPrescriptionNoList(deletePrescriptionInfoParam.getPrescriptionNoList()); + // 判断信息是否存在 + if (elepMedicationRequestList == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00006, null)); + } + // 删除处方 + boolean flg = elepMedicationRequestService + .deleteElepMedicationRequestByPrescriptionNo(deletePrescriptionInfoParam.getPrescriptionNoList()); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null)); + } + } else { + elepMedicationRequestList = + elepMedicationRequestService.selectElepMedicationRequestById(deletePrescriptionInfoParam.getIdList()); + // 判断信息是否存在 + if (elepMedicationRequestList == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00006, null)); + } + // 删除处方 + boolean flg = elepMedicationRequestService.removeBatchByIds(elepMedicationRequestList); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null)); + } + } + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00005, new Object[] {"电子处方"})); + } + + /** + * 签发处方 + * + * @param prescriptionNoList 处方号 + * @return 药品详细信息 + */ + @Override + public R issuancePrescription(List prescriptionNoList) { + // 搜索处方信息 + List elepMedicationRequestList = + elepMedicationRequestService.selectElepMedicationRequestByPrescriptionNoList(prescriptionNoList); + // 判断处方是否存在 + if (elepMedicationRequestList == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00006, null)); + } + for (ElepMedicationRequest item : elepMedicationRequestList) { + // 处方状态 + item.setStatusEnum(RequestStatus.ACTIVE.getValue()); + } + // 签发处方 + boolean flg = elepMedicationRequestService.updateBatchById(elepMedicationRequestList); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null)); + } + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[] {"电子处方"})); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationPtDetailsAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationPtDetailsAppServiceImpl.java new file mode 100644 index 00000000..088b2b5a --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationPtDetailsAppServiceImpl.java @@ -0,0 +1,83 @@ +package com.openhis.web.doctorstation.appservice.impl; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.core.common.core.domain.R; +import com.core.common.utils.DateUtils; +import com.openhis.common.enums.*; +import com.openhis.common.utils.EnumUtils; +import com.openhis.web.doctorstation.appservice.IDoctorStationPtDetailsAppService; +import com.openhis.web.doctorstation.dto.PatientDetailsDto; +import com.openhis.web.doctorstation.mapper.DoctorStationPtDetailsAppMapper; + +/** + * 医生站-患者详情应用实现类 + * + * @author liuhr + * @date 2025/4/10 + */ +@Service +public class DoctorStationPtDetailsAppServiceImpl implements IDoctorStationPtDetailsAppService { + + @Autowired + DoctorStationPtDetailsAppMapper doctorStationPtDetailsAppMapper; + + /** + * 查询患者详情 + * + * @param encounterId 就诊Id + * @return 患者详情 + */ + @Override + public R getPtDetails(Long encounterId) { + + // 收费状态List(1:待收费,2:待结算,5:已结算) + List statusList = new ArrayList<>(); + // 向列表中添加元素,1:待收费 + statusList.add(ChargeItemStatus.PLANNED.getValue()); + // 向列表中添加元素,2:待结算 + statusList.add(ChargeItemStatus.BILLABLE.getValue()); + // 向列表中添加元素,5:已结算 + statusList.add(ChargeItemStatus.BILLED.getValue()); + + PatientDetailsDto patientDetailsDto = doctorStationPtDetailsAppMapper.getPtDetailsList(encounterId, + ChargeItemContext.MEDICATION.getValue(), ChargeItemContext.DEVICE.getValue(), + ChargeItemContext.ACTIVITY.getValue(), ClinicalStatus.ACTIVE.getValue(), LocationForm.BED.getValue(), + ParticipantType.ADMITTER.getCode(), statusList); + + // 住院的场合,获取现在时间,计算住院天数 + if (patientDetailsDto.getClassEnum() == EncounterClass.IMP.getValue()) { + // 截至时间,用于计算当前时刻下显示的住院天数 + Date endTime; + if (patientDetailsDto.getEndTime() == null) { + endTime = DateUtils.getNowDate(); + } else { + endTime = patientDetailsDto.getEndTime(); + } + + int days = DateUtils.differentDaysByMillisecond(patientDetailsDto.getStartTime(), endTime); + patientDetailsDto.setAdmissionDays(days); + } + + // 性别枚举类回显赋值 + patientDetailsDto.setGenderEnum_enumText( + EnumUtils.getInfoByValue(AdministrativeGender.class, patientDetailsDto.getGenderEnum())); + // 婚姻状态枚举类回显赋值 + patientDetailsDto.setMaritalStatusEnum_enumText( + EnumUtils.getInfoByValue(MaritalStatus.class, patientDetailsDto.getMaritalStatusEnum())); + // 职业编码枚举类回显赋值 + patientDetailsDto + .setPrfsEnum_enumText(EnumUtils.getInfoByValue(OccupationType.class, patientDetailsDto.getPrfsEnum())); + // 家庭关系枚举类回显赋值 + patientDetailsDto.setLinkRelationCode_enumText( + EnumUtils.getInfoByValue(FamilyRelationshipType.class, patientDetailsDto.getLinkRelationCode())); + + return R.ok(patientDetailsDto); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAllergyIntolController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAllergyIntolController.java new file mode 100644 index 00000000..98d3cd35 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAllergyIntolController.java @@ -0,0 +1,81 @@ +package com.openhis.web.doctorstation.controller; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import com.core.common.core.domain.R; +import com.openhis.web.doctorstation.appservice.IDoctorStationAllergyIntolAppService; +import com.openhis.web.doctorstation.dto.AllergyIntoInfoDto; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * 医生站-患者过敏与不耐受管理 + * + * @author liuhr + * @date 2025/4/10 + */ +@RestController +@RequestMapping("/doctor-station/allergy-intolerance") +@Slf4j +@AllArgsConstructor +public class DoctorStationAllergyIntolController { + @Autowired + private IDoctorStationAllergyIntolAppService doctorStationAllergyIntolAppService; + + /** + * 患者过敏与不耐受数据初始化 + * + * @return 基础数据 + */ + @GetMapping(value = "/init") + public R init() { + + return doctorStationAllergyIntolAppService.init(); + } + + /** + * 查询患者过敏与不耐受信息 + * + * @param patientId 患者Id + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 患者过敏与不耐受信息 + */ + @GetMapping(value = "/allergy-intolerance-info") + public R getAllergyIntolerance(@RequestParam Long patientId, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { + + return doctorStationAllergyIntolAppService.getAllergyIntoleranceInfo(patientId, pageNo, pageSize, request); + } + + /** + * 作废当条患者过敏与不耐受信息 + * + * @param allergyIntoInfoDto 患者过敏与不耐受信息 + * @return + */ + @PutMapping(value = "/allergy-intolerance-info") + public R invalidateAllergyIntolerance(@RequestBody AllergyIntoInfoDto allergyIntoInfoDto) { + + return doctorStationAllergyIntolAppService.invalidateAllergyIntolerance(allergyIntoInfoDto); + } + + /** + * 新增患者过敏与不耐受信息 + * + * @param allergyIntoInfoDto 患者过敏与不耐受信息 + * @return + */ + @PostMapping(value = "/allergy-intolerance-info") + public R addAllergyIntoleranceInfo(@Validated @RequestBody AllergyIntoInfoDto allergyIntoInfoDto) { + + return doctorStationAllergyIntolAppService.addAllergyIntoleranceInfo(allergyIntoInfoDto); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationChineseMedicalController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationChineseMedicalController.java new file mode 100644 index 00000000..28c7eb81 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationChineseMedicalController.java @@ -0,0 +1,120 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.doctorstation.controller; + +import java.util.List; + +import org.springframework.web.bind.annotation.*; + +import com.core.common.core.domain.R; +import com.openhis.common.enums.AdviceOpType; +import com.openhis.common.enums.Whether; +import com.openhis.web.doctorstation.appservice.IDoctorStationChineseMedicalAppService; +import com.openhis.web.doctorstation.dto.AdviceBaseDto; +import com.openhis.web.doctorstation.dto.AdviceSaveParam; +import com.openhis.web.doctorstation.dto.SaveDiagnosisParam; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * 医生站-中医 controller + */ +@RestController +@RequestMapping("/doctor-station/chinese-medical") +@Slf4j +@AllArgsConstructor +public class DoctorStationChineseMedicalController { + + private final IDoctorStationChineseMedicalAppService iDoctorStationChineseMedicalAppService; + + /** + * 查询中医诊断数据 + * + * @param searchKey 关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 中医诊断数据 + */ + @GetMapping(value = "/condition-info") + public R getConditionInfo(@RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return R.ok(iDoctorStationChineseMedicalAppService.getConditionInfo(searchKey, pageNo, pageSize)); + } + + /** + * 查询中医证候数据 + * + * @param searchKey 关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 中医证候数据 + */ + @GetMapping(value = "/syndrome-info") + public R getSyndromeInfo(@RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return R.ok(iDoctorStationChineseMedicalAppService.getSyndromeInfo(searchKey, pageNo, pageSize)); + } + + /** + * 保存中医诊断 + * + * @param saveDiagnosisParam 诊断信息 + * @return 结果 + */ + @PostMapping(value = "/save-tcm-diagnosis") + public R saveTcmDiagnosis(@RequestBody SaveDiagnosisParam saveDiagnosisParam) { + return iDoctorStationChineseMedicalAppService.saveTcmDiagnosis(saveDiagnosisParam); + } + + /** + * 查询中医就诊诊断信息 + * + * @param encounterId 就诊id + * @return 中医就诊诊断信息 + */ + @GetMapping(value = "/get-tcm-encounter-diagnosis") + public R getTcmEncounterDiagnosis(@RequestParam Long encounterId) { + return iDoctorStationChineseMedicalAppService.getTcmEncounterDiagnosis(encounterId); + } + + /** + * 查询中医医嘱信息 + * + * @param adviceBaseDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param locationId 药房id + * @param adviceDefinitionIdParamList 医嘱定义id参数集合 + * @param organizationId 患者挂号对应的科室id + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 中医医嘱信息 + */ + @GetMapping(value = "/tcm-advice-base-info") + public R getTcmAdviceBaseInfo(AdviceBaseDto adviceBaseDto, + @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 = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return R.ok(iDoctorStationChineseMedicalAppService.getTcmAdviceBaseInfo(adviceBaseDto, searchKey, locationId, + adviceDefinitionIdParamList, organizationId, pageNo, pageSize, Whether.NO.getValue())); + } + + /** + * 门诊保存中医医嘱 + * + * @param adviceSaveParam 医嘱表单信息 + * @return 结果 + */ + @PostMapping(value = "/save-tcm-advice") + public R saveTcmAdvice(@RequestBody AdviceSaveParam adviceSaveParam) { + return iDoctorStationChineseMedicalAppService.saveOrSignTcmAdvice(adviceSaveParam, + AdviceOpType.SAVE_ADVICE.getCode()); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationElepPrescriptionController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationElepPrescriptionController.java new file mode 100644 index 00000000..fc358e7e --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationElepPrescriptionController.java @@ -0,0 +1,142 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.doctorstation.controller; + +import com.openhis.web.doctorstation.appservice.IDoctorStationElepPrescriptionService; +import com.openhis.web.doctorstation.dto.*; +import com.openhis.web.ybmanage.service.IYbEleHttpService; +import org.apache.ibatis.annotations.Param; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import com.core.common.core.domain.R; +import com.openhis.common.enums.AdviceOpType; +import com.openhis.web.doctorstation.appservice.IDoctorStationAdviceAppService; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import java.util.List; + +/** + * 医生站-电子处方 controller + */ +@RestController +@RequestMapping("/doctor-station/elep") +@Slf4j +@AllArgsConstructor +public class DoctorStationElepPrescriptionController { + + @Autowired + IDoctorStationElepPrescriptionService doctorStationElepService; + + /** + * 电子处方下拉框 + * + * @return 下拉框信息 + */ + @GetMapping("/init") + public R elepPrescriptionInit() { + return doctorStationElepService.elepPrescriptionInit(); + } + + /** + * 获取全部药品信息 + * + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 药品信息 + */ + @GetMapping("/get-allMedicationInfo") + public R getAllMedicationInfo(@RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return doctorStationElepService.getAllMedicationInfo(searchKey, pageNo, pageSize); + } + + /** + * 获取处方信息 + * + * @param patientId 患者id + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 药品信息 + */ + @GetMapping("/get-prescriptionInfo") + public R getPrescriptionInfo(@RequestParam Long patientId, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return doctorStationElepService.getPrescriptionInfo(patientId, pageNo, pageSize); + } + + /** + * 获取药品信息 + * + * @param prescriptionNo 处方号 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 药品详细信息 + */ + @GetMapping("/get-medicationInfo") + public R getMedicationInfo(@RequestParam String prescriptionNo, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return doctorStationElepService.getMedicationInfo(prescriptionNo, pageNo, pageSize); + } + + /** + * 获取单据号 + * + * @return 初始化信息 + */ + @GetMapping("/prescriptionNoInit") + public R prescriptionNoInit() { + return doctorStationElepService.prescriptionNoInit(); + } + + /** + * 保存处方 + * + * @param prescriptionInfo 处方信息 + * @return 执行结果 + */ + @PostMapping("/save-prescriptionInfo") + public R savePrescriptionInfo(@RequestBody ElepPrescriptionInfoParam prescriptionInfo) { + return doctorStationElepService.savePrescriptionInfo(prescriptionInfo); + } + + /** + * 修改处方 + * + * @param prescriptionInfo 处方信息 + * @return 执行结果 + */ + @PostMapping("/update-prescriptionInfo") + public R updatePrescriptionInfo(@RequestBody ElepPrescriptionInfoParam prescriptionInfo) { + return doctorStationElepService.updatePrescriptionInfo(prescriptionInfo); + } + + /** + * 删除处方 + * + * @param deletePrescriptionInfoParam 处方信息 + * @return 执行结果 + */ + @PostMapping("/delete-prescriptionInfo") + public R deletePrescriptionInfo(@RequestBody DeletePrescriptionInfoParam deletePrescriptionInfoParam) { + return doctorStationElepService.deletePrescriptionInfo(deletePrescriptionInfoParam); + } + + /** + * 签发处方 + * + * @param prescriptionNoList 处方号 + * @return 执行结果 + */ + @PostMapping("/issuance-prescription") + public R issuancePrescription(@RequestBody List prescriptionNoList) { + return doctorStationElepService.issuancePrescription(prescriptionNoList); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationPtDetailsController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationPtDetailsController.java new file mode 100644 index 00000000..2844d42f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationPtDetailsController.java @@ -0,0 +1,45 @@ +package com.openhis.web.doctorstation.controller; + +import com.openhis.web.doctorstation.appservice.IDoctorStationPtDetailsAppService; +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 lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * 医生站-患者详情 + * + * @author liuhr + * @date 2025/4/10 + */ +@RestController +@RequestMapping("/doctor-station/patient-details") +@Slf4j +@AllArgsConstructor +public class DoctorStationPtDetailsController { + + @Autowired + private IDoctorStationPtDetailsAppService doctorStationPtDetailsAppService; + + /** + * 查询患者详情 + * + * @param encounterId 就诊Id + * @return 患者详情 + */ + @GetMapping(value = "/patient-details") + public R getPtDetails(@RequestParam Long encounterId) { + + return doctorStationPtDetailsAppService.getPtDetails(encounterId); + } + + + + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AllergyIntoInfoDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AllergyIntoInfoDto.java new file mode 100644 index 00000000..9020bb47 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AllergyIntoInfoDto.java @@ -0,0 +1,91 @@ +package com.openhis.web.doctorstation.dto; + +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; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; + +/** + * 患者过敏不耐受Dto + * + * @author liuhr + * @date 2025/4/10 + */ +@Data +@Accessors(chain = true) +public class AllergyIntoInfoDto { + + /** ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 临床状况 */ + private Integer clinicalStatusEnum; + private String clinicalStatusEnum_enumText; + + /** 验证状态 */ + private Integer verificationStatusEnum; + private String verificationStatusEnum_enumText; + + /** 类型 */ + private Integer typeEnum; + + /** 过敏原类别 */ + @Dict(dictCode = "allergy_category") + private String categoryCode; + private String categoryCode_dictText; + + /** 危险程度 */ + private Integer criticalityEnum; + private String criticalityEnum_enumText; + + /** 过敏物质编码 */ + @Dict(dictCode = "allergy_code") + private String code; + private String code_dictText; + + /** 患者ID */ + @Dict(dictTable = "adm_patient", dictCode = "id", dictText = "name") + @JsonSerialize(using = ToStringSerializer.class) + private Long patientId; + private String patientId_dictText; + + /** 反应描述 */ + private String description; + + /** 严重程度 */ + private Integer severityEnum; + private String severityEnum_enumText; + + /** 过敏发生开始日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date onsetDateTime; + + /** 记录者 */ + @JsonSerialize(using = ToStringSerializer.class) + @Dict(dictTable = "adm_practitioner", dictCode = "id", dictText = "name") + private Long practitionerId; + private String practitionerId_dictText; + + /** 断言者 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long checkPractitionerId; + + /** 记录日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date recordedDate; + + /** 最后反应发生日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date lastReactionOccurrence ; + + /** 备注 */ + private String note; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AllergyIntoInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AllergyIntoInitDto.java new file mode 100644 index 00000000..5d3cb0bb --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AllergyIntoInitDto.java @@ -0,0 +1,41 @@ +package com.openhis.web.doctorstation.dto; + +import java.util.List; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 患者过敏不耐受初期数据Dto + * + * @author liuhr + * @date 2025/4/10 + */ +@Data +@Accessors(chain = true) +public class AllergyIntoInitDto { + + //临床状况列表 + private List clinicalStatusOptions; + //验证状态列表 + private List verificationStatusOptions; + //危险程度列表 + private List criticalityOptions; + //严重程度列表 + private List severityOptions; + + /** + * 状态 + */ + @Data + public static class statusEnumOption { + private Integer value; + private String info; + + public statusEnumOption(Integer value, String info) { + this.value = value; + this.info = info; + } + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/DeletePrescriptionInfoParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/DeletePrescriptionInfoParam.java new file mode 100644 index 00000000..14849699 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/DeletePrescriptionInfoParam.java @@ -0,0 +1,23 @@ +package com.openhis.web.doctorstation.dto; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 电子处方 dto + */ +@Data +@Accessors(chain = true) +public class DeletePrescriptionInfoParam { + + /** ID */ + private List idList; + + /** 医院内部处方编号*/ + private List prescriptionNoList; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ElepMedicationInfoDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ElepMedicationInfoDto.java new file mode 100644 index 00000000..b4a4af51 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ElepMedicationInfoDto.java @@ -0,0 +1,63 @@ +package com.openhis.web.doctorstation.dto; + +import java.math.BigDecimal; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.openhis.common.annotation.Dict; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 药品信息 dto + */ +@Data +@Accessors(chain = true) +public class ElepMedicationInfoDto { + + private Long id; + + /** 药品定义id */ + private String medicationId; + /** 药品名 */ + private String medicationName; + /** 药品规格 */ + private String drugSpecification; + /** 生产厂家 */ + private String manufacturerName; + /** 药品剂量 */ + private BigDecimal medDosage; + /** 药品剂量单位 */ + private String medDosageUnitCode; + /** 使用频次 */ + @Dict(dictCode = "elep_rate_code") + private String medFrequency; + private String medFrequency_dictText; + /** 途径 */ + @Dict(dictCode = "method_code") + private String medRoute; + private String medRoute_dictText; + /** 请求数量 */ + private Integer quantity; + + /** 请求单位 */ + private String unitCode; + + /** 支持用药信息 */ + private String supportInfo; + /** 服药时间(开始) */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date effectiveDoseStart; + /** 服药时间(结束) */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date effectiveDoseEnd; + /** 给药间隔 */ + private String dispenseInterval; + /** 单次发药数 */ + private Integer dispensePerQuantity; + /** 每次发药供应天数 */ + private Integer dispensePerDuration; + /** 处方类别 */ + private Integer rxTypeCode; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ElepPrescriptionInfoDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ElepPrescriptionInfoDto.java new file mode 100644 index 00000000..ee984c31 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ElepPrescriptionInfoDto.java @@ -0,0 +1,52 @@ +package com.openhis.web.doctorstation.dto; + +import java.math.BigDecimal; +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; + +/** + * 电子处方 dto + */ +@Data +@Accessors(chain = true) +public class ElepPrescriptionInfoDto { + /** 租户ID */ + private Integer tenantId; + /** 处方号 */ + private String prescriptionNo; + /** 门诊号 */ + private String iptOtpNo; + /** 科室病区 */ + private String departmentWard; + /** 有效天数 */ + private Integer validityDays; + /** 状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + /** 开方医生名 */ + private String practitionerName; + /** 开单科室 */ + private String prscDeptName; + /** 处方开立日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date prscTime; + /** 取药状态 */ + private String medStatus; + /** 延长原因 */ + private String extensionReason; + /** 撤销原因 */ + private String quashReason; + /** 诊断名 */ + private String conditionName; + /** 处方类别 */ + private Integer rxTypeCode; + private String rxTypeCode_enumText; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ElepPrescriptionInfoParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ElepPrescriptionInfoParam.java new file mode 100644 index 00000000..d23d7de8 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ElepPrescriptionInfoParam.java @@ -0,0 +1,112 @@ +package com.openhis.web.doctorstation.dto; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Positive; + +/** + * 电子处方 dto + */ +@Data +@Accessors(chain = true) +public class ElepPrescriptionInfoParam { + + /** ID */ + private Integer id; + + /** 医院内部处方编号 */ + private String prescriptionNo; + + /** 医院id (前台不传) */ + private Long organizationId; + + /** 门诊/住院病历号 (前台不传) */ + private String iptOtpNo; + + /** 科室病区 (前台不传) */ + private String departmentWard; + + /** 医保类型 (前台不传) */ + private Integer insuranceEnum; + + /** 开具日期 (前台不传) */ + private Date issueTime; + + /** 开具科室 (前台不传) */ + private Long orgId; + + /** 患者 */ + private Long patientId; + + /** 就诊id */ + private Long encounterId; + + /** 诊断id (前台不传) */ + private Long conditionId; + + /** 有效天数 */ + private Integer validityDays; + + /** 药品定义id */ + private String medicationId; + + /** 药品剂量 */ + private BigDecimal medDosage; + /** 药品剂量单位 */ + private String medDosageUnitCode; + + /** 药品频率 */ + private String medFrequency; + + /** 药品途径 */ + private String medRoute; + + /** 开方医师 (前台不传) */ + private Long prescribingDrId; + + /** 延长原因 */ + private String extensionReason; + + /** 处方状态 (前台不传) */ + private Integer statusEnum; + + /** 请求数量 */ + private Integer quantity; + + /** 请求单位 */ + private String unitCode; + + /** 处方类别 */ + private Integer rxTypeCode; + /** 支持用药信息 */ + private String supportInfo; + /** 服药时间(开始) */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date effectiveDoseStart; + + /** 服药时间(结束) */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date effectiveDoseEnd; + /** 给药间隔 */ + private String dispenseInterval; + + /** 单次发药数 */ + private Integer dispensePerQuantity; + + /** 每次发药供应天数 */ + private Integer dispensePerDuration; + + /** 药品信息 */ + List medicationInfoList; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ElepPrescriptionInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ElepPrescriptionInitDto.java new file mode 100644 index 00000000..7579a6d2 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ElepPrescriptionInitDto.java @@ -0,0 +1,36 @@ +package com.openhis.web.doctorstation.dto; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import com.openhis.web.basedatamanage.dto.LocationDto; +import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 电子处方下拉框 + */ +@Data +@Accessors(chain = true) +public class ElepPrescriptionInitDto { + /** + * 处方类别 + */ + private List rxTypeCodeListOptions; + + + @Data + public static class commonStatusOption { + private String value; + private String label; + + public commonStatusOption(String value, String label) { + this.value = value; + this.label = label; + } + } + + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/EncounterContractDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/EncounterContractDto.java new file mode 100644 index 00000000..4f84fb13 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/EncounterContractDto.java @@ -0,0 +1,28 @@ +package com.openhis.web.doctorstation.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 system + * @date 2025-02-20 + */ +@Data +@Accessors(chain = true) +public class EncounterContractDto { + + /** 关联账户ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long accountId; + + /** 合同名称 */ + private String contractName; + + /** 合同编码 */ + private String busNo; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/PatientDetailsDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/PatientDetailsDto.java new file mode 100644 index 00000000..5e1b8557 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/PatientDetailsDto.java @@ -0,0 +1,168 @@ +package com.openhis.web.doctorstation.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; + +/** + * 患者详情Dto + * + * @author liuhr + * @date 2025/4/10 + */ +@Data +@Accessors(chain = true) +public class PatientDetailsDto { + + /** + * 就诊id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** + * 患者id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long patientId; + + /** + * 患者名字 + */ + private String name; + /** + * 性别 + */ + private Integer genderEnum; + private String genderEnum_enumText; + + /** + * 生日 + */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date birthDate; + + /** + * 病人年龄 + */ + private String ageString; + + /** + * 联系电话 + */ + private String phone; + + /** + * 详细地址 + */ + private String address; + + /** + * 工作单位 + */ + private String workCompany; + + /** + * 民族 + */ + private String nationalityCode; + + /** + * 婚姻状态 + */ + private Integer maritalStatusEnum; + private String maritalStatusEnum_enumText; + + /** + * 身份证ID + */ + private String idCard; + + /** + * 国家编码 + */ + private String countryCode; + + /** + * 职业 + */ + private Integer prfsEnum; + private String prfsEnum_enumText; + + /** + * 联系人 + */ + private String linkName; + + /** + * 联系人关系 + */ + private Integer linkRelationCode; + private String linkRelationCode_enumText; + + /** + * 联系人电话 + */ + private String linkTelcom; + + /** 就诊类别 */ + private Integer classEnum; + + /** 就诊编号 */ + private String busNo; + + /** 挂号医生 */ + private String doctorName; + + /** 账户余额 */ + private BigDecimal balanceAmount; + + /** 账户类型编码 */ + @Dict(dictCode = "") + private String typeCode; + private String typeCode_dictText; + + /** 费用总计 */ + private BigDecimal totalPrice; + + /** 费用:药品 */ + private BigDecimal totalMedicationPrice; + + /** 费用:耗材 */ + private BigDecimal totalDevicePrice; + + /** 费用:项目 */ + private BigDecimal totalActivityPrice; + + /** 床位号 */ + @JsonSerialize(using = ToStringSerializer.class) + @Dict(dictTable = "adm_location", dictCode = "id", dictText = "name") + private Long bedLocationId; + private String bedLocationId_dictText; + + /** 入院时间 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date startTime; + + /** 出院时间 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date endTime; + + /** 挂号时间 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** 入院天数 */ + private Integer admissionDays; + + /** 过敏史 */ + private Integer allergyHistoryFlag; + +} \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/RequestBaseDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/RequestBaseDto.java new file mode 100644 index 00000000..a9360aae --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/RequestBaseDto.java @@ -0,0 +1,155 @@ +package com.openhis.web.doctorstation.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; + +/** + * 医嘱请求基础 dto + */ +@Data +@Accessors(chain = true) +public class RequestBaseDto { + + /** 医嘱类型 */ + private Integer adviceType; // 1:药品 , 2: 耗材 , 3:项目 + + /** + * 唯一标识 + */ + private String uniqueKey; // requestId拼接adviceType + + /** + * 请求人id + */ + @JsonSerialize(using = ToStringSerializer.class) + @Dict(dictTable = "adm_practitioner", dictCode = "id", dictText = "name") + private Long requesterId; + private String requesterId_dictText; + + /** 请求时间 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date requestTime; + + /** + * 当前登录账号请求标记 | 1:是,0:否 + */ + private String bizRequestFlag; + + /** + * 请求内容json + */ + private String contentJson; + + /** + * 诊断定义名称 + */ + private String conditionDefinitionName; + + /** + * 分组id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long groupId; + + /** + * 请求id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long requestId; + + /** + * 费用项id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long chargeItemId; + + /** 医嘱名称 */ + private String adviceName; + + /** + * 规格 + */ + private String volume; + + /** 产品批号 */ + private String lotNumber; + + /** 请求数量 */ + private Integer quantity; + + /** 请求单位编码 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 请求状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + + /** 收费状态 */ + private Integer chargeStatus; + private String chargeStatus_enumText; + + /** 是否皮试 */ + private Integer skinTestFlag; + private String skinTestFlag_enumText; + + /** 是否为注射药物 */ + private Integer injectFlag; + private String injectFlag_enumText; + + /** + * 用法 + */ + @Dict(dictCode = "method_code") + private String methodCode; + private String methodCode_dictText; + + /** + * 使用频次 + */ + @Dict(dictCode = "rate_code") + private String rateCode; + private String rateCode_dictText; + + /** + * 单次剂量 + */ + private BigDecimal dose; + + /** 剂量单位 */ + @Dict(dictCode = "unit_code") + private String doseUnitCode; + private String doseUnitCode_dictText; + + /** + * 总价 + */ + private BigDecimal totalPrice; + + /** + * 物理位置id | 可能是 发药药房id,耗材房id,执行科室id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long positionId; + + /** + * 物理位置| 可能是 发药药房,耗材房,执行科室 + */ + private String positionName; + + /** 用药天数 */ + private Integer dispensePerDuration; + + /** 拆零比 */ + private BigDecimal partPercent; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/UpdateGroupDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/UpdateGroupDto.java new file mode 100644 index 00000000..c675e4e2 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/UpdateGroupDto.java @@ -0,0 +1,28 @@ +package com.openhis.web.doctorstation.dto; + +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 UpdateGroupDto { + + /** + * 请求id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long requestId; + + /** + * 分组id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long groupId; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/UpdateGroupIdParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/UpdateGroupIdParam.java new file mode 100644 index 00000000..28f74554 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/UpdateGroupIdParam.java @@ -0,0 +1,20 @@ +package com.openhis.web.doctorstation.dto; + +import java.util.List; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 更新组号参数类 + */ +@Data +@Accessors(chain = true) +public class UpdateGroupIdParam { + + /** + * 保存医嘱 dto + */ + private List groupList; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationChineseMedicalAppMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationChineseMedicalAppMapper.java new file mode 100644 index 00000000..09fe480f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationChineseMedicalAppMapper.java @@ -0,0 +1,24 @@ +package com.openhis.web.doctorstation.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import com.openhis.web.doctorstation.dto.DiagnosisQueryDto; + +/** + * 医生站-中医 应用Mapper + */ +@Repository +public interface DoctorStationChineseMedicalAppMapper { + + /** + * 查询中医就诊诊断信息 + * + * @param encounterId 就诊id + * @return 中医就诊诊断信息 + */ + List getTcmEncounterDiagnosis(@Param("encounterId") Long encounterId); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationElepPrescriptionMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationElepPrescriptionMapper.java new file mode 100644 index 00000000..efe460d9 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationElepPrescriptionMapper.java @@ -0,0 +1,39 @@ +package com.openhis.web.doctorstation.mapper; + +import com.openhis.web.doctorstation.dto.*; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +/** + * 医生站-电子处方 应用Mapper + */ +@Repository +public interface DoctorStationElepPrescriptionMapper { + + /** + * 获取处方信息 + * + * @param page 分页 + * @param patientId 患者id + * @return 药品信息 + */ + Page selectElepPrescriptionInfo(@Param("page") Page page,@Param("patientId") Long patientId); + /** + * 获取处方信息 + * + * @param prescriptionNo 处方号 + * @return 药品信息 + */ + Page selectMedicationInfo(@Param("page") Page page,@Param("prescriptionNo") String prescriptionNo); + + /** + * 搜索更表需要信息 + * + * @param encounterId 就诊id + * @return 药品信息 + */ + ElepPrescriptionInfoParam selectSaveInfo(@Param("encounterId") Long encounterId); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationPtDetailsAppMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationPtDetailsAppMapper.java new file mode 100644 index 00000000..e153f8f9 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationPtDetailsAppMapper.java @@ -0,0 +1,36 @@ +package com.openhis.web.doctorstation.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import com.openhis.web.doctorstation.dto.PatientDetailsDto; + +/** + * 医生站-患者详情 + * + * @author liuhr + * @date 2025/4/10 + */ +@Repository +public interface DoctorStationPtDetailsAppMapper { + + /** + * 查询患者详情 + * + * @param encounterId 就诊Id + * @param contextMed 收费项目药品类型 + * @param contextDev 收费项目设备类型 + * @param contextAct 收费项目耗材类型 + * @param clinicalStatus 过敏反应阳性 + * @param typeCode 就诊参与者身份类型(1:接诊医生) + * @param statusList 收费状态List(1:待收费,2:待结算,5:已结算) + * @return 患者详情 + */ + PatientDetailsDto getPtDetailsList(@Param("encounterId") Long encounterId, + @Param("contextMed") Integer contextMed, @Param("contextDev") Integer contextDev, + @Param("contextAct") Integer contextAct, @Param("clinicalStatus") Integer clinicalStatus, + @Param("form") Integer form,@Param("typeCode") String typeCode, @Param("statusList") List statusList); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/AdviceUtils.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/AdviceUtils.java new file mode 100644 index 00000000..d6c60849 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/AdviceUtils.java @@ -0,0 +1,119 @@ +package com.openhis.web.doctorstation.utils; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Component; + +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.enums.DispenseStatus; +import com.openhis.common.enums.PublicationStatus; +import com.openhis.web.doctorstation.dto.AdviceInventoryDto; +import com.openhis.web.doctorstation.dto.AdviceSaveDto; +import com.openhis.web.doctorstation.mapper.DoctorStationAdviceAppMapper; + +/** + * 医嘱工具类 + */ +@Component +public class AdviceUtils { + + @Resource + DoctorStationAdviceAppMapper doctorStationAdviceAppMapper; + + /** + * 校验库存 + * + * @param adviceSaveList 医嘱信息 + * @return 提示信息 + */ + public String checkInventory(List adviceSaveList) { + // 医嘱定义ID集合 + List adviceDefinitionIdList = + adviceSaveList.stream().map(AdviceSaveDto::getAdviceDefinitionId).collect(Collectors.toList()); + // 医嘱库存集合 + List adviceInventoryList = + doctorStationAdviceAppMapper.getAdviceInventory(null, adviceDefinitionIdList, + CommonConstants.SqlCondition.ABOUT_INVENTORY_TABLE_STR, PublicationStatus.ACTIVE.getValue()); + // 待发放个数信息 + List adviceDraftInventoryList = + doctorStationAdviceAppMapper.getAdviceDraftInventory(CommonConstants.TableName.MED_MEDICATION_DEFINITION, + CommonConstants.TableName.ADM_DEVICE_DEFINITION, DispenseStatus.DRAFT.getValue()); + // 预减库存 + List adviceInventory = + this.subtractInventory(adviceInventoryList, adviceDraftInventoryList); + // 检查库存 + for (AdviceSaveDto saveDto : adviceSaveList) { + boolean matched = false; + for (AdviceInventoryDto inventoryDto : adviceInventory) { + // 匹配条件:adviceDefinitionId, adviceTableName, locationId, lotNumber 同时相等 + if (saveDto.getAdviceDefinitionId().equals(inventoryDto.getItemId()) + && saveDto.getAdviceTableName().equals(inventoryDto.getItemTable()) + && saveDto.getLocationId().equals(inventoryDto.getLocationId()) + && saveDto.getLotNumber().equals(inventoryDto.getLotNumber())) { + matched = true; + // 检查库存是否充足 + BigDecimal minUnitQuantity = saveDto.getMinUnitQuantity(); + Integer chineseHerbsDoseQuantity = saveDto.getChineseHerbsDoseQuantity(); // 中药付数 + // 中草药医嘱的情况 + if (chineseHerbsDoseQuantity != null && chineseHerbsDoseQuantity > 0) { + minUnitQuantity = + minUnitQuantity.multiply(BigDecimal.valueOf(chineseHerbsDoseQuantity.longValue())); + } + if (minUnitQuantity.compareTo(inventoryDto.getQuantity()) > 0) { + return saveDto.getAdviceName() + "在" + inventoryDto.getLocationName() + "库存不足"; + } + break; + } + } + // 如果没有匹配到库存 + if (!matched) { + return saveDto.getAdviceName() + "未匹配到库存信息"; + } + } + return null; // 校验通过 + } + + /** + * 预减库存 + * + * @param adviceInventoryList 库存表数据 + * @param adviceDraftInventoryList 待发放数据 + * @return 预减库存 + */ + public List subtractInventory(List adviceInventoryList, + List adviceDraftInventoryList) { + // 1. 将 draft 列表转换为 Map,合并重复键的 quantity + Map draftMap = adviceDraftInventoryList.stream() + .collect(Collectors.toMap( + draft -> String.format(CommonConstants.Common.SS_DD_FORMAT, draft.getItemTable(), + draft.getLotNumber(), draft.getItemId(), draft.getLocationId()), + draft -> draft, (existing, replacement) -> { + // 合并重复键的 quantity + BigDecimal existingQty = + existing.getQuantity() != null ? existing.getQuantity() : BigDecimal.ZERO; + BigDecimal replacementQty = + replacement.getQuantity() != null ? replacement.getQuantity() : BigDecimal.ZERO; + existing.setQuantity(existingQty.add(replacementQty)); + return existing; + })); + // 2. 遍历原始库存列表,匹配并扣减 + return adviceInventoryList.stream().map(inventory -> { + String key = String.format(CommonConstants.Common.SS_DD_FORMAT, inventory.getItemTable(), + inventory.getLotNumber(), inventory.getItemId(), inventory.getLocationId()); + AdviceInventoryDto draft = draftMap.get(key); + if (draft != null) { + BigDecimal draftQty = draft.getQuantity() != null ? draft.getQuantity() : BigDecimal.ZERO; + BigDecimal newQty = inventory.getQuantity().subtract(draftQty); + inventory.setQuantity(newQty.compareTo(BigDecimal.ZERO) >= 0 ? newQty : BigDecimal.ZERO); + } + return inventory; + }).collect(Collectors.toList()); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/PrescriptionUtils.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/PrescriptionUtils.java new file mode 100644 index 00000000..453fe161 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/PrescriptionUtils.java @@ -0,0 +1,162 @@ +package com.openhis.web.doctorstation.utils; + +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.Component; + +import com.core.common.utils.AssignSeqUtil; +import com.openhis.common.enums.AssignSeqEnum; +import com.openhis.web.doctorstation.dto.AdviceSaveDto; + +/** + * 处方号工具类 + */ +@Component +public class PrescriptionUtils { + + @Resource + private AssignSeqUtil assignSeqUtil; + + private static final Integer MAX_SINGLE_PRESCRIPTION_NUM = 5; // 单个处方药品种类上限 + private static final BigDecimal MAX_SINGLE_PRESCRIPTION_PRICE = new BigDecimal("500"); // 单个处方金额上限 + + /** + * 主入口方法:为药品请求生成处方号 + */ + public void generatePrescriptionNumbers(List medicineList) { + if (medicineList == null || medicineList.isEmpty()) { + return; + } + // 1. 按诊断ID分组(不同诊断必须分开) + Map> diagnosisGroups = + medicineList.stream().collect(Collectors.groupingBy(AdviceSaveDto::getConditionDefinitionId)); + // 2. 处理每个诊断组 + diagnosisGroups.values().forEach(this::processDiagnosisGroup); + } + + /** + * 处理单个诊断组 + */ + private void processDiagnosisGroup(List diagnosisGroup) { + if (diagnosisGroup.isEmpty()) { + return; + } + // 1. 按药品性质分组 + Map> pharmacologyGroups = + diagnosisGroup.stream().collect(Collectors.groupingBy(AdviceSaveDto::getPharmacologyCategoryCode)); + // 2. 处理每个药品性质组 + pharmacologyGroups.values().forEach(pharmaGroup -> { + // 2.1 先处理有分组ID的药品(确保它们不会被拆分) + Map> groupedMedicines = pharmaGroup.stream().filter(m -> m.getGroupId() != null) + .collect(Collectors.groupingBy(AdviceSaveDto::getGroupId)); + // 2.2 无分组ID的药品单独处理 + List ungroupedMedicines = + pharmaGroup.stream().filter(m -> m.getGroupId() == null).collect(Collectors.toList()); + // 2.3 合并处理 - 每个分组ID的药品作为一个整体,与无分组ID的药品一起按限制拆分 + List> allGroups = new ArrayList<>(); + // 添加有分组ID的药品(每个分组作为一个整体) + groupedMedicines.values().forEach(allGroups::add); + // 添加无分组ID的药品(按种类限制拆分) + allGroups.addAll(splitByQuantityLimit(ungroupedMedicines)); + // 2.4 对合并后的所有组按金额限制进行最终拆分 + List> finalGroups = new ArrayList<>(); + allGroups.forEach(group -> { + finalGroups.addAll(splitByPriceLimit(group)); + }); + // 2.5 分配处方号 + assignPrescriptionNumbers(finalGroups, pharmaGroup.get(0).getPharmacologyCategoryCode()); + }); + } + + /** + * 按药品种类上限拆分(仅用于无分组ID药品) + */ + private List> splitByQuantityLimit(List medicines) { + List> result = new ArrayList<>(); + List currentGroup = new ArrayList<>(MAX_SINGLE_PRESCRIPTION_NUM); + for (AdviceSaveDto medicine : medicines) { + if (currentGroup.size() >= MAX_SINGLE_PRESCRIPTION_NUM) { + result.add(currentGroup); + currentGroup = new ArrayList<>(MAX_SINGLE_PRESCRIPTION_NUM); + } + currentGroup.add(medicine); + } + if (!currentGroup.isEmpty()) { + result.add(currentGroup); + } + return result; + } + + /** + * 按处方金额上限拆分(通用方法,处理所有药品) + */ + private List> splitByPriceLimit(List medicines) { + List> result = new ArrayList<>(); + List currentGroup = new ArrayList<>(); + BigDecimal currentTotal = BigDecimal.ZERO; + for (AdviceSaveDto medicine : medicines) { + // 计算单个药品总金额 + BigDecimal medicinePrice = medicine.getUnitPrice().multiply(new BigDecimal(medicine.getQuantity())); + // 特殊处理:单药品金额超限 + if (medicinePrice.compareTo(MAX_SINGLE_PRESCRIPTION_PRICE) > 0) { + // 先保存当前组(如果有药品) + if (!currentGroup.isEmpty()) { + result.add(currentGroup); + currentGroup = new ArrayList<>(); + currentTotal = BigDecimal.ZERO; + } + // 该药品单独成方 + result.add(Collections.singletonList(medicine)); + continue; + } + // 检查添加后是否超限 + if (currentTotal.add(medicinePrice).compareTo(MAX_SINGLE_PRESCRIPTION_PRICE) > 0) { + result.add(currentGroup); + currentGroup = new ArrayList<>(); + currentTotal = BigDecimal.ZERO; + } + currentGroup.add(medicine); + currentTotal = currentTotal.add(medicinePrice); + } + if (!currentGroup.isEmpty()) { + result.add(currentGroup); + } + return result; + } + + /** + * 为最终分组分配处方号 + */ + private void assignPrescriptionNumbers(List> groups, String pharmacologyCode) { + groups.forEach(group -> { + String prescriptionNo = generatePrescriptionNo(pharmacologyCode); + group.forEach(medicine -> medicine.setPrescriptionNo(prescriptionNo)); + }); + } + + /** + * 根据药品性质生成处方号 + */ + private String generatePrescriptionNo(String pharmacologyCategoryCode) { + switch (pharmacologyCategoryCode) { + case "2": // 麻醉药品 + return assignSeqUtil.getSeq(AssignSeqEnum.PRESCRIPTION_NARCOTIC_NO.getPrefix(), 8); + case "3": // 毒性药品 + return assignSeqUtil.getSeq(AssignSeqEnum.PRESCRIPTION_TOXIC_NO.getPrefix(), 8); + case "4": // 一类精神药 + return assignSeqUtil.getSeq(AssignSeqEnum.PRESCRIPTION_A_PSYCHOTROPIC_NO.getPrefix(), 8); + case "5": // 二类精神药 + return assignSeqUtil.getSeq(AssignSeqEnum.PRESCRIPTION_B_PSYCHOTROPIC_NO.getPrefix(), 8); + default: // 普通药品 + return assignSeqUtil.getSeq(AssignSeqEnum.PRESCRIPTION_COMMON_NO.getPrefix(), 8); + } + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/IAdmissionAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/IAdmissionAppService.java new file mode 100644 index 00000000..0ae5c7fc --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/IAdmissionAppService.java @@ -0,0 +1,60 @@ +package com.openhis.web.inpatientmanage.appservice; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.web.bind.annotation.RequestParam; + +import com.core.common.core.domain.R; +import com.openhis.web.inpatientmanage.dto.AdmissionSearchParam; +import com.openhis.web.inpatientmanage.dto.AdmissionUpDto; + +/** + * 住院登记 应用实现 + * + * @author liuhr + * @since 2025/04/07 + */ +public interface IAdmissionAppService { + + /** + * 病获取住院信息初期数据列表 + * + * @return 住院信息初期数据列表 + */ + R getAdmissionInfoInit(); + + /** + * 获取住院信息 分页显示 + * + * @param admissionSearchParam 查询参数 + * @param searchKey 模糊查询 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 住院信息 + */ + R getAdmissionInfoPage(AdmissionSearchParam admissionSearchParam, String searchKey, Integer pageNo, + Integer pageSize, HttpServletRequest request); + + /** + * 住院无档登记 + * + * @param admissionUpDto 住院登记信息 + */ + R addAdmissionInfo(AdmissionUpDto admissionUpDto); + + /** + * 登记 + * + * @param admissionUpDto 住院登记信息 + */ + R editAdmissionInfo(AdmissionUpDto admissionUpDto); + + /** + * 住院登记详细查询 + * + * @param id 查询条件 + * @return 住院登记详细查询结果 + */ + R getAdmissionOne(@RequestParam Long id); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/IDepositAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/IDepositAppService.java new file mode 100644 index 00000000..2d8bcb55 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/IDepositAppService.java @@ -0,0 +1,43 @@ +package com.openhis.web.inpatientmanage.appservice; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.inpatientmanage.dto.DepositSearchParam; +import com.openhis.web.paymentmanage.dto.PaymentDto; + +/** + * 住院登记 应用实现 + * + * @author gyy + * @since 2025/05/19 + */ +public interface IDepositAppService { + + /** + * 病获取预交金信息初期数据列表 + * + * @return 预交金信息初期数据列表 + */ + R getDepositInfoInit(); + + /** + * 获取预交金信息 分页显示 + * + * @param depositSearchParam 查询参数 + * @param searchKey 模糊查询 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 住院信息 + */ + R getDepositInfoPage(DepositSearchParam depositSearchParam, String searchKey, Integer pageNo, Integer pageSize, + HttpServletRequest request); + + /** + * 付款 + * + * @param paymentDto 入参 + * @return 结果 + */ + R savePayment(PaymentDto paymentDto); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/AdmissionAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/AdmissionAppServiceImpl.java new file mode 100644 index 00000000..06559b2c --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/AdmissionAppServiceImpl.java @@ -0,0 +1,273 @@ +package com.openhis.web.inpatientmanage.appservice.impl; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import com.openhis.web.nursestation.mapper.NurseStationPendAdmAppMapper; +import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.RequestParam; + +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.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.openhis.administration.domain.Account; +import com.openhis.administration.domain.Encounter; +import com.openhis.administration.domain.EncounterLocation; +import com.openhis.administration.service.IAccountService; +import com.openhis.administration.service.IEncounterLocationService; +import com.openhis.administration.service.IEncounterService; +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.inpatientmanage.appservice.IAdmissionAppService; +import com.openhis.web.inpatientmanage.dto.AdmissionDto; +import com.openhis.web.inpatientmanage.dto.AdmissionInitPageDto; +import com.openhis.web.inpatientmanage.dto.AdmissionSearchParam; +import com.openhis.web.inpatientmanage.dto.AdmissionUpDto; +import com.openhis.web.inpatientmanage.mapper.AdmissionMapper; +import com.openhis.web.patientmanage.appservice.IPatientInformationService; +import com.openhis.web.patientmanage.dto.PatientInformationDto; + +/** + * 住院管理 实现类 + * + * @author liuhr + * @since 2025/04/07 + */ +@Service +public class AdmissionAppServiceImpl implements IAdmissionAppService { + + @Resource + private AdmissionMapper admissionMapper; + + @Resource + private IPatientInformationService patientInformationService; + + @Resource + private IEncounterService encounterService; + + @Resource + private IEncounterLocationService encounterLocationService; + + @Resource + private IAccountService accountService; + + @Resource + private NurseStationPendAdmAppMapper nurseStationPendAdmAppMapper; + + /** + * 病获取住院信息初期数据列表 + * + * @return 住院信息初期数据列表 + */ + @Override + public R getAdmissionInfoInit() { + + AdmissionInitPageDto initDto = new AdmissionInitPageDto(); + // 入院类型列表 + List statusEnumOptions1 = Stream.of(AdmissionType.values()) + .map(status -> new AdmissionInitPageDto.statusEnumOption(status.getValue(), status.getInfo())) + .collect(Collectors.toList()); + initDto.setAdmissionTypeList(statusEnumOptions1); + + // 入院方式列表 + List statusEnumOptions2 = Stream.of(AdmissionMethod.values()) + .map(status -> new AdmissionInitPageDto.statusEnumOption(status.getValue(), status.getInfo())) + .collect(Collectors.toList()); + initDto.setAdmissionMethodList(statusEnumOptions2); + + // 优先级编码列表:患者病情下拉选 + List statusEnumOptions3 = Stream.of(PriorityLevel.values()) + .map(status -> new AdmissionInitPageDto.statusEnumOption(status.getValue(), status.getInfo())) + .collect(Collectors.toList()); + initDto.setPriorityEnumList(statusEnumOptions3); + + return R.ok(initDto); + + } + + /** + * 获取住院信息 分页显示 + * + * @param admissionSearchParam 查询参数 + * @param searchKey 模糊查询 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 住院信息 + */ + @Override + public R getAdmissionInfoPage(AdmissionSearchParam admissionSearchParam, String searchKey, Integer pageNo, + Integer pageSize, HttpServletRequest request) { + + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(admissionSearchParam, searchKey, + new HashSet<>(Arrays.asList(CommonConstants.FieldName.Name, CommonConstants.FieldName.PyStr, + CommonConstants.FieldName.WbStr)), + request); + + // 分页查询,查询住院 + IPage admissionInfoPage = admissionMapper.getPage(new Page<>(pageNo, pageSize), + EncounterClass.IMP.getValue(), LocationForm.WARD.getValue(), queryWrapper); + + admissionInfoPage.getRecords().forEach(e -> { + // 性别枚举类回显赋值 + e.setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, e.getGenderEnum())); + // 计算年龄 + e.setAgeString(AgeCalculatorUtil.getAge(e.getBirthDate())); + + }); + + // 返回【住院信息列表DTO】分页 + return R.ok(admissionInfoPage); + } + + /** + * 住院无档登记 + * + * @param admissionUpDto 住院登记信息 + */ + @Override + public R addAdmissionInfo(AdmissionUpDto admissionUpDto) { + + // 1.添加病人信息 + PatientInformationDto patientInformationDto = convertToPatientInformationDto(admissionUpDto); + + R addPatientResult = patientInformationService.addPatient(patientInformationDto); + // 检查返回值的状态码 + boolean insertPatientSuccess = (addPatientResult.getCode() == 200); + + // 2.添加就诊信息,3.添加就诊账户,4.添加就诊病区 + admissionUpDto.setYbClassEnum(EncounterYbClass.ORDINARY_HOSPITALIZATION.getValue()); + boolean encounterLocationAndAccountSuccess = handleEncounterLocationAccount(admissionUpDto); + + if (insertPatientSuccess && encounterLocationAndAccountSuccess) { + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00001, new Object[] {"住院无档登记"})); + } else { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00003, null)); + } + + } + + /** + * 登记 + * + * @param admissionUpDto 住院登记信息 + */ + @Override + public R editAdmissionInfo(AdmissionUpDto admissionUpDto) { + + // 1.修改病人信息 + PatientInformationDto patientInformationDto = convertToPatientInformationDto(admissionUpDto); + + R editPatientResult = patientInformationService.editPatient(patientInformationDto); + // 检查返回值的状态码 + boolean updatePatientSuccess = (editPatientResult.getCode() == 200); + + // 2.修改就诊信息,3.添加就诊账户,4.添加就诊病区 + boolean encounterLocationAndAccountSuccess = handleEncounterLocationAccount(admissionUpDto); + + if (updatePatientSuccess && encounterLocationAndAccountSuccess) { + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"住院登记"})); + } else { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + } + + /** + * 住院登记,添加就诊账户和就诊病区 + * + * @param admissionUpDto 住院登记信息 + * @return 住院登记详细查询结果 + */ + public boolean handleEncounterLocationAccount(AdmissionUpDto admissionUpDto) { + + // 2.修改或者插入就诊信息 + Encounter encounter = new Encounter(); + encounter.setId(admissionUpDto.getId()).setPatientId(admissionUpDto.getPatientId()) + .setStatusEnum(EncounterStatus.IN_PROGRESS.getValue()).setOrganizationId(admissionUpDto.getOrganizationId()) + .setAdmitSourceCode(admissionUpDto.getAdmitSourceCode()).setInWayCode(admissionUpDto.getInWayCode()) + .setStartTime(admissionUpDto.getStartTime()).setClassEnum(EncounterClass.IMP.getValue()) + .setPriorityEnum(admissionUpDto.getPriorityEnum()).setYbClassEnum(admissionUpDto.getYbClassEnum()) + .setSubjectStatusEnum(EncounterSubjectStatus.PLANNED.getValue()); + + boolean encounterSuccess = encounterService.saveOrUpdateEncounter(encounter); + + // 3.添加就诊账户account + Account account = new Account(); + account.setName(admissionUpDto.getName()).setPatientId(admissionUpDto.getPatientId()) + .setEncounterId(admissionUpDto.getId()) + //账户状态是有效的 + .setStatusEnum(AccountStatus.ACTIVE.getValue()) + //结账状态是可用的 + .setBillingStatusEnum(AccountBillingStatus.OPEN.getValue()); + boolean updateAccountSuccess = accountService.saveOrUpdateAccount(account); + + // 4.添加就诊病区location + EncounterLocation encounterLocation = new EncounterLocation(); + encounterLocation.setLocationId(admissionUpDto.getWardLocationId()).setEncounterId(admissionUpDto.getId()) + .setFormEnum(LocationForm.WARD.getValue()).setStartTime(admissionUpDto.getStartTime()) + .setStatusEnum(EncounterLocationStatus.ACTIVE.getValue()); + boolean encounterLocationSuccess = encounterLocationService.saveOrUpdateEncounterLocation(encounterLocation); + + return encounterSuccess && updateAccountSuccess && encounterLocationSuccess; + } + + /** + * 住院登记详细查询 + * + * @param id 就诊ID + * @return 住院登记详细查询结果 + */ + @Override + public R getAdmissionOne(@RequestParam Long id) { + + // 获取租户ID + Integer tenantId = SecurityUtils.getLoginUser().getTenantId(); + // 根据ID查询 住院登记详细 + AdmissionUpDto admissionUpDto = admissionMapper.getAdmissionOne(EncounterClass.IMP.getValue(), + EncounterStatus.DISCHARGED.getValue(), LocationForm.BED.getValue(), LocationForm.WARD.getValue(), + ParticipantType.ADMITTER.getCode(), LocationBedStatus.O.getValue(), id, tenantId); + + //查询患者病情站诊断 + List descriptionList = nurseStationPendAdmAppMapper.getDescriptionList(id); + // 诊断病情拼接 + if (descriptionList != null && !descriptionList.isEmpty()) { + admissionUpDto.setDescriptions(String.join(CommonConstants.Common.COMMA, descriptionList)); + } + + return R.ok(admissionUpDto); + } + + /** + * 将 AdmissionUpDto 的字段值手动设置到 PatientInformationDto 中 + * + * @param admissionUpDto 源对象 + * @return 目标对象 + */ + public PatientInformationDto convertToPatientInformationDto(AdmissionUpDto admissionUpDto) { + return new PatientInformationDto().setId(admissionUpDto.getPatientId()).setName(admissionUpDto.getName()) + .setGenderEnum(admissionUpDto.getGenderEnum()).setBirthDate(admissionUpDto.getBirthDate()) + .setMaritalStatusEnum(admissionUpDto.getMaritalStatusEnum()).setPrfsEnum(admissionUpDto.getPrfsEnum()) + .setPhone(admissionUpDto.getPhone()).setAddress(admissionUpDto.getAddress()) + .setNationalityCode(admissionUpDto.getNationalityCode()).setIdCard(admissionUpDto.getIdCard()) + .setPyStr(admissionUpDto.getPyStr()).setWbStr(admissionUpDto.getWbStr()) + .setWorkCompany(admissionUpDto.getWorkCompany()).setNativePlace(admissionUpDto.getNativePlace()) + .setCountryCode(admissionUpDto.getCountryCode()).setLinkName(admissionUpDto.getLinkName()) + .setLinkRelationCode(admissionUpDto.getLinkRelationCode()).setLinkTelcom(admissionUpDto.getLinkTelcom()) + .setOrganizationId(admissionUpDto.getOrganizationId()); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/DepositAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/DepositAppServiceImpl.java new file mode 100644 index 00000000..95b4bf09 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/appservice/impl/DepositAppServiceImpl.java @@ -0,0 +1,262 @@ +package com.openhis.web.inpatientmanage.appservice.impl; + +import java.util.*; + +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.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.core.common.core.domain.R; +import com.core.common.core.redis.RedisCache; +import com.core.common.exception.ServiceException; +import com.core.common.utils.AgeCalculatorUtil; +import com.core.common.utils.AssignSeqUtil; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.openhis.administration.domain.Account; +import com.openhis.administration.domain.Encounter; +import com.openhis.administration.domain.Invoice; +import com.openhis.administration.service.IAccountService; +import com.openhis.administration.service.IEncounterService; +import com.openhis.administration.service.IInvoiceService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.*; +import com.openhis.common.enums.ybenums.YbPayment; +import com.openhis.common.utils.EnumUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.financial.domain.PaymentRecDetail; +import com.openhis.financial.domain.PaymentReconciliation; +import com.openhis.financial.service.IPaymentRecDetailService; +import com.openhis.financial.service.IPaymentReconciliationService; +import com.openhis.web.inpatientmanage.appservice.IDepositAppService; +import com.openhis.web.inpatientmanage.dto.DepositDetailDto; +import com.openhis.web.inpatientmanage.dto.DepositInitPageDto; +import com.openhis.web.inpatientmanage.dto.DepositSearchParam; +import com.openhis.web.inpatientmanage.mapper.DepositMapper; +import com.openhis.web.paymentmanage.dto.PaymentDetailDto; +import com.openhis.web.paymentmanage.dto.PaymentDto; + +/** + * 预交金管理 实现类 + * + * @author gyy + * @since 2025/05/19 + */ +@Service +public class DepositAppServiceImpl implements IDepositAppService { + + @Resource + private DepositMapper depositMapper; + + @Resource + private IEncounterService iEncounterService; + + @Resource + private AssignSeqUtil assignSeqUtil; + + @Resource + private RedisCache redisCache; + + @Resource + private IPaymentReconciliationService paymentReconciliationService; + + @Resource + private IInvoiceService iInvoiceService; + + @Resource + private IPaymentRecDetailService paymentRecDetailService; + + @Resource + private IAccountService iAccountService; + + /** + * 获取预交金信息初期数据(病人信息)列表 + * + * @return 预交金信息初期数据列表 + */ + @Override + public R getDepositInfoInit() { + DepositInitPageDto initDto = new DepositInitPageDto(); + return R.ok(initDto); + } + + /** + * 获取预交金信息 分页显示 + * + * @param depositSearchParam 查询参数 + * @param searchKey 模糊查询 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 患者预交金信息 + */ + @Override + public R getDepositInfoPage(DepositSearchParam depositSearchParam, String searchKey, Integer pageNo, + Integer pageSize, HttpServletRequest request) { + + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(depositSearchParam, searchKey, + new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientId)), request); + + // 分页查询,查询患者预交金 + IPage depositInfoPage = depositMapper.getPage(new Page<>(pageNo, pageSize), + EncounterClass.IMP.getValue(), LocationForm.BED.getValue(), queryWrapper); + + depositInfoPage.getRecords().forEach(e -> { + // 性别枚举类回显赋值 + e.setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, e.getGenderEnum())); + // 计算年龄 + e.setAgeString(AgeCalculatorUtil.getAge(e.getBirthDate())); + // 支付状态 + e.setPaymentEnum_enumText(EnumUtils.getInfoByValue(PaymentStatus.class, e.getPaymentEnum())); + // 票据状态 + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(ChargeItemStatus.class, e.getStatusEnum())); + }); + + // 返回【患者预交金信息列表DTO】分页 + return R.ok(depositInfoPage); + } + + /** + * 付款 + * + * @param paymentDto 入参 + * @return 结果 + */ + @Override + public R savePayment(PaymentDto paymentDto) { + // 收款员id + Long enterId = SecurityUtils.getLoginUser().getPractitionerId(); + + // 查询就诊信息(获取就诊ID) + Encounter encounter = iEncounterService + .getOne(new LambdaQueryWrapper().eq(Encounter::getId, paymentDto.getEncounterId())); + + // 就诊账户管理只取回来一条数据? + //List accountList = iAccountService.list(new LambdaQueryWrapper() + // .in(Account::getId, paymentDto.getPatientId()).eq(Account::getEncounterId, paymentDto.getEncounterId())); + Account account = new Account(); + Long accountId = null; + boolean updateAccountSuccess = true; + //if (accountList.size() != 0) { + // account.setBalanceAmount(accountList.get(0).getBalanceAmount().add(paymentDto.getDisplayAmount())) + // .setPatientId(paymentDto.getPatientId()).setEncounterId(encounter.getId()); + // // 更新就诊账户管理 + // updateAccountSuccess = iAccountService.saveOrUpdateAccount(account); + // 账户ID + // accountId = accountList.get(0).getId(); + //} else { + // // 插入就诊账户管理 + // account.setTypeCode(AccountType.PERSONAL_CASH_ACCOUNT.getInfo()).setPatientId(paymentDto.getPatientId()) + // .setEncounterId(encounter.getId()).setBalanceAmount(paymentDto.getDisplayAmount()); + // // 账户ID + // accountId = iAccountService.saveAccountByRegister(account); + //} + + // 结算 + // 统一生成业务流水 + String paymentNo = assignSeqUtil.getSeqByDay(AssignSeqEnum.PAYMENT_NO.getPrefix(), 20); + + // 获取预结算时的收费批次号 + String chrgBchno = redisCache.getCacheObject("PRE-SETTLE:PRE_SETTLE_" + paymentDto.getId()); + if (chrgBchno == null) { + throw new ServiceException("请重新进行预交费"); + } + // 处理时间 + Date setlTime = new Date(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(setlTime); + calendar.add(Calendar.HOUR_OF_DAY, 24); + Date futureTime = calendar.getTime(); + + // 新增支付信息 + PaymentReconciliation payment = new PaymentReconciliation(); + payment.setStatusEnum(PaymentStatus.SUCCESS.getValue()).setPaymentNo(paymentNo) + .setPaymentEnum(PaymentType.PAY.getValue()).setPaymentReconciliationId(encounter.getPatientId()) + .setKindEnum(PaymentKind.HOSPITAL_DEPOSIT.getValue()).setEntererId(enterId) + .setPatientId(encounter.getPatientId()).setPractitionerId(enterId) + .setOutcomeEnum(PaymentOutcome.PARTIAL.getCode()).setLocationId(-99l).setExpirationDate(futureTime) + //.setBillDate(setlTime).setPrintCount(0).setTenderedAmount(paymentDto.getTenderedAmount()) + .setEncounterId(encounter.getId()); + // 保存付款信息 + paymentReconciliationService.save(payment); + // 保存付款详情 + this.savePaymentDetail(accountId, payment, paymentDto.getPaymentDetails()); + // 生成发票信息 + Invoice invoice = new Invoice(); + invoice.setPatientId(encounter.getPatientId()).setStatusEnum(InvoiceStatus.DRAFT) + .setReconciliationId(payment.getId()).setStatusEnum(InvoiceStatus.ISSUED)// 待结算 + .setTypeCode(InvoiceType.ISSUING_INVOICES.getValue()); + iInvoiceService.save(invoice); + + if (updateAccountSuccess) { + return R.ok(payment, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[] {"预收金"})); + } else { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + + /** + * 保存付款详情 + * + * @param payment 付款实体 + * @param paymentDetails 付款详情 + */ + private void savePaymentDetail(long accountId, PaymentReconciliation payment, + List paymentDetails) { + // 保存付款详情 + List paymentRecDetails = new ArrayList<>(); + PaymentRecDetail paymentRecDetail; + // 处理时间 + Date setlTime = new Date(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(setlTime); + calendar.add(Calendar.HOUR_OF_DAY, 24); + Date futureTime = calendar.getTime(); + + for (PaymentDetailDto paymentDetail : paymentDetails) { + paymentRecDetail = new PaymentRecDetail(); + if (YbPayment.SELF_CASH_VX_VALUE.getValue().equals(paymentDetail.getPayEnum())) { + paymentRecDetail = new PaymentRecDetail(); + paymentRecDetail.setReconciliationId(payment.getId()) + .setPayEnum(YbPayment.SELF_CASH_VX_VALUE.getValue()) + .setPayLevelEnum(YbPayment.SELF_CASH_VX_VALUE.getLevel()).setAmount(paymentDetail.getAmount()) + .setResultEnum(PaymentResult.PAID.getValue()).setPayTransDate(futureTime).setAccountId(accountId) + .setAfterBalance(paymentDetail.getAmount()); + paymentRecDetails.add(paymentRecDetail); + } + if (YbPayment.SELF_CASH_ALI_VALUE.getValue().equals(paymentDetail.getPayEnum())) { + paymentRecDetail = new PaymentRecDetail(); + paymentRecDetail.setReconciliationId(payment.getId()) + .setPayEnum(YbPayment.SELF_CASH_ALI_VALUE.getValue()) + .setPayLevelEnum(YbPayment.SELF_CASH_ALI_VALUE.getLevel()).setAmount(paymentDetail.getAmount()) + .setResultEnum(PaymentResult.PAID.getValue()).setPayTransDate(futureTime).setAccountId(accountId) + .setAfterBalance(paymentDetail.getAmount()); + paymentRecDetails.add(paymentRecDetail); + } + if (YbPayment.SELF_CASH_UNION_VALUE.getValue().equals(paymentDetail.getPayEnum())) { + paymentRecDetail = new PaymentRecDetail(); + paymentRecDetail.setReconciliationId(payment.getId()) + .setPayEnum(YbPayment.SELF_CASH_UNION_VALUE.getValue()) + .setPayLevelEnum(YbPayment.SELF_CASH_UNION_VALUE.getLevel()).setAmount(paymentDetail.getAmount()) + .setResultEnum(PaymentResult.PAID.getValue()).setPayTransDate(futureTime).setAccountId(accountId) + .setAfterBalance(paymentDetail.getAmount()); + paymentRecDetails.add(paymentRecDetail); + } + if (YbPayment.SELF_CASH_VALUE.getValue().equals(paymentDetail.getPayEnum())) { + paymentRecDetail = new PaymentRecDetail(); + paymentRecDetail.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_CASH_VALUE.getValue()) + .setPayLevelEnum(YbPayment.SELF_CASH_VALUE.getLevel()).setAmount(paymentDetail.getAmount()) + .setResultEnum(PaymentResult.PAID.getValue()).setPayTransDate(futureTime).setAccountId(accountId) + .setAfterBalance(paymentDetail.getAmount()); + paymentRecDetails.add(paymentRecDetail); + } + } + paymentRecDetailService.saveBatch(paymentRecDetails); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/controller/DepositController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/controller/DepositController.java new file mode 100644 index 00000000..91fd9216 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/controller/DepositController.java @@ -0,0 +1,69 @@ +package com.openhis.web.inpatientmanage.controller; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import com.openhis.web.paymentmanage.dto.PaymentDto; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import com.core.common.core.domain.R; +import com.openhis.web.inpatientmanage.appservice.IDepositAppService; +import com.openhis.web.inpatientmanage.dto.DepositSearchParam; + +import lombok.extern.slf4j.Slf4j; + +/** + * 预交金管理 controller + * + * @author gyy + * @date 2025-05-19 + */ +@RestController +@RequestMapping("/deposit-manage") +@Slf4j +public class DepositController { + + @Resource + private IDepositAppService depositAppService; + + /** + * 获取预交金信息初期数据列表 + * + * @return 预交金初期数据列表 + */ + @GetMapping("/init") + public R getDepositInfoInit() { + return depositAppService.getDepositInfoInit(); + + } + + /** + * 获取预交金信息 分页显示 + * + * @param depositSearchParam 查询参数 + * @param searchKey 模糊查询 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 住院信息 + */ + @GetMapping("/deposit-page") + R getDepositInfoPage(DepositSearchParam depositSearchParam, + @RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { + + return depositAppService.getDepositInfoPage(depositSearchParam, searchKey, pageNo, pageSize, request); + + } + + /** + * 付款 + * + * @param paymentDto 付款实体 + */ + @PostMapping("/charge") + public R savePayment(@Validated @RequestBody PaymentDto paymentDto) { + return depositAppService.savePayment(paymentDto); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/AdmissionSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/AdmissionSearchParam.java new file mode 100644 index 00000000..f5c11dd5 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/AdmissionSearchParam.java @@ -0,0 +1,17 @@ +package com.openhis.web.inpatientmanage.dto; + +import lombok.Data; + +/** + * 住院登记查询参数 + * + * @author liuhr + * @since 2025/04/08 + */ +@Data +public class AdmissionSearchParam { + + /** 状态编码 */ + private Integer statusEnum; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/AdmissionUpDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/AdmissionUpDto.java new file mode 100644 index 00000000..cb0f036b --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/AdmissionUpDto.java @@ -0,0 +1,179 @@ +package com.openhis.web.inpatientmanage.dto; + +import java.util.Date; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; + +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 liuhr + * @since 2025/04/07 + */ +@Data +@Accessors(chain = true) +public class AdmissionUpDto { + + /** ID */ + @JsonSerialize(using = ToStringSerializer.class) + @NotNull(message = "就诊ID不能为空") + private Long id; + + /** 患者ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long patientId; + + /** 群组ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long groupId; + + /** 就诊编码 */ + private String encounterBusNo; + + /** 状态编码 */ + private Integer statusEnum; + private String statusEnum_enumText; + + /** 类别编码 */ + private Integer classEnum; + + /** 类别医保编码 */ + private Integer ybClassEnum; + private String ybClassEnum_enumText; + + /** 优先级编码 */ + private Integer priorityEnum; + private String priorityEnum_enumText; + + /** 分类编码 */ + private Integer typeEnum; + + /** 服务ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long serviceTypeId; + + /** 就诊对象状态 */ + private Integer subjectStatusEnum; + + /** 开始时间 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date startTime; + + /** 结束时间 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date endTime; + + /** 机构id(科室) */ + @JsonSerialize(using = ToStringSerializer.class) + @Dict(dictTable = "adm_organization", dictCode = "id", dictText = "name") + private Long organizationId; + private String organizationId_dictText; + + /** 入院类型 */ + @Dict(dictCode = "admit_source_code") + private String admitSourceCode; + private String admitSourceCode_dictText; + + /** 入院方式 */ + @Dict(dictCode = "in_way_code") + private String inWayCode; + private String inWayCode_dictText; + + /** 住院次数 */ + private Integer hospitalizationCount; + + /** 患者姓名 */ + private String name; + + /** 患者院内编码/病历号 */ + private String patientBusNo; + + /** 性别编码 */ + private Integer genderEnum; + private String genderEnum_enumText; + + /** 生日 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date birthDate; + + /** 婚姻状态 */ + private Integer maritalStatusEnum; + private String maritalStatusEnum_enumText; + + /** 职业编码 */ + private Integer prfsEnum; + private String prfsEnum_enumText; + + /** 电话 */ + @Size(min = 11, max = 11, message = "电话长度必须为11位") + @Pattern(regexp = "^1[3-9]\\d{9}$", message = "电话格式不正确") + private String phone; + + /** 地址 */ + private String address; + + /** 民族 */ + private String nationalityCode; + + /** 身份证号 */ + @NotBlank(message = "身份证号不能为空") + @Size(min = 18, max = 18, message = "身份证号必须是18位") + @Pattern(regexp = "^[0-9Xx]{18}$", message = "身份证号格式不正确") + private String idCard; + + /** 拼音码 */ + private String pyStr; + + /** 五笔码 */ + private String wbStr; + + /** 工作单位 */ + private String workCompany; + + /** 籍贯 */ + private String nativePlace; + + /** 国家编码 */ + private String countryCode; + + /** 联系人 */ + private String linkName; + + /** 联系人关系 */ + private Integer linkRelationCode; + + /** 联系人电话 */ + @Size(min = 11, max = 11, message = "电话长度必须为11位") + @Pattern(regexp = "^1[3-9]\\d{9}$", message = "电话格式不正确") + private String linkTelcom; + + /** 病人年龄 */ + private String ageString; + + /** 门诊诊断 */ + private String descriptions; + + /** 接诊医生 */ + private String doctorName; + + /** 入院病区 */ + @JsonSerialize(using = ToStringSerializer.class) + @Dict(dictTable = "adm_location", dictCode = "id", dictText = "name") + private Long wardLocationId; + private String wardLocationId_dictText; + + /** 床位数 */ + private String bedCount; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/DepositDetailDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/DepositDetailDto.java new file mode 100644 index 00000000..ba1eb600 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/DepositDetailDto.java @@ -0,0 +1,98 @@ +package com.openhis.web.inpatientmanage.dto; + +import java.math.BigDecimal; +import java.util.Date; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; + +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 gaoyy + * @since 2025/05/20 + */ +@Data +@Accessors(chain = true) +public class DepositDetailDto { + + /** 患者ID(住院号) */ + @JsonSerialize(using = ToStringSerializer.class) + @NotNull(message = "住院号不能为空") + private Long patientId; + + /** 患者姓名 */ + private String name; + + /** 性别编码 */ + private Integer genderEnum; + private String genderEnum_enumText; + + /** 生日 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date birthDate; + + /** 病人年龄 */ + private String ageString; + + /** 床位号 */ + @JsonSerialize(using = ToStringSerializer.class) + @Dict(dictTable = "adm_location", dictCode = "id", dictText = "name") + private Long bedLocationId; + private String bedLocationId_dictText; + + /** 机构id(科室) */ + @JsonSerialize(using = ToStringSerializer.class) + @Dict(dictTable = "adm_organization", dictCode = "id", dictText = "name") + private Long organizationId; + private String organizationId_dictText; + + /** 总额 */ + private BigDecimal totalPrice; + + /** 预交金 */ + private BigDecimal deposit; + + /** 余额 */ + private BigDecimal balanceAmount; + + /** 支付方式 */ + private String payWay; + + /** 支付状态 */ + private Integer paymentEnum; + private String paymentEnum_enumText; + + /** 支付金额 */ + private BigDecimal tenderedAmount; + + /** 收据号 */ + private String busNo; + + /** 票据状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + + /** 可退金额 */ + private BigDecimal afterBalance; + + /** 收款时间 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date payTime; + + /** 收款人 */ + @JsonSerialize(using = ToStringSerializer.class) + @Dict(dictCode = "id", dictTable = "adm_practitioner", dictText = "name") + private Long entererId; + private String entererId_dictText; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/DepositInitPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/DepositInitPageDto.java new file mode 100644 index 00000000..48e7f003 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/DepositInitPageDto.java @@ -0,0 +1,21 @@ +package com.openhis.web.inpatientmanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 预交金管理初始化页面信息 + * + * @author gaoyy + * @since 2025/05/19 + */ +@Data +@Accessors(chain = true) +public class DepositInitPageDto { + + /** + * 住院号 + */ + private String admissionNo; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/DepositSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/DepositSearchParam.java new file mode 100644 index 00000000..64fb7b6b --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/dto/DepositSearchParam.java @@ -0,0 +1,20 @@ +package com.openhis.web.inpatientmanage.dto; + +import lombok.Data; + +/** + * 预交金管理查询参数 + * + * @author gaoyy + * @since 2025/05/19 + */ +@Data +public class DepositSearchParam { + + /** 住院号 */ + private String admissionNo; + + /** 在院病区 */ + private Long wardForm; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/mapper/AdmissionMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/mapper/AdmissionMapper.java new file mode 100644 index 00000000..bf63780b --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/mapper/AdmissionMapper.java @@ -0,0 +1,50 @@ +package com.openhis.web.inpatientmanage.mapper; + +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +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.inpatientmanage.dto.AdmissionDto; +import com.openhis.web.inpatientmanage.dto.AdmissionUpDto; + +/** + * 住院登记 + * + * @author liuhr + * @since 2025/04/08 + */ +@Repository +public interface AdmissionMapper { + + /** + * 住院登记信息分页查询 + * + * @param page 分页 + * @param classEnum 类别编码(1:住院类型) + * @param formEnum 类别编码(1:住院类型) + * @param queryWrapper 查询条件 + * @return 住院登记信息 + */ + IPage getPage(@Param("page") Page page, @Param("classEnum") Integer classEnum, + @Param("formEnum") Integer formEnum, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + /** + * 住院登记详情 + * + * @param classEnum 类别编码(1:住院类型) + * @param statusEnum 状态编码(4:出院状态) + * @param bedForm 床:8 + * @param wardForm 病区:4 + * @param operational 床位状态(4:占用) + * @param typeCode 就诊参与者身份类型 (1:接诊医生) + * @param id 就诊ID + * @param tenantId 租户 + * @return 住院登记详情 + */ + AdmissionUpDto getAdmissionOne(@Param("classEnum") Integer classEnum, @Param("statusEnum") Integer statusEnum, + @Param("bedForm") Integer bedForm, @Param("wardForm") Integer wardForm, @Param("typeCode") String typeCode, + @Param("operational") Integer operational, @Param("id") Long id, @Param("tenantId") Integer tenantId); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/mapper/DepositMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/mapper/DepositMapper.java new file mode 100644 index 00000000..9dd97ff9 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inpatientmanage/mapper/DepositMapper.java @@ -0,0 +1,32 @@ +package com.openhis.web.inpatientmanage.mapper; + +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +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.inpatientmanage.dto.DepositDetailDto; + +/** + * 预交金管理 + * + * @author gaoyy + * @since 2025/05/20 + */ +@Repository +public interface DepositMapper { + + /** + * 预交金信息分页查询 + * + * @param page 分页 + * @param classEnum 类别编码(住院) + * @param formEnum 类别编码(床) + * @param queryWrapper 查询条件 + * @return 预交金信息 + */ + IPage getPage(@Param("page") Page page, @Param("classEnum") Integer classEnum, + @Param("formEnum") Integer formEnum, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/ILossReportFormAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/ILossReportFormAppService.java new file mode 100644 index 00000000..8644b0a7 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/ILossReportFormAppService.java @@ -0,0 +1,89 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.appservice; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.inventorymanage.dto.LossReportFormDto; +import com.openhis.web.inventorymanage.dto.LossReportSearchParam; + +import java.util.List; + +/** + * 报损单 appService + * + * @author gyy + * @date 2025-04-07 + */ +public interface ILossReportFormAppService { + + /** + * 报损单单据列表 + * + * @param lossReportSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 商品调拨单据分页列表 + */ + R getPage(LossReportSearchParam lossReportSearchParam, Integer pageNo, Integer pageSize, String searchKey, + HttpServletRequest request); + + /** + * 报损单页面初始化 + * + * @return 初始化信息 + */ + R lossReportFormInit(); + + /** + * 单据号初始化 + * + * @return 初始化信息 + */ + R lossReportNoInit(); + + /** + * 报损单据详情 + * + * @param busNo 单据号 + * @return 报损详情 + */ + R getDetail(String busNo); + + /** + * 添加/编辑报损单据(批量) + * + * @param lossReportFormDtoList 报损单据 + * @return 操作结果 + */ + R addOrEditLossReceipt(List lossReportFormDtoList); + + /** + * 删除单据 + * + * @param supplyRequestIds 供应请求id + * @return 操作结果 + */ + R deleteReceipt(List supplyRequestIds); + + /** + * 提交审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + R submitApproval(String busNo); + + /** + * 撤回审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + R withdrawApproval(String busNo); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IProductDetailsAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IProductDetailsAppService.java new file mode 100644 index 00000000..830ac87d --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IProductDetailsAppService.java @@ -0,0 +1,52 @@ +package com.openhis.web.inventorymanage.appservice; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.inventorymanage.dto.ProductDetailsSearchParam; + +/** + * 库存商品明细 appService + * + * @author yuanzs + * @date 2025-04-24 + */ +public interface IProductDetailsAppService { + + /** + * 库存商品明细初始化 + * + * @return 下拉列表值 + */ + R getInit(); + + /** + * 查询库存商品明细分页列表 + * + * @param productDetailsSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 库存商品明细分页列表 + */ + R getPage(ProductDetailsSearchParam productDetailsSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request); + + /** + * 操作:停供 + * + * @param id 库存项目管理ID + * @return 操作结果 + */ + R stopSupplyById(Long id); + + /** + * 操作:取消停供 + * + * @param id 库存项目管理ID + * @return 操作结果 + */ + R cancelSupplyById(Long id); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IPurchaseReturnAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IPurchaseReturnAppService.java new file mode 100644 index 00000000..34f95147 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IPurchaseReturnAppService.java @@ -0,0 +1,82 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.appservice; + +import com.core.common.core.domain.R; +import com.openhis.web.inventorymanage.dto.PurchaseReturnDetailDto; +import com.openhis.web.inventorymanage.dto.PurchaseReturnSearchParam; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * 采购退货 appService + * + * @author yuanzs + * @date 2025-04-02 + */ +public interface IPurchaseReturnAppService { + + /** + * 采购退货页面初始化 + * + * @return 初始化信息 + */ + R purchaseReturnInit(); + + /** + * 单据号初始化 + * + * @return 初始化信息 + */ + R purchaseNoInit(); + + /** + * 根据单据号查询退货单据详情 + * + * @param busNo 单据号 + * @return 退货单 + */ + R getDetail(String busNo); + + /** + * 根据单据号查询已生成的退货单 + * + * @param busNo 单据号 + * @return 退货单 + */ + R getGeneratedPage(String busNo); + + /** + * 生成退货单(批量) + * + * @param purchaseReturnDetailDtoList 退货单据号列表 + * @return 操作结果 + */ + R returnGenerateBusNo(List purchaseReturnDetailDtoList); + + /** + * 删除退回退货单 + * + * @param supplyRequestIds 供应请求id + * @return 操作结果 + */ + R returnDeleteBusNo(List supplyRequestIds); + + /** + * 提交审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + R submitApproval(String busNo); + + /** + * 驳回审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + R withdrawApproval(String busNo); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IRequisitionIssueAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IRequisitionIssueAppService.java new file mode 100644 index 00000000..8b1a66fa --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IRequisitionIssueAppService.java @@ -0,0 +1,90 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.appservice; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.inventorymanage.dto.IssueDto; +import com.openhis.web.inventorymanage.dto.IssueSearchParam; +import com.openhis.web.inventorymanage.dto.SupplySearchParam; + +import java.util.List; + +/** + * 领用出库 appService + * + * @author CY + * @date 2025-04-03 + */ +public interface IRequisitionIssueAppService { + + /** + * 领用出库单据页面初始化 + * + * @return 初始化信息 + */ + R issueInventoryInit(); + + /** + * 单据号初始化 + * + * @return 初始化信息 + */ + R requisitionIssueNoInit(); + + /** + * 领用出库单据列表 + * + * @param issueSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 入库单据分页列表 + */ + R getPage(IssueSearchParam issueSearchParam, Integer pageNo, Integer pageSize, String searchKey, + HttpServletRequest request); + + /** + * 领用出库单据详情 + * + * @param busNo 单据号 + * @return 领用出库据详情 + */ + R getDetail(String busNo); + + /** + * 添加/编辑入库单据(批量) + * + * @param requisitionIssueDtoList 入库单据 + * @return 操作结果 + */ + R addOrEditIssueReceipt(List requisitionIssueDtoList); + + /** + * 删除单据 + * + * @param supplyRequestIds 供应请求id + * @return 操作结果 + */ + R deleteReceipt(List supplyRequestIds); + + /** + * 提交审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + R submitApproval(String busNo); + + /** + * 撤回审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + R withdrawApproval(String busNo); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IReturnIssueAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IReturnIssueAppService.java new file mode 100644 index 00000000..5eb8c286 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IReturnIssueAppService.java @@ -0,0 +1,88 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.appservice; + +import com.core.common.core.domain.R; +import com.openhis.web.inventorymanage.dto.IssueDto; +import com.openhis.web.inventorymanage.dto.IssueSearchParam; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * 退货出库 appService + * + * @author CY + * @date 2025-04-08 + */ +public interface IReturnIssueAppService { + + /** + * 出库退货单据页面初始化 + * + * @return 初始化信息 + */ + R returnIssueInit(); + + /** + * 单据号初始化 + * + * @return 初始化信息 + */ + R returnIssueNoInit(); + + /** + * 退货出库单据列表 + * + * @param issueSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 退货出库单据分页列表 + */ + R getPage(IssueSearchParam issueSearchParam, Integer pageNo, Integer pageSize, String searchKey, + HttpServletRequest request); + + /** + * 退货出库单据详情 + * + * @param busNo 单据号 + * @return 出库退货据详情 + */ + R getDetail(String busNo); + + /** + * 添加/编辑退货出库单据(批量) + * + * @param returnIssueDtoList 退货出库单据 + * @return 操作结果 + */ + R addOrEditIssueReceipt(List returnIssueDtoList); + + /** + * 删除单据 + * + * @param supplyRequestIds 供应请求id + * @return 操作结果 + */ + R deleteReceipt(List supplyRequestIds); + + /** + * 提交审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + R submitApproval(String busNo); + + /** + * 撤回审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + R withdrawApproval(String busNo); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/LossReportFormAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/LossReportFormAppServiceImpl.java new file mode 100644 index 00000000..b56a674a --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/LossReportFormAppServiceImpl.java @@ -0,0 +1,323 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.appservice.impl; + +import java.util.*; +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.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.AssignSeqUtil; +import com.core.common.utils.DateUtils; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.core.common.utils.bean.BeanUtils; +import com.openhis.administration.domain.Location; +import com.openhis.administration.domain.Practitioner; +import com.openhis.administration.service.ILocationService; +import com.openhis.administration.service.IPractitionerService; +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.basedatamanage.dto.LocationDto; +import com.openhis.web.common.dto.UnitDto; +import com.openhis.web.inventorymanage.appservice.ILossReportFormAppService; +import com.openhis.web.inventorymanage.dto.*; +import com.openhis.web.inventorymanage.mapper.LossReportFormMapper; +import com.openhis.workflow.domain.SupplyRequest; +import com.openhis.workflow.service.ISupplyRequestService; + +/** + * 报损单 impl + * + * @author gyy + * @date 2025-04-07 + */ +@Service +public class LossReportFormAppServiceImpl implements ILossReportFormAppService { + + @Autowired + private LossReportFormMapper lossReportFormMapper; + + @Autowired + private ISupplyRequestService supplyRequestService; + + @Autowired + private ILocationService locationService; + + @Autowired + private AssignSeqUtil assignSeqUtil; + + @Resource + private IPractitionerService practitionerService; + + /** + * 报损单单据列表 + * + * @param lossReportSearchParam 供应申请查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 报损单单据分页列表 + */ + @Override + public R getPage(LossReportSearchParam lossReportSearchParam, Integer pageNo, Integer pageSize, String searchKey, + HttpServletRequest request) { + + // 设置模糊查询的字段名 + HashSet searchFields = new HashSet<>(); + searchFields.add(CommonConstants.FieldName.SupplyBusNo); + + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(lossReportSearchParam, searchKey, searchFields, request); + // 查询报损单单据分页列表 + Page lossReceiptPage = lossReportFormMapper.selectLossReportFormPage( + new Page<>(pageNo, pageSize), queryWrapper, SupplyType.LOSS_REPORT_FORM.getValue()); + + lossReceiptPage.getRecords().forEach(e -> { + // 单据状态 + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum())); + // 单据类型 + e.setType_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getType())); + }); + return R.ok(lossReceiptPage); + } + + /** + * 报损单据页面初始化 + * + * @return 初始化信息 + */ + @Override + public R lossReportFormInit() { + + LossReportFormInitDto initDto = new LossReportFormInitDto(); + + // 获取药房 + List pharmacyList = locationService.getPharmacyList(); + + // 将位置列表转为树结构 + List pharmacyLocationTree = buildTree(pharmacyList); + + // 药品类型 + List categoryListOptions = Stream.of(ItemType.values()) + .map(itemType -> new LossReportFormInitDto.categoryListOption(itemType.getValue(), itemType.getInfo())) + .collect(Collectors.toList()); + + // 审批状态 + List supplyStatusOptions = Stream.of(SupplyStatus.values()) + .map(supplyStatus -> new LossReportFormInitDto.supplyStatusOption(supplyStatus.getValue(), + supplyStatus.getInfo())) + .collect(Collectors.toList()); + + // 查询制单人列表 + List applicantList = practitionerService.getList(); + // 制单人信息 + List applicantListOptions = applicantList.stream() + .map(applicant -> new LossReportFormInitDto.applicantListOption(applicant.getId(), applicant.getName())) + .collect(Collectors.toList()); + + initDto.setCategoryListOptions(categoryListOptions).setWarehouseTypeList(pharmacyLocationTree) + .setSupplyStatusOptions(supplyStatusOptions).setApplicantListOptions(applicantListOptions); + + return R.ok(initDto); + } + + /** + * 单据号初始化 + * + * @return 初始化信息 + */ + @Override + public R lossReportNoInit() { + LossReportFormInitDto initDto = new LossReportFormInitDto(); + // 单据号 + initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.LOSS_BUS_NO.getPrefix(), 10)); + return R.ok(initDto); + } + + /** + * 将位置列表转换为树结构 + * + * @param records 位置列表 + * @return tree + */ + private List buildTree(List records) { + // 按b_no的层级排序,确保父节点先处理 + List sortedRecords = records.stream() + .sorted(Comparator.comparingInt(r -> r.getBusNo().split("\\.").length)).collect(Collectors.toList()); + + Map nodeMap = new HashMap<>(); + List tree = new ArrayList<>(); + + for (Location record : sortedRecords) { + String bNo = record.getBusNo(); + String[] parts = bNo.split("\\."); + LocationDto node = new LocationDto(); + org.springframework.beans.BeanUtils.copyProperties(record, node); + // 将当前节点加入映射 + nodeMap.put(bNo, node); + + if (parts.length == 1) { + // 根节点 + tree.add(node); + } else { + // 获取父节点的b_no(去掉最后一部分) + String parentBNo = String.join(".", Arrays.copyOf(parts, parts.length - 1)); + LocationDto parent = nodeMap.get(parentBNo); + + if (parent != null) { + parent.getChildren().add(node); + } else { + // 处理父节点不存在的情况(例如数据缺失) + // 可根据需求调整为将节点加入根或抛出异常 + tree.add(node); + } + } + } + return tree; + } + + /** + * 报损单据详情 + * + * @param busNo 单据号 + * @return 报损单据详情 + */ + @Override + public R getDetail(String busNo) { + List receiptDetailList = + lossReportFormMapper.selectDetail(busNo, ItemType.MEDICINE.getValue(), ItemType.DEVICE.getValue(), + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); + if (receiptDetailList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00006, null)); + } + for (ReceiptDetailDto dto : receiptDetailList) { + List unitList = new ArrayList<>(); + UnitDto unitDto = new UnitDto(); + // 单位列表 + unitDto.setUnitCode(dto.getUnitCode()).setMinUnitCode(dto.getMinUnitCode()); + unitList.add(unitDto); + dto.setUnitList(unitList); + } + return R.ok(receiptDetailList); + } + + /** + * 添加/编辑报损单据(批量) + * + * @param lossReportFormDtoList 报损单据 + * @return 操作结果 + */ + @Override + public R addOrEditLossReceipt(List lossReportFormDtoList) { + + List idList = new ArrayList<>(); + + // 单据号取得 + List busNoList = + lossReportFormDtoList.stream().map(LossReportFormDto::getBusNo).collect(Collectors.toList()); + // 请求数据取得 + List requestList = supplyRequestService.getSupplyByBusNo(busNoList.get(0)); + if (!requestList.isEmpty()) { + // 请求id取得 + List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); + // 单据信息删除 + supplyRequestService.removeByIds(requestIdList); + } + + List supplyRequestList = new ArrayList<>(); + for (LossReportFormDto lossReportFormDto : lossReportFormDtoList) { + // 初始化单据信息 + SupplyRequest supplyRequest = new SupplyRequest(); + BeanUtils.copyProperties(lossReportFormDto, supplyRequest); + supplyRequest.setPurposeLocationId(lossReportFormDto.getLossLocationId()) + .setPurposeLocationStoreId(lossReportFormDto.getLossLocationStoreId()) + .setPurposeTypeEnum(lossReportFormDto.getLossTypeEnum()).setReason(lossReportFormDto.getLossReason()); + // 生成待发送的报损单据 + supplyRequest + // id + .setId(null) + // 单据分类:库存供应 + .setCategoryEnum(SupplyCategory.STOCK_SUPPLY.getValue()) + // 单据类型:报损单 + .setTypeEnum(SupplyType.LOSS_REPORT_FORM.getValue()) + // 制单人 + .setApplicantId(SecurityUtils.getLoginUser().getPractitionerId()) + // 制单日期 + .setApplyTime(DateUtils.getNowDate()); + supplyRequestList.add(supplyRequest); + + } + + // 保存 + supplyRequestService.saveOrUpdateBatch(supplyRequestList); + + // 请求id取得 + List supplyRequestIdList = supplyRequestService.getSupplyByBusNo(busNoList.get(0)); + // 返回请求id列表 + List requestIdList = + supplyRequestIdList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); + for (Long list : requestIdList) { + idList.add(list.toString()); + } + + // 返回请求id + return R.ok(idList, null); + } + + /** + * 删除单据 + * + * @param supplyRequestIds 供应请求id + * @return 操作结果 + */ + @Override + public R deleteReceipt(List supplyRequestIds) { + // 删除单据 + boolean result = supplyRequestService.removeByIds(supplyRequestIds); + return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + /** + * 提交审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @Override + public R submitApproval(String busNo) { + // 单据提交审核 + boolean result = supplyRequestService.submitApproval(busNo); + return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + /** + * 撤回审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @Override + public R withdrawApproval(String busNo) { + // 撤回审核 + boolean result = supplyRequestService.withdrawApproval(busNo); + return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ProductDetailsAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ProductDetailsAppServiceImpl.java new file mode 100644 index 00000000..9cc1648a --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ProductDetailsAppServiceImpl.java @@ -0,0 +1,200 @@ +package com.openhis.web.inventorymanage.appservice.impl; + +import java.util.Arrays; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.core.common.core.domain.R; +import com.core.common.core.domain.model.LoginUser; +import com.core.common.utils.DateUtils; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.InsuranceLevel; +import com.openhis.common.enums.LocationForm; +import com.openhis.common.enums.LocationStatus; +import com.openhis.common.enums.PublicationStatus; +import com.openhis.common.enums.ybenums.YbChrgitmLv; +import com.openhis.common.utils.EnumUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.inventorymanage.appservice.IProductDetailsAppService; +import com.openhis.web.inventorymanage.dto.ProductDetailsInitDto; +import com.openhis.web.inventorymanage.dto.ProductDetailsPageDto; +import com.openhis.web.inventorymanage.dto.ProductDetailsSearchParam; +import com.openhis.web.inventorymanage.mapper.ProductDetailsMapper; +import com.openhis.workflow.domain.InventoryItem; +import com.openhis.workflow.mapper.InventoryItemMapper; + +/** + * 库存商品明细 impl + * + * @author yuanzs + * @date 2025-04-24 + */ +@Service +public class ProductDetailsAppServiceImpl extends ServiceImpl + implements IProductDetailsAppService { + + @Autowired + private ProductDetailsMapper productDetailsMapper; + + /** + * 库存商品明细初始化 + * + * @return 下拉列表值 + */ + @Override + public R getInit() { + + ProductDetailsInitDto productDetailsInitDto = new ProductDetailsInitDto(); + + // 医保等级List + List chrgitmLvOptions = Stream.of(InsuranceLevel.values()) + .map(status -> new ProductDetailsInitDto.statusEnumOption(status.getValue(), status.getInfo())) + .collect(Collectors.toList()); + + productDetailsInitDto.setChrgitmLvOptions(chrgitmLvOptions); + + return R.ok(productDetailsInitDto); + } + + /** + * 查询库存商品明细分页列表 + * + * @param productDetailsSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 库存商品明细分页列表 + */ + @Override + public R getPage(ProductDetailsSearchParam productDetailsSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request) { + + // 数据初始化,不使用eq条件拼接 + // 项目类型 + Integer categoryCode = productDetailsSearchParam.getCategoryCode(); + productDetailsSearchParam.setCategoryCode(null); + // 库存范围 + Integer warehouseScope = productDetailsSearchParam.getWarehouseScope(); + productDetailsSearchParam.setWarehouseScope(null); + // 剩余过期天数 + Integer remainingDays = productDetailsSearchParam.getRemainingDays(); + productDetailsSearchParam.setRemainingDays(null); + + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(productDetailsSearchParam, searchKey, + new HashSet<>(Arrays.asList("medicine_name", "bus_no")), request); + + // 项目类型为中成药(1)、西药(2)、外购药品(3)、中草药(4)时查药品表;为耗材(9)时查器材表 + if (categoryCode != null) { + if (categoryCode.equals(1) || categoryCode.equals(2) || categoryCode.equals(3) || categoryCode.equals(4)) { + queryWrapper.eq("item_type", "0"); + queryWrapper.eq("category_code", categoryCode.toString()); + } else if (categoryCode.equals(9)) { + queryWrapper.eq("item_type", "9"); + } + } + // 库存范围:无限制(1)、数量等于0(2)、数量大于0(3) + if (warehouseScope != null) { + if (warehouseScope.equals(2)) { + queryWrapper.eq("quantity", 0); + } else if (warehouseScope.equals(3)) { + queryWrapper.gt("quantity", 0); + } + } + // 查询条件为剩余过期天数=0时 + if (remainingDays != null) { + if (remainingDays.equals(0)) { + // 查询 <= 0天的数据 + queryWrapper.le("remaining_days", 0); + } else { + //查询 <= remainingDays天的数据 + queryWrapper.le("remaining_days", remainingDays); + } + } + + // 查询库存商品明细分页列表 + Page productDetailsPage = + productDetailsMapper.selectProductDetailsPage(new Page<>(pageNo, pageSize), queryWrapper); + + productDetailsPage.getRecords().forEach(e -> { + // 医保等级 + e.setChrgitmLv_enumText(EnumUtils.getInfoByValue(YbChrgitmLv.class, e.getChrgitmLv())); + // 药品停用 + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(PublicationStatus.class, e.getStatusEnum())); + // 仓库类型 + e.setFormEnum_enumText(EnumUtils.getInfoByValue(LocationForm.class, e.getFormEnum())); + // 停供状态 + e.setInventoryStatusEnum_enumText( + EnumUtils.getInfoByValue(PublicationStatus.class, e.getInventoryStatusEnum())); + // 如果剩余天数小于0,显示为0 + if (e.getRemainingDays() != null && e.getRemainingDays().compareTo(0) <= 0) { + e.setRemainingDays(0); + } + }); + return R.ok(productDetailsPage); + } + + /** + * 操作:停供 + * + * @param id 库存项目管理ID + * @return 操作结果 + */ + @Override + public R stopSupplyById(Long id) { + + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 当前登录账号 + LoginUser loginUser = SecurityUtils.getLoginUser(); + + // 停供按钮压下,更新库存项目管理表的库存状态:已停供 + int updateCount = baseMapper.update(null, + new LambdaUpdateWrapper().eq(InventoryItem::getId, id).set(InventoryItem::getUpdateTime, now) + .set(InventoryItem::getUpdateBy, loginUser.getUserId()) + .set(InventoryItem::getInventoryStatusEnum, PublicationStatus.RETIRED.getValue())); + + return updateCount > 0 ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + /** + * 操作:取消停供 + * + * @param id 库存项目管理ID + * @return 操作结果 + */ + @Override + public R cancelSupplyById(Long id) { + + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 当前登录账号 + LoginUser loginUser = SecurityUtils.getLoginUser(); + + // 取消停供按钮压下,更新库存项目管理表的库存状态:未停供 + int updateCount = baseMapper.update(null, + new LambdaUpdateWrapper().eq(InventoryItem::getId, id).set(InventoryItem::getUpdateTime, now) + .set(InventoryItem::getUpdateBy, loginUser.getUserId()) + .set(InventoryItem::getInventoryStatusEnum, PublicationStatus.ACTIVE.getValue())); + + return updateCount > 0 ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/PurchaseReturnAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/PurchaseReturnAppServiceImpl.java new file mode 100644 index 00000000..e0bd3dce --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/PurchaseReturnAppServiceImpl.java @@ -0,0 +1,242 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.appservice.impl; + +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.AssignSeqUtil; +import com.core.common.utils.DateUtils; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.core.common.utils.bean.BeanUtils; +import com.openhis.administration.domain.Practitioner; +import com.openhis.administration.service.IPractitionerService; +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.common.dto.UnitDto; +import com.openhis.web.inventorymanage.appservice.IPurchaseReturnAppService; +import com.openhis.web.inventorymanage.dto.*; +import com.openhis.web.inventorymanage.mapper.PurchaseReturnMapper; +import com.openhis.workflow.domain.SupplyRequest; +import com.openhis.workflow.service.ISupplyRequestService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 采购退货 impl + * + * @author yuanzs + * @date 2025-04-02 + */ +@Service +public class PurchaseReturnAppServiceImpl implements IPurchaseReturnAppService { + + @Autowired + private AssignSeqUtil assignSeqUtil; + + @Autowired + private IPractitionerService practitionerService; + + @Autowired + private PurchaseReturnMapper purchaseReturnMapper; + + @Autowired + private ISupplyRequestService supplyRequestService; + + /** + * 采购退货页面初始化 + * + * @return 初始化信息 + */ + @Override + public R purchaseReturnInit() { + + PurchaseReturnInitDto initDto = new PurchaseReturnInitDto(); + + // 查询经手人列表 + List practitionerList = practitionerService.getList(); + // 经手人信息 + List practitionerListOptions = practitionerList.stream() + .map(practitioner -> new PurchaseInventoryInitDto.practitionerListOption(practitioner.getId(), + practitioner.getName())) + .collect(Collectors.toList()); + + initDto.setPractitionerListOptions(practitionerListOptions); + + return R.ok(initDto); + } + + /** + * 单据号初始化 + * + * @return 初始化信息 + */ + @Override + public R purchaseNoInit() { + PurchaseInventoryInitDto initDto = new PurchaseInventoryInitDto(); + // 单据号 + initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.RETURN_BUS_NO.getPrefix(), 10)); + return R.ok(initDto); + } + + /** + * 根据单据号查询退货单据详情 + * + * @param busNo 单据号 + * @return 退货单 + */ + @Override + public R getDetail(String busNo) { + List returnDetailList = purchaseReturnMapper.selectDetail(busNo, + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, + ItemType.MEDICINE.getValue(), ItemType.DEVICE.getValue(), SupplyType.PRODUCT_RETURN.getValue(), SupplyStatus.AGREE.getValue()); + if (returnDetailList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00006, null)); + } + for (PurchaseReturnDetailDto dto : returnDetailList) { + List unitList = new ArrayList<>(); + UnitDto unitDto = new UnitDto(); + // 单位列表 + unitDto.setUnitCode(dto.getUnitCode()).setMinUnitCode(dto.getMinUnitCode()); + unitList.add(unitDto); + dto.setUnitList(unitList); + } + return R.ok(returnDetailList); + } + + /** + * 根据单据号查询已生成的退货单 + * + * @param busNo 单据号 + * @return 退货单 + */ + @Override + public R getGeneratedPage(String busNo) { + // 查询条件: + // 1.类型为采购退货 + // 2.状态为待审请,审核中,驳回,审核通过 + List generatedDetailList = purchaseReturnMapper.selectGeneratedDetail(busNo, + SupplyType.PRODUCT_RETURN.getValue()); + if (generatedDetailList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00006, null)); + } + for (PurchaseReturnPageDto dto : generatedDetailList) { + // 单据状态 + dto.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, dto.getStatusEnum())); + // 单据类型 + dto.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, dto.getTypeEnum())); + } + return R.ok(generatedDetailList); + } + + /** + * 生成退货单(批量) + * + * @param purchaseReturnDetailDtoList 退货单据号列表 + * @return 操作结果 + */ + @Override + public R returnGenerateBusNo(List purchaseReturnDetailDtoList) { + + List idList = new ArrayList<>(); + + // 单据号取得 + List busNoList = + purchaseReturnDetailDtoList.stream().map(PurchaseReturnDetailDto::getBusNo).collect(Collectors.toList()); + // 请求数据取得 + List requestList = supplyRequestService.getSupplyByBusNo(busNoList.get(0)); + if (!requestList.isEmpty()) { + // 请求id取得 + List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); + // 单据信息删除 + supplyRequestService.removeByIds(requestIdList); + } + + List supplyRequestList = new ArrayList<>(); + for (PurchaseReturnDetailDto purchaseReturnDetailDto : purchaseReturnDetailDtoList) { + // 初始化单据信息 + SupplyRequest supplyRequest = new SupplyRequest(); + BeanUtils.copyProperties(purchaseReturnDetailDto, supplyRequest); + // 生成商品退货单据 + supplyRequest + // id + .setId(null) + // 单据类型:采购退货 + .setTypeEnum(SupplyType.PRODUCT_RETURN.getValue()) + // 制单人 + .setApplicantId(SecurityUtils.getLoginUser().getPractitionerId()) + // 申请时间 + .setApplyTime(DateUtils.getNowDate()); + supplyRequestList.add(supplyRequest); + + } + // 保存 + supplyRequestService.saveOrUpdateBatch(supplyRequestList); + + // 请求id取得 + List supplyRequestIdList = supplyRequestService.getSupplyByBusNo(busNoList.get(0)); + // 返回请求id列表 + List requestIdList = + supplyRequestIdList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); + for (Long list : requestIdList) { + idList.add(list.toString()); + } + + // 返回单据id + return R.ok(idList, null); + + } + + /** + * 删除退回退货单 + * + * @param supplyRequestIds 供应请求id + * @return 操作结果 + */ + @Override + public R returnDeleteBusNo(List supplyRequestIds) { + // 删除单据 + boolean result = supplyRequestService.removeByIds(supplyRequestIds); + return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + /** + * 提交审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @Override + public R submitApproval(String busNo) { + // 单据提交审核 + boolean result = supplyRequestService.submitApproval(busNo); + return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + /** + * 驳回审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @Override + public R withdrawApproval(String busNo) { + // 撤回审核 + boolean result = supplyRequestService.withdrawApproval(busNo); + return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/RequisitionIssueAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/RequisitionIssueAppServiceImpl.java new file mode 100644 index 00000000..66447ed1 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/RequisitionIssueAppServiceImpl.java @@ -0,0 +1,264 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.appservice.impl; + +import java.util.ArrayList; +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.core.common.utils.SecurityUtils; +import com.openhis.common.enums.*; +import com.openhis.web.common.dto.UnitDto; +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.AssignSeqUtil; +import com.core.common.utils.DateUtils; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.bean.BeanUtils; +import com.openhis.administration.domain.Practitioner; +import com.openhis.administration.service.IPractitionerService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.utils.EnumUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.inventorymanage.appservice.IRequisitionIssueAppService; +import com.openhis.web.inventorymanage.dto.*; +import com.openhis.web.inventorymanage.mapper.RequisitionIssueMapper; +import com.openhis.workflow.domain.SupplyRequest; +import com.openhis.workflow.service.ISupplyRequestService; + +/** + * 领用出库 impl + * + * @author CY + * @date 2025-04-03 + */ +@Service +public class RequisitionIssueAppServiceImpl implements IRequisitionIssueAppService { + + @Autowired + private RequisitionIssueMapper requisitionIssueMapper; + + @Autowired + private ISupplyRequestService supplyRequestService; + + @Autowired + private IPractitionerService practitionerService; + + @Autowired + private AssignSeqUtil assignSeqUtil; + + /** + * 领用出库页面初始化 + * + * @return 初始化信息 + */ + @Override + public R issueInventoryInit() { + + IssueInitDto initDto = new IssueInitDto(); + // 查询经手人列表 + List practitionerList = practitionerService.getList(); + // 经手人信息 + List practitionerListOptions = practitionerList.stream() + .map(practitioner -> new IssueInitDto.practitionerListOption(practitioner.getId(), practitioner.getName())) + .collect(Collectors.toList()); + // 领用部门列表 + List requisitionDepartmentDto = + requisitionIssueMapper.selectRequisitionDepartment(SupplyRequestType.DEPARTMENT.getValue()); + // 药品类型 + List itemTypeOptions = Stream.of(ItemType.values()) + .map(itemType -> new IssueInitDto.itemTypeOption(itemType.getValue(), itemType.getInfo())) + .collect(Collectors.toList()); + // 审批状态 + List supplyStatusOptions = Stream.of(SupplyStatus.values()) + .map(supplyStatus -> new IssueInitDto.supplyStatusOption(supplyStatus.getValue(), supplyStatus.getInfo())) + .collect(Collectors.toList()); + + initDto.setItemTypeOptions(itemTypeOptions).setPractitionerListOptions(practitionerListOptions) + .setIssueDepartmentDto(requisitionDepartmentDto).setSupplyStatusOptions(supplyStatusOptions); + + return R.ok(initDto); + } + + /** + * 单据号初始化 + * + * @return 初始化信息 + */ + @Override + public R requisitionIssueNoInit() { + IssueInitDto initDto = new IssueInitDto(); + // 单据号 + initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.REQUISITION_NUM.getPrefix(), 10)); + return R.ok(initDto); + } + + /** + * 领用出库单据列表 + * + * @param issueSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 领用出库单据分页列表 + */ + @Override + public R getPage(IssueSearchParam issueSearchParam, Integer pageNo, Integer pageSize, String searchKey, + HttpServletRequest request) { + + // 设置模糊查询的字段名 + HashSet searchFields = new HashSet<>(); + searchFields.add(CommonConstants.FieldName.SupplyBusNo); + + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(issueSearchParam, searchKey, searchFields, request); + // 查询领用出库单据分页列表 + Page inventoryReceiptPage = requisitionIssueMapper.selectRequisitionIssuePage( + new Page<>(pageNo, pageSize), queryWrapper, SupplyType.ISSUE_INVENTORY.getValue()); + + inventoryReceiptPage.getRecords().forEach(e -> { + // 单据状态 + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum())); + }); + return R.ok(inventoryReceiptPage); + } + + /** + * 领用出库单据详情 + * + * @param busNo 单据号 + * @return 领用出库单据详情 + */ + @Override + public R getDetail(String busNo) { + List requisitionIssueDetailList = requisitionIssueMapper.requisitionIssueDetail(busNo, + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, + ItemType.MEDICINE.getValue(), ItemType.DEVICE.getValue()); + if (requisitionIssueDetailList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00006, null)); + } + for (IssueDetailDto dto : requisitionIssueDetailList) { + List unitList = new ArrayList<>(); + UnitDto unitDto = new UnitDto(); + // 单位列表 + unitDto.setUnitCode(dto.getUnitCode()).setMinUnitCode(dto.getMinUnitCode()); + unitList.add(unitDto); + dto.setUnitList(unitList); + } + return R.ok(requisitionIssueDetailList); + } + + /** + * 添加/编辑领用出库单据(批量) + * + * @param requisitionIssueDtoList 领用出库单据 + * @return 操作结果 + */ + @Override + public R addOrEditIssueReceipt(List requisitionIssueDtoList) { + + List idList = new ArrayList<>(); + + // 单据号取得 + List busNoList = + requisitionIssueDtoList.stream().map(IssueDto::getBusNo).collect(Collectors.toList()); + // 请求数据取得 + List requestList = supplyRequestService.getSupplyByBusNo(busNoList.get(0)); + if (!requestList.isEmpty()) { + // 请求id取得 + List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); + // 单据信息删除 + supplyRequestService.removeByIds(requestIdList); + } + + List supplyRequestList = new ArrayList<>(); + for (IssueDto issueDto : requisitionIssueDtoList) { + // 初始化单据信息 + SupplyRequest supplyRequest = new SupplyRequest(); + BeanUtils.copyProperties(issueDto, supplyRequest); + // 生成待发送的领用出库单据 + supplyRequest + // id + .setId(null) + // 单据分类:非库存供应 + .setCategoryEnum(SupplyCategory.NON_STOCK.getValue()) + // 单据类型:领用出库 + .setTypeEnum(SupplyType.ISSUE_INVENTORY.getValue()) + // 制单人 + .setApplicantId(SecurityUtils.getLoginUser().getPractitionerId()) + // 申请时间 + .setApplyTime(DateUtils.getNowDate()); + supplyRequestList.add(supplyRequest); + + } + + // 保存 + supplyRequestService.saveOrUpdateBatch(supplyRequestList); + + // 请求id取得 + List supplyRequestIdList = supplyRequestService.getSupplyByBusNo(busNoList.get(0)); + // 返回请求id列表 + List requestIdList = + supplyRequestIdList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); + for (Long list : requestIdList) { + idList.add(list.toString()); + } + + // 返回请求id + return R.ok(idList, null); + } + + /** + * 删除单据 + * + * @param supplyRequestIds 供应请求id + * @return 操作结果 + */ + @Override + public R deleteReceipt(List supplyRequestIds) { + // 删除单据 + boolean result = supplyRequestService.removeByIds(supplyRequestIds); + return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + /** + * 提交审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @Override + public R submitApproval(String busNo) { + // 单据提交审核 + boolean result = supplyRequestService.submitApproval(busNo); + return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + /** + * 撤回审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @Override + public R withdrawApproval(String busNo) { + // 撤回审核 + boolean result = supplyRequestService.withdrawApproval(busNo); + return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ReturnIssueAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ReturnIssueAppServiceImpl.java new file mode 100644 index 00000000..ace9c7ba --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ReturnIssueAppServiceImpl.java @@ -0,0 +1,266 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.appservice.impl; + +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.AssignSeqUtil; +import com.core.common.utils.DateUtils; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.core.common.utils.bean.BeanUtils; +import com.openhis.administration.domain.Practitioner; +import com.openhis.administration.domain.Supplier; +import com.openhis.administration.service.IPractitionerService; +import com.openhis.administration.service.ISupplierService; +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.inventorymanage.appservice.IReturnIssueAppService; +import com.openhis.web.inventorymanage.dto.*; +import com.openhis.web.inventorymanage.mapper.ReturnIssueMapper; +import com.openhis.workflow.domain.SupplyRequest; +import com.openhis.workflow.service.ISupplyRequestService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * 退货出库 impl + * + * @author CY + * @date 2025-04-03 + */ +@Service +public class ReturnIssueAppServiceImpl implements IReturnIssueAppService { + + @Autowired + private ReturnIssueMapper ReturnIssueMapper; + + @Autowired + private ISupplyRequestService supplyRequestService; + + @Autowired + private ISupplierService supplierService; + + @Autowired + private IPractitionerService practitionerService; + + @Autowired + private AssignSeqUtil assignSeqUtil; + + /** + * 退货出库页面初始化 + * + * @return 初始化信息 + */ + @Override + public R returnIssueInit() { + + IssueInitDto initDto = new IssueInitDto(); + // 查询供应商列表 + List supplierList = supplierService.getList(); + // 查询经手人列表 + List practitionerList = practitionerService.getList(); + // 经手人信息 + List practitionerListOptions = practitionerList.stream() + .map(practitioner -> new IssueInitDto.practitionerListOption(practitioner.getId(), practitioner.getName())) + .collect(Collectors.toList()); + // 部门列表 + List issueDepartmentDto = + ReturnIssueMapper.selectReturnIssueDepartment(SupplyRequestType.DEPARTMENT.getValue()); + // 药品类型 + List itemTypeOptions = Stream.of(ItemType.values()) + .map(itemType -> new IssueInitDto.itemTypeOption(itemType.getValue(), itemType.getInfo())) + .collect(Collectors.toList()); + // 供应商信息 + List supplierListOptions = supplierList.stream() + .map(supplier -> new IssueInitDto.supplierListOption(supplier.getId(), supplier.getName())) + .collect(Collectors.toList()); + // 审批状态 + List supplyStatusOptions = Stream.of(SupplyStatus.values()) + .map(supplyStatus -> new IssueInitDto.supplyStatusOption(supplyStatus.getValue(), supplyStatus.getInfo())) + .collect(Collectors.toList()); + + initDto.setSupplierListOptions(supplierListOptions).setItemTypeOptions(itemTypeOptions) + .setPractitionerListOptions(practitionerListOptions).setIssueDepartmentDto(issueDepartmentDto) + .setSupplyStatusOptions(supplyStatusOptions); + + return R.ok(initDto); + } + + /** + * 单据号初始化 + * + * @return 初始化信息 + */ + @Override + public R returnIssueNoInit() { + IssueInitDto initDto = new IssueInitDto(); + // 单据号 + initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.RETURN_ISSUE_NUM.getPrefix(), 10)); + return R.ok(initDto); + } + + /** + * 退货出库单据列表 + * + * @param issueSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 退货出库单据分页列表 + */ + @Override + public R getPage(IssueSearchParam issueSearchParam, Integer pageNo, Integer pageSize, String searchKey, + HttpServletRequest request) { + + // 设置模糊查询的字段名 + HashSet searchFields = new HashSet<>(); + searchFields.add(CommonConstants.FieldName.SupplyBusNo); + + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(issueSearchParam, searchKey, searchFields, request); + // 查询退货出库单据分页列表 + Page returnReceiptPage = ReturnIssueMapper.selectReturnIssuePage(new Page<>(pageNo, pageSize), + queryWrapper, SupplyType.RETURN_ISSUE.getValue()); + + returnReceiptPage.getRecords().forEach(e -> { + // 单据状态 + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum())); + }); + return R.ok(returnReceiptPage); + } + + /** + * 退货出库单据详情 + * + * @param busNo 单据号 + * @return 退货出库单据详情 + */ + @Override + public R getDetail(String busNo) { + List issueDetailList = ReturnIssueMapper.returnIssueDetail(busNo, + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, + ItemType.MEDICINE.getValue(), ItemType.DEVICE.getValue()); + if (issueDetailList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00006, null)); + } + return R.ok(issueDetailList); + } + + /** + * 添加/编辑退货出库单据(批量) + * + * @param returnIssueDtoList 退货出库单据 + * @return 操作结果 + */ + @Override + public R addOrEditIssueReceipt(List returnIssueDtoList) { + + List idList = new ArrayList<>(); + + // 单据号取得 + List busNoList = + returnIssueDtoList.stream().map(IssueDto::getBusNo).collect(Collectors.toList()); + // 请求数据取得 + List requestList = supplyRequestService.getSupplyByBusNo(busNoList.get(0)); + if (!requestList.isEmpty()) { + // 请求id取得 + List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); + // 单据信息删除 + supplyRequestService.removeByIds(requestIdList); + } + + List supplyRequestList = new ArrayList<>(); + for (IssueDto issueDto : returnIssueDtoList) { + // 初始化单据信息 + SupplyRequest supplyRequest = new SupplyRequest(); + BeanUtils.copyProperties(issueDto, supplyRequest); + // 生成待发送的退货出库单据 + supplyRequest + // id + .setId(null) + // 单据分类:非库存供应 + .setCategoryEnum(SupplyCategory.NON_STOCK.getValue()) + // 单据类型:退货出库 + .setTypeEnum(SupplyType.RETURN_ISSUE.getValue()) + // 制单人 + .setApplicantId(SecurityUtils.getLoginUser().getPractitionerId()) + // 申请时间 + .setApplyTime(DateUtils.getNowDate()); + supplyRequestList.add(supplyRequest); + + } + + // 保存 + supplyRequestService.saveOrUpdateBatch(supplyRequestList); + + // 请求id取得 + List supplyRequestIdList = supplyRequestService.getSupplyByBusNo(busNoList.get(0)); + // 返回请求id列表 + List requestIdList = + supplyRequestIdList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); + for (Long list : requestIdList) { + idList.add(list.toString()); + } + + // 返回请求id + return R.ok(idList, null); + + } + + /** + * 删除单据 + * + * @param supplyRequestIds 供应请求id + * @return 操作结果 + */ + @Override + public R deleteReceipt(List supplyRequestIds) { + // 删除单据 + boolean result = supplyRequestService.removeByIds(supplyRequestIds); + return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + /** + * 提交审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @Override + public R submitApproval(String busNo) { + // 单据提交审核 + boolean result = supplyRequestService.submitApproval(busNo); + return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + /** + * 撤回审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @Override + public R withdrawApproval(String busNo) { + // 撤回审核 + boolean result = supplyRequestService.withdrawApproval(busNo); + return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/LossReportFormController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/LossReportFormController.java new file mode 100644 index 00000000..ec2bd814 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/LossReportFormController.java @@ -0,0 +1,128 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.controller; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import com.core.common.core.domain.R; +import com.openhis.web.inventorymanage.appservice.ILossReportFormAppService; +import com.openhis.web.inventorymanage.dto.LossReportFormDto; +import com.openhis.web.inventorymanage.dto.LossReportSearchParam; + +import lombok.extern.slf4j.Slf4j; + +import java.util.List; + +/** + * 报损单 controller + * + * @author gyy + * @date 2025-04-03 + */ +@RestController +@RequestMapping("/inventory-manage/loss") +@Slf4j +public class LossReportFormController { + + @Autowired + private ILossReportFormAppService lossReportFormAppService; + + /** + * 报损单单据列表 + * + * @param lossReportSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 报损单据分页列表 + */ + @GetMapping(value = "/loss-report-form-page") + public R getPage(LossReportSearchParam lossReportSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return lossReportFormAppService.getPage(lossReportSearchParam, pageNo, pageSize, searchKey, request); + } + + /** + * 报损单初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R lossReportFormInit() { + return lossReportFormAppService.lossReportFormInit(); + } + + /** + * 单据号初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/bus-no-init") + public R purchaseNoInit() { + return lossReportFormAppService.lossReportNoInit(); + } + + /** + * 报损单据详情 + * + * @param busNo 单据号 + * @return 报损单据详情 + */ + @GetMapping(value = "/loss-receipt") + public R getDetail(@RequestParam String busNo) { + return lossReportFormAppService.getDetail(busNo); + } + + /** + * 添加/编辑报损单据(批量) + * + * @param lossReportFormDtoList 报损单据 + * @return 操作结果 + */ + @PutMapping("/loss-receipt-edit") + public R addOrEditLossReceipt(@Validated @RequestBody List lossReportFormDtoList) { + return lossReportFormAppService.addOrEditLossReceipt(lossReportFormDtoList); + } + + /** + * 删除单据 + * + * @param supplyRequestIds 供应请求id + * @return 操作结果 + */ + @DeleteMapping("/loss-receipt-del") + public R deleteInventoryReceipt(@RequestParam List supplyRequestIds) { + return lossReportFormAppService.deleteReceipt(supplyRequestIds); + } + + /** + * 提交审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @PutMapping("/submit-approval") + public R submitApproval(@RequestBody String busNo) { + return lossReportFormAppService.submitApproval(busNo); + } + + /** + * 撤回审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @PutMapping("/withdraw-approval") + public R withdrawApproval(@RequestBody String busNo) { + return lossReportFormAppService.withdrawApproval(busNo); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ProductDetailsController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ProductDetailsController.java new file mode 100644 index 00000000..ab96e48f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ProductDetailsController.java @@ -0,0 +1,78 @@ +package com.openhis.web.inventorymanage.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.inventorymanage.appservice.IProductDetailsAppService; +import com.openhis.web.inventorymanage.dto.ProductDetailsSearchParam; + +import lombok.extern.slf4j.Slf4j; + +/** + * 库存商品明细 controller + * + * @author yuanzs + * @date 2025-04-24 + */ +@RestController +@RequestMapping("/inventory-manage/product") +@Slf4j +public class ProductDetailsController { + + @Autowired + private IProductDetailsAppService productDetailsAppService; + + /** + * 库存商品明细初始化 + * + * @return 下拉列表值 + */ + @GetMapping("/product-init") + public R getMedicationInit() { + return productDetailsAppService.getInit(); + } + + /** + * 查询库存商品明细分页列表 + * + * @param productDetailsSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 库存商品明细分页列表 + */ + @GetMapping(value = "/product-page") + public R getPage(ProductDetailsSearchParam productDetailsSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "50") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return productDetailsAppService.getPage(productDetailsSearchParam, pageNo, pageSize, searchKey, request); + } + + /** + * 操作:停供 + * + * @param id 库存项目管理ID + * @return 操作结果 + */ + @PutMapping("/stop-supply") + public R stopSupplyById(@RequestBody Long id) { + return productDetailsAppService.stopSupplyById(id); + } + + /** + * 操作:取消停供 + * + * @param id 库存项目管理ID + * @return 操作结果 + */ + @PutMapping("/cancel-supply") + public R cancelSupplyById(@RequestBody Long id) { + return productDetailsAppService.cancelSupplyById(id); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/PurchaseReturnController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/PurchaseReturnController.java new file mode 100644 index 00000000..fdbdc604 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/PurchaseReturnController.java @@ -0,0 +1,118 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.controller; + +import com.core.common.core.domain.R; +import com.openhis.web.inventorymanage.appservice.IPurchaseReturnAppService; +import com.openhis.web.inventorymanage.dto.PurchaseReturnDetailDto; +import com.openhis.web.inventorymanage.dto.PurchaseReturnSearchParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * 采购退货 controller + * + * @author yuanzs + * @date 2025-04-02 + */ +@RestController +@RequestMapping("/inventory-manage/return") +@Slf4j +public class PurchaseReturnController { + + @Autowired + private IPurchaseReturnAppService purchaseReturnAppService; + + /** + * 采购退货页面初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R purchaseReturnInit() { + return purchaseReturnAppService.purchaseReturnInit(); + } + + /** + * 单据号初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/bus-no-init") + public R purchaseNoInit() { + return purchaseReturnAppService.purchaseNoInit(); + } + + /** + * 根据单据号查询详情 + * + * @param busNo 单据号 + * @return 退货单 + */ + @GetMapping(value = "/return-detail") + public R getPurchaseReturnOrder(@RequestParam String busNo) { + return purchaseReturnAppService.getDetail(busNo); + } + + /** + * 根据入库单据号查询已生成的退货单 + * + * @param busNo 单据号 + * @return 退货单 + */ + @GetMapping(value = "/generated-return-detail") + public R getGeneratedReturnOrder(@RequestParam String busNo) { + return purchaseReturnAppService.getGeneratedPage(busNo); + } + + /** + * 生成退货单(批量) + * + * @param purchaseReturnDetailDtoList 退货单据号列表 + * @return 操作结果 + */ + @PutMapping(value = "/generate-return-receipt") + public R generateReturnReceipt(@Validated @RequestBody List purchaseReturnDetailDtoList) { + return purchaseReturnAppService.returnGenerateBusNo(purchaseReturnDetailDtoList); + } + + /** + * 删除退货单 + * + * @param supplyRequestIds 供应请求id + * @return 操作结果 + */ + @DeleteMapping(value = "/delete-return-receipt") + public R deleteReturnReceipt(@RequestParam List supplyRequestIds) { + return purchaseReturnAppService.returnDeleteBusNo(supplyRequestIds); + } + + /** + * 提交审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @PutMapping("/return-submit-approval") + public R submitApproval(@RequestBody String busNo) { + return purchaseReturnAppService.submitApproval(busNo); + } + + /** + * 撤回审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @PutMapping("/return-withdraw-approval") + public R withdrawApproval(@RequestBody String busNo) { + return purchaseReturnAppService.withdrawApproval(busNo); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/RequisitionIssueController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/RequisitionIssueController.java new file mode 100644 index 00000000..b2e7cd28 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/RequisitionIssueController.java @@ -0,0 +1,127 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.controller; + +import javax.servlet.http.HttpServletRequest; + +import com.openhis.web.inventorymanage.dto.IssueSearchParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import com.core.common.core.domain.R; +import com.openhis.web.inventorymanage.appservice.IRequisitionIssueAppService; +import com.openhis.web.inventorymanage.dto.IssueDto; + +import lombok.extern.slf4j.Slf4j; + +import java.util.List; + +/** + * 领用出库 controller + * + * @author CY + * @date 2025-04-03 + */ +@RestController +@RequestMapping("/issue-manage/requisition") +@Slf4j +public class RequisitionIssueController { + + @Autowired + private IRequisitionIssueAppService requisitionIssueAppService; + + /** + * 领用出库页面初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R issueInventoryInit() { + return requisitionIssueAppService.issueInventoryInit(); + } + + /** + * 单据号初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/bus-no-init") + public R requisitionIssueNoInit() { + return requisitionIssueAppService.requisitionIssueNoInit(); + } + + /** + * 领用出库单据列表 + * + * @param issueSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 领用出库单据分页列表 + */ + @GetMapping(value = "/requisition-issue-page") + public R getPage(IssueSearchParam issueSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return requisitionIssueAppService.getPage(issueSearchParam, pageNo, pageSize, searchKey, request); + } + + /** + * 领用出库单据详情 + * + * @param busNo 单据号 + * @return 入库单据详情 + */ + @GetMapping(value = "/requisition-issue-detail") + public R getDetail(@RequestParam String busNo) { + return requisitionIssueAppService.getDetail(busNo); + } + + /** + * 添加/编辑领用单据(批量) + * + * @param requisitionIssueDtoList 领用单据 + * @return 操作结果 + */ + @PutMapping("/requisition-issue-edit") + public R addOrEditInventoryReceipt(@Validated @RequestBody List requisitionIssueDtoList) { + return requisitionIssueAppService.addOrEditIssueReceipt(requisitionIssueDtoList); + } + + /** + * 删除单据 + * + * @param supplyRequestIds 供应请求id + * @return 操作结果 + */ + @DeleteMapping("/requisition-issue-del") + public R deleteInventoryReceipt(@RequestParam List supplyRequestIds) { + return requisitionIssueAppService.deleteReceipt(supplyRequestIds); + } + + /** + * 提交审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @PutMapping("/submit-approval") + public R submitApproval(@RequestBody String busNo) { + return requisitionIssueAppService.submitApproval(busNo); + } + + /** + * 撤回审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @PutMapping("/withdraw-approval") + public R withdrawApproval(@RequestBody String busNo) { + return requisitionIssueAppService.withdrawApproval(busNo); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ReturnIssueController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ReturnIssueController.java new file mode 100644 index 00000000..2b8f3058 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ReturnIssueController.java @@ -0,0 +1,124 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.controller; + +import com.core.common.core.domain.R; +import com.openhis.web.inventorymanage.appservice.IReturnIssueAppService; +import com.openhis.web.inventorymanage.dto.IssueDto; +import com.openhis.web.inventorymanage.dto.IssueSearchParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * 退货出库 controller + * + * @author CY + * @date 2025-04-08 + */ +@RestController +@RequestMapping("/issue-manage/return") +@Slf4j +public class ReturnIssueController { + + @Autowired + private IReturnIssueAppService returnIssueAppService; + + /** + * 退货出库页面初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R returnIssueInit() { + return returnIssueAppService.returnIssueInit(); + } + + /** + * 单据号初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/bus-no-init") + public R returnIssueNoInit() { + return returnIssueAppService.returnIssueNoInit(); + } + + /** + * 退货出库单据列表 + * + * @param issueSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 退货出库单据分页列表 + */ + @GetMapping(value = "/return-issue-page") + public R getPage(IssueSearchParam issueSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return returnIssueAppService.getPage(issueSearchParam, pageNo, pageSize, searchKey, request); + } + + /** + * 退货出库单据详情 + * + * @param busNo 单据号 + * @return 退货出库单据详情 + */ + @GetMapping(value = "/return-issue-detail") + public R getDetail(@RequestParam String busNo) { + return returnIssueAppService.getDetail(busNo); + } + + /** + * 添加/编辑退货出库单据(批量) + * + * @param returnIssueDtoList 退货出库单据 + * @return 操作结果 + */ + @PutMapping("/return-issue-edit") + public R addOrEditInventoryReceipt(@Validated @RequestBody List returnIssueDtoList ) { + return returnIssueAppService.addOrEditIssueReceipt(returnIssueDtoList); + } + + /** + * 删除单据 + * + * @param supplyRequestIds 供应请求id + * @return 操作结果 + */ + @DeleteMapping("/return-issue-del") + public R deleteInventoryReceipt(@RequestParam List supplyRequestIds) { + return returnIssueAppService.deleteReceipt(supplyRequestIds); + } + + /** + * 提交审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @PutMapping("/submit-approval") + public R submitApproval(@RequestBody String busNo) { + return returnIssueAppService.submitApproval(busNo); + } + + /** + * 撤回审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @PutMapping("/withdraw-approval") + public R withdrawApproval(@RequestBody String busNo) { + return returnIssueAppService.withdrawApproval(busNo); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/BatchTransferSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/BatchTransferSearchParam.java new file mode 100644 index 00000000..e9dbfed3 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/BatchTransferSearchParam.java @@ -0,0 +1,31 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import java.util.Date; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 生成批量调拨单查询条件 + * + * @author yangmo + * @date 2025-04-21 + */ +@Data +@Accessors(chain = true) +public class BatchTransferSearchParam { + + /** 源仓库 */ + private Long sourceLocationId; + + /** 目的仓库 */ + private Long purposeLocationId; + + /** 药品类型 */ + private Integer medicationType; // 1:药品 , 2: 耗材 , 3:诊疗 + private String medicationType_enumText; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryDetailsPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryDetailsPageDto.java new file mode 100644 index 00000000..242c39e6 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryDetailsPageDto.java @@ -0,0 +1,139 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import java.io.Serializable; +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; + +/** + * 库存相关明细 + * + * @author + * @date 2025-03-10 + */ +@Data +@Accessors(chain = true) +public class InventoryDetailsPageDto implements Serializable { + + /** ------------------------------------共通------------------------------------ */ + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 单据号 */ + private String busNo; + + /** 单据状态 */ + private String statusEnum; + + /** 项目类型 */ + private Integer itemTable; + private String itemTableText; + + /** 项目编码 */ + private Long itemNo; + + /** 项目名称 */ + private String itemName; + + /** 项目规格 */ + private String itemVolume; + + /** 厂家 */ + private String manufacturerText; + + /** 产品批号 */ + private String lotNumber; + + /** 数量 */ + private BigDecimal itemQuantity; + + /** 单价 */ + private BigDecimal price; + + /** 总价 */ + private BigDecimal totalPrice; + + /** 物品计量单位 */ + private String unitCode; + + /** 目的仓库类型 */ + private Integer purposeType; + private String purposeTypeText; + + /** 目的仓库 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_location") + private Long purposeLocationId; + private String purposeLocationId_dictText; + + /** 目的仓位 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_location") + private Long purposeLocationStoreId; + private String purposeLocationStoreId_dictText; + + /** 部门 */ + private String orgName; + + /** 审批时间 */ + private Date approvalTime; + + /** 有效时间 */ + private Date expirationTime; + + /** 申请人(制单人) */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + private Long applicantId; + private String applicantIddictText; + + /** 审批人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + private Long approverId; + private String approverId_dictText; + + /** ------------------------------------采购入库用------------------------------------ */ + /** 供应商 */ + private String supName; + + /** ------------------------------------商品调拨用------------------------------------ */ + /** 源仓库类型 */ + private Integer sourceType; + private String sourceTypeText; + + /** 源仓库 */ + private String sourceLocation; + + /** 源货位 */ + private String sourceLocationStore; + + /** ------------------------------------商品盘点用------------------------------------ */ + /** 盘前数量 */ + private BigDecimal beforeStockQuantity; + + /** 盘后数量 */ + private BigDecimal afterStockQuantity; + + /** 盈亏数量 */ + private BigDecimal lossQuantity; + + /** 盈亏原因 */ + private String reason; + + /** ------------------------------------领用出库用------------------------------------ */ + /** 采购批次流水号 */ + private String supplyBusNo; + + /** 期望时间(制单日期) */ + private String occurrenceTime; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryDetailsSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryDetailsSearchParam.java new file mode 100644 index 00000000..4b04f851 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryDetailsSearchParam.java @@ -0,0 +1,45 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 库存相关明细查询条件 + * + * @author + * @date 2025-03-10 + */ +@Data +@Accessors(chain = true) +public class InventoryDetailsSearchParam implements Serializable { + + /** -------------------------共通------------------------- */ + /** 单据号 */ + private String busNo; + + /** 项目名称 */ + private String itemName; + + /** 项目编码 */ + private String itemId; + + /** 仓库 */ + private String locationId; + + /** 制单日期 */ + private Date occurrenceTime; + + /** -------------------------采购入库用------------------------- */ + /** 项目类型 */ + private Integer categoryType; + + /** -------------------------商品盘点用------------------------- */ + /** 盘点状态 */ + private String stockStatus; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueDepartmentDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueDepartmentDto.java new file mode 100644 index 00000000..80242c13 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueDepartmentDto.java @@ -0,0 +1,36 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * 领用/退货部门列表 dto + * + * @author CY + * @date 2025-04-03 + */ +@Data +@Accessors(chain = true) +public class IssueDepartmentDto { + + /** + * 部门id + */ + private String locationId; + + /** + * 名称 + */ + private String name; + + /** + * 部门类型枚举 + */ + private String typeEnum; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueDetailDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueDetailDto.java new file mode 100644 index 00000000..1af633a3 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueDetailDto.java @@ -0,0 +1,159 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +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 com.openhis.web.common.dto.UnitDto; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotNull; + +/** + * 单据详情 + * + * @author CY + * @date 2025-04-03 + */ +@Data +@Accessors(chain = true) +public class IssueDetailDto { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 单据号 */ + private String busNo; + + /** 药品类型 */ + private String itemType; + + /** 当前库存总数 */ + private BigDecimal totalQuantity; + + /** 数量 */ + private BigDecimal itemQuantity; + + /** 物品编码 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long itemId; + + /** 物品名称 */ + private String itemName; + + /** 拆零比 */ + private String partPercent; + + /** 规格 */ + private String totalVolume; + + /** 物品计量单位 */ + @Dict(dictCode = "unit_code") + private String measurementUnitCode; + private String measurementUnitCode_dictText; + + /** 包装单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 最小单位 */ + @Dict(dictCode = "unit_code") + private String minUnitCode; + private String minUnitCode_dictText; + + /** 请求细节 */ + private String detailJson; + + /** 经办人 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long practitionerId; + + /** 经办人名称 */ + private String practitionerName; + + /** 供应商名称 */ + private String supplierName; + + /** 生产厂商 */ + private String manufacturer; + + /** 医保编码 */ + private String ybNo; + + /** 源仓库类型 */ + private Integer sourceTypeEnum; + + /** 源仓库id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long sourceLocationId; + + /** 源仓库名称 */ + private String sourceLocationName; + + /** 源货位id */ + private Long sourceLocationStoreId; + + /** 源仓位名称 */ + private String sourceLocationStoreName; + + /** 目的仓库类型 */ + private Integer purposeTypeEnum; + + /** 目的仓库id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long purposeLocationId; + + /** 目的仓库名称 */ + private String purposeLocationName; + + /** 目的货位id */ + private Long purposeLocationStoreId; + + /** 目的仓位名称 */ + private String purposeLocationStoreName; + + /** 申请时间 */ + private Date applyTime; + + /** 产品批号 */ + private String lotNumber; + + /** 追溯码 */ + private String traceNo; + + /** 发票号 */ + private String invoiceNo; + + /** 开始时间 */ + private Date startTime; + + /** 结束时间 */ + private Date endTime; + + /** 单价 */ + private BigDecimal price; + + /** 总价 */ + private BigDecimal totalPrice; + + /** 备注 */ + private String remake; + + /** + * 单位列表 + */ + private List unitList; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueDto.java new file mode 100644 index 00000000..4307f81d --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueDto.java @@ -0,0 +1,118 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import java.math.BigDecimal; +import java.util.Date; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +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 lombok.Data; +import lombok.experimental.Accessors; + +/** + * 出库单据 + * + * @author CY + * @date 2025-04-07 + */ +@Data +@Accessors(chain = true) +public class IssueDto { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 单据号 */ + private String busNo; + + /** 项目 */ + private String itemTable; + + /** 数量 */ + @NotNull + @Min(1) + private BigDecimal itemQuantity; + + /** 物品编码 */ + @NotNull + @JsonSerialize(using = ToStringSerializer.class) + private Long itemId; + + /** 物品计量单位 */ + @NotNull + private String unitCode; + + /** 请求细节 */ + private String detailJson; + + /** 供应商 */ + private Long supplierId; + + /** 源仓库类型 */ + @NotNull + private Integer sourceTypeEnum; + + /** 源仓库 */ + @NotNull + private Long sourceLocationId; + + /** 源仓位 */ + private Long sourceLocationStoreId; + + /** 目的仓库类型 */ + @NotNull + private Integer purposeTypeEnum; + + /** 目的仓库 */ + @NotNull + private Long purposeLocationId; + + /** 目的仓位 */ + private Long purposeLocationStoreId; + + /** 申请人 */ + private Long applicantId; + + /** 经手人 */ + private Long practitionerId; + + /** 申请时间 */ + private Date applyTime; + + /** 产品批号 */ + @NotNull + private String lotNumber; + + /** 追溯码 */ + private String traceNo; + + /** 发票号 */ + private String invoiceNo; + + /** 开始时间 */ + @NotNull + private Date startTime; + + /** 结束时间 */ + @NotNull + private Date endTime; + + /** 单价 */ + private BigDecimal price; + + /** 总价 */ + private BigDecimal totalPrice; + + /** 备注 */ + private String remake; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueInitDto.java new file mode 100644 index 00000000..f5707e0d --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueInitDto.java @@ -0,0 +1,110 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.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 CY + * @date 2025-04-03 + */ +@Data +@Accessors(chain = true) +public class IssueInitDto { + + /** + * 单据号 + */ + private String busNo; + + /** + * 供应商 + */ + private List supplierListOptions; + + /** + * 经手人 + */ + private List practitionerListOptions; + + /** + * 部门列表 + */ + private List issueDepartmentDto; + + /** + * 项目类型 + */ + private List itemTypeOptions; + + /** + * 审批状态 + */ + private List supplyStatusOptions; + + /** + * 供应商 + */ + @Data + public static class supplierListOption { + @JsonSerialize(using = ToStringSerializer.class) + private Long value; + private String label; + + public supplierListOption(Long value, String label) { + this.value = value; + this.label = label; + } + } + + /** + * 经手人 + */ + @Data + public static class practitionerListOption { + @JsonSerialize(using = ToStringSerializer.class) + private Long value; + private String label; + + public practitionerListOption(Long value, String label) { + this.value = value; + this.label = label; + } + } + + /** + * 项目类型 + */ + @Data + public static class itemTypeOption { + private Integer value; + private String label; + + public itemTypeOption(Integer value, String label) { + this.value = value; + this.label = label; + } + } + + /** + * 审批状态 + */ + @Data + public static class supplyStatusOption { + private Integer value; + private String label; + + public supplyStatusOption(Integer value, String label) { + this.value = value; + this.label = label; + } + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssuePageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssuePageDto.java new file mode 100644 index 00000000..f7c0db6b --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssuePageDto.java @@ -0,0 +1,80 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +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.math.BigDecimal; +import java.util.Date; + +/** + * 单据分页列表 dto + * + * @author CY + * @date 2025-04-08 + */ +@Data +@Accessors(chain = true) +public class IssuePageDto { + + /** 单据号 */ + private String supplyBusNo; + + /** 状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + + /** 类型 */ + private Integer typeEnum; + private String typeEnum_enumText; + + /** 供应商 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_supplier") + @JsonSerialize(using = ToStringSerializer.class) + private Long supplierId; + private String supplierId_dictText; + + /** 部门名称 */ + private String locationName; + + /** 经手人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + @JsonSerialize(using = ToStringSerializer.class) + private Long practitionerId; + private String practitionerId_dictText; + + /** 审批人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + private Long approverId; + private String approverId_dictText; + + /** 审批时间 */ + private Date approvalTime; + + /** 申请人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + private Long applicantId; + private String applicantId_dictText; + + /** 申请时间 */ + private Date applyTime; + + /** 制单日期 */ + private Date createTime; + + /** 备注 */ + private String remake; + + /** 项目所在表名 */ + private String itemTable; + + /** 目的仓库类型 */ + private Integer purposeTypeEnum; + private String purposeTypeEnum_enumText; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueSearchParam.java new file mode 100644 index 00000000..99edcf1f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/IssueSearchParam.java @@ -0,0 +1,42 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; + +/** + * 出库单据分页查询条件 + * + * @author CY + * @date 2025-04-10 + */ +@Data +@Accessors(chain = true) +public class IssueSearchParam { + + /** 单据号 */ + private String supplyBusNo; + + /** 审批状态 */ + private Integer statusEnum; + + /** 经手人 */ + private Long practitionerId; + + /** 单据时间 */ + private Date createTime; + + /** 源仓库 */ + private Long sourceLocationId; + + /** 目的仓库 */ + private Long purposeLocationId; + + /** 目的仓库类型 */ + private Integer purposeTypeEnum; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/LossReportFormDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/LossReportFormDto.java new file mode 100644 index 00000000..288f30bf --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/LossReportFormDto.java @@ -0,0 +1,108 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import java.math.BigDecimal; +import java.util.Date; + +import javax.validation.constraints.Min; +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; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 报损单 + * + * @author gyy + * @date 2025-04-07 + */ +@Data +@Accessors(chain = true) +public class LossReportFormDto { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 单据号 */ + private String busNo; + + /** 项目 */ + private String itemTable; + + /** 报损数量 */ + @NotNull + private BigDecimal itemQuantity; + + /** 物品编码 */ + @NotNull + private Long itemId; + + /** 物品计量单位 */ + @NotNull + private String unitCode; + + /** 报损原因 */ + private String lossReason; + + /** 供应商 */ + @NotNull + private Long supplierId; + + /** 报损仓库类型 */ + @NotNull + private Integer lossTypeEnum; + + /** 报损仓库 */ + @NotNull + private Long lossLocationId; + + /** 报损仓位 */ + private Long lossLocationStoreId; + + /** 申请人 */ + @NotNull + private Long applicantId; + + /** 申请时间 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date applyTime; + + /** 审批人 */ + //@NotNull + private Long approverId; + + /** 审批日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date approvalTime; + + /** 产品批号 */ + @NotNull + private String lotNumber; + + /** 开始时间 */ + @NotNull + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") + private Date startTime; + + /** 结束时间 */ + @NotNull + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") + private Date endTime; + + /** 单价 */ + private BigDecimal price; + + /** 总价 */ + private BigDecimal totalPrice; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/LossReportFormInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/LossReportFormInitDto.java new file mode 100644 index 00000000..af0a71dc --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/LossReportFormInitDto.java @@ -0,0 +1,92 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import java.util.List; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.openhis.web.basedatamanage.dto.LocationDto; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 报损单初始化 dto + * + * @author gyy + * @date 2025-04-03 + */ +@Data +@Accessors(chain = true) +public class LossReportFormInitDto { + + /** + * 单据号 + */ + private String busNo; + + /** + * 报损仓库 + */ + private List WarehouseTypeList; + + /** + * 药品类型 + */ + private List categoryListOptions; + + /** + * 审批状态 + */ + private List supplyStatusOptions; + + /** + * 制单人 + */ + private List applicantListOptions; + + /** + * 药品类型 + */ + @Data + public static class categoryListOption { + private Integer value; + private String label; + + public categoryListOption(Integer value, String label) { + this.value = value; + this.label = label; + } + } + + /** + * 审批状态 + */ + @Data + public static class supplyStatusOption { + private Integer value; + private String label; + + public supplyStatusOption(Integer value, String label) { + this.value = value; + this.label = label; + } + } + + /** + * 制单人 + */ + @Data + public static class applicantListOption { + private Long value; + private String label; + + public applicantListOption(Long value, String label) { + this.value = value; + this.label = label; + } + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/LossReportFormPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/LossReportFormPageDto.java new file mode 100644 index 00000000..2b609caf --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/LossReportFormPageDto.java @@ -0,0 +1,65 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.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 gyy + * @date 2025-04-03 + */ +@Data +@Accessors(chain = true) +public class LossReportFormPageDto { + + /** 单据号 */ + private String supplyBusNo; + + /** 单据类型 */ + private Integer type; + private String type_enumText; + + /** 单据状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + + /** 数量 */ + private BigDecimal quantity; + + /** 盘点仓库名称 */ + private String inventoryLocationName; + + /** 报损金额 */ + private BigDecimal reportedLossAmount; + + /** 审批人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + private Long approverId; + private String approverId_dictText; + + /** 审批时间 */ + private Date approvalTime; + + /** 申请人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + private Long applicantId; + private String applicantId_dictText; + + /** 制单日期 */ + private Date createTime; + + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/LossReportSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/LossReportSearchParam.java new file mode 100644 index 00000000..d83f636e --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/LossReportSearchParam.java @@ -0,0 +1,34 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import java.util.Date; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.hibernate.validator.constraints.Length; + +/** + * 报损单分页查询条件 + * + * @author gyy + * @date 2025-04-04 + */ +@Data +@Accessors(chain = true) +public class LossReportSearchParam { + + /** 单据号 */ + @Length(max = 255) + private String busNo; + + /** 状态 */ + private Integer statusEnum; + + /** 制单人 */ + private Long applicantId; + + /** 单据时间 */ + private Date createTime; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsInitDto.java new file mode 100644 index 00000000..2852a9a8 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsInitDto.java @@ -0,0 +1,34 @@ +package com.openhis.web.inventorymanage.dto; + +import com.openhis.web.datadictionary.dto.MedicationManageInitDto; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * 库存商品明细初始dto + * + * @author yuanzs + * @date 2025-05-06 + */ +@Data +@Accessors(chain = true) +public class ProductDetailsInitDto { + + /** 医保等级 */ + private List chrgitmLvOptions; + + /** 状态 */ + @Data + public static class statusEnumOption { + private Integer value; + private String info; + + public statusEnumOption(Integer value, String info) { + this.value = value; + this.info = info; + } + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsPageDto.java new file mode 100644 index 00000000..68353507 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsPageDto.java @@ -0,0 +1,108 @@ +package com.openhis.web.inventorymanage.dto; + +import java.math.BigDecimal; +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; + +/** + * 库存商品明细分页列表 dto + * + * @author yuanzs + * @date 2025-04-24 + */ +@Data +@Accessors(chain = true) +public class ProductDetailsPageDto { + + /** 库存项目管理ID(停供用) */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 药品编码 */ + private String busNo; + + /** 药品名称 */ + private String medicineName; + + /** 规格 */ + private String totalVolume; + + /** 医保等级 */ + private Integer chrgitmLv; + private String chrgitmLv_enumText; + + /** 厂家 */ + private String manufacturerText; + + /** 生产批号 */ + private String lotNumber; + + /** 药品类型 */ + private String categoryCode; + + /** 药品单位(采购单位) */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 库存数量 */ + private BigDecimal quantity; + + /** 拆零比 */ + private BigDecimal partPercent; + + /** 库存单位 */ + @Dict(dictCode = "unit_code") + private String minUnitCode; + private String minUnitCode_dictText; + + /** 采购价格 */ + private BigDecimal price; + + /** 生产日期 */ + private Date productionDate; + + /** 失效日期 */ + private Date expirationDate; + + /** 剩余过期天数 */ + private Integer remainingDays; + + /** 药品追溯码 */ + private String traceNo; + + /** 药品停用 */ + private Integer statusEnum; + private String statusEnum_enumText; + + /** 仓库 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long locationId; + private String locationName; + + /** 货位 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long locationStoreId; + private String locationStoreName; + + /** 仓库类型 */ + private Integer formEnum; + private String formEnum_enumText; + + /** 供应商 */ + @JsonSerialize(using = ToStringSerializer.class) + @Dict(dictTable = "adm_supplier", dictCode = "id", dictText = "name") + private Long supplyId; + private String supplyId_dictText; + + /** 停供状态 */ + private Integer inventoryStatusEnum; + private String inventoryStatusEnum_enumText; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsSearchParam.java new file mode 100644 index 00000000..8c695a97 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsSearchParam.java @@ -0,0 +1,31 @@ +package com.openhis.web.inventorymanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 库存商品明细分页查询条件 + * + * @author yuanzs + * @date 2025-04-24 + */ +@Data +@Accessors(chain = true) +public class ProductDetailsSearchParam { + + /** 剩余过期天数 */ + private Integer remainingDays; + + /** 项目类型 */ + private Integer categoryCode; + + /** 医保等级 */ + private Integer chrgitmLv; + + /** 仓库药房 */ + private Long locationId; + + /** 库存范围 */ + private Integer warehouseScope; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductStocktakingInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductStocktakingInitDto.java new file mode 100644 index 00000000..60e0bd6a --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductStocktakingInitDto.java @@ -0,0 +1,109 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import java.util.List; + +import com.openhis.web.basedatamanage.dto.LocationDto; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 商品入库初始化 dto + * + * @author yxj + * @date 2025-04-3 + */ +@Data +@Accessors(chain = true) +public class ProductStocktakingInitDto { + + /** + * 单据号 + */ + private String busNo; + + /** + * 审批状态 + */ + private List supplyStatusOptions; + + /** + * 制单人 + */ + private List applicantListOptions; + + /** + * 药品类型 + */ + private List categoryListOptions; + + /** + * 仓库 + */ + private List cabinetListOptions; + + /** + * 药房 + */ + private List pharmacyListOptions; + + /** + * 审批状态 + */ + @Data + public static class supplyStatusOption { + private Integer value; + private String label; + + public supplyStatusOption(Integer value, String label) { + this.value = value; + this.label = label; + } + } + + /** + * 制单人 + */ + @Data + public static class applicantListOption { + private Long value; + private String label; + + public applicantListOption(Long value, String label) { + this.value = value; + this.label = label; + } + } + + /** + * 盈亏原因 + */ + @Data + public static class profitReasonOption { + private Integer value; + private String label; + + public profitReasonOption(Integer value, String label) { + this.value = value; + this.label = label; + } + } + + /** + * 药品类型 + */ + @Data + public static class categoryListOption { + private Integer value; + private String label; + + public categoryListOption(Integer value, String label) { + this.value = value; + this.label = label; + } + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductStocktakingSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductStocktakingSearchParam.java new file mode 100644 index 00000000..309eb00d --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductStocktakingSearchParam.java @@ -0,0 +1,38 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import java.util.Date; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 商品盘点分页查询条件 + * + * @author yuxj + * @date 2025-04-08 + */ +@Data +@Accessors(chain = true) +public class ProductStocktakingSearchParam { + + /** 状态 */ + private Integer statusEnum; + + /** 申请人 */ + private Long applicantId; + + /** 单据时间 */ + private Date createTime; + + /** 目的仓库类型 */ + private Integer purposeTypeEnum; + + /** 仓库 */ + private String purposeLocationId; + + /** 货位 */ + private String purposeLocationStoreId; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnDetailDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnDetailDto.java new file mode 100644 index 00000000..e7d80b2c --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnDetailDto.java @@ -0,0 +1,164 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +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 com.openhis.web.common.dto.UnitDto; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 退货单据详情 + * + * @author yuanzs + * @date 2025-04-02 + */ +@Data +@Accessors(chain = true) +public class PurchaseReturnDetailDto { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 采购入库ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long purchaseId; + + /** 单据号 */ + private String busNo; + + /** 原始单据号 */ + private String originalBusNo; + + /** 退库数量(数量) */ + private BigDecimal itemQuantity; + + /** 已退数量 */ + private BigDecimal returnedQuantity; + + /** 当前库存总数 */ + private BigDecimal quantity; + + /** 采购数量 */ + private BigDecimal purchaseQuantity; + + /** 采购单价 */ + private BigDecimal price; + + /** 总价 */ + private BigDecimal totalPrice; + + /** 采购单位 */ + @Dict(dictCode = "unit_code") + private String purchaseUnitCode; + private String purchaseUnitCode_dictText; + + /** 物品计量单位 */ + @Dict(dictCode = "unit_code") + private String measurementUnitCode; + private String measurementUnitCode_dictText; + + /** 包装单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 最小单位 */ + @Dict(dictCode = "unit_code") + private String minUnitCode; + private String minUnitCode_dictText; + + /** 目的仓库名称 */ + private String purposeLocationName; + + /** 目的货位名称 */ + private String purposeLocationStoreName; + + /** 物品编码 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long itemId; + + /** 物品名称 */ + private String itemName; + + /** 项目 */ + private String itemTable; + + /** 规格 */ + private String totalVolume; + + /** 生产厂商 */ + private String manufacturer; + + /** 产品批号 */ + private String lotNumber; + + /** 备注 */ + private String remake; + + /** 退库原因 */ + private String reason; + + /** 目的仓库ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long purposeLocationId; + + /** 目的货位ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long purposeLocationStoreId; + + /** 拆零比 */ + private BigDecimal partPercent; + + /** 经办人 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long practitionerId; + + /** 供应商id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long supplierId; + + /** 供应商名称 */ + private String supplierName; + + /** 药品类型 */ + private Integer itemType; // 1:药品 , 2: 耗材 , 3:诊疗 + private String itemType_enumText; + + /** 目的仓库类型 */ + private Integer purposeTypeEnum; + private String purposeTypeEnum_dictText; + + /** 开始时间 */ + private Date startTime; + + /** 结束时间 */ + private Date endTime; + + /** 发票号 */ + private String invoiceNo; + + /** 追溯码 */ + private String traceNo; + + /** 追溯码包装层级 */ + private String packagingLevels; + + /** + * 单位列表 + */ + private List unitList; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnInitDto.java new file mode 100644 index 00000000..e9a22d8d --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnInitDto.java @@ -0,0 +1,39 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * 采购退货 dto + * + * @author yuanzs + * @date 2025-04-02 + */ +@Data +@Accessors(chain = true) +public class PurchaseReturnInitDto { + + /** + * 经手人 + */ + private List practitionerListOptions; + + /** + * 经手人 + */ + @Data + public static class practitionerListOption { + private Long value; + private String label; + + public practitionerListOption(Long value, String label) { + this.value = value; + this.label = label; + } + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnPageDto.java new file mode 100644 index 00000000..0cdd8352 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnPageDto.java @@ -0,0 +1,83 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.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.util.Date; + +/** + * 入库单据分页列表 dto + * + * @author yuanzs + * @date 2025-04-02 + */ +@Data +@Accessors(chain = true) +public class PurchaseReturnPageDto { + + /** 单据号 */ + private String supplyBusNo; + + /** 原始单据号 */ + private String originalSupplyBusNo; + + /** 状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + + /** 经手人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + @JsonSerialize(using = ToStringSerializer.class) + private Long practitionerId; + private String practitionerId_dictText; + + /** 退货原因 */ + private String reason; + + /** 审核意见 */ + private String remake; + + /** 申请人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + @JsonSerialize(using = ToStringSerializer.class) + private Long applicantId; + private String applicantId_dictText; + + /** 审批人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + @JsonSerialize(using = ToStringSerializer.class) + private Long approverId; + private String approverId_dictText; + + /** 期望日期(制单日期) */ + @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; + + /** 审批时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JSONField(name="approval_time") + private Date approvalTime; + + /** 供应商 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_supplier") + @JsonSerialize(using = ToStringSerializer.class) + private Long supplierId; + private String supplierId_dictText; + + /** 类型 */ + private Integer typeEnum; + private String typeEnum_enumText; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnSearchParam.java new file mode 100644 index 00000000..95535aaf --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/PurchaseReturnSearchParam.java @@ -0,0 +1,31 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.hibernate.validator.constraints.Length; + +import java.util.Date; + +/** + * 退货单据分页查询条件 + * + * @author yuanzs + * @date 2025-04-02 + */ +@Data +@Accessors(chain = true) +public class PurchaseReturnSearchParam { + + /** 单据号 */ + @Length(max = 255) + private String busNo; + + /** 经手人 */ + private Long practitionerId; + + /** 单据时间 */ + private Date occurrenceTime; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/StocktakingBatchSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/StocktakingBatchSearchParam.java new file mode 100644 index 00000000..cb0b1c9f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/StocktakingBatchSearchParam.java @@ -0,0 +1,26 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 生成批量盘点单查询条件 + * + * @author yangmo + * @date 2025-04-21 + */ +@Data +@Accessors(chain = true) +public class StocktakingBatchSearchParam { + + /** 盘点仓库 */ + private Long sourceLocationId; + + /** 药品类型 */ + private Integer medicationType; // 1:药品 , 2: 耗材 , 3:诊疗 + private String medicationType_enumText; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/LossReportFormMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/LossReportFormMapper.java new file mode 100644 index 00000000..880c6d51 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/LossReportFormMapper.java @@ -0,0 +1,48 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.mapper; + +import java.util.List; + +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; +import com.openhis.web.inventorymanage.dto.LossReportFormPageDto; +import com.openhis.web.inventorymanage.dto.LossReportSearchParam; +import com.openhis.web.inventorymanage.dto.ReceiptDetailDto; + +/** + * 报损单查询用 mapper + * + * @author gyy + * @date 2025-04-03 + */ +@Repository +public interface LossReportFormMapper { + + /** + * 查询报损单单据分页列表 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param lossReportForm 单据类型:报损单 + * @return 报损单单据分页列表 + */ + Page selectLossReportFormPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("lossReportForm") Integer lossReportForm); + + /** + * 查询单据详情 + * + * @param busNo 单据号 + * @return 单据详情 + */ + List selectDetail(@Param("busNo") String busNo, @Param("medicine") Integer medicine, + @Param("device") Integer device, @Param("medicationTableName") String medicationTableName, + @Param("deviceTableName") String deviceTableName); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ProductDetailsMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ProductDetailsMapper.java new file mode 100644 index 00000000..7a4e5e01 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ProductDetailsMapper.java @@ -0,0 +1,34 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.mapper; + +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; +import com.openhis.web.inventorymanage.dto.ProductDetailsPageDto; +import com.openhis.web.inventorymanage.dto.ProductDetailsSearchParam; + +/** + * 库存商品明细查询用 mapper + * + * @author yuanzs + * @date 2025-04-25 + */ +@Repository +public interface ProductDetailsMapper { + + /** + * 查询库存商品明细分页列表 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @return 库存商品明细分页列表 + */ + Page selectProductDetailsPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ProductStocktakingMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ProductStocktakingMapper.java new file mode 100644 index 00000000..415b8483 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ProductStocktakingMapper.java @@ -0,0 +1,66 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.mapper; + +import java.util.List; + +import com.openhis.web.inventorymanage.dto.*; +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 zwh + * @date 2025-03-10 + */ +@Repository +public interface ProductStocktakingMapper { + + /** + * 查询盘点单据分页列表 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param productStocktaking 单据类型:商品盘点 + * @param BatchStocktaking 单据类型:商品批量盘点 + * @return 盘点单据分页列表 + */ + Page selectStocktakingReceiptPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("productStocktaking") Integer productStocktaking, @Param("BatchStocktaking") Integer BatchStocktaking); + + /** + * 查询单据详情 + * + * @param page 分页 + * @param busNo 单据号 + * @param medicationTableName 药品表名 + * @param deviceTableName 耗材表名 + * @return 单据详情 + */ + Page selectDetail(@Param("page") Page page, + @Param("busNo") String busNo, @Param("medicine") Integer medicine, @Param("device") Integer device, + @Param("medicationTableName") String medicationTableName, @Param("deviceTableName") String deviceTableName);; + + /** + * 生成批量盘点单 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param sourceLocationId 盘点仓库id + * @param medicationTableName 药品表名 + * @param deviceTableName 耗材表名 + * @return 入库单据分页列表 + */ + Page selectStocktakingReceiptDetail(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("sourceLocationId") Long sourceLocationId, @Param("medicationTableName") String medicationTableName, + @Param("deviceTableName") String deviceTableName, @Param("medicine") Integer medicine, + @Param("device") Integer device, @Param("inventoryStatusEnum") Integer inventoryStatusEnum); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/PurchaseReturnMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/PurchaseReturnMapper.java new file mode 100644 index 00000000..869e1347 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/PurchaseReturnMapper.java @@ -0,0 +1,46 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.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.inventorymanage.dto.*; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 采购退货查询用 mapper + * + * @author yuanzs + * @date 2025-04-02 + */ +@Repository +public interface PurchaseReturnMapper { + + /** + * 查询退货单据详情 + * + * @param busNo 单据号 + * @param purchaseReturn 类型:采购退货 + * @param agree 请求状态:同意 + * @return 退货单据列表 + */ + List selectDetail(@Param("busNo") String busNo, + @Param("medicationTableName") String medicationTableName, @Param("deviceTableName") String deviceTableName, + @Param("medicine") Integer medicine, @Param("device") Integer device, + @Param("purchaseReturn") Integer purchaseReturn, @Param("agree") Integer agree); + + /** + * 查询已生成的退货单 + * + * @param busNo 单据号 + * @param purchaseReturn 类型:采购退货 + * @return 就诊患者账单列表 + */ + List selectGeneratedDetail(@Param("busNo") String busNo, + @Param("purchaseReturn") Integer purchaseReturn); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/RequisitionIssueMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/RequisitionIssueMapper.java new file mode 100644 index 00000000..baa1deee --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/RequisitionIssueMapper.java @@ -0,0 +1,52 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.mapper; + +import java.util.List; + +import com.openhis.web.inventorymanage.dto.*; +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 CY + * @date 2025-04-03 + */ +@Repository +public interface RequisitionIssueMapper { + /** + * 查询领用部门列表 + * + * @return 领用部门列表 + */ + List selectRequisitionDepartment(@Param("department") Integer department); + + /** + * 查询领用出库单据分页列表 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param issueInventory 单据类型:领用出库 + * @return 领用出库单据分页列表 + */ + Page selectRequisitionIssuePage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("issueInventory") Integer issueInventory); + + /** + * 查询单据详情 + * + * @param busNo 单据号 + * @return 单据详情 + */ + List requisitionIssueDetail(@Param("busNo") String busNo, + @Param("medicationTableName") String medicationTableName, @Param("deviceTableName") String deviceTableName, + @Param("medicine") Integer medicine, @Param("device") Integer device); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ReturnIssueMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ReturnIssueMapper.java new file mode 100644 index 00000000..86c5b3c3 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ReturnIssueMapper.java @@ -0,0 +1,52 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.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.inventorymanage.dto.*; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; +import com.openhis.web.inventorymanage.dto.IssueSearchParam; + +import java.util.List; + +/** + * 退货出库查询用 mapper + * + * @author CY + * @date 2025-04-08 + */ +@Repository +public interface ReturnIssueMapper { + /** + * 查询退货部门列表 + * + * @return 退货部门列表 + */ + List selectReturnIssueDepartment(@Param("department") Integer department); + + /** + * 查询退货出库单据分页列表 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param issueInventory 单据类型:退货出库 + * @return 领用出库单据分页列表 + */ + Page selectReturnIssuePage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("issueInventory") Integer issueInventory); + + /** + * 查询单据详情 + * + * @param busNo 单据号 + * @return 单据详情 + */ + List returnIssueDetail(@Param("busNo") String busNo, + @Param("medicationTableName") String medicationTableName, @Param("deviceTableName") String deviceTableName, + @Param("medicine") Integer medicine, @Param("device") Integer device); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/appservice/INurseStationPendAdmAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/appservice/INurseStationPendAdmAppService.java new file mode 100644 index 00000000..97609e5d --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/appservice/INurseStationPendAdmAppService.java @@ -0,0 +1,67 @@ +package com.openhis.web.nursestation.appservice; + +import com.core.common.core.domain.R; +import com.openhis.web.nursestation.dto.BedForAdmissionDto; +import com.openhis.web.nursestation.dto.PendingAdmissionDto; + +/** + * 待入科 应用接口 + * + * @author liuhr + * @date 2025/4/14 + */ +public interface INurseStationPendAdmAppService { + + /** + * 待入科的初始化数据 + * + * @return + */ + R getPendAdmInit(); + + /** + * 选择科室后,查询科室对应病区列表 + * + * @return 病区列表 + */ + R getWardLocationList(Long orgId); + + /** + * 查询待入科的患者列表 + * + * @return 待入科的患者列表 + */ + R getPendAdmInfo(); + + /** + * 病区的病床信息 + * + * @param wardLocationId 病区ID + * @return 病床列表 + */ + R getBedList(Long wardLocationId); + + /** + * 患者选床入科 + * + * @param bedInfoDto 病床信息 + * @return 选床入科 + */ + R selectBedForAdmission(BedForAdmissionDto bedInfoDto); + + /** + * 根据入院科室查询医生列表 + * + * @param orgId 入院科室Id + * @return 医生列表 + */ + R getDoctorList(Long orgId); + + /** + * 根据入院科室查询护士列表 + * + * @param orgId 入院科室Id + * @return 护士列表 + */ + R getNurseList(Long orgId); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/appservice/impl/NurseStationPendAdmAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/appservice/impl/NurseStationPendAdmAppServiceImpl.java new file mode 100644 index 00000000..4c009d98 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/appservice/impl/NurseStationPendAdmAppServiceImpl.java @@ -0,0 +1,271 @@ +package com.openhis.web.nursestation.appservice.impl; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.core.common.core.domain.R; +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.common.constant.CommonConstants; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.*; +import com.openhis.common.utils.EnumUtils; +import com.openhis.web.nursestation.appservice.INurseStationPendAdmAppService; +import com.openhis.web.nursestation.dto.BedForAdmissionDto; +import com.openhis.web.nursestation.dto.BedForAdmissionInitDto; +import com.openhis.web.nursestation.dto.PendingAdmissionDto; +import com.openhis.web.nursestation.mapper.NurseStationPendAdmAppMapper; + +/** + * 待入科 应用接口实现 + * + * @author liuhr + * @date 2025/4/14 + */ +@Service +public class NurseStationPendAdmAppServiceImpl implements INurseStationPendAdmAppService { + + @Autowired + private NurseStationPendAdmAppMapper nsPendAdmAppMapper; + + @Autowired + private IEncounterLocationService encounterLocationService; + + @Autowired + private IPractitionerRoleService practitionerRoleService; + + @Autowired + private ILocationService locationService; + + @Autowired + private IEncounterService encounterService; + @Autowired + private IEncounterParticipantService encounterParticipantService; + + /** + * 待入科的初始化数据 + * + * @return + */ + @Override + public R getPendAdmInit() { + + BedForAdmissionInitDto initDto = new BedForAdmissionInitDto(); + + // 获取当前登录账号的参与者id + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + // 当前id权限下可以切换科室的列表 + List orgIds = practitionerRoleService.getOrgIdsByPractitionerId(practitionerId); + // 查询该账号权限可以切换的科室列表 + List locationList = locationService.getLocationList(orgIds); + + List locationListOptions = locationList.stream() + .map(location -> new BedForAdmissionInitDto.exeOrganization(location.getId(), location.getName())) + .collect(Collectors.toList()); + initDto.setLocationListOptions(locationListOptions); + + // 获取患者病情列表 + List statusEnumOptions = Stream.of(PriorityLevel.values()) + .map(status -> new BedForAdmissionInitDto.statusEnumOption(status.getValue(), status.getInfo())) + .collect(Collectors.toList()); + initDto.setPriorityListOptions(statusEnumOptions); + + return R.ok(initDto); + + } + + /** + * 选择科室后,查询科室对应病区列表 + * + * @return 病区列表 + */ + @Override + public R getWardLocationList(Long orgId) { + + List locationList = locationService.getWardList(orgId); + List wardList = locationList.stream() + .map(location -> new BedForAdmissionInitDto.exeOrganization(location.getId(), location.getName())) + .collect(Collectors.toList()); + + return R.ok(wardList); + + } + + /** + * 查询待入科的患者列表 + * + * @return 待入科的患者列表 + */ + @Override + public R getPendAdmInfo() { + + List pendingAdmissionList = + nsPendAdmAppMapper.getPendAdmInfo(EncounterClass.IMP.getValue(), EncounterLocationStatus.ACTIVE.getValue(), + LocationForm.WARD.getValue(), LocationForm.BED.getValue()); + + pendingAdmissionList.forEach(e -> { + // 计算年龄 + e.setAgeString(AgeCalculatorUtil.getAge(e.getBirthDate())); + // 取病区对应的科室 + Location location = locationService.getLocationById(e.getWardLocationId()); + Long orgId = null; + if (location != null) { + orgId = location.getOrganizationId(); + } + + // 判断是否跨科 + if (orgId == e.getOrganizationId()) { + e.setCrossDeptStatus(Whether.NO.getValue()); + } else { + e.setCrossDeptStatus(Whether.YES.getValue()); + } + // 是否跨科 回显赋值 + e.setCrossDeptStatus_enumText(EnumUtils.getInfoByValue(Whether.class, e.getCrossDeptStatus())); + + List descriptionList = nsPendAdmAppMapper.getDescriptionList(e.getId()); + // 过滤掉 null 值 + List filteredList = descriptionList.stream().filter(Objects::nonNull).collect(Collectors.toList()); + // 诊断病情拼接 + if (descriptionList != null && !descriptionList.isEmpty()) { + // 拼接字符串 + if (!filteredList.isEmpty()) { + e.setDescriptions(String.join(CommonConstants.Common.COMMA, filteredList)); + } + } + + }); + + return R.ok(pendingAdmissionList); + } + + /** + * 病区的病床信息 + * + * @param wardLocationId 病区的ID + * @return 病床列表 + */ + @Override + public R getBedList(Long wardLocationId) { + + List locationList = locationService.getBedList(wardLocationId); + List bedList = locationList.stream() + .map(location -> new BedForAdmissionInitDto.exeOrganization(location.getId(), location.getName())) + .collect(Collectors.toList()); + + return R.ok(bedList); + + } + + /** + * 根据入院科室查询医生列表 + * + * @param orgId 入院科室Id + * @return 医生列表 + */ + @Override + public R getDoctorList(Long orgId) { + + List practitionerRoleList = practitionerRoleService.getDoctorList(orgId); + List doctorList = practitionerRoleList.stream() + .map(practitionerRole -> new BedForAdmissionInitDto.exeOrganization(practitionerRole.getPractitionerId(), + practitionerRole.getName())) + .collect(Collectors.toList()); + + return R.ok(doctorList); + } + + /** + * 根据入院科室查询护士列表 + * + * @param orgId 入院科室Id + * @return 护士列表 + */ + @Override + public R getNurseList(Long orgId) { + + List practitionerRoleList = practitionerRoleService.getNurseList(orgId); + List nurseList = practitionerRoleList.stream() + .map(practitionerRole -> new BedForAdmissionInitDto.exeOrganization(practitionerRole.getPractitionerId(), + practitionerRole.getName())) + .collect(Collectors.toList()); + + return R.ok(nurseList); + } + + /** + * 患者选床入科 + * + * @param bedInfoDto 病床信息 + * @return 选床入科 + */ + @Override + public R selectBedForAdmission(BedForAdmissionDto bedInfoDto) { + + // 1.更新就诊表得患者病情(优先级编码) + Encounter encounter = new Encounter(); + boolean encounterSuccess = + encounterService.updatePriorityEnumById(bedInfoDto.getId(), bedInfoDto.getPriorityEnum()); + + // 2-1.添加就诊病床location + EncounterLocation encounterLocation = new EncounterLocation(); + encounterLocation.setLocationId(bedInfoDto.getBedLocationId()).setEncounterId(bedInfoDto.getId()) + // 设置物理枚举为 8:病床 + .setFormEnum(LocationForm.BED.getValue()) + // 状态为使用中 + .setStatusEnum(EncounterLocationStatus.ACTIVE.getValue()) + // 入科时间 + .setStartTime(bedInfoDto.getStartTime()); + boolean encounterLocationSuccess = encounterLocationService.saveOrUpdateEncounterLocation(encounterLocation); + + // 2-2.如果病区更改了,把之前的病区状态修改为已完成,并插入该就诊号的一个病区记录 + // todo:分床的选的病区,科室,需要存吗,还是只需要存病床号?? + + // 3.更新location表中病床状态 + boolean updateLocationSuccess = + locationService.updateStatusById(bedInfoDto.getBedLocationId(), LocationBedStatus.O.getValue()); + + // 4.添加就诊参与者信息 + List encounterParticipants = new ArrayList<>(); + // 4-1 住院医生 + EncounterParticipant ep1 = new EncounterParticipant(); + ep1.setTypeCode(ParticipantType.ATTENDING_DOCTOR.getCode()).setEncounterId(bedInfoDto.getId()) + .setPractitionerId(bedInfoDto.getAttendingDoctorId()).setStartTime(DateUtils.getNowDate()); + + // 4-2 主任医生 + EncounterParticipant ep2 = new EncounterParticipant(); + ep2.setTypeCode(ParticipantType.CHIEF_DOCTOR.getCode()).setEncounterId(bedInfoDto.getId()) + .setPractitionerId(bedInfoDto.getChiefDoctorId()).setStartTime(DateUtils.getNowDate()); + + // 4-3 主治医生 + EncounterParticipant ep3 = new EncounterParticipant(); + ep3.setTypeCode(ParticipantType.PRINCIPAL_DOCTOR.getCode()).setEncounterId(bedInfoDto.getId()) + .setPractitionerId(bedInfoDto.getPrincipalDoctorId()).setStartTime(DateUtils.getNowDate()); + + // 4-4 责任护士 + EncounterParticipant ep4 = new EncounterParticipant(); + ep4.setTypeCode(ParticipantType.ATTENDER.getCode()).setEncounterId(bedInfoDto.getId()) + .setPractitionerId(bedInfoDto.getAttenderId()).setStartTime(DateUtils.getNowDate()); + + encounterParticipants.add(ep1); + encounterParticipants.add(ep2); + encounterParticipants.add(ep3); + encounterParticipants.add(ep4); + boolean epSaveSuccess = encounterParticipantService.saveBatch(encounterParticipants); + + return encounterSuccess && epSaveSuccess && updateLocationSuccess && encounterLocationSuccess + ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00007, new Object[] {"选床入科"})) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00003, new Object[] {"选床入科"})); + + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/controller/NurseStationPendAdmController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/controller/NurseStationPendAdmController.java new file mode 100644 index 00000000..31378966 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/controller/NurseStationPendAdmController.java @@ -0,0 +1,112 @@ +package com.openhis.web.nursestation.controller; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import com.core.common.core.domain.R; +import com.openhis.web.nursestation.appservice.INurseStationPendAdmAppService; +import com.openhis.web.nursestation.dto.BedForAdmissionDto; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * 护士站——住院待入科 + * + * @author liuhr + * @date 2025/4/14 + */ +@RestController +@RequestMapping("/nurse-station/pending-admission") +@Slf4j +@AllArgsConstructor +public class NurseStationPendAdmController { + + @Autowired + private INurseStationPendAdmAppService nsPendAdmAppService; + + /** + * 待入科数据初始化 + * + * @return 基础数据 + */ + @GetMapping(value = "/init") + public R init() { + + return nsPendAdmAppService.getPendAdmInit(); + } + + /** + * 选择科室后,查询科室对应病区列表 + * + * @param orgId 科室id + * @return 病区列表 + */ + @GetMapping(value = "/ward-location-list") + public R getWardLocationList(@RequestParam Long orgId) { + + return nsPendAdmAppService.getWardLocationList(orgId); + } + + /** + * 根据病区查询该病区下的病床信息 + * + * @param wardLocationId 病区ID + * @return 病床列表 + */ + @GetMapping(value = "/bed-info") + public R getBedList(@RequestParam @NotNull(message = "病区ID不能为空") Long wardLocationId) { + + return nsPendAdmAppService.getBedList(wardLocationId); + } + + /** + * 根据入院科室,查询医生列表 + * + * @param orgId 科室id + * @return 医生列表 + */ + @GetMapping(value = "/doctor-list") + public R getDoctorList(@RequestParam Long orgId) { + + return nsPendAdmAppService.getDoctorList(orgId); + } + + /** + * 根据入院科室,查询护士列表 + * + * @param orgId 科室id + * @return 护士列表 + */ + @GetMapping(value = "/nurse-list") + public R getNurseList(@RequestParam Long orgId) { + + return nsPendAdmAppService.getNurseList(orgId); + } + + /** + * 查询待入科的患者列表 + * + * @return 待入科的患者列表 + */ + @GetMapping(value = "/pending-admission-info") + public R getPendAdmInfo() { + + return nsPendAdmAppService.getPendAdmInfo(); + } + + /** + * 患者选床入科 + * + * @param bedInfoDto 选床信息 + * @return 选床入科 + */ + @PutMapping(value = "/select-bed") + public R selectBedForAdmission(@Valid @RequestBody BedForAdmissionDto bedInfoDto) { + return nsPendAdmAppService.selectBedForAdmission(bedInfoDto); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/dto/BedForAdmissionDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/dto/BedForAdmissionDto.java new file mode 100644 index 00000000..4ae1ad2d --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/dto/BedForAdmissionDto.java @@ -0,0 +1,70 @@ +package com.openhis.web.nursestation.dto; + +import javax.validation.constraints.NotNull; + +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 java.util.Date; + +/** + * 选床入科Dto + * + * @author liuhr + * @date 2025/4/14 + */ +@Data +@Accessors(chain = true) +public class BedForAdmissionDto { + + /** 就诊ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 患者ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long patientId; + + /** 科室ID */ + @JsonSerialize(using = ToStringSerializer.class) + @NotNull(message = "科室ID不能为空") + private Long organizationId; + + /** 病区ID */ + @JsonSerialize(using = ToStringSerializer.class) + @NotNull(message = "病区ID不能为空") + private Long wardLocationId; + + /** 病床ID */ + @JsonSerialize(using = ToStringSerializer.class) + @NotNull(message = "病床ID不能为空") + private Long bedLocationId; + + /** 患者病情 */ + private Integer priorityEnum; + + /** 住院医生 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long attendingDoctorId; + + /** 主任医生 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long chiefDoctorId; + + /** 主治医生 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long principalDoctorId; + + /** 责任护士 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long attenderId; + + /** 入科时间 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date startTime; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/dto/BedForAdmissionInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/dto/BedForAdmissionInitDto.java new file mode 100644 index 00000000..e7cd377f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/dto/BedForAdmissionInitDto.java @@ -0,0 +1,57 @@ +package com.openhis.web.nursestation.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 liuhr + * @date 2025/4/15 + */ +@Data +@Accessors(chain = true) +public class BedForAdmissionInitDto { + + // 入院科室列表 + private List locationListOptions; + + //患者病情List + private List priorityListOptions; + + /** + * 执行机构 + */ + @Data + public static class exeOrganization { + + @JsonSerialize(using = ToStringSerializer.class) + private Long value; + private String label; + + public exeOrganization(Long value, String label) { + this.value = value; + this.label = label; + } + } + + /** + * 状态 + */ + @Data + public static class statusEnumOption { + private Integer value; + private String info; + + public statusEnumOption(Integer value, String info) { + this.value = value; + this.info = info; + } + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/dto/PendingAdmissionDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/dto/PendingAdmissionDto.java new file mode 100644 index 00000000..f92723fa --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/dto/PendingAdmissionDto.java @@ -0,0 +1,133 @@ +package com.openhis.web.nursestation.dto; + +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; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotNull; +import java.util.Date; +import java.util.List; + +/** + * 待入科Dto + * + * @author liuhr + * @date 2025/4/14 + */ +@Data +@Accessors(chain = true) +public class PendingAdmissionDto { + + /** + * ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** + * 患者ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long patientId; + + /** + * 群组ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long groupId; + + /** + * 就诊编码 + */ + private String busNo; + + /** + * 状态编码 + */ + private Integer statusEnum; + + /** + * 类别编码 + */ + private Integer classEnum; + + /** + * 类别医保编码|费别 + */ + private Integer ybClassEnum; + private String ybClassEnum_enumText; + + /** + * 优先级编码 + */ + private Integer priorityEnum; + + /** + * 就诊对象状态 + */ + private Integer subjectStatusEnum; + + /** + * 开始时间 + */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date startTime; + + /** + * 结束时间 + */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date endTime; + + /** + * 机构id|入院科室 + */ + @JsonSerialize(using = ToStringSerializer.class) + @Dict(dictTable = "adm_location", dictCode = "id", dictText = "name") + private Long organizationId; + private String organizationId_dictText; + + /** 入院病区ID */ + @JsonSerialize(using = ToStringSerializer.class) + @NotNull(message = "病区ID不能为空") + @Dict(dictTable = "adm_location", dictCode = "id", dictText = "name") + private Long wardLocationId; + private String wardLocationId_dictText; + + /** + * 入院方式|入科来源 + */ + @Dict(dictCode = "in_way_code") + private String inWayCode; + private String inWayCode_dictText; + + /** 患者姓名 */ + private String name; + + /** 性别编码 */ + private Integer genderEnum; + private String genderEnum_enumText; + + /** 生日 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date birthDate; + + /** 身份证号 */ + private String idCard; + + /** 病人年龄 */ + private String ageString; + + /** 是否跨科收治 */ + private Integer crossDeptStatus; + private String crossDeptStatus_enumText; + + /** 门诊诊断 */ + private String descriptions; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/mapper/NurseStationPendAdmAppMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/mapper/NurseStationPendAdmAppMapper.java new file mode 100644 index 00000000..cf881c25 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/nursestation/mapper/NurseStationPendAdmAppMapper.java @@ -0,0 +1,39 @@ +package com.openhis.web.nursestation.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import com.openhis.web.nursestation.dto.PendingAdmissionDto; + +/** + * 待入科 应用Mapper + * + * @author liuhr + * @date 2025/4/14 + */ +@Repository +public interface NurseStationPendAdmAppMapper { + + /** + * 住院待入科病人信息查询 + * + * @param classEnum 类别编码(1:住院类型) + * @param status location的状态可用 + * @param wardForm 病区:4 + * @param bedForm 病床:8 + * @return + */ + List getPendAdmInfo(@Param("classEnum") Integer classEnum, @Param("status") Integer status, + @Param("wardForm") Integer wardForm, @Param("bedForm") Integer bedForm); + + /** + * 病区床位信息查询 + * + * @param encounterId 就诊Id + * @return + */ + List getDescriptionList(@Param("encounterId") Long encounterId); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/IOutpatientDisposalService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/IOutpatientDisposalService.java new file mode 100644 index 00000000..f11d6d14 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/IOutpatientDisposalService.java @@ -0,0 +1,74 @@ +package com.openhis.web.outpatientmanage.appservice; + +import com.core.common.core.domain.R; +import com.openhis.web.outpatientmanage.dto.OutpatientDisposalActivityInfoDto; +import com.openhis.web.outpatientmanage.dto.OutpatientDisposalExecuteInfoDto; +import com.openhis.web.pharmacymanage.dto.EncounterInfoSearchParam; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * 门诊处置 + * + * @author yuxj + * @date 2025/4/10 + */ +public interface IOutpatientDisposalService { + + /** + * 获取门诊处置初期数据列表 + * + * @return 获取门诊处置初期数据列表 + */ + R init(); + + /** + * 分页查询就诊病人列表 + * + * @param encounterInfoSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 就诊病人分页列表 + */ + R getEncounterInfoListPage(EncounterInfoSearchParam encounterInfoSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request); + /** + * 查询诊疗单列表 + * + * @param encounterId 就诊号 + * @return 诊疗单列表 + */ + R getDisposalInfoList(Long encounterId); + + /** + * 查询执行列表 + * + * @param busNo 编码 + * @param activityId 诊疗Id + * @param type 类型 + * @return 执行列表 + */ + R getExecuteInfoList(String busNo, Long activityId, Integer type); + + /** + * 执行 + * + * @param itemId 诊疗id + * @param itemId 诊疗id + * @return 执行结果 + */ + R execute(Long itemId, Integer type); + + /** + * 取消 + * + * @param busNo 编码 + * @param activityId 诊疗Id + * @param type 类型 + * @return 执行结果 + */ + R cancel(String busNo, Long activityId, Integer type); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/IOutpatientInfusionAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/IOutpatientInfusionAppService.java new file mode 100644 index 00000000..2fc61137 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/IOutpatientInfusionAppService.java @@ -0,0 +1,82 @@ +package com.openhis.web.outpatientmanage.appservice; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.outpatientmanage.dto.OutpatientInfusionPatientDto; + +/** + * 门诊管理——输液实现类 + * + * @author liuhr + * @date 2025/3/12 + */ +public interface IOutpatientInfusionAppService { + + /** + * 获取门诊输液记录的患者列表 + * + * @param outpatientInfusionPatientDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 分页查询 + */ + R getOutpatientInfusionPatientList(OutpatientInfusionPatientDto outpatientInfusionPatientDto, String searchKey, + Integer pageNo, Integer pageSize, HttpServletRequest request); + + /** + * 门诊输液执行历史记录查询 + * + * @param serviceReqId 诊疗项目id + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 门诊输液执行历史记录列表 + */ + R getInfusionPerformRecord(Long serviceReqId, Integer pageNo, Integer pageSize); + + /** + * 门诊输液待执行记录查询 + * + * @param encounterId 就诊ID + * @param serviceStatus 就诊状态 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 门诊输液待执行记录列表 + */ + R getInfusionPendingRecord(Long encounterId, Integer serviceStatus, Integer pageNo, Integer pageSize); + + /** + * 输液执行 + * + * @param serviceReqIdList 输液请求id列表 + * @return 执行结果 + */ + R infusionPerform(List serviceReqIdList); + + /** + * 修改输液执行时间 + * + * @param serviceReqId 患者输液信息 + * @param performTime 患者输液信息 + * @return 执行结果 + */ + R editPatientInfusionTime(Long serviceReqId, String performTime); + + /** + * 撤销执行 + * + * @param serviceReqId 输液请求id + * @return 撤销结果 + */ + R cancelInfusionPerform(Long serviceReqId); + + /** + * 门诊输液初始化 + * + * @return 初始化信息 + */ + R init(); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientDisposalServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientDisposalServiceImpl.java new file mode 100644 index 00000000..d0a68d15 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientDisposalServiceImpl.java @@ -0,0 +1,598 @@ +package com.openhis.web.outpatientmanage.appservice.impl; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +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.core.domain.model.LoginUser; +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.Organization; +import com.openhis.administration.domain.Practitioner; +import com.openhis.administration.service.IOrganizationService; +import com.openhis.administration.service.IPractitionerService; +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.outpatientmanage.appservice.IOutpatientDisposalService; +import com.openhis.web.outpatientmanage.dto.*; +import com.openhis.web.outpatientmanage.mapper.OutpatientDisposalMapper; +import com.openhis.web.pharmacymanage.dto.EncounterInfoSearchParam; +import com.openhis.workflow.domain.DeviceDispense; +import com.openhis.workflow.domain.InventoryItem; +import com.openhis.workflow.domain.ServiceRequest; +import com.openhis.workflow.service.IDeviceDispenseService; +import com.openhis.workflow.service.IDeviceRequestService; +import com.openhis.workflow.service.IInventoryItemService; +import com.openhis.workflow.service.IServiceRequestService; + +/** + * 门诊处置 + * + * @author yuxj + * @date 2025/4/10 + */ +@Service +public class OutpatientDisposalServiceImpl implements IOutpatientDisposalService { + + @Resource + OutpatientDisposalMapper outpatientDisposalMapper; + + @Resource + IOrganizationService iOrganizationService; + + @Resource + private IServiceRequestService serviceRequestService; + + @Resource + private IDeviceDispenseService deviceDispenseService; + + @Resource + private IDeviceRequestService deviceRequestService; + + @Resource + private IInventoryItemService inventoryItemService; + @Resource + IPractitionerService practitionerService; + + /** + * 获取门诊处置初期数据列表 + * + * @return 获取门诊处置初期数据列表 + */ + @Override + public R init() { + OutpatientDisposalInitDto initDto = new OutpatientDisposalInitDto(); + + // 获取科室下拉选列表 + List organizationList = + iOrganizationService.getList(OrganizationType.DEPARTMENT.getValue(), OrganizationClass.CLINIC.getValue()); + List organizationOptions = organizationList.stream() + .map(organization -> new OutpatientDisposalInitDto.DepartmentOption(organization.getId(), + organization.getName())) + .collect(Collectors.toList()); + + initDto.setDepartmentOptions(organizationOptions); + + return R.ok(initDto); + } + + /** + * 分页查询就诊病人列表 + * + * @param encounterInfoSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 就诊病人列表 + */ + @Override + public R getEncounterInfoListPage(EncounterInfoSearchParam encounterInfoSearchParam, Integer pageNo, + Integer pageSize, String searchKey, HttpServletRequest request) { + + // 设置模糊查询的字段名 + HashSet searchFields = new HashSet<>(); + searchFields.add(CommonConstants.FieldName.PatientName); + searchFields.add(CommonConstants.FieldName.idCard); + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(encounterInfoSearchParam, searchKey, searchFields, request); + + // 查询就诊病人列表 + Page encounterInfoPageDto = + outpatientDisposalMapper.selectEncounterInfoListPage(new Page<>(pageNo, pageSize), queryWrapper); + + // 个别项目设定 + encounterInfoPageDto.getRecords().forEach(prescriptionPatientInfoDto -> { + // 性别 + prescriptionPatientInfoDto.setGenderEnum_enumText( + EnumUtils.getInfoByValue(AdministrativeGender.class, prescriptionPatientInfoDto.getGenderEnum())); + }); + return R.ok(encounterInfoPageDto); + } + + /** + * 查询诊疗单列表 + * + * @param encounterId 就诊号 + * @return 诊疗单列表 + */ + @Override + public R getDisposalInfoList(Long encounterId) { + + // 患者基本信息查询 + OutpatientDisposalPatientInfoDto outpatientDisposalPatientInfoDto = + outpatientDisposalMapper.selectEncounterPatientInfo(encounterId); + // 年龄 + outpatientDisposalPatientInfoDto + .setAge(AgeCalculatorUtil.getAge(outpatientDisposalPatientInfoDto.getBirthDate())); + // 性别 + outpatientDisposalPatientInfoDto.setGenderEnum_enumText( + EnumUtils.getInfoByValue(AdministrativeGender.class, outpatientDisposalPatientInfoDto.getGenderEnum())); + + // 信息查询 + List outpatientDisposalTempInfoList = outpatientDisposalMapper + .selectEncounterActivityInfoList(encounterId, CommonConstants.TableName.WOR_SERVICE_REQUEST, + CommonConstants.TableName.WOR_DEVICE_REQUEST, ItemType.DEVICE.getValue(), ItemType.ACTIVITY.getValue()); + + // 诊疗信息 + List outpatientDisposalActivityInfoList = new ArrayList<>(); + OutpatientDisposalActivityInfoDto activityInfoDto; + // 耗材信息 + List outpatientDisposalDeviceInfoList = new ArrayList<>(); + OutpatientDisposalDeviceInfoDto deviceInfoDto; + Long tempID = null; + // 诊疗信息,耗材信息列表做成 + if (!outpatientDisposalTempInfoList.isEmpty()) { + BigDecimal totalPrice = BigDecimal.ZERO; + for (OutpatientDisposalTempInfoDto item : outpatientDisposalTempInfoList) { + if (!Objects.equals(tempID, item.getId())) { + // 诊疗信息 + activityInfoDto = new OutpatientDisposalActivityInfoDto(); + activityInfoDto.setId(item.getId()); + activityInfoDto.setType(item.getType()); + activityInfoDto.setStatusEnum(item.getStatusEnum()); + activityInfoDto.setStatusEnum_enumText(item.getStatusEnum_enumText()); + activityInfoDto.setBusNo(item.getBusNo()); + activityInfoDto.setActivityId(item.getActivityId()); + activityInfoDto.setLotNumber(item.getLotNumber()); + activityInfoDto.setUnitCode(item.getUnitCode()); + activityInfoDto.setPartPercent(item.getPartPercent()); + activityInfoDto.setLocationId(item.getLocationId()); + activityInfoDto.setGroupNo(item.getGroupNo()); + activityInfoDto.setItemName(item.getItemName()); + activityInfoDto.setUnitPrice(item.getUnitPrice()); + activityInfoDto.setTotalPrice(item.getTotalPrice()); + activityInfoDto.setQuantity(item.getQuantity()); + activityInfoDto.setFrequency(item.getFrequency()); + activityInfoDto.setChargeStatusEnum(item.getChargeStatusEnum()); + activityInfoDto.setChargeStatusEnum_enumText(item.getChargeStatusEnum_enumText()); + activityInfoDto.setQuantityUnit(item.getQuantityUnit()); + activityInfoDto.setQuantityUnit_dictText(item.getQuantityUnit_dictText()); + for (OutpatientDisposalTempInfoDto itemAssist : outpatientDisposalTempInfoList) { + if ((Objects.equals(item.getId(), itemAssist.getId())) + && (itemAssist.getGroupNo() != null && !itemAssist.getGroupNo().isEmpty())) { + // 耗材信息 + deviceInfoDto = new OutpatientDisposalDeviceInfoDto(); + deviceInfoDto.setDeviceRequestId(itemAssist.getDeviceRequestId()); + deviceInfoDto.setDeviceDispenseId(itemAssist.getDeviceDispenseId()); + deviceInfoDto.setBusNo(itemAssist.getDeviceBusNo()); + deviceInfoDto.setDeviceId(itemAssist.getDeviceId()); + deviceInfoDto.setLotNumber(itemAssist.getDeviceLotNumber()); + deviceInfoDto.setUnitCode(itemAssist.getDeviceUnitCode()); + deviceInfoDto.setPartPercent(itemAssist.getDevicePartPercent()); + deviceInfoDto.setLocationId(itemAssist.getDeviceLocationId()); + deviceInfoDto.setGroupNo(itemAssist.getDeviceGroupNo()); + deviceInfoDto.setItemName(itemAssist.getDeviceItemName()); + deviceInfoDto.setUnitPrice(itemAssist.getDeviceUnitPrice()); + deviceInfoDto.setTotalPrice(itemAssist.getDeviceTotalPrice()); + deviceInfoDto.setQuantity(itemAssist.getDeviceQuantity()); + deviceInfoDto.setFrequency(itemAssist.getDeviceFrequency()); + deviceInfoDto.setStatusEnum(itemAssist.getDeviceStatusEnum()); + deviceInfoDto.setStatusEnum_enumText(itemAssist.getDeviceStatusEnum_enumText()); + deviceInfoDto.setQuantityUnit(itemAssist.getDeviceQuantityUnit()); + deviceInfoDto.setQuantityUnit_dictText(itemAssist.getDeviceQuantityUnit_dictText()); + outpatientDisposalDeviceInfoList.add(deviceInfoDto); + } + } + activityInfoDto.setOutpatientDisposalDeviceInfoList(outpatientDisposalDeviceInfoList); + outpatientDisposalActivityInfoList.add(activityInfoDto); + // 合计金额 + if (item.getStatusEnum().equals(ChargeItemStatus.PLANNED.getValue()) + || item.getStatusEnum().equals(ChargeItemStatus.BILLABLE.getValue()) + || item.getStatusEnum().equals(ChargeItemStatus.BILLED.getValue())) { + totalPrice = totalPrice.add(item.getTotalPrice()); + } + } + tempID = item.getId(); + } + outpatientDisposalPatientInfoDto.setTotalPrice(totalPrice); + } + + OutpatientDisposalInfoDto outpatientDisposalInfoDto = new OutpatientDisposalInfoDto(); + outpatientDisposalInfoDto.setOutpatientDisposalPatientInfoDto(outpatientDisposalPatientInfoDto); + outpatientDisposalInfoDto.setOutpatientDisposalActivityInfoDtoList(outpatientDisposalActivityInfoList); + return R.ok(outpatientDisposalInfoDto); + } + + /** + * 查询执行列表 + * + * @param busNo 编码 + * @param activityId 诊疗Id + * @param type 类型 + * @return 执行列表 + */ + @Override + public R getExecuteInfoList(String busNo, Long activityId, Integer type) { + List outpatientDisposalExecuteInfoList = new ArrayList<>(); + if (Objects.equals(type, ItemType.ACTIVITY.getValue())) { + outpatientDisposalExecuteInfoList = outpatientDisposalMapper.selectActivityExecuteInfo(type, busNo, + activityId, RequestStatus.COMPLETED.getValue()); + } else if (Objects.equals(type, ItemType.DEVICE.getValue())) { + outpatientDisposalMapper.selectDeviceExecuteInfo(type, busNo, activityId, + DispenseStatus.COMPLETED.getValue()); + } + return R.ok(outpatientDisposalExecuteInfoList); + } + + /** + * 执行 + * + * @param itemId 诊疗id + * @param type 诊疗类型 + * @return 执行结果 + */ + @Override + public R execute(Long itemId, Integer type) { + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 当前登录账号 + LoginUser loginUser = SecurityUtils.getLoginUser(); + Practitioner user = practitionerService.getPractitionerByUserId(loginUser.getUserId()); + + if (type.equals(ItemType.ACTIVITY.getValue())) { + + // 获取服务申请数据 + ServiceRequest serviceRequest = serviceRequestService.getById(itemId); + if (serviceRequest == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 诊疗信息查询 + OutpatientDisposalActivityInfoDto infoDto = outpatientDisposalMapper.selectEncounterActivityInfo(itemId, + CommonConstants.TableName.WOR_SERVICE_REQUEST, ItemType.ACTIVITY.getValue()); + // 耗材信息 + List outpatientDisposalDeviceInfoList; + // 耗材信息查询 + if (infoDto.getGroupNo() != null && !infoDto.getGroupNo().isEmpty()) { + outpatientDisposalDeviceInfoList = + outpatientDisposalMapper.selectEncounterDeviceInfoList(infoDto.getGroupNo(), + serviceRequest.getEncounterId(), CommonConstants.TableName.WOR_DEVICE_REQUEST); + infoDto.setOutpatientDisposalDeviceInfoList(outpatientDisposalDeviceInfoList); + } + + // 获取执行过的诊疗数据 + List serviceRequestItem = + serviceRequestService.selectServiceRequestByBasedOnId(infoDto.getId()); + // 获取执行诊疗最大数 + int step = serviceRequestItem.size(); + step += 1; + + // 执行诊疗 + ServiceRequest serviceRequestAddItem = serviceRequestService.createCompletedServiceRequest(serviceRequest, + now, user, String.format("%03d", step)); + if (serviceRequestAddItem == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 发放数量 + Integer quantity; + // 获取器材发放数据,执行器材发放 + for (OutpatientDisposalDeviceInfoDto item : infoDto.getOutpatientDisposalDeviceInfoList()) { + // 获取器材发放数据 + DeviceDispense deviceDispense = deviceDispenseService.getById(item.getDeviceDispenseId()); + if (deviceDispense == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 发放数量 + try { + quantity = deviceDispense.getQuantity() / serviceRequest.getQuantity(); + // 检查余数 + if (deviceDispense.getQuantity() % serviceRequest.getQuantity() != 0) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00012, null)); + } + } catch (ArithmeticException e) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00012, null)); + } + + // 执行器材发放 + DeviceDispense deviceDispenseAddItem = deviceDispenseService + .createCompletedDeviceDispense(deviceDispense, now, user, String.format("%03d", step), quantity); + if (deviceDispenseAddItem == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + + // 判断所有诊疗是否都执行完毕 + if (step == infoDto.getFrequency()) { + // 修改服务申请状态 + boolean serviceRequestResult = serviceRequestService.completedStatusEnum(infoDto.getId(), now, user); + if (!serviceRequestResult) { + R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + for (OutpatientDisposalDeviceInfoDto item : infoDto.getOutpatientDisposalDeviceInfoList()) { + // 修改器材发放状态 + boolean deviceDispenseResult = + deviceDispenseService.completedStatusEnum(item.getDeviceDispenseId(), now, user); + if (!deviceDispenseResult) { + R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 修改器材申请状态 + boolean deviceRequestResult = + deviceRequestService.completedStatusEnum(item.getDeviceRequestId(), user); + if (!deviceRequestResult) { + R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + } + + // 更新库存 + for (OutpatientDisposalDeviceInfoDto item : infoDto.getOutpatientDisposalDeviceInfoList()) { + + Boolean updateBool = this.updateInventoryQuantity(item.getDeviceId(), item.getLotNumber(), + item.getLocationId(), item.getUnitCode(), item.getQuantity(), item.getPartPercent(), "subtract"); + if (!updateBool) { + R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + + } else { + + // 诊疗信息查询 + OutpatientDisposalActivityInfoDto infoDto = outpatientDisposalMapper.selectEncounterActivityDeviceInfo( + itemId, CommonConstants.TableName.WOR_DEVICE_REQUEST, ItemType.DEVICE.getValue()); + + // 获取器材发放数据 + DeviceDispense deviceDispense = deviceDispenseService.getById(infoDto.getId()); + if (deviceDispense == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + // 获取执行过的诊疗数据 + List deviceDispenseItem = + deviceDispenseService.selectDeviceDispenseByBasedOnId(infoDto.getId()); + // 获取执行诊疗最大数 + int step = deviceDispenseItem.size(); + step += 1; + + // 执行器材发放 + DeviceDispense deviceDispenseAddItem = deviceDispenseService.createCompletedDeviceDispense(deviceDispense, + now, user, String.format("%03d", step), 1); + if (deviceDispenseAddItem == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 判断所有器材是否都执行完毕 + if (step == infoDto.getFrequency()) { + // 修改器材发放状态 + boolean deviceDispenseResult = deviceDispenseService.completedStatusEnum(infoDto.getId(), now, user); + if (!deviceDispenseResult) { + R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 修改器材申请状态 + boolean deviceRequestResult = deviceRequestService.completedStatusEnum(infoDto.getId(), user); + if (!deviceRequestResult) { + R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + // 更新库存 + Boolean updateBool = + this.updateInventoryQuantity(infoDto.getActivityId(), infoDto.getLotNumber(), infoDto.getLocationId(), + infoDto.getUnitCode(), infoDto.getQuantity(), infoDto.getPartPercent(), "subtract"); + if (!updateBool) { + R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + + /** + * 更新库存 + * + * @param itemId 器材id + * @param lotNumber 产品批号 + * @param locationId 仓库id + * @param unitCode 单位 + * @param quantity 数量 + * @param partPercent 拆零比 + * @param type 类型 + * @return 执行结果 + */ + public Boolean updateInventoryQuantity(Long itemId, String lotNumber, Long locationId, String unitCode, + Integer quantity, BigDecimal partPercent, String type) { + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 根据耗材的id,产品批号,仓库 查询库存表信息 + List inventoryItemList = inventoryItemService.selectInventoryByItemId(itemId, lotNumber, + locationId, SecurityUtils.getLoginUser().getTenantId()); + InventoryItem inventoryItem = new InventoryItem(); + if (!inventoryItemList.isEmpty()) { + inventoryItem = inventoryItemList.get(0); + } + if (inventoryItem == null) { + return false; + } + // 包装数量(常规单位库存数量) 更新库存数量方法中没用到 + BigDecimal baseQuantity = inventoryItem.getQuantity(); + // 最小数量(最小单位库存数量) + BigDecimal minQuantity = inventoryItem.getQuantity(); + if (Objects.equals(type, "subtract")) { + // 计算盘点后库存数量,结果取小单位 + if (unitCode.equals(inventoryItem.getUnitCode())) { + minQuantity = minQuantity.subtract(BigDecimal.valueOf(quantity)); + // 供应申请的物品计量单位与最小单位相同 + } else { + minQuantity = minQuantity.subtract(partPercent.multiply(BigDecimal.valueOf(quantity))); + } + } else if (Objects.equals(type, "add")) { + // 计算盘点后库存数量,结果取小单位 + if (unitCode.equals(inventoryItem.getUnitCode())) { + minQuantity = minQuantity.add(BigDecimal.valueOf(quantity)); + // 供应申请的物品计量单位与最小单位相同 + } else { + minQuantity = minQuantity.add(partPercent.multiply(BigDecimal.valueOf(quantity))); + } + } + + // 更新库存数量 + return inventoryItemService.updateInventoryQuantity(inventoryItem.getId(), baseQuantity, minQuantity, now); + } + + /** + * 取消 + * + * @param busNo 编码 + * @param activityId 诊疗Id + * @param type 类型 + * @return 执行结果 + */ + @Override + public R cancel(String busNo, Long activityId, Integer type) { + + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 当前登录账号 + LoginUser loginUser = SecurityUtils.getLoginUser(); + Practitioner user = practitionerService.getPractitionerByUserId(loginUser.getUserId()); + + if (Objects.equals(type, ItemType.ACTIVITY.getValue())) { + // 获取执行列表 + List infoList = outpatientDisposalMapper.selectActivityExecuteInfo(type, + busNo, activityId, RequestStatus.COMPLETED.getValue()); + + // 修改执行过的服务申请状态 + boolean serviceRequestResult = serviceRequestService.updateCancelledStatus( + infoList.get(0).getServiceRequestId(), now, loginUser.getPractitionerId(), loginUser.getDeptId()); + if (!serviceRequestResult) { + R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + for (OutpatientDisposalExecuteInfoDto item : infoList) { + // 修改执行过的器材发放状态 + boolean deviceDispenseResult = + deviceDispenseService.cancelledStatusEnum(item.getDeviceDispenseId(), now, user); + if (!deviceDispenseResult) { + R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + + // 获取执行过的服务申请数据 + ServiceRequest serviceRequest = serviceRequestService.getById(infoList.get(0).getServiceRequestId()); + if (serviceRequest == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 获取总服务申请数据 + ServiceRequest serviceRequestFather = serviceRequestService.getById(serviceRequest.getBasedOnId()); + if (serviceRequestFather == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + // 总服务申请数据已完成时 + if (Objects.equals(serviceRequestFather.getStatusEnum(), RequestStatus.COMPLETED.getValue())) { + // 修改总服务申请状态 + boolean serviceRequestResultFather = + serviceRequestService.activeStatusEnum(serviceRequestFather.getId(), now, user); + if (!serviceRequestResultFather) { + R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + for (OutpatientDisposalExecuteInfoDto item : infoList) { + // 获取器材发放数据 + DeviceDispense deviceDispense = deviceDispenseService.getById(item.getDeviceDispenseId()); + if (deviceDispense == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 获取总器材发放数据 + DeviceDispense deviceDispenseFather = deviceDispenseService.getById(deviceDispense.getBasedOnId()); + if (deviceDispenseFather == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 修改执行过的器材发放状态 + boolean deviceDispenseResultFather = + deviceDispenseService.inProgressStatusEnum(item.getDeviceDispenseId(), now, user); + if (!deviceDispenseResultFather) { + R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 修改执行过的器材申请状态 + boolean deviceRequestResultFather = + deviceRequestService.activeStatusEnum(item.getDeviceRequestId(), user); + if (!deviceRequestResultFather) { + R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + } + // 更新库存 + for (OutpatientDisposalExecuteInfoDto item : infoList) { + Boolean updateBool = this.updateInventoryQuantity(item.getDeviceId(), item.getLotNumber(), + item.getLocationId(), item.getUnitCode(), item.getQuantity(), item.getPartPercent(), "add"); + if (!updateBool) { + R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + } else { + // 获取执行列表 + List infoList = outpatientDisposalMapper.selectDeviceExecuteInfo(type, + busNo, activityId, DispenseStatus.COMPLETED.getValue()); + + // 修改执行过的器材发放状态 + boolean deviceDispenseResult = + deviceDispenseService.cancelledStatusEnum(infoList.get(0).getDeviceDispenseId(), now, user); + if (!deviceDispenseResult) { + R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 获取器材发放数据 + DeviceDispense deviceDispense = deviceDispenseService.getById(infoList.get(0).getDeviceDispenseId()); + if (deviceDispense == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 获总取器材发放数据 + DeviceDispense deviceDispenseFather = deviceDispenseService.getById(deviceDispense.getBasedOnId()); + if (deviceDispenseFather == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 总服务申请数据已完成时 + if (Objects.equals(deviceDispenseFather.getStatusEnum(), DispenseStatus.COMPLETED.getValue())) { + // 修改执行过的器材发放状态 + boolean deviceDispenseResultFather = + deviceDispenseService.inProgressStatusEnum(infoList.get(0).getDeviceDispenseId(), now, user); + if (!deviceDispenseResultFather) { + R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 修改执行过的器材申请状态 + boolean deviceRequestResultFather = + deviceRequestService.activeStatusEnum(infoList.get(0).getDeviceRequestId(), user); + if (!deviceRequestResultFather) { + R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + // 更新库存 + Boolean updateBool = this.updateInventoryQuantity(infoList.get(0).getDeviceId(), + infoList.get(0).getLotNumber(), infoList.get(0).getLocationId(), infoList.get(0).getUnitCode(), + infoList.get(0).getQuantity(), infoList.get(0).getPartPercent(), "add"); + if (!updateBool) { + R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientInfusionAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientInfusionAppServiceImpl.java new file mode 100644 index 00000000..677c9872 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientInfusionAppServiceImpl.java @@ -0,0 +1,276 @@ +package com.openhis.web.outpatientmanage.appservice.impl; + +import java.util.*; +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 org.springframework.transaction.annotation.Transactional; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +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.exception.ServiceException; +import com.core.common.utils.*; +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.outpatientmanage.appservice.IOutpatientInfusionAppService; +import com.openhis.web.outpatientmanage.dto.OutpatientInfusionInitDto; +import com.openhis.web.outpatientmanage.dto.OutpatientInfusionPatientDto; +import com.openhis.web.outpatientmanage.dto.OutpatientInfusionRecordDto; +import com.openhis.web.outpatientmanage.mapper.OutpatientInfusionAppMapper; +import com.openhis.workflow.domain.ServiceRequest; +import com.openhis.workflow.mapper.ServiceRequestMapper; +import com.openhis.workflow.service.IServiceRequestService; + +/** + * 门诊管理——输液实现类 + * + * @author liuhr + * @date 2025/3/12 + */ +@Service +@Transactional +public class OutpatientInfusionAppServiceImpl implements IOutpatientInfusionAppService { + + @Resource + private OutpatientInfusionAppMapper outpatientInfusionAppMapper; + + @Autowired + private IServiceRequestService serviceRequestService; + + @Autowired + private ServiceRequestMapper serviceRequestMapper; + + @Autowired + private AssignSeqUtil assignSeqUtil; + + /** + * 门诊输液初始化 + * + * @return 初始化信息 + */ + @Override + public R init() { + OutpatientInfusionInitDto initDto = new OutpatientInfusionInitDto(); + // 执行状态 + List serviceStatusOptions = new ArrayList<>(); + serviceStatusOptions.add(new OutpatientInfusionInitDto.ServiceStatus(RequestStatus.COMPLETED.getValue(), + RequestStatus.COMPLETED.getInfo())); + serviceStatusOptions.add(new OutpatientInfusionInitDto.ServiceStatus(RequestStatus.IN_PROGRESS.getValue(), + RequestStatus.IN_PROGRESS.getInfo())); + serviceStatusOptions.add(new OutpatientInfusionInitDto.ServiceStatus(RequestStatus.CANCELLED.getValue(), + RequestStatus.CANCELLED.getInfo())); + initDto.setServiceStatusOptions(serviceStatusOptions); + return R.ok(initDto); + } + + /** + * 获取门诊输液记录的患者列表 + * + * @param outpatientInfusionPatientDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 分页查询 + */ + @Override + public R getOutpatientInfusionPatientList(OutpatientInfusionPatientDto outpatientInfusionPatientDto, + String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request) { + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(outpatientInfusionPatientDto, searchKey, + new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientBusNo, + CommonConstants.FieldName.EncounterBusNo, CommonConstants.FieldName.PatientName, + CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientWbStr)), + request); + // 查询输液患者列表 + IPage outpatientInfusionPatientPage = + outpatientInfusionAppMapper.getOutpatientInfusionPatient(new Page<>(pageNo, pageSize), queryWrapper, + RequestStatus.IN_PROGRESS.getValue(), RequestStatus.COMPLETED.getValue(), + RequestStatus.CANCELLED.getValue(), CommonConstants.TableName.MED_MEDICATION_REQUEST); + outpatientInfusionPatientPage.getRecords().forEach(e -> { + // 性别 + e.setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, e.getGenderEnum())); + // 性别 + e.setServiceStatus_enumText(EnumUtils.getInfoByValue(RequestStatus.class, e.getServiceStatus())); + if (e.getBirthDate() != null) { + // 计算年龄 + e.setAgeString(AgeCalculatorUtil.getAge(e.getBirthDate())); + } + }); + return R.ok(outpatientInfusionPatientPage); + } + + /** + * 门诊输液执行记录查询 + * + * @param serviceReqId 诊疗项目id + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 门诊输液执行历史记录列表 + */ + @Override + public R getInfusionPerformRecord(Long serviceReqId, Integer pageNo, Integer pageSize) { + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(null, null, null, null); + // 查询门诊输液执行记录 + Page outpatientInfusionRecordPage = + outpatientInfusionAppMapper.selectInfusionPerformRecord(new Page<>(pageNo, pageSize), queryWrapper, + serviceReqId, RequestStatus.COMPLETED.getValue()); + outpatientInfusionRecordPage.getRecords().forEach(e -> { + // 诊疗状态 + e.setServiceStatus_enumText(EnumUtils.getInfoByValue(RequestStatus.class, e.getServiceStatus())); + }); + return R.ok(outpatientInfusionRecordPage); + + } + + /** + * 门诊输液待执行记录查询 + * + * @param encounterId 就诊ID + * @param serviceStatus 就诊状态 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 门诊输液待执行记录列表 + */ + @Override + public R getInfusionPendingRecord(Long encounterId, Integer serviceStatus, Integer pageNo, Integer pageSize) { + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils + .buildQueryWrapper(new OutpatientInfusionRecordDto().setServiceStatus(serviceStatus), null, null, null); + // 查询门诊输液待执行记录 + Page outpatientInfusionRecordPage = + outpatientInfusionAppMapper.selectInfusionPendingRecord(new Page<>(pageNo, pageSize), queryWrapper, + encounterId, RequestStatus.COMPLETED.getValue(), CommonConstants.TableName.MED_MEDICATION_REQUEST); + outpatientInfusionRecordPage.getRecords().forEach(e -> { + // 是否皮试 + e.setSkinTestFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getSkinTestFlag())); + // 发药状态 + e.setDispenseStatus_enumText(EnumUtils.getInfoByValue(DispenseStatus.class, e.getDispenseStatus())); + // 诊疗状态 + e.setServiceStatus_enumText(EnumUtils.getInfoByValue(RequestStatus.class, e.getServiceStatus())); + }); + return R.ok(outpatientInfusionRecordPage); + } + + /** + * 输液执行 + * + * @param serviceReqIdList 输液请求id列表 + * @return 执行结果 + */ + @Override + public R infusionPerform(List serviceReqIdList) { + // todo:查出对应的耗材并发放 + + // 获取执行人,执行科室,当前时间 + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + Long orgId = SecurityUtils.getLoginUser().getOrgId(); + Date now = DateUtils.getNowDate(); + List serviceRequestList = + serviceRequestService.listByIds(serviceReqIdList.stream().distinct().collect(Collectors.toList())); + // 新增一条执行记录 + for (ServiceRequest serviceRequest : serviceRequestList) { + serviceRequest.setBasedOnId(serviceRequest.getId()).setStatusEnum(RequestStatus.COMPLETED.getValue()) + .setOccurrenceEndTime(now).setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 10)) + .setBasedOnTable(CommonConstants.TableName.WOR_SERVICE_REQUEST).setPerformerId(practitionerId) + .setOrgId(orgId).setGroupId(null).setId(null); + serviceRequestService.save(serviceRequest); + } + // 获取诊疗执行信息 + List outpatientInfusionRecordList = + outpatientInfusionAppMapper.selectPerformInfo(serviceReqIdList, RequestStatus.COMPLETED.getValue()); + if (!outpatientInfusionRecordList.isEmpty()) { + for (OutpatientInfusionRecordDto outpatientInfusionRecord : outpatientInfusionRecordList) { + // 校验是否已发药 + if (!DispenseStatus.COMPLETED.getValue().equals(outpatientInfusionRecord.getDispenseStatus())) { + throw new ServiceException("请等待发药后再执行"); + } + // 校验是否已经执行 + if (outpatientInfusionRecord.getExecuteNum().equals(outpatientInfusionRecord.getPerformCount())) { + // 更新主诊疗执行状态 + serviceRequestMapper.update(null, + new LambdaUpdateWrapper() + .eq(ServiceRequest::getId, outpatientInfusionRecord.getServiceId()) + .set(ServiceRequest::getStatusEnum, RequestStatus.COMPLETED.getValue()) + .set(ServiceRequest::getOccurrenceEndTime, now)); + + } else if (outpatientInfusionRecord.getExecuteNum() < (outpatientInfusionRecord.getPerformCount())) { + throw new ServiceException("当前项目已全部执行,请勿重复执行"); + } + } + } + return R.ok("执行成功"); + } + + /** + * 修改输液执行时间 + * + * @param serviceReqId 患者输液信息 + * @param performTime 患者输液信息 + * @return 执行结果 + */ + @Override + public R editPatientInfusionTime(Long serviceReqId, String performTime) { + // 更新输液执行时间 + int countUpdate = serviceRequestMapper.update(null, + new LambdaUpdateWrapper().eq(ServiceRequest::getId, serviceReqId) + .set(ServiceRequest::getOccurrenceEndTime, DateUtils.dateTime("yyyy-MM-dd HH:mm:ss", performTime))); + if (countUpdate >= 0) { + return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"执行时间"})); + } + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + /** + * 撤销执行 + * + * @param serviceReqId 输液请求id + * @return 撤销结果 + */ + @Override + public R cancelInfusionPerform(Long serviceReqId) { + // todo:查出对应的耗材并退回到药房 + + // 获取执行人,执行科室,当前时间 + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + Long orgId = SecurityUtils.getLoginUser().getOrgId(); + Date now = DateUtils.getNowDate(); + // 获取诊疗项目信息 + ServiceRequest serviceRequest = serviceRequestService.getById(serviceReqId); + if (serviceRequest != null) { + // 重复取消校验 + if (RequestStatus.CANCELLED.getValue().equals(serviceRequest.getStatusEnum())) { + return R.fail("已取消执行,请勿重复操作"); + } + boolean result = serviceRequestService.updateCancelledStatus(serviceReqId, now, practitionerId, orgId); + // 更新主服务请求状态为待执行 + serviceRequestService.updatePreparationStatus(List.of(serviceRequest.getBasedOnId())); + if (result) { + // 判断是否全部取消执行 + boolean exists = serviceRequestMapper.exists(new LambdaQueryWrapper() + .eq(ServiceRequest::getBasedOnId, serviceRequest.getBasedOnId()) + .eq(ServiceRequest::getStatusEnum, RequestStatus.COMPLETED.getValue())); + if (!exists) { + // 全部取消执行后更新主服务请求状态为已取消 + serviceRequestService.updateCancelledStatus(serviceRequest.getBasedOnId(), null, null, null); + } + } + } else { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00006, null)); + } + return R.ok("取消执行成功"); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/controller/OutpatientDisposalController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/controller/OutpatientDisposalController.java new file mode 100644 index 00000000..f0308f30 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/controller/OutpatientDisposalController.java @@ -0,0 +1,115 @@ +package com.openhis.web.outpatientmanage.controller; + +import com.openhis.web.inventorymanage.dto.ReceiptApprovalSearchParam; +import com.openhis.web.outpatientmanage.dto.OutpatientDisposalActivityInfoDto; +import com.openhis.web.outpatientmanage.dto.OutpatientDisposalExecuteInfoDto; +import com.openhis.web.pharmacymanage.appservice.IWesternMedicineDispenseAppService; +import com.openhis.web.pharmacymanage.dto.EncounterInfoSearchParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import com.core.common.core.domain.R; +import com.openhis.web.outpatientmanage.appservice.IOutpatientDisposalService; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * 门诊处置 + * + * @author yuxj + * @date 2025/4/10 + */ +@RestController +@RequestMapping("/outpatient-manage/disposal") +@Slf4j +@AllArgsConstructor +public class OutpatientDisposalController { + + @Resource + private IOutpatientDisposalService outpatientDisposalService; + + @Resource + public IWesternMedicineDispenseAppService iWesternMedicineDispenseService; + + /** + * 门诊处置初期数据 + * + * @return 初始化信息 + */ + @GetMapping("/init") + public R outpatientDisposalInit() { + return outpatientDisposalService.init(); + } + + /** + * 分页查询就诊病人列表 + * + * @param encounterInfoSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 就诊病人列表 + */ + @GetMapping("/encounter-list") + public R getEncounterInfoList(EncounterInfoSearchParam encounterInfoSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return outpatientDisposalService.getEncounterInfoListPage(encounterInfoSearchParam, pageNo, pageSize, + searchKey, request); + } + + /** + * 诊疗单查询 + * + * @param encounterId 就诊Id + */ + @GetMapping("/disposal-list") + public R getDisposalInfoList(@RequestParam(value = "encounterId") Long encounterId) { + return outpatientDisposalService.getDisposalInfoList(encounterId); + } + + /** + * 执行单查询 + * + * @param busNo 编码 + * @param activityId 诊疗Id + * @param type 类型 + */ + @GetMapping("/execute-list") + public R getExecuteInfoList(@RequestParam(value = "busNo") String busNo, + @RequestParam(value = "activityId") Long activityId, @RequestParam(value = "type") Integer type) { + return outpatientDisposalService.getExecuteInfoList(busNo, activityId, type); + } + + /** + * 执行 + * + * @param itemId 诊疗id + * @param type 诊疗类型 + */ + @PutMapping("/execute") + public R execute(@RequestParam(value = "itemId") Long itemId, @RequestParam(value = "type") Integer type) { + return outpatientDisposalService.execute(itemId, type); + } + + /** + * 取消 + * + * @param busNo 编码 + * @param activityId 诊疗Id + * @param type 类型 + */ + @PutMapping("/cancel") + public R cancel(@RequestParam(value = "busNo") String busNo, @RequestParam(value = "activityId") Long activityId, + @RequestParam(value = "type") Integer type) { + return outpatientDisposalService.cancel(busNo, activityId, type); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/controller/OutpatientInfusionController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/controller/OutpatientInfusionController.java new file mode 100644 index 00000000..2d049693 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/controller/OutpatientInfusionController.java @@ -0,0 +1,124 @@ +package com.openhis.web.outpatientmanage.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.outpatientmanage.appservice.IOutpatientInfusionAppService; +import com.openhis.web.outpatientmanage.dto.OutpatientInfusionPatientDto; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * 门诊输液记录 + * + * @author liuhr + * @date 2025/3/12 + */ +@RestController +@RequestMapping("/outpatient-manage/infusion") +@Slf4j +@AllArgsConstructor +public class OutpatientInfusionController { + + @Autowired + private IOutpatientInfusionAppService outpatientInfusionAppService; + + /** + * 门诊输液初始化 + * + * @return 初始化信息 + */ + @GetMapping("/init") + public R outpatientInfusionInit() { + return outpatientInfusionAppService.init(); + } + + /** + * 查询门诊输液的患者列表 + * + * @param outpatientInfusionPatientDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 返回门诊输液的患者列表 + */ + @GetMapping(value = "/infusion-patient-list") + public R getOutpatientInfusionPatientList(OutpatientInfusionPatientDto outpatientInfusionPatientDto, + String searchKey, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { + return outpatientInfusionAppService.getOutpatientInfusionPatientList(outpatientInfusionPatientDto, searchKey, + pageNo, pageSize, request); + } + + /** + * 门诊输液待执行记录查询 + * + * @param encounterId 就诊ID + * @param serviceStatus 就诊状态 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 门诊输液待执行记录列表 + */ + @GetMapping(value = "/infusion-pending-record") + public R getInfusionPendingRecord(@RequestParam Long encounterId,@RequestParam Integer serviceStatus, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return outpatientInfusionAppService.getInfusionPendingRecord(encounterId, serviceStatus,pageNo, pageSize); + } + + /** + * 门诊输液执行历史记录查询 + * + * @param serviceReqId 诊疗项目id + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 门诊输液执行历史记录列表 + */ + @GetMapping(value = "/infusion-perform-record") + public R getInfusionPerformRecord(@RequestParam Long serviceReqId, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return outpatientInfusionAppService.getInfusionPerformRecord(serviceReqId, pageNo, pageSize); + } + + /** + * 输液执行 + * + * @param serviceReqIdList 输液请求id列表 + * @return 执行结果 + */ + @PutMapping("/infusion-perform") + public R infusionPerform(@RequestBody List serviceReqIdList) { + return outpatientInfusionAppService.infusionPerform(serviceReqIdList); + } + + /** + * 修改输液执行时间 + * + * @param serviceReqId 患者输液信息 + * @param performTime 患者输液信息 + * @return 执行结果 + */ + @PutMapping("/infusion-perform-time") + public R editPatientInfusionTime(@RequestParam Long serviceReqId, @RequestParam String performTime) { + return outpatientInfusionAppService.editPatientInfusionTime(serviceReqId, performTime); + } + + /** + * 撤销执行 + * + * @param serviceReqId 输液请求id + * @return 撤销结果 + */ + @PutMapping(value = "/cancel-perform") + public R cancelInfusionPerform(@RequestParam Long serviceReqId) { + return outpatientInfusionAppService.cancelInfusionPerform(serviceReqId); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalActivityInfoDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalActivityInfoDto.java new file mode 100644 index 00000000..697580d2 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalActivityInfoDto.java @@ -0,0 +1,85 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.outpatientmanage.dto; + +import java.math.BigDecimal; +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 com.openhis.web.pharmacymanage.dto.PrescriptionMedicineInfoDto; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 诊疗列表 + * + * @author yuxj + * @date 2025-04-11 + */ +@Data +@Accessors(chain = true) +public class OutpatientDisposalActivityInfoDto { + + /** id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 类型 */ + private Integer type; + + /** 申请状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + + /** 编码 */ + private String busNo; + + /** 诊疗id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long activityId; + + /** 产品批号 */ + private String lotNumber; + + /** 单位 */ + private String unitCode; + + /** 拆零比 */ + private BigDecimal partPercent; + + /** 仓库 */ + private Long locationId; + + /** 分组编号 */ + private String groupNo; + + /** 项目名称 */ + private String itemName; + + /** 单价 */ + private BigDecimal unitPrice; + + /** 总价 */ + private BigDecimal totalPrice; + + /** 数量 */ + private Integer quantity; + + /** 次数 */ + private Integer frequency; + + /** 收费状态 */ + private Integer chargeStatusEnum; + private String chargeStatusEnum_enumText; + + /** 单位 */ + @Dict(dictCode = "unit_code") + private String quantityUnit; + private String quantityUnit_dictText; + + /** 诊疗耗材信息 */ + List OutpatientDisposalDeviceInfoList; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalDeviceInfoDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalDeviceInfoDto.java new file mode 100644 index 00000000..08ad9db7 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalDeviceInfoDto.java @@ -0,0 +1,74 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.outpatientmanage.dto; + +import java.math.BigDecimal; +import java.util.List; + +import com.openhis.common.annotation.Dict; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 诊疗耗材列表 + * + * @author yuxj + * @date 2025-04-11 + */ +@Data +@Accessors(chain = true) +public class OutpatientDisposalDeviceInfoDto { + + /** 器材请求id */ + private Long deviceRequestId; + + /** 器材发放Id */ + private Long deviceDispenseId; + + /** 编码 */ + private String busNo; + + /** 耗材id */ + private Long deviceId; + + /** 产品批号 */ + private String lotNumber; + + /** 单位 */ + private String unitCode; + + /** 拆零比 */ + private BigDecimal partPercent; + + /** 仓库 */ + private Long locationId; + + /** 分组编号 */ + private String groupNo; + + /** 项目名称 */ + private String itemName; + + /** 单价 */ + private BigDecimal unitPrice; + + /** 总价 */ + private BigDecimal totalPrice; + + /** 数量 */ + private Integer quantity; + + /** 次数 */ + private Integer frequency; + + /** 收费状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + + /** 单位 */ + @Dict(dictCode = "unit_code") + private String quantityUnit; + private String quantityUnit_dictText; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalEncounterInfoPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalEncounterInfoPageDto.java new file mode 100644 index 00000000..f1d19816 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalEncounterInfoPageDto.java @@ -0,0 +1,38 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.outpatientmanage.dto; + +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-18 + */ +@Data +@Accessors(chain = true) +public class OutpatientDisposalEncounterInfoPageDto { + + /** 就诊ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterId; + + /** 科室 */ + private String departmentName; + + /** 患者姓名 */ + private String patientName; + + /** 性别 */ + private Integer genderEnum; + private String genderEnum_enumText; + + /** 就诊日期 */ + private String encounterDate; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalExecuteInfoDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalExecuteInfoDto.java new file mode 100644 index 00000000..10f823d2 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalExecuteInfoDto.java @@ -0,0 +1,72 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.outpatientmanage.dto; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.openhis.common.annotation.Dict; + +import liquibase.pro.packaged.S; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 执行列表 + * + * @author yuxj + * @date 2025-04-11 + */ +@Data +@Accessors(chain = true) +public class OutpatientDisposalExecuteInfoDto { + + /** 类型*/ + private Integer type; + + /** 服务申请Id */ + private Long serviceRequestId; + + /** 器材发放Id */ + private Long deviceDispenseId; + + /** 器材请求id */ + private Long deviceRequestId; + + /** 器材id */ + private Long deviceId; + + /** 服务请求编码 */ + private String busNo; + + /** 执行人 */ + private String performerName; + + /** 执行科室 */ + private String locationName; + + /** 耗材名 */ + private String deviceName; + + /** 耗材数量 */ + private Integer quantity; + + /** 执行时间 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date occurrenceTime; + + /** 产品批号 */ + private String lotNumber; + + /** 单位 */ + private String unitCode; + + /** 拆零比 */ + private BigDecimal partPercent; + + /** 仓库 */ + private Long locationId; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalInfoDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalInfoDto.java new file mode 100644 index 00000000..b27de0ac --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalInfoDto.java @@ -0,0 +1,29 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.outpatientmanage.dto; + +import java.util.List; + +import com.openhis.web.pharmacymanage.dto.PrescriptionMedicineInfoDto; +import com.openhis.web.pharmacymanage.dto.PrescriptionPatientInfoDto; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 处方信息 + * + * @author yuxj + * @date 2025-04-11 + */ +@Data +@Accessors(chain = true) +public class OutpatientDisposalInfoDto { + + /** 患者基本信息 */ + private OutpatientDisposalPatientInfoDto outpatientDisposalPatientInfoDto; + + /** 诊疗信息 */ + List outpatientDisposalActivityInfoDtoList; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalInitDto.java new file mode 100644 index 00000000..d8af5bfb --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalInitDto.java @@ -0,0 +1,38 @@ +package com.openhis.web.outpatientmanage.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 yuxj + * @date 2025/4/10 + */ +@Data +@Accessors(chain = true) +public class OutpatientDisposalInitDto { + + /** 科室列表 */ + private List departmentOptions; + + /** 科室列表 */ + @Data + public static class DepartmentOption { + + @JsonSerialize(using = ToStringSerializer.class) + private Long value; + private String label; + + public DepartmentOption(Long value, String label) { + this.value = value; + this.label = label; + } + } + + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalPatientInfoDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalPatientInfoDto.java new file mode 100644 index 00000000..ebe8753a --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalPatientInfoDto.java @@ -0,0 +1,49 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.outpatientmanage.dto; + +import java.math.BigDecimal; +import java.util.Date; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 患者基本信息 + * + * @author yuxj + * @date 2025-04-11 + */ +@Data +@Accessors(chain = true) +public class OutpatientDisposalPatientInfoDto { + + /** 姓名 */ + private String patientName; + + /** 性别 */ + private Integer genderEnum; + private String genderEnum_enumText; + + /** 生日 */ + private Date birthDate; + + /** 年龄 */ + private String age; + + /** 证件号 */ + private String idCard; + + /** 就诊科室 */ + private String organizationName; + + /** 就诊日期 */ + private String encounterDate; + + /** 门诊诊断 */ + private String conditionName; + + /** 总金额 */ + private BigDecimal totalPrice; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalTempInfoDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalTempInfoDto.java new file mode 100644 index 00000000..5d88bf96 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientDisposalTempInfoDto.java @@ -0,0 +1,134 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.outpatientmanage.dto; + +import java.math.BigDecimal; +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-04-11 + */ +@Data +@Accessors(chain = true) +public class OutpatientDisposalTempInfoDto { + + /** id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 类型 */ + private Integer type; + + /** 申请状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + + /** 编码 */ + private String busNo; + + /** 诊疗id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long activityId; + + /** 产品批号 */ + private String lotNumber; + + /** 单位 */ + private String unitCode; + + /** 拆零比 */ + private BigDecimal partPercent; + + /** 仓库 */ + private Long locationId; + + /** 分组编号 */ + private String groupNo; + + /** 项目名称 */ + private String itemName; + + /** 单价 */ + private BigDecimal unitPrice; + + /** 总价 */ + private BigDecimal totalPrice; + + /** 数量 */ + private Integer quantity; + + /** 次数 */ + private Integer frequency; + + /** 收费状态 */ + private Integer chargeStatusEnum; + private String chargeStatusEnum_enumText; + + /** 单位 */ + @Dict(dictCode = "unit_code") + private String quantityUnit; + private String quantityUnit_dictText; + + /** 诊疗耗材信息 */ + /** 器材请求id */ + private Long deviceRequestId; + + /** 器材发放Id */ + private Long deviceDispenseId; + + /** 编码 */ + private String deviceBusNo; + + /** 耗材id */ + private Long deviceId; + + /** 产品批号 */ + private String deviceLotNumber; + + /** 单位 */ + private String deviceUnitCode; + + /** 拆零比 */ + private BigDecimal devicePartPercent; + + /** 仓库 */ + private Long deviceLocationId; + + /** 分组编号 */ + private String deviceGroupNo; + + /** 项目名称 */ + private String deviceItemName; + + /** 单价 */ + private BigDecimal deviceUnitPrice; + + /** 总价 */ + private BigDecimal deviceTotalPrice; + + /** 数量 */ + private Integer deviceQuantity; + + /** 次数 */ + private Integer deviceFrequency; + + /** 收费状态 */ + private Integer deviceStatusEnum; + private String deviceStatusEnum_enumText; + + /** 单位 */ + @Dict(dictCode = "unit_code") + private String deviceQuantityUnit; + private String deviceQuantityUnit_dictText; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientInfusionInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientInfusionInitDto.java new file mode 100644 index 00000000..b5dfdafc --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/dto/OutpatientInfusionInitDto.java @@ -0,0 +1,35 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.outpatientmanage.dto; + +import java.util.List; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 门诊输液初始化dto + * + * @author zwh + * @date 2025-05-19 + */ +@Data +@Accessors(chain = true) +public class OutpatientInfusionInitDto { + + /** 执行状态 */ + private List serviceStatusOptions; + + /** 执行状态 */ + @Data + public static class ServiceStatus { + private Integer value; + private String label; + + public ServiceStatus(Integer value, String label) { + this.value = value; + this.label = label; + } + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/mapper/OutpatientDisposalMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/mapper/OutpatientDisposalMapper.java new file mode 100644 index 00000000..6b55fa07 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/mapper/OutpatientDisposalMapper.java @@ -0,0 +1,108 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.outpatientmanage.mapper; + +import java.util.List; + +import com.openhis.web.outpatientmanage.dto.*; +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; +import com.openhis.web.pharmacymanage.dto.*; + +@Repository +public interface OutpatientDisposalMapper { + + /** + * 就诊病人列表分页查询 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @return 就诊病人列表 + */ + Page selectEncounterInfoListPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + /** + * 患者基本信息查询 + * + * @param encounterId 就诊号 + * @return 患者基本信息 + */ + OutpatientDisposalPatientInfoDto selectEncounterPatientInfo(@Param("encounterId") Long encounterId); + + /** + * 诊疗查询 + * + * @param encounterId 就诊号 + * @param serviceTableName 服务申请表名 + * @param requestTableName 器材请求表名 + * @param device 耗材 + * @param activity 诊疗 + * @return 诊疗单列表 + */ + List selectEncounterActivityInfoList(@Param("encounterId") Long encounterId, + @Param("serviceTableName") String serviceTableName, @Param("requestTableName") String requestTableName, + @Param("DEVICE") Integer device, @Param("activity") Integer activity); + + /** + * 耗材查询 + * + * @param groupNo 分组编号 + * @param encounterId 就诊号 + * @param requestTableName 器材请求表名 + * @return 耗材列表 + */ + List selectEncounterDeviceInfoList(@Param("groupNo") String groupNo, + @Param("encounterId") Long encounterId, @Param("requestTableName") String requestTableName); + + /** + * 执行查询 + * + * @param type 类型 + * @param busNo 编码 + * @param activityId 诊疗ID + * @param status 状态 + * @return 耗材列表 + */ + List selectActivityExecuteInfo(@Param("type") Integer type, + @Param("busNo") String busNo, @Param("activityId") Long activityId, @Param("status") Integer status); + + /** + * 执行查询 + * + * @param type 类型 + * @param busNo 编码 + * @param activityId 诊疗ID + * @param status 状态 + * @return 耗材列表 + */ + List selectDeviceExecuteInfo(@Param("type") Integer type, + @Param("busNo") String busNo, @Param("activityId") Long activityId, @Param("status") Integer status); + + /** + * 诊疗查询 + * + * @param itemId 诊疗号 + * @param serviceTableName 服务申请表名 + * @param activity 诊疗 + * @return 诊疗单列表 + */ + OutpatientDisposalActivityInfoDto selectEncounterActivityInfo(@Param("itemId") Long itemId, + @Param("serviceTableName") String serviceTableName, @Param("activity") Integer activity); + + /** + * 诊疗查询 + * + * @param itemId 诊疗号 + * @param requestTableName 器材请求表名 + * @param device 耗材 + * @return 诊疗单列表 + */ + OutpatientDisposalActivityInfoDto selectEncounterActivityDeviceInfo(@Param("itemId") Long itemId, + @Param("requestTableName") String requestTableName, @Param("DEVICE") Integer device); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/mapper/OutpatientInfusionAppMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/mapper/OutpatientInfusionAppMapper.java new file mode 100644 index 00000000..cf114f84 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/outpatientmanage/mapper/OutpatientInfusionAppMapper.java @@ -0,0 +1,87 @@ +package com.openhis.web.outpatientmanage.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +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.outpatientmanage.dto.OutpatientInfusionPatientDto; +import com.openhis.web.outpatientmanage.dto.OutpatientInfusionRecordDto; +import com.openhis.web.outpatientmanage.dto.OutpatientSkinTestRecordDto; + +/** + * 门诊管理 + * + * @author liuhr + * @date 2025/3/5 + */ +public interface OutpatientInfusionAppMapper { + + /** + * 门诊皮试记录分页查询 + * + * @param page 分页参数 + * @param queryWrapper 查询条件 + * @return 门诊输液记录列表 + */ + IPage getSkinTestRecords(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + /** + * 门诊输液患者记录分页查询 + * + * @param page 分页参数 + * @param queryWrapper 查询条件 + * @param inProgress 诊疗请求状态:待执行 + * @param completed 诊疗请求状态:已完成 + * @param cancelled 诊疗请求状态:取消 + * @param medMedicationRequest 药品请求表 + * @return 门诊输液患者记录 + */ + IPage getOutpatientInfusionPatient( + @Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("inProgress") Integer inProgress, @Param("completed") Integer completed, + @Param("cancelled") Integer cancelled, @Param("medMedicationRequest") String medMedicationRequest); + + /** + * 查询门诊输液待执行记录 + * + * @param page 分页参数 + * @param queryWrapper 查询条件 + * @param encounterId 就诊id + * @param completed 执行状态:已完成 + * @param medMedicationRequest 药品请求表 + * @return 门诊输液待执行记录 + */ + Page selectInfusionPendingRecord(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("encounterId") Long encounterId, @Param("completed") Integer completed, + @Param("medMedicationRequest") String medMedicationRequest); + + /** + * 查询门诊输液执行记录 + * + * @param page 分页参数 + * @param queryWrapper 查询条件 + * @param serviceReqId 诊疗项目id + * @param completed 执行状态:已完成 + * @return 门诊输液执行记录 + */ + Page selectInfusionPerformRecord(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("serviceReqId") Long serviceReqId, @Param("completed") Integer completed); + + /** + * 获取诊疗执行信息 + * + * @param serviceReqIdList 待执行诊疗id列表 + * @param completed 执行状态:已完成 + * @return 诊疗执行信息 + */ + List selectPerformInfo(@Param("serviceReqIdList") List serviceReqIdList, + @Param("completed") Integer completed); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/patientmanage/dto/PatientInfoSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/patientmanage/dto/PatientInfoSearchParam.java new file mode 100644 index 00000000..5ab89219 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/patientmanage/dto/PatientInfoSearchParam.java @@ -0,0 +1,18 @@ +package com.openhis.web.patientmanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 病人信息查询参数Dto + * + * @author liuhr + * @date 2025/3/31 + */ +@Data +@Accessors(chain = true) +public class PatientInfoSearchParam { + + /** 病人编号 */ + private String busNo; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IChargeBillService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IChargeBillService.java new file mode 100644 index 00000000..7c0b261d --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IChargeBillService.java @@ -0,0 +1,25 @@ +package com.openhis.web.paymentmanage.appservice; + +import com.core.common.core.domain.R; +import com.openhis.web.paymentmanage.dto.PaymentSettleDto; +import com.openhis.web.paymentmanage.dto.ReportVo; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.Date; +import java.util.Map; + +public interface IChargeBillService { + /** + * + * @param paymentId + * @return + */ + Map getDetail(Long paymentId); + + /** + * + * @param + * @return + */ + Map getTotal(String startTime, String endTime, Long entererId); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IEleInvoiceService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IEleInvoiceService.java new file mode 100644 index 00000000..ea5984d9 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IEleInvoiceService.java @@ -0,0 +1,74 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.appservice; + +import com.core.common.core.domain.R; +import com.openhis.administration.domain.Invoice; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +/** + * 电子发票接口Service + * + * @author yuxj + * @date 2025-04-22 + */ +public interface IEleInvoiceService { + + /** + * 电子票据补开接口 + * + * @param paymentId 支付ID + * @param encounterId 就诊ID + * @return + */ + R invoiceReissue(Long paymentId, Long encounterId); + + /** + * 医疗挂号电子票据开具接口 + * + * @param paymentId 支付ID + * @param encounterId 就诊ID + * @return + */ + R invoiceRegMake(Long paymentId, Long encounterId); + + /** + * 医疗门诊电子票据开具接口 + * + * @param paymentId 支付ID + * @param encounterId 就诊ID + * @return + */ + R invoiceMZMake(Long paymentId, Long encounterId); + + /** + * 医疗住院电子票据开具接口 + * + * @param paymentId 支付ID + * @param encounterId 就诊ID + * @return + */ + R invoiceZYMake(Long paymentId, Long encounterId); + + /** + * 医疗电子票据红冲接口 + * + * @param paymentId 原付款id + * @param reason 取消理由 + * @return + */ + R invoiceWriteoff(Long paymentId, String reason); + + /** + * 查询已开发票 + * @param invoiceId 主键id + * @return + */ + Invoice getInvoiceById(Long invoiceId); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IPaymentRecService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IPaymentRecService.java new file mode 100644 index 00000000..43904697 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IPaymentRecService.java @@ -0,0 +1,93 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.appservice; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.core.common.core.domain.R; +import com.openhis.web.chargemanage.dto.OutpatientRegistrationAddParam; +import com.openhis.web.chargemanage.dto.OutpatientRegistrationSettleParam; +import com.openhis.web.paymentmanage.dto.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.Date; +import java.util.List; + +/** + * 付款应用层Service + * + * @author SunJQ + * @date 2025-03-29 + */ +public interface IPaymentRecService { + /** + * 付款 + * + * @param paymentDto 入参 + * @return 结果 + */ + R savePayment(PaymentDto paymentDto); + + /** + * 取消付款 + * + * @param cancelPaymentDto 入参 + * @return 结果 + */ + R cancelPayment(CancelPaymentDto cancelPaymentDto); + + /** + * 取消付款 + * + * @param cancelPaymentDto 入参 + * @return 结果 + */ + R cancelRegPayment(CancelPaymentDto cancelPaymentDto); + + /** + * 支付列表 + * + * @param searchKey 查询条件 + * @param pageNo 分页参数 + * @param pageSize 分页参数 + * @param request 请求参数 + * @return 结果 + */ + IPage getPage(String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request); + + /** + * 获取支付详情 + * + * @param paymentDto 入参 + * @return 结果 + */ + List getDetail(PaymentDto paymentDto); + + /** + * 预结算 + * @param prePaymentDto 预结算入参 + * @return 预结算结果 + */ + R prePayment(PrePaymentDto prePaymentDto); + + /** + * 挂号预结算 + * @param outpatientRegistrationAddParam 挂号参数 + * @return 预结算结果 + */ + R regPrePay(OutpatientRegistrationAddParam outpatientRegistrationAddParam); + + /** + * 挂号结算 + * @param outpatientRegistrationSettleParam 挂号参数 + * @return 预结算结果 + */ + R regPay(OutpatientRegistrationSettleParam outpatientRegistrationSettleParam, String chrgBchno, List paymentDetails); + + /** + * 取消预结算 + * @param encounterId 就诊id + * @return + */ + R unPrePayment(Long encounterId); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/EleInvoiceServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/EleInvoiceServiceImpl.java new file mode 100644 index 00000000..1fa52e28 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/EleInvoiceServiceImpl.java @@ -0,0 +1,1571 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.appservice.impl; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; + +import javax.annotation.Resource; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSON; +import com.openhis.administration.domain.*; +import com.openhis.administration.service.*; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.enums.ybenums.YbEncounterClass; +import org.apache.http.util.EntityUtils; + +import com.alibaba.fastjson2.JSONArray; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.core.common.core.domain.model.LoginUser; +import com.core.common.utils.*; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.openhis.common.enums.*; +import com.openhis.common.enums.ybenums.YbPayment; +import com.openhis.config.HttpConfig; +import com.openhis.financial.domain.PaymentRecDetail; +import com.openhis.financial.domain.PaymentReconciliation; +import com.openhis.financial.service.IPaymentRecDetailService; +import com.openhis.financial.service.IPaymentReconciliationService; +import com.openhis.web.paymentmanage.appservice.IEleInvoiceService; +import com.openhis.web.paymentmanage.dto.*; +import com.openhis.web.paymentmanage.mapper.EleInvoiceMapper; +import com.openhis.yb.domain.ClinicReg; +import com.openhis.yb.service.IClinicSettleService; +import com.openhis.yb.service.IRegService; +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson2.JSONObject; +import com.core.common.core.domain.R; +import com.openhis.common.constant.PromptMsgConstant; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * 电子发票接口Service + * + * @author yuxj + * @date 2025-04-22 + */ +@Component +@Slf4j +public class EleInvoiceServiceImpl implements IEleInvoiceService { + + @Resource + EleInvoiceMapper eleInvoiceMapper; + @Resource + IInvoiceService invoiceService; + @Resource + IPractitionerService practitionerService; + + @Resource + private AssignSeqUtil assignSeqUtil; + @Resource + IRegService regService; + @Resource + IClinicSettleService clinicSettleService; + @Resource + IPaymentReconciliationService paymentReconciliationService; + @Resource + IPaymentRecDetailService paymentRecDetailService; + @Resource + IChargeItemService chargeItemService; + @Resource + IEncounterService encounterService; + + @Autowired + private HttpConfig httpConfig; + private static final BigDecimal ZERO = new BigDecimal("0.00"); + + /** + * 电子票据补开接口 + * + * @param paymentId 支付ID + * @param encounterId 就诊ID + * @return + */ + public R invoiceReissue(Long paymentId, Long encounterId) { + // 获取付款信息 + PaymentReconciliation paymentReconciliation = paymentReconciliationService.getById(paymentId); + List idList = Arrays.stream(paymentReconciliation.getChargeItemIds().split(",")) + .map(String::trim) // 去除可能的空格 + .map(Long::parseLong) // 转换为 Long + .collect(Collectors.toList()); + // 获取费用项信息 + List chargeItem = chargeItemService.getChargeItemInfo(idList); + + for (ChargeItem item : chargeItem) { + // 号源表 + if (Objects.equals(item.getServiceTable(), CommonConstants.TableName.ADM_HEALTHCARE_SERVICE)) { + //挂号发票 + return R.ok(YbEncounterClass.REG.getValue()); + } + } + //获取就诊信息 + Encounter encounter = encounterService.getById(encounterId); + if (Objects.equals(encounter.getClassEnum(), EncounterClass.AMB.getValue())) { + //门诊发票 + return R.ok(YbEncounterClass.AMB.getValue()); + } else if (Objects.equals(encounter.getClassEnum(), EncounterClass.IMP.getValue())) { + //住院发票 + return R.ok(YbEncounterClass.IMP.getValue()); + } + + return R.ok("0"); + } + + /** + * 医疗挂号电子票据开具接口 + * + * @param paymentId 支付ID + * @param encounterId 就诊ID + * @return 返回值 + */ + public R invoiceRegMake(Long paymentId, Long encounterId) { + // 获取当前登陆用户信息 + LoginUser loginUser = SecurityUtils.getLoginUser(); + Practitioner user = practitionerService.getPractitionerByUserId(loginUser.getUserId()); + + // 定义输入格式(带时区) + SimpleDateFormat inputFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + + DecimalFormat df = new DecimalFormat(); + df.setMaximumIntegerDigits(16); + df.setMinimumIntegerDigits(1); // 至少显示1位整数 + df.setMaximumFractionDigits(6); // 最多显示6位小数 + df.setGroupingUsed(false); // 不使用千位分隔符 + try { + // 关键校验:检查必填参数encounterId是否存在,缺失则直接返回错误 + if (encounterId == null || encounterId == 0) { + return R.fail(PromptMsgConstant.Common.M00013); + } + + // 获取患者信息 + EleInvoicePatientInfoDto patientInfo = eleInvoiceMapper.getPatientInfo(encounterId, + EncounterClass.AMB.getValue(), OrganizationClass.CLINIC.getValue()); + // 获取付款信息 + EleInvoicePaymentInfoDto paymentInfo = eleInvoiceMapper.getPaymentInfo(paymentId, encounterId, + YbPayment.SELF_YB_ZH_PAY.getValue(), YbPayment.SELF_CASH_PAY.getValue(), + YbPayment.SELF_CASH_VX_VALUE.getValue(), YbPayment.SELF_CASH_ALI_VALUE.getValue(), + YbPayment.SELF_CASH_UNION_VALUE.getValue(), YbPayment.YB_FUND_PAY.getValue(), + YbPayment.OTHER_PAY.getValue(), YbPayment.SELF_YB_ZH_GJ_VALUE.getValue()); + // 医保结算记录 + InvoiceBaseInfoDto clinicSettle = this.getClinicSettleByPaymentId(paymentInfo.getPaymentId()); + + // 业务状态校验 + if (paymentInfo.getPaymentStatus() == null + || paymentInfo.getPaymentStatus().equals(PaymentStatus.DRAFT.getValue())) { + return R.fail(PromptMsgConstant.invoice.M00002); + } + if (!paymentInfo.getPaymentStatus().equals(PaymentStatus.SUCCESS.getValue())) { + return R.fail(PromptMsgConstant.invoice.M00006); + } + if (paymentInfo.getInvoiceStatus() != null + && paymentInfo.getInvoiceStatus().equals(InvoiceStatus.ISSUED.getValue())) { + return R.fail(PromptMsgConstant.invoice.M00003); + } + + // --------------------请求业务参数 data--------------------START + JSONObject bill = commomSet(patientInfo, paymentInfo, clinicSettle); + + // ------票据信息------ + // busType 业务标识 String 20 是 06,标识挂号 + bill.put("busType", "06"); + // checker 票据复核人 String 100 是 + bill.put("checker", user.getName()); + + // ------就诊信息------ + // patientCategory 就诊科室名称 String 50 是 + bill.put("patientCategory", patientInfo.getPatientCategory()); + // patientCategoryCode 就诊科室编码 String 50 是 + bill.put("patientCategoryCode", patientInfo.getPatientCategoryCode()); + + // ------费用------ + // 个人现金支付 + clinicSettle.setPsnCashPay(clinicSettle.getPsnCashPay() == null ? ZERO : clinicSettle.getPsnCashPay()); + + // otherInfo 其它扩展信息列表 JSONArray 不限 是 + JSONArray otherInfos = new JSONArray(); + // 公务员医疗补助资金支出:1.00;企业补充医疗保险基金支出:1.00;居民大病保险资金支出:1.00;职工大额医疗费用补助基金支出:1.00;医疗救助基金支出:1.00;医院负担金额:1.00;其他支出:1.00 + JSONObject otherInfo = new JSONObject(); + otherInfo.put("infoNo", "1"); + otherInfo.put("infoName", "公务员医疗补助资金支出"); + otherInfo.put("infoValue", clinicSettle.getHifesPay() == null ? ZERO : clinicSettle.getHifesPay()); + otherInfos.add(otherInfo); + bill.put("otherInfo", otherInfos); + + // ------项目------ + // chargeDetail 收费项目明细 JSONArray 不限 是 + // 获取收费项目明细 + // 医疗收费项目类别 13:挂号费 + List ybTypeList = new ArrayList<>(Arrays.asList("13")); + // 付款账单集合 + List chargeItemIds = new ArrayList<>(); + String[] parts = paymentInfo.getChargeItemIds().split(","); + for (String part : parts) { + chargeItemIds.add(Long.parseLong(part.trim())); // trim() 去除空格 + } // todo 若挂号绑诊察的话,方法需要改 + List chargeItems = eleInvoiceMapper.getChargeDetail(encounterId, ybTypeList, + "med_chrgitm_type", ContrastTypeEnum.INVOICE_CLINIC.getValue(), chargeItemIds); + + JSONArray chargeDetails = new JSONArray(); + Integer sortNo = 1; + for (EleInvoiceChargeDetailDto detail : chargeItems) { + JSONObject chargeDetail = new JSONObject(); + // sortNo 序号 Integer 不限 是 + chargeDetail.put("sortNo", sortNo); + // chargeCode 收费项目代码 String 50 是 + chargeDetail.put("chargeCode", detail.getChargeCode()); + // chargeName 收费项目名称 String 100 是 + chargeDetail.put("chargeName", detail.getChargeName()); + // unit 计量单位 + chargeDetail.put("unit", "项"); + // std 收费标准 Number 14,2 是 + BigDecimal std = + detail.getAmt().divide(new BigDecimal(detail.getNumber().toString()), 2, RoundingMode.HALF_UP); + // 精确表示,避免科学计数法 + chargeDetail.put("std", df.format(std)); + // number 数量 Number 14,2 是 + chargeDetail.put("number", detail.getNumber()); + // amt 金额 Number 14,2 是 + chargeDetail.put("amt", df.format(detail.getAmt())); + // selfAmt 自费金额 Number 14,2 是 + chargeDetail.put("selfAmt", ZERO); + sortNo++; + chargeDetails.add(chargeDetail); + } + bill.put("chargeDetail", chargeDetails); + + // listDetail 清单项目明细 JSONArray 不限 是 + JSONArray listDetails = new JSONArray(); + // 获取清单项目明细 + List details = eleInvoiceMapper.getRegListDetail(encounterId, ybTypeList, + "med_chrgitm_type", ContrastTypeEnum.INVOICE_CLINIC.getValue(), chargeItemIds); + + for (EleInvoiceListDetailDto detail : details) { + JSONObject listDetail = new JSONObject(); + // listDetailNo 明细流水号 String 60 否 + listDetail.put("listDetailNo", detail.getListDetailNo()); + // chargeCode 收费项目代码 String 50 是 + if (detail.getChargeCode() == null) { + listDetail.put("chargeCode", "YLMZ11");// 挂号费 + } else { + listDetail.put("chargeCode", detail.getChargeCode()); + } + // chargeName 收费项目名称 String 100 是 + listDetail.put("chargeName", detail.getChargeName()); + // code 药品编码 String 30 是 + listDetail.put("code", detail.getCode() == null ? detail.getYbCode() : detail.getCode()); + // name 药品名称 String 100 是 + listDetail.put("name", detail.getName()); + // unit 计量单位 String 20 是 + listDetail.put("unit", "次"); + // std 单价 Number 14,4 是 + listDetail.put("std", df.format(detail.getStd())); + // number 数量 Number 14,2 是 + listDetail.put("number", detail.getNumber()); + // amt 金额 Number 14,4 是 + listDetail.put("amt", df.format(detail.getAmt())); + // selfAmt 自费金额 Number 14,4 是 + listDetail.put("selfAmt", ZERO); + // remark 备注 1 甲类 2 乙类 3 自费 todo 暂时取不到 + // listDetail.put("remark", detail.getMedicalCareType()); + listDetails.add(listDetail); + } + bill.put("listDetail", listDetails); + // --------------------请求业务参数 data--------------------END + + // 初始化返回结果 + JSONObject redata = new JSONObject(); + String redata64; + String srcdata; + String srcmsg; + + System.out.println(JSON.toJSONString(bill)); + JSONObject resobj = PreInvoicePost(bill, "api/medical/invEBillRegistration"); + if (resobj.getBooleanValue("success")) { + JSONObject rejson = resobj.getJSONObject("result"); + + if (rejson.getString("result").equals("S0000")) { + // 返回结果内容 + redata64 = rejson.getString("message").toString(); + srcdata = new String(Base64.getDecoder().decode(redata64), StandardCharsets.UTF_8); + redata = JSONObject.parseObject(srcdata); + + // 获取发票管理表信息 + Invoice invoice = invoiceService.getById(paymentInfo.getInvoiceId()); + // 状态 + invoice.setStatusEnum(InvoiceStatus.ISSUED); + // 开票员 + invoice.setInvoicingStaffId(user.getUserId()); + // 电子票据代码 + invoice.setBillBatchCode(redata.getString("billBatchCode")); + // 电子票据号码 + invoice.setBillNo(redata.getString("billNo")); + // 电子校验码 + invoice.setRandom(redata.getString("random")); + // 电子票据生成时间 + invoice.setBillCreateTime(redata.getString("createTime")); + // 电子票据二维码图片数据 + invoice.setBillQrCode(redata.getString("billQRCode")); + // 电子票据H5页面URL + invoice.setPictureUrl(redata.getString("pictureUrl")); + // 电子票据外网H5页面URL + invoice.setPictureNetUrl(redata.getString("pictureNetUrl")); + // 票据营业日期 + invoice.setBillBusDate(inputFormat.parse(redata.getString("billBusDate"))); + + boolean flg = invoiceService.updateById(invoice); + if (!flg) { + return R.fail(PromptMsgConstant.Common.M00011); + } + + return R.ok(invoice, + MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[] {"电子发票做成"})); + } else { + redata.put("result", rejson.getString("result")); + redata64 = rejson.getString("message").toString(); + srcmsg = new String(Base64.getDecoder().decode(redata64), StandardCharsets.UTF_8); + return R.fail(srcmsg); + } + } else { + return R.fail(resobj.getString("msg")); + } + } catch (Exception ex) { + try { + return R.fail(ex.getCause().getMessage()); + } catch (Exception ex1) { + return R.fail(ex.getMessage()); + } + } + } + + /** + * 医疗门诊电子票据开具接口 + * + * @param paymentId 支付ID + * @param encounterId 就诊ID + * @return 返回值 + */ + public R invoiceMZMake(Long paymentId, Long encounterId) { + + // 获取当前登陆用户信息 + LoginUser loginUser = SecurityUtils.getLoginUser(); + Practitioner user = practitionerService.getPractitionerByUserId(loginUser.getUserId()); + + // 定义输入格式(带时区) + SimpleDateFormat inputFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + + DecimalFormat df = new DecimalFormat(); + df.setMaximumIntegerDigits(16); + df.setMinimumIntegerDigits(1); // 至少显示1位整数 + df.setMaximumFractionDigits(6); // 最多显示6位小数 + df.setGroupingUsed(false); // 不使用千位分隔符 + + try { + // 关键校验:检查必填参数encounterId是否存在,缺失则直接返回错误 + if (encounterId == null || encounterId == 0) { + return R.fail(PromptMsgConstant.Common.M00013); + } + + // 获取患者信息 + EleInvoicePatientInfoDto patientInfo = eleInvoiceMapper.getPatientInfo(encounterId, + EncounterClass.AMB.getValue(), OrganizationClass.CLINIC.getValue()); + // 获取付款信息 + EleInvoicePaymentInfoDto paymentInfo = eleInvoiceMapper.getPaymentInfo(paymentId, encounterId, + YbPayment.SELF_YB_ZH_PAY.getValue(), YbPayment.SELF_CASH_PAY.getValue(), + YbPayment.SELF_CASH_VX_VALUE.getValue(), YbPayment.SELF_CASH_ALI_VALUE.getValue(), + YbPayment.SELF_CASH_UNION_VALUE.getValue(), YbPayment.YB_FUND_PAY.getValue(), + YbPayment.OTHER_PAY.getValue(), YbPayment.SELF_YB_ZH_GJ_VALUE.getValue()); + // 医保结算记录 + InvoiceBaseInfoDto clinicSettle = this.getClinicSettleByPaymentId(paymentInfo.getPaymentId()); + + // 业务状态校验 + if (paymentInfo.getPaymentStatus() == null + || paymentInfo.getPaymentStatus().equals(PaymentStatus.DRAFT.getValue())) { + return R.fail(PromptMsgConstant.invoice.M00002); + } + if (!paymentInfo.getPaymentStatus().equals(PaymentStatus.SUCCESS.getValue())) { + return R.fail(PromptMsgConstant.invoice.M00006); + } + if (paymentInfo.getInvoiceStatus() != null + && paymentInfo.getInvoiceStatus().equals(InvoiceStatus.ISSUED.getValue())) { + return R.fail(PromptMsgConstant.invoice.M00003); + } + + // --------------------请求业务参数 data--------------------START + JSONObject bill = commomSet(patientInfo, paymentInfo, clinicSettle); + + // ------票据信息------ + // busType 业务标识 String 20 是 直接填写业务系统内部编码值,由医疗平台配置对照,例如:附录5 业务标识列表 + // 值:02,标识门诊 + bill.put("busType", "02"); + + // ------就诊信息------ + + // patientCategory 就诊科室 String 60 是 + bill.put("patientCategory", patientInfo.getPatientCategory()); + // patientCategoryCode 就诊科室编码 String 60 是 + bill.put("patientCategoryCode", patientInfo.getPatientCategoryCode()); + // patientNo 患者就诊编号 String 30 是 患者每次就诊一次就生成的一个新的编号。(患者登记号) + bill.put("patientNo", encounterId); + // caseNumber 病历号 String 50 是 + bill.put("caseNumber", patientInfo.getCaseNumber()); + + // ------费用------ + // 医保统筹基金支付 + clinicSettle.setHifpPay(clinicSettle.getHifpPay() == null ? ZERO : clinicSettle.getHifpPay()); + // 个人现金支付 + clinicSettle.setPsnCashPay(clinicSettle.getPsnCashPay() == null ? ZERO : clinicSettle.getPsnCashPay()); + // 医保报销总金额 + clinicSettle + .setFundPaySumamt(clinicSettle.getFundPaySumamt() == null ? ZERO : clinicSettle.getFundPaySumamt()); + + // otherfundPay 其它医保支付 + bill.put("otherfundPay", + String.format("%.2f", clinicSettle.getFundPaySumamt().subtract(clinicSettle.getHifpPay()))); + // ownAcBalance 个人账户余额 Number 14,2 否 + bill.put("ownAcBalance", clinicSettle.getBalc()); + // balancedNumber 医保结算号 String 100 否 HIS和医保实时结算时,医保生成的唯一业务流水号 + bill.put("balancedNumber", clinicSettle.getSetlId() == null ? "" : clinicSettle.getSetlId()); + // otherInfo 其它扩展信息列表 JSONArray 不限 是 填写信息需要在电子票据上单独显示的其它扩展信息(未知信息) + // 具体传值说明详见A-3,JSON格式列表 + JSONArray otherInfos = new JSONArray(); + // 公务员医疗补助资金支出:1.00;企业补充医疗保险基金支出:1.00;居民大病保险资金支出:1.00;职工大额医疗费用补助基金支出:1.00;医疗救助基金支出:1.00;医院负担金额:1.00;其他支出:1.00 + JSONObject otherInfo = new JSONObject(); + otherInfo.put("infoNo", "1"); + otherInfo.put("infoName", "公务员医疗补助资金支出"); + otherInfo.put("infoValue", clinicSettle.getCvlservPay() == null ? ZERO : clinicSettle.getCvlservPay()); + otherInfos.add(otherInfo); + + otherInfo = new JSONObject(); + otherInfo.put("infoNo", "2"); + otherInfo.put("infoName", "企业补充医疗保险基金支出"); + otherInfo.put("infoValue", clinicSettle.getHifesPay() == null ? ZERO : clinicSettle.getHifesPay()); + otherInfos.add(otherInfo); + + otherInfo = new JSONObject(); + otherInfo.put("infoNo", "3"); + otherInfo.put("infoName", "居民大病保险资金支出"); + otherInfo.put("infoValue", clinicSettle.getHifmiPay() == null ? ZERO : clinicSettle.getHifmiPay()); + otherInfos.add(otherInfo); + + otherInfo = new JSONObject(); + otherInfo.put("infoNo", "4"); + otherInfo.put("infoName", "职工大额医疗费用补助基金支出"); + otherInfo.put("infoValue", clinicSettle.getHifobPay() == null ? ZERO : clinicSettle.getHifobPay()); + otherInfos.add(otherInfo); + + otherInfo = new JSONObject(); + otherInfo.put("infoNo", "5"); + otherInfo.put("infoName", "医疗救助基金支出"); + otherInfo.put("infoValue", clinicSettle.getMafPay() == null ? ZERO : clinicSettle.getMafPay()); + otherInfos.add(otherInfo); + + otherInfo = new JSONObject(); + otherInfo.put("infoNo", "6"); + otherInfo.put("infoName", "医院负担金额"); + otherInfo.put("infoValue", clinicSettle.getHospPartAmt() == null ? ZERO : clinicSettle.getHospPartAmt()); + otherInfos.add(otherInfo); + + otherInfo = new JSONObject(); + otherInfo.put("infoNo", "1"); + otherInfo.put("infoName", "其他支出"); + otherInfo.put("infoValue", clinicSettle.getOthPay() == null ? ZERO : clinicSettle.getOthPay()); + otherInfos.add(otherInfo); + bill.put("otherInfo", otherInfos); + + // ------项目------ + // 医疗收费项目类别 + // 01 床位费,02 诊察费,03 检查费,04 化验费,05 治疗费,06 手术费,07 护理费,08 卫生材料费,09 西药费,10 中药饮片费,11 中成药费,12 一般诊疗费,13 挂号费,14 其他费 + List ybTypeList = new ArrayList<>( + Arrays.asList("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "14")); + // 付款账单集合 + List chargeItemIds = new ArrayList<>(); + String[] parts = paymentInfo.getChargeItemIds().split(","); + for (String part : parts) { + chargeItemIds.add(Long.parseLong(part.trim())); // trim() 去除空格 + } + + // 获取收费项目明细 + List chargeItems = eleInvoiceMapper.getChargeDetail(encounterId, ybTypeList, + "med_chrgitm_type", ContrastTypeEnum.INVOICE_CLINIC.getValue(), chargeItemIds); + + // chargeDetail 收费项目明细 JSONArray 不限 是 详见A-1,JSON格式列表 + JSONArray chargeDetails = new JSONArray(); + Integer sortNo = 1; + for (EleInvoiceChargeDetailDto detail : chargeItems) { + JSONObject chargeDetail = new JSONObject(); + // sortNo 序号 Integer 不限 是 + chargeDetail.put("sortNo", sortNo); + // chargeCode 收费项目代码 String 50 是 + chargeDetail.put("chargeCode", detail.getChargeCode()); + // chargeName 收费项目名称 String 100 是 + chargeDetail.put("chargeName", detail.getChargeName()); + // unit 计量单位 + chargeDetail.put("unit", "项"); + // std 收费标准 Number 14,2 是 + BigDecimal std = + detail.getAmt().divide(new BigDecimal(detail.getNumber().toString()), 2, RoundingMode.HALF_UP); + chargeDetail.put("std", df.format(std)); + // number 数量 Number 14,2 是 + chargeDetail.put("number", detail.getNumber()); + // amt 金额 Number 14,2 是 + chargeDetail.put("amt", df.format(detail.getAmt())); + // // selfAmt 自费金额 Number 14,2 是 + chargeDetail.put("selfAmt", ZERO); + sortNo++; + chargeDetails.add(chargeDetail); + } + bill.put("chargeDetail", chargeDetails); + // listDetail 清单项目明细 JSONArray 不限 是 详见A-2,JSON格式列表 + JSONArray listDetails = new JSONArray(); + + // 获取清单项目明细 + List details = eleInvoiceMapper.getListDetail(encounterId, ybTypeList, + "med_chrgitm_type", ContrastTypeEnum.INVOICE_CLINIC.getValue(), chargeItemIds); + + for (EleInvoiceListDetailDto detail : details) { + JSONObject listDetail = new JSONObject(); + // listDetailNo 明细流水号 String 60 否 + listDetail.put("listDetailNo", detail.getListDetailNo()); + // chargeCode 收费项目代码 String 50 是 + listDetail.put("chargeCode", detail.getChargeCode()); + // chargeName 收费项目名称 String 100 是 + listDetail.put("chargeName", detail.getChargeName()); + // code 药品编码 String 30 是 + listDetail.put("code", detail.getCode() == null ? detail.getYbCode() : detail.getCode()); + // name 药品名称 String 100 是 + listDetail.put("name", detail.getName()); + // unit 计量单位 String 20 是 + listDetail.put("unit", detail.getUnit()); + // std 单价 Number 14,4 是 + listDetail.put("std", df.format(detail.getStd())); + // number 数量 Number 14,2 是 + listDetail.put("number", detail.getNumber()); + // amt 金额 Number 14,4 是 + listDetail.put("amt", df.format(detail.getAmt())); + // // selfAmt 自费金额 Number 14,4 是 + listDetail.put("selfAmt", ZERO); + // medicalCareType 医保药品分类 String 1 否 + listDetail.put("medicalCareType", detail.getMedicalCareType()); + // medCareItemCode 医保项目编码 String 100 否 + listDetail.put("medCareItemCode", detail.getYbCode() == null ? "" : detail.getYbCode()); + // medCareItemName 医保项目名称 String 100 否 + listDetail.put("medCareItemName", detail.getName() == null ? "" : detail.getName()); + + listDetails.add(listDetail); + } + bill.put("listDetail", listDetails); + + // --------------------请求业务参数 data--------------------END + JSONObject redata = new JSONObject(); + String redata64; + String srcdata; + String srcmsg; + System.out.println(JSON.toJSONString(bill)); + JSONObject resobj = PreInvoicePost(bill, "api/medical/invoiceEBillOutpatient"); + if (resobj.getBooleanValue("success")) { + JSONObject rejson = resobj.getJSONObject("result"); + if (rejson.getString("result").equals("S0000")) { + // 保存发票信息 + redata64 = rejson.getString("message").toString(); + srcdata = new String(Base64.getDecoder().decode(redata64), StandardCharsets.UTF_8); + redata = JSONObject.parseObject(srcdata); + + // 获取发票管理表信息 + Invoice invoice = invoiceService.getById(paymentInfo.getInvoiceId()); + // 状态 + invoice.setStatusEnum(InvoiceStatus.ISSUED); + // 开票员 + invoice.setInvoicingStaffId(user.getUserId()); + // 电子票据代码 + invoice.setBillBatchCode(redata.getString("billBatchCode")); + // 电子票据号码 + invoice.setBillNo(redata.getString("billNo")); + // 电子校验码 + invoice.setRandom(redata.getString("random")); + // 电子票据生成时间 + invoice.setBillCreateTime(redata.getString("createTime")); + // 电子票据二维码图片数据 + invoice.setBillQrCode(redata.getString("billQRCode")); + // 电子票据H5页面URL + invoice.setPictureUrl(redata.getString("pictureUrl")); + // 电子票据外网H5页面URL + invoice.setPictureNetUrl(redata.getString("pictureNetUrl")); + // 票据营业日期 + invoice.setBillBusDate(inputFormat.parse(redata.getString("billBusDate"))); + + boolean flg = invoiceService.updateById(invoice); + if (!flg) { + return R.fail(PromptMsgConstant.Common.M00011); + } + + return R.ok(invoice, + MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[] {"电子发票做成"})); + } else { + redata.put("result", rejson.getString("result")); + redata64 = rejson.getString("message").toString(); + srcmsg = new String(Base64.getDecoder().decode(redata64), StandardCharsets.UTF_8); + return R.fail(srcmsg); + + } + } else { + return R.fail(resobj.getString("msg")); + } + } catch (Exception ex) { + try { + return R.fail(ex.getCause().getMessage()); + } catch (Exception ex1) { + return R.fail(ex.getMessage()); + } + } + } + + /** + * 医疗住院电子票据开具接口 + * + * @param paymentId 支付ID + * @param encounterId 就诊ID + * @return 返回值 + */ + public R invoiceZYMake(Long paymentId, Long encounterId) { + // 获取当前登陆用户信息 + LoginUser loginUser = SecurityUtils.getLoginUser(); + Practitioner user = practitionerService.getPractitionerByUserId(loginUser.getUserId()); + + // 日期格式化:定义多种时间格式,用于生成业务流水号、时间戳等。 + SimpleDateFormat sdfday = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + // 定义输入格式(带时区) + SimpleDateFormat inputFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + + DecimalFormat df = new DecimalFormat(); + df.setMaximumIntegerDigits(16); + df.setMinimumIntegerDigits(1); // 至少显示1位整数 + df.setMaximumFractionDigits(6); // 最多显示6位小数 + df.setGroupingUsed(false); // 不使用千位分隔符 + + try { + // 关键校验:检查必填参数encounterId是否存在,缺失则直接返回错误 + if (encounterId == null || encounterId == 0) { + return R.fail(PromptMsgConstant.Common.M00013); + } + + // 获取患者信息 + EleInvoicePatientInfoDto patientInfo = eleInvoiceMapper.getPatientInfo(encounterId, + EncounterClass.IMP.getValue(), OrganizationClass.INPATIENT.getValue()); + // 获取付款信息 + EleInvoicePaymentInfoDto paymentInfo = eleInvoiceMapper.getPaymentInfo(paymentId, encounterId, + YbPayment.SELF_YB_ZH_PAY.getValue(), YbPayment.SELF_CASH_PAY.getValue(), + YbPayment.SELF_CASH_VX_VALUE.getValue(), YbPayment.SELF_CASH_ALI_VALUE.getValue(), + YbPayment.SELF_CASH_UNION_VALUE.getValue(), YbPayment.YB_FUND_PAY.getValue(), + YbPayment.OTHER_PAY.getValue(), YbPayment.SELF_YB_ZH_GJ_VALUE.getValue()); + // 医保结算记录 + InvoiceBaseInfoDto clinicSettle = this.getClinicSettleByPaymentId(paymentInfo.getPaymentId()); + + // 业务状态校验 + if (paymentInfo.getPaymentStatus() == null + || paymentInfo.getPaymentStatus().equals(PaymentStatus.DRAFT.getValue())) { + return R.fail(PromptMsgConstant.invoice.M00002); + } + if (!paymentInfo.getPaymentStatus().equals(PaymentStatus.SUCCESS.getValue())) { + return R.fail(PromptMsgConstant.invoice.M00006); + } + if (paymentInfo.getInvoiceStatus() != null + && paymentInfo.getInvoiceStatus().equals(InvoiceStatus.ISSUED.getValue())) { + return R.fail(PromptMsgConstant.invoice.M00003); + } + + // --------------------请求业务参数 data--------------------START + JSONObject bill = commomSet(patientInfo, paymentInfo, clinicSettle); + + // ------票据信息------ + // busType 业务标识 String 20 是 直接填写业务系统内部编码值,由医疗平台配置对照,例如:附录5 业务标识列表 + // 值:01,标识住院 + bill.put("busType", "01"); + // checker 票据复核人 String 100 是 + bill.put("checker", user.getName()); + + // ------就诊信息------ + + // medCareAreaCode 医保行政区划码 String 6 否 医保结算时必须填写 + bill.put("medCareAreaCode", patientInfo.getMedCareAreaCode()); + // category 入院科室名称 String 50 是 如:入院科室不存在,填写出院科室 + bill.put("category", patientInfo.getCategory()); + // categoryCode 入院科室编码 String 50 是 如:入院科室不存在,填写出院科室 + bill.put("categoryCode", patientInfo.getCategoryCode()); + // leaveCategory 出院科室名称 String 50 是 + bill.put("leaveCategory", patientInfo.getLeaveCategory()); + // leaveCategoryCode 出院科室编码 String 50 是 + bill.put("leaveCategoryCode", patientInfo.getLeaveCategoryCode()); + // patientId 患者唯一ID String 50 否 + bill.put("patientId", patientInfo.getPayerId()); + // patientNo 患者就诊编号 String 30 否 + bill.put("patientNo", encounterId); + // caseNumber 病历号 String 50 是 + bill.put("caseNumber", patientInfo.getCaseNumber()); + // inHospitalDate 住院日期 String 10 是 格式:yyyy-MM-dd + bill.put("inHospitalDate", sdfday.format(sdf2.parse(patientInfo.getInHospitalDate()))); + // outHospitalDate 出院日期 String 10 是 格式:yyyy-MM-dd + bill.put("outHospitalDate", sdfday.format(sdf2.parse(patientInfo.getOutHospitalDate()))); + + // ------费用------ + // 医保统筹基金支付 + clinicSettle.setHifpPay(clinicSettle.getHifpPay() == null ? ZERO : clinicSettle.getHifpPay()); + // 个人现金支付 + clinicSettle.setPsnCashPay(clinicSettle.getPsnCashPay() == null ? ZERO : clinicSettle.getPsnCashPay()); + // 医保报销总金额 + clinicSettle + .setFundPaySumamt(clinicSettle.getFundPaySumamt() == null ? ZERO : clinicSettle.getFundPaySumamt()); + // otherfundPay 其它医保支付 Number 14,2 是 + bill.put("otherfundPay", + String.format("%.2f", clinicSettle.getFundPaySumamt().subtract(clinicSettle.getHifpPay()))); + // balancedNumber 医保结算号 String 100 否 + bill.put("balancedNumber", clinicSettle.getSetlId() == null ? "" : clinicSettle.getSetlId()); + // otherInfo 其它扩展信息列表 JSONArray 不限 是 + JSONArray otherInfos = new JSONArray(); + // 公务员医疗补助资金支出:1.00;企业补充医疗保险基金支出:1.00;居民大病保险资金支出:1.00;职工大额医疗费用补助基金支出:1.00;医疗救助基金支出:1.00;医院负担金额:1.00;其他支出:1.00 + JSONObject otherInfo = new JSONObject(); + otherInfo.put("infoNo", "1"); + otherInfo.put("infoName", "公务员医疗补助资金支出"); + otherInfo.put("infoValue", clinicSettle.getCvlservPay() == null ? ZERO : clinicSettle.getCvlservPay()); + otherInfos.add(otherInfo); + + otherInfo = new JSONObject(); + otherInfo.put("infoNo", "2"); + otherInfo.put("infoName", "企业补充医疗保险基金支出"); + otherInfo.put("infoValue", clinicSettle.getHifesPay() == null ? ZERO : clinicSettle.getHifesPay()); + otherInfos.add(otherInfo); + + otherInfo = new JSONObject(); + otherInfo.put("infoNo", "3"); + otherInfo.put("infoName", "居民大病保险资金支出"); + otherInfo.put("infoValue", clinicSettle.getHifmiPay() == null ? ZERO : clinicSettle.getHifmiPay()); + otherInfos.add(otherInfo); + + otherInfo = new JSONObject(); + otherInfo.put("infoNo", "4"); + otherInfo.put("infoName", "职工大额医疗费用补助基金支出"); + otherInfo.put("infoValue", clinicSettle.getHifobPay() == null ? ZERO : clinicSettle.getHifobPay()); + otherInfos.add(otherInfo); + + otherInfo = new JSONObject(); + otherInfo.put("infoNo", "5"); + otherInfo.put("infoName", "医疗救助基金支出"); + otherInfo.put("infoValue", clinicSettle.getMafPay() == null ? ZERO : clinicSettle.getMafPay()); + otherInfos.add(otherInfo); + + otherInfo = new JSONObject(); + otherInfo.put("infoNo", "6"); + otherInfo.put("infoName", "医院负担金额"); + otherInfo.put("infoValue", clinicSettle.getHospPartAmt() == null ? ZERO : clinicSettle.getHospPartAmt()); + otherInfos.add(otherInfo); + + otherInfo = new JSONObject(); + otherInfo.put("infoNo", "1"); + otherInfo.put("infoName", "其他支出"); + otherInfo.put("infoValue", clinicSettle.getOthPay() == null ? ZERO : clinicSettle.getOthPay()); + otherInfos.add(otherInfo); + bill.put("otherInfo", otherInfos); + + // ------项目------ + // 医疗收费项目类别 + // 01 床位费,02 诊察费,03 检查费,04 化验费,05 治疗费,06 手术费,07 护理费,08 卫生材料费,09 西药费,10 中药饮片费,11 中成药费,12 一般诊疗费,13 挂号费,14 其他费 + List ybTypeList = new ArrayList<>( + Arrays.asList("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14")); + // 付款账单集合 + List chargeItemIds = new ArrayList<>(); + String[] parts = paymentInfo.getChargeItemIds().split(","); + for (String part : parts) { + chargeItemIds.add(Long.parseLong(part.trim())); // trim() 去除空格 + } + // 获取清单项目明细 + List details = eleInvoiceMapper.getListDetail(encounterId, ybTypeList, + "med_chrgitm_type", ContrastTypeEnum.INVOICE_CINPATIENT.getValue(), chargeItemIds); + + JSONArray listDetails = new JSONArray(); + + for (EleInvoiceListDetailDto detail : details) { + JSONObject listDetail = new JSONObject(); + // listDetailNo 明细流水号 String 60 否 + listDetail.put("listDetailNo", detail.getListDetailNo()); + // chargeCode 收费项目代码 String 50 是 + listDetail.put("chargeCode", detail.getChargeCode()); + // chargeName 收费项目名称 String 100 是 + listDetail.put("chargeName", detail.getChargeName()); + // code 药品编码 String 30 是 + listDetail.put("code", detail.getCode() == null ? detail.getYbCode() : detail.getCode()); + // name 药品名称 String 100 是 + listDetail.put("name", detail.getName()); + // unit 计量单位 String 20 是 + listDetail.put("unit", detail.getUnit()); + // std 单价 Number 14,4 是 + listDetail.put("std", df.format(detail.getStd())); + // number 数量 Number 14,2 是 + listDetail.put("number", detail.getNumber()); + // amt 金额 Number 14,4 是 + listDetail.put("amt", df.format(detail.getAmt())); + // // selfAmt 自费金额 Number 14,4 是 + listDetail.put("selfAmt", ZERO); + // medicalCareType 医保药品分类 String 1 否 + listDetail.put("medicalCareType", detail.getMedicalCareType()); + // medCareItemCode 医保项目编码 String 100 否 + listDetail.put("medCareItemCode", detail.getYbCode() == null ? "" : detail.getYbCode()); + // medCareItemName 医保项目名称 String 100 否 + listDetail.put("medCareItemName", detail.getName() == null ? "" : detail.getName()); + + listDetails.add(listDetail); + } + bill.put("listDetail", listDetails); + + // 获取收费项目明细 + List chargeItems = eleInvoiceMapper.getChargeDetail(encounterId, ybTypeList, + "med_chrgitm_type", ContrastTypeEnum.INVOICE_CINPATIENT.getValue(), chargeItemIds); + + // chargeDetail 收费项目明细 JSONArray 不限 是 + JSONArray chargeDetails = new JSONArray(); + + Integer sortNo = 1; + for (EleInvoiceChargeDetailDto detail : chargeItems) { + JSONObject chargeDetail = new JSONObject(); + // sortNo 序号 Integer 不限 是 + chargeDetail.put("sortNo", sortNo); + // chargeCode 收费项目代码 String 50 是 + chargeDetail.put("chargeCode", detail.getChargeCode()); + // chargeName 收费项目名称 String 100 是 + chargeDetail.put("chargeName", detail.getChargeName()); + // unit 计量单位 + chargeDetail.put("unit", "项"); + // std 收费标准 Number 14,2 是 + BigDecimal std = + detail.getAmt().divide(new BigDecimal(detail.getNumber().toString()), 2, RoundingMode.HALF_UP); + // 精确表示,避免科学计数法 + chargeDetail.put("std", df.format(std)); + // number 数量 Number 14,2 是 + chargeDetail.put("number", detail.getNumber()); + // amt 金额 Number 14,2 是 + chargeDetail.put("amt", df.format(detail.getAmt())); + // selfAmt 自费金额 Number 14,2 是 + chargeDetail.put("selfAmt", ZERO); + sortNo++; + chargeDetails.add(chargeDetail); + } + bill.put("chargeDetail", chargeDetails); + + // --------------------请求业务参数 data--------------------END + + JSONObject redata = new JSONObject(); + String redata64; + String srcdata; + String srcmsg; + JSONObject resobj = PreInvoicePost(bill, "api/medical/invEBillHospitalized"); + if (resobj.getBooleanValue("success")) { + JSONObject rejson = resobj.getJSONObject("result"); + if (rejson.getString("result").equals("S0000")) { + // 保存发票信息 + redata64 = rejson.getString("message").toString(); + srcdata = new String(Base64.getDecoder().decode(redata64), StandardCharsets.UTF_8); + redata = JSONObject.parseObject(srcdata); + + // 获取发票管理表信息 + Invoice invoice = invoiceService.getById(paymentInfo.getInvoiceId()); + // 状态 + invoice.setStatusEnum(InvoiceStatus.ISSUED); + // 开票员 + invoice.setInvoicingStaffId(user.getUserId()); + // 电子票据代码 + invoice.setBillBatchCode(redata.getString("billBatchCode")); + // 电子票据号码 + invoice.setBillNo(redata.getString("billNo")); + // 电子校验码 + invoice.setRandom(redata.getString("random")); + // 电子票据生成时间 + invoice.setBillCreateTime(redata.getString("createTime")); + // 电子票据二维码图片数据 + invoice.setBillQrCode(redata.getString("billQRCode")); + // 电子票据H5页面URL + invoice.setPictureUrl(redata.getString("pictureUrl")); + // 电子票据外网H5页面URL + invoice.setPictureNetUrl(redata.getString("pictureNetUrl")); + // 票据营业日期 + invoice.setBillBusDate(inputFormat.parse(redata.getString("billBusDate"))); + + boolean flg = invoiceService.updateById(invoice); + if (!flg) { + return R.fail(PromptMsgConstant.Common.M00011); + } + + return R.ok(invoice, + MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[] {"电子发票做成"})); + } else { + redata.put("result", rejson.getString("result")); + redata64 = rejson.getString("message").toString(); + srcmsg = new String(Base64.getDecoder().decode(redata64), StandardCharsets.UTF_8); + return R.fail(srcmsg); + } + } else { + return R.fail(resobj.getString("msg")); + } + + } catch (Exception ex) { + try { + return R.fail(ex.getCause().getMessage()); + } catch (Exception ex1) { + return R.fail(ex.getMessage()); + } + } + } + + /** + * 医疗电子票据开具共通赋值 + * + * @param patientInfo 患者信息 + * @param paymentInfo 付款信息 + * @param clinicSettle 医保结算记录 + * @return 返回值 + */ + + private JSONObject commomSet(EleInvoicePatientInfoDto patientInfo, EleInvoicePaymentInfoDto paymentInfo, + InvoiceBaseInfoDto clinicSettle) throws ParseException { + // 日期格式化:定义多种时间格式,用于生成业务流水号、时间戳等。 + SimpleDateFormat sdfday = new SimpleDateFormat("yyyyMMdd"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + // 定义输入格式(带时区) + SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSX"); + inputFormat.setTimeZone(TimeZone.getTimeZone("GMT+8")); // 设置时区 + + DecimalFormat df = new DecimalFormat("#.00"); + df.setMaximumIntegerDigits(14); + df.setMinimumIntegerDigits(1); // 至少显示1位整数 + + // 获取当前登陆用户信息 + LoginUser loginUser = SecurityUtils.getLoginUser(); + Practitioner user = practitionerService.getPractitionerByUserId(loginUser.getUserId()); + + JSONObject optionJson = SecurityUtils.getLoginUser().getOptionJson(); + + JSONObject bill = new JSONObject(); + + // ------票据信息------ + // busNo 业务流水号 String 50 是 + bill.put("busNo", paymentInfo.getBusNo()); + // payer 患者姓名 String 100 是 + bill.put("payer", patientInfo.getPayer()); + // busDateTime 业务发生时间 String 17 是 格式:yyyyMMddHHmmssSSS + //Date parse = inputFormat.parse(paymentInfo.getBillDate()); + //String format = sdf.format(parse); + //ZonedDateTime parse1 = ZonedDateTime.parse(paymentInfo.getBillDate(), inputFormatter); + //String format = parse1.format(outputFormatter); + String replace = paymentInfo.getBillDate().replace("+08", ""); + Date date = DateUtils.parseDate(replace.split("\\.")[0]); + + bill.put("busDateTime", DateUtils.parseDateToStr("yyyyMMddHHmmssSSS",date)); + //bill.put("busDateTime", DateUtils.parseDate(paymentInfo.getBillDate(),"yyyyMMddHHmmssSSS")); + // placeCode 开票点编码 String 50 是 + bill.put("placeCode", user.getKpdCode()); + // payee 收费员 String 50 是 + bill.put("payee", paymentInfo.getPayee()); + // author 票据编制人 String 100 是 + bill.put("author", user.getName()); + // totalAmt 开票总金额 Number 14,2 是 + paymentInfo.setTotalAmt(paymentInfo.getTotalAmt() == null ? ZERO : paymentInfo.getTotalAmt()); + bill.put("totalAmt", String.format("%.2f", paymentInfo.getTotalAmt())); + + // ------通知------ + // tel 患者手机号码 String 11 否 + bill.put("tel", patientInfo.getTel()); + // payerType 交款人类型 String 1 是 交款人类型:1 个人 2 单位 + bill.put("payerType", "2"); + // cardType 卡类型 String 10 是 直接填写业务系统内部编码值,由医疗平台配置对照 + // 例如:附录3:卡类型与证件类型列表 + bill.put("cardType", "1101"); + // cardNo 卡号 String 50 是 根据卡类型填写 + bill.put("cardNo", patientInfo.getCardNo()); + + // ------就诊信息------ + // medicalInstitution 医疗机构类型 String 30 是 按照《医疗机构管理条例实施细则》和《卫生部关于修订<医疗机构管理条例实施细则>第三条有关内容的通知》确定的医疗卫生机构类别 + String medicalInstitution; + switch (optionJson.getString("hospital_lv")) { + case "01": + medicalInstitution = "三级特等"; + break; + case "02": + medicalInstitution = "三级甲等"; + break; + case "03": + medicalInstitution = "三级乙等"; + break; + case "04": + medicalInstitution = "三级丙等"; + break; + case "05": + medicalInstitution = "二级甲等"; + break; + case "06": + medicalInstitution = "二级乙等"; + break; + case "07": + medicalInstitution = "二级丙等"; + break; + case "08": + medicalInstitution = "一级甲等"; + break; + case "09": + medicalInstitution = "一级乙等"; + break; + case "10": + medicalInstitution = "一级丙等"; + break; + default: + medicalInstitution = "无等级"; + break; + } + bill.put("medicalInstitution", medicalInstitution); + // medCareInstitution 医保机构编码 String 60 否 医保机构的唯一编码 + bill.put("medCareInstitution", optionJson.getString(CommonConstants.Option.HOSPITAL_CODE)); + + // 410 长期照护保险 //310 职工基本医疗保险 + // 320 公务员医疗补助 //330 大额医疗费用补助 + // 340 离休人员医疗保障 //350 一至六级残废军人医疗补助 + // 360 老红军医疗保障 //370 企业补充医疗保险 + // 380 新型农村合作医疗 //390 城乡居民基本医疗保险 + // 391 城镇居民基本医疗保险 //392 城乡居民大病医疗保险 //399 其他特殊人员医疗保障 + + // 01 职工基本医疗保险 06 全公费 + // 02 居民基本医疗保险 07 全自费 + // 03 新型农村合作医疗 90 城乡居民医疗保险 + // 04 贫困救助 99 其他 + // 05 商业医疗保险 + String medCareTypeCode; + String medicalCareType; + // 医保 挂号退号表 + ClinicReg clinicReg = regService.getByBusNo(patientInfo.getEncounterBusNo()); + String xztype; + if (clinicReg == null) { + xztype = "07"; + } else { + xztype = clinicReg.getInsutype(); + // medicalInsuranceID 患者医保编号 String 30 否 参保人在医保系统中的唯一标识(医保号) + bill.put("medicalInsuranceID", clinicReg.getPsnNo() == null ? "" : clinicReg.getPsnNo()); + } + + switch (xztype) { + case "310": + case "320": + case "330": + case "370": + medicalCareType = "职工基本医疗保险"; + medCareTypeCode = "01"; + break; + case "340": + case "360": + medicalCareType = "全公费"; + medCareTypeCode = "06"; + break; + case "390": + case "392": + case "391": + case "380": + medicalCareType = "居民基本医疗保险"; + medCareTypeCode = "02"; + break; + case "350": + case "410": + case "399": + medicalCareType = "其他"; + medCareTypeCode = "99"; + break; + default: + medicalCareType = "全自费"; + medCareTypeCode = "07"; + break; + } + // medCareTypeCode 医保类型编码 String 30 否 + bill.put("medCareTypeCode", medCareTypeCode); + // medicalCareType 医保类型名称 String 60 是 由城镇职工基本医疗保险、城镇居民基本医疗保险、新型农村合作医疗、其它医疗保险等构成 + bill.put("medicalCareType", medicalCareType); + // consultationDate 就诊日期 String 10 是 患者就医时间 格式:yyyyMMdd + bill.put("consultationDate", sdfday.format(inputFormat.parse(patientInfo.getConsultationDate()))); + // sex 性别 String 4 是 + bill.put("sex", patientInfo.getGenderEnum_enumText()); + // age 年龄 String 10 是 + bill.put("age", AgeCalculatorUtil.getAge(patientInfo.getBirthDate())); + + // ------费用------ + // 个人账户支付 + clinicSettle.setAcctPay(clinicSettle.getAcctPay() == null ? ZERO : clinicSettle.getAcctPay()); + // 医保统筹基金支付 + clinicSettle.setHifpPay(clinicSettle.getHifpPay() == null ? ZERO : clinicSettle.getHifpPay()); + // 自费金额 + clinicSettle + .setFulamtOwnpayAmt(clinicSettle.getFulamtOwnpayAmt() == null ? ZERO : clinicSettle.getFulamtOwnpayAmt()); + // 个人自负 + clinicSettle.setPsnPartAmt(clinicSettle.getPsnPartAmt() == null ? ZERO : clinicSettle.getPsnPartAmt()); + // 个人自付 + clinicSettle + .setOverlmtSelfpay(clinicSettle.getOverlmtSelfpay() == null ? ZERO : clinicSettle.getOverlmtSelfpay()); + // 个人现金支付 + clinicSettle.setPsnCashPay(clinicSettle.getPsnCashPay() == null ? ZERO : clinicSettle.getPsnCashPay()); + // 医保报销总金额 + clinicSettle.setFundPaySumamt(clinicSettle.getFundPaySumamt() == null ? ZERO : clinicSettle.getFundPaySumamt()); + + // accountPay 个人账户支付 Number 14,2 是 + bill.put("accountPay", df.format(clinicSettle.getAcctPay())); + // fundPay 医保统筹基金支付 Number 14,2 是 + bill.put("fundPay", df.format(clinicSettle.getHifpPay())); + // ownPay 自费金额 Number 14,2 是 + bill.put("ownPay", df.format(clinicSettle.getFulamtOwnpayAmt())); + // selfConceitedAmt 个人自负 Number 14,2 是 + bill.put("selfConceitedAmt", df.format(clinicSettle.getPsnPartAmt())); + // selfPayAmt 个人自付 Number 14,2 是 + bill.put("selfPayAmt", df.format(clinicSettle.getOverlmtSelfpay())); + // selfCashPay 个人现金支付 Number 14,2 是 + bill.put("selfCashPay", df.format(clinicSettle.getPsnCashPay())); + // reimbursementAmt 医保报销总金额 Number 14,2 是 + bill.put("reimbursementAmt", df.format(clinicSettle.getFundPaySumamt())); + + // payChannelDetail 交费渠道列表 JSONArray 不限 是 + JSONArray payChannelDetails = new JSONArray(); + JSONObject payChannelDetail; + // 个人现金支付金额(微信) + paymentInfo.setWxPayAmount(paymentInfo.getWxPayAmount() == null ? ZERO : paymentInfo.getWxPayAmount()); + // 个人现金支付金额(支付宝) + paymentInfo.setAliPayAmount(paymentInfo.getAliPayAmount() == null ? ZERO : paymentInfo.getAliPayAmount()); + // 个人现金支付金额(银联) + paymentInfo.setDebitPayAmount(paymentInfo.getAliPayAmount() == null ? ZERO : paymentInfo.getAliPayAmount()); + // 个人现金支付金额 + paymentInfo + .setRmbCashPayAmount(paymentInfo.getRmbCashPayAmount() == null ? ZERO : paymentInfo.getRmbCashPayAmount()); + // 个人医保账户支付 + paymentInfo.setZhPayAmount(paymentInfo.getZhPayAmount() == null ? ZERO : paymentInfo.getZhPayAmount()); + // 基金支付总额 + paymentInfo + .setYbFundPayAmount(paymentInfo.getYbFundPayAmount() == null ? ZERO : paymentInfo.getYbFundPayAmount()); + // 其他(如医院负担金额) + paymentInfo.setOtherPayAmount(paymentInfo.getOtherPayAmount() == null ? ZERO : paymentInfo.getOtherPayAmount()); + // 账户共济支付金额 + paymentInfo + .setAelfYbZhGjValue(paymentInfo.getAelfYbZhGjValue() == null ? ZERO : paymentInfo.getAelfYbZhGjValue()); + if (medCareTypeCode.equals("07")) {// 全自费 + if (paymentInfo.getWxPayAmount().compareTo(ZERO) > 0) { + payChannelDetail = new JSONObject(); + payChannelDetail.put("payChannelCode", "05");// 05 微信 + payChannelDetail.put("payChannelValue", df.format(paymentInfo.getWxPayAmount())); + payChannelDetails.add(payChannelDetail); + } + if (paymentInfo.getAliPayAmount().compareTo(ZERO) > 0) { + payChannelDetail = new JSONObject(); + payChannelDetail.put("payChannelCode", "04");// 04 支付宝 + payChannelDetail.put("payChannelValue", df.format(paymentInfo.getAliPayAmount())); + payChannelDetails.add(payChannelDetail); + } + if (paymentInfo.getDebitPayAmount().compareTo(ZERO) > 0) { + payChannelDetail = new JSONObject(); + payChannelDetail.put("payChannelCode", "07");// 07 卡支付 + payChannelDetail.put("payChannelValue", df.format(paymentInfo.getDebitPayAmount())); + payChannelDetails.add(payChannelDetail); + } + if (paymentInfo.getRmbCashPayAmount().compareTo(ZERO) > 0) { + payChannelDetail = new JSONObject(); + payChannelDetail.put("payChannelCode", "02");// 02 现金 + payChannelDetail.put("payChannelValue", df.format(paymentInfo.getRmbCashPayAmount())); + payChannelDetails.add(payChannelDetail); + } else { + payChannelDetail = new JSONObject(); + payChannelDetail.put("payChannelCode", "02");// 02 现金 + payChannelDetail.put("payChannelValue", + df.format(paymentInfo.getTotalAmt().subtract(paymentInfo.getWxPayAmount()) + .subtract(paymentInfo.getAliPayAmount()).subtract(paymentInfo.getDebitPayAmount()))); + payChannelDetails.add(payChannelDetail); + } + } else { + // 医保 + payChannelDetail = new JSONObject(); + payChannelDetail.put("payChannelCode", "11"); + payChannelDetail.put("payChannelValue", df.format(paymentInfo.getYbFundPayAmount().add(paymentInfo + .getOtherPayAmount().add(paymentInfo.getZhPayAmount()).add(paymentInfo.getAelfYbZhGjValue())))); + payChannelDetails.add(payChannelDetail); + + // 现金 + if (paymentInfo.getWxPayAmount().compareTo(ZERO) > 0) { + payChannelDetail = new JSONObject(); + payChannelDetail.put("payChannelCode", "05");// 05 微信 + payChannelDetail.put("payChannelValue", df.format(paymentInfo.getWxPayAmount())); + payChannelDetails.add(payChannelDetail); + } + if (paymentInfo.getAliPayAmount().compareTo(ZERO) > 0) { + payChannelDetail = new JSONObject(); + payChannelDetail.put("payChannelCode", "04");// 04 支付宝 + payChannelDetail.put("payChannelValue", df.format(paymentInfo.getAliPayAmount())); + payChannelDetails.add(payChannelDetail); + } + if (paymentInfo.getDebitPayAmount().compareTo(ZERO) > 0) { + payChannelDetail = new JSONObject(); + payChannelDetail.put("payChannelCode", "07");// 07 卡支付 + payChannelDetail.put("payChannelValue", df.format(paymentInfo.getDebitPayAmount())); + payChannelDetails.add(payChannelDetail); + } + if (paymentInfo.getRmbCashPayAmount().compareTo(ZERO) > 0) { + payChannelDetail = new JSONObject(); + payChannelDetail.put("payChannelCode", "02");// 02 现金 + payChannelDetail.put("payChannelValue", df.format(paymentInfo.getRmbCashPayAmount())); + payChannelDetails.add(payChannelDetail); + } else { + BigDecimal cashpay = clinicSettle.getPsnCashPay().subtract(paymentInfo.getWxPayAmount()) + .subtract(paymentInfo.getAliPayAmount()).subtract(paymentInfo.getDebitPayAmount()); + if (cashpay.compareTo(ZERO) > 0) { + payChannelDetail = new JSONObject(); + payChannelDetail.put("payChannelCode", "02");// 02 现金 + payChannelDetail.put("payChannelValue", df.format(cashpay)); + payChannelDetails.add(payChannelDetail); + } + } + } + bill.put("payChannelDetail", payChannelDetails); + + // ------其它------ + // isArrears 是否可流通 String 1 是 0-否、1-是(如欠费情况根据医院业务要求该票据是否可流通) + bill.put("isArrears", "0"); + + return bill; + } + + /** + * 医疗电子票据红冲接口 + * + * @param paymentId 原付款id + * @param reason 取消理由 + * @return 返回值 + */ + @RequestMapping("/invoiceWriteoff") + @ResponseBody + public R invoiceWriteoff(Long paymentId, String reason) { + // 获取当前登陆用户信息 + LoginUser loginUser = SecurityUtils.getLoginUser(); + Practitioner user = practitionerService.getPractitionerByUserId(loginUser.getUserId()); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + + try { + // 关键校验:检查必填参数invoiceId是否存在,缺失则直接返回错误 + if (paymentId == null || paymentId == 0) { + return R.fail(PromptMsgConstant.invoice.M00004); + } + + Invoice invoice = + invoiceService.getOne(new LambdaQueryWrapper().eq(Invoice::getReconciliationId, paymentId)); + + if (invoice.getStatusEnum() == null || invoice.getStatusEnum().equals(InvoiceStatus.DRAFT)) { + return R.fail(PromptMsgConstant.invoice.M00007); + } + if (invoice.getStatusEnum().equals(InvoiceStatus.CANCELLED)) { + return R.fail(PromptMsgConstant.invoice.M00005); + } + if (!invoice.getStatusEnum().equals(InvoiceStatus.ISSUED)) { + return R.fail(PromptMsgConstant.invoice.M00007); + } + + // 请求业务参数 + // data--------------------------------------------------------------------------------------------------------------------- + JSONObject bill = new JSONObject(); + // billBatchCode 电子票据代码 String 50 是 + bill.put("billBatchCode", invoice.getBillBatchCode()); + // billNo 电子票据号码 String 20 是 + bill.put("billNo", invoice.getBillNo()); + // reason 冲红原因 String 200 是 + bill.put("reason", reason); + // operator 经办人 String 60 是 + bill.put("operator", user.getName()); + // busDateTime 业务发生时间 String 17 是 yyyyMMddHHmmssSSS + bill.put("busDateTime", sdf.format(new Date())); + // placeCode 开票点编码 String 50 是 + bill.put("placeCode", user.getKpdCode()); + + JSONObject redata = new JSONObject(); + String redata64; + String srcdata; + String srcmsg; + + JSONObject resobj = PreInvoicePost(bill, "api/medical/writeOffEBill"); + if (resobj.getBooleanValue("success")) { + JSONObject rejson = resobj.getJSONObject("result"); + if (rejson.getString("result").equals("S0000")) { + // 保存发票信息 + redata64 = rejson.getString("message").toString(); + srcdata = new String(Base64.getDecoder().decode(redata64), StandardCharsets.UTF_8); + redata = JSONObject.parseObject(srcdata); + + // 修改发票管理表数据 + // 状态 + invoice.setStatusEnum(InvoiceStatus.CANCELLED); + + boolean flgUpdate = invoiceService.updateById(invoice); + if (!flgUpdate) { + return R.fail(PromptMsgConstant.Common.M00011); + } + + // 向发票管理表中插入数据 + Invoice invoiceAdd = new Invoice(); + // 发票号 + invoiceAdd.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.INVOICE_NUM.getPrefix(), 10)); + // 患者ID + invoiceAdd.setPatientId(invoice.getPatientId()); + // 状态 + invoiceAdd.setStatusEnum(InvoiceStatus.CANCELLED); + // 类别 + invoiceAdd.setTypeCode(invoice.getTypeCode()); + // 取消原因 + invoiceAdd.setCancelledReason(reason); + // 收费项 + invoiceAdd.setChargeItemIds(invoice.getChargeItemIds()); + // 发票净额总记 + invoiceAdd.setTotalNet(invoice.getTotalNet()); + // 发票总计金额 + invoiceAdd.setTotalGross(invoice.getTotalGross()); + // 付款详情 + invoiceAdd.setPaymentTerms(invoice.getPaymentTerms()); + // 开票员 + invoiceAdd.setInvoicingStaffId(invoice.getInvoicingStaffId()); + // 支付id + invoiceAdd.setReconciliationId(invoice.getReconciliationId()); + // 电子票据代码 电子红票票据代码 + invoiceAdd.setBillBatchCode(redata.getString("eScarletBillBatchCode")); + // 电子票据号码 电子红票票据号码 + invoiceAdd.setBillNo(redata.getString("eScarletBillNo")); + // 电子校验码 电子红票校验码 + invoiceAdd.setRandom(redata.getString("eScarletRandom")); + // 电子票据生成时间 电子红票生成时间 + invoiceAdd.setBillCreateTime(redata.getString("createTime")); + // 电子票据二维码图片数据 + invoiceAdd.setBillQrCode(redata.getString("billQRCode")); + // 电子票据H5页面URL + invoiceAdd.setPictureUrl(redata.getString("pictureUrl")); + // 电子票据外网H5页面URL + invoiceAdd.setPictureNetUrl(redata.getString("pictureNetUrl")); + // 票据营业日期 + invoiceAdd.setBillBusDate( + redata.getString("billBusDate") == "" ? null : sdf.parse(redata.getString("billBusDate"))); + + Long invoiceIdAdd = invoiceService.addInvoice(invoiceAdd); + if (invoiceIdAdd == null) { + return R.fail(PromptMsgConstant.Common.M00011); + } + + return R.ok(invoiceAdd, + MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[] {"电子发票冲红"})); + } else { + redata.put("result", rejson.getString("result").toString()); + redata64 = rejson.getString("message").toString(); + srcmsg = new String(Base64.getDecoder().decode(redata64), StandardCharsets.UTF_8); + return R.fail(srcmsg); + } + } else { + return R.fail(resobj.getString("msg")); + } + } catch (Exception ex) { + try { + return R.fail(ex.getCause().getMessage()); + } catch (Exception ex1) { + return R.fail(ex.getMessage()); + } + } + } + + /** + * 发送请求 + * + * @param bill 请求参数 + * @param endpoint 请求后缀url + * @return 返回值 + */ + public static JSONObject PreInvoicePost(JSONObject bill, String endpoint) { + + JSONObject result = new JSONObject(); + // 获取当前租户的option信息 + JSONObject optionJson = SecurityUtils.getLoginUser().getOptionJson(); + + String baseUrl = optionJson.getString(CommonConstants.Option.URL); + // 拼接成完整 URL(作为路径) + String cleanUrl = baseUrl + "/" + endpoint; // 确保用 "/" 分隔 + String url = cleanUrl.trim().replaceAll("^\"|\"$", "") // 去除首尾引号 + .replaceAll("\\s+", "")// 去除首尾引号 + .replaceAll("\"", ""); // 去除中间引号 + + String appID = optionJson.getString(CommonConstants.Option.APP_ID); + String appKey = optionJson.getString(CommonConstants.Option.KEY); + String data = bill.toJSONString(); + String version = "1.0"; + // 请求随机标识 noise + String noise = UUID.randomUUID().toString(); + + data = Base64.getEncoder().encodeToString(data.getBytes(StandardCharsets.UTF_8)); + + StringBuilder str = new StringBuilder(); + str.append("appid=").append(appID); + str.append("&data=").append(data); + str.append("&noise=").append(noise); + str.append("&key=").append(appKey); + str.append("&version=").append(version); + String sign = DigestUtils.md5Hex(str.toString().getBytes(Charset.forName("UTF-8"))).toUpperCase(); + + Map map = new HashMap<>(); + map.put("appid", appID); + map.put("data", data); + map.put("noise", noise); + map.put("sign", sign); + map.put("version", version); + + try { + HttpPost httpPost = new HttpPost(url); + CloseableHttpClient client = HttpClients.createDefault(); + String respContent = null; + // 请求参数转JOSN字符串 + StringEntity entity = new StringEntity(new ObjectMapper().writeValueAsString(map), "utf-8"); + entity.setContentEncoding("UTF-8"); + entity.setContentType("application/json"); + httpPost.setEntity(entity); + HttpResponse resp = client.execute(httpPost); + + if (resp.getStatusLine().getStatusCode() == 200) { + String rev = EntityUtils.toString(resp.getEntity()); + // System.out.println("返回串--》"+rev); + Map resultData = new ObjectMapper().readValue(rev, Map.class); + String rdata = resultData.get("data").toString(); + String rnoise = resultData.get("noise").toString(); + // 1、拼接返回验签参数 + StringBuilder str1 = new StringBuilder(); + str1.append("appid=").append(appID); + str1.append("&data=").append(rdata); + str1.append("&noise=").append(rnoise); + str1.append("&key=").append(appKey); + str1.append("&version=").append(version); + // 3.MD5加密 生成sign + String rmd5 = DigestUtils.md5Hex(str1.toString().getBytes(Charset.forName("UTF-8"))).toUpperCase(); + String rsign = resultData.get("sign").toString(); + System.out.println("验签-》" + (StringUtils.equals(rsign, rmd5))); + String busData = + new String(Base64.getDecoder().decode(resultData.get("data").toString()), StandardCharsets.UTF_8); + System.out.println("返回业务数据--》" + busData); + Map busDataMap = new ObjectMapper().readValue(busData, Map.class); + System.out + .println("业务信息解密--》" + new String(Base64.getDecoder().decode(busDataMap.get("message").toString()), + StandardCharsets.UTF_8)); + + JSONObject resobj = JSONObject.parseObject(busData); + result.put("success", true); + result.put("result", resobj); + } else { + result.put("msg", "web响应失败!"); + result.put("success", false); + } + } catch (Exception e) { + result.put("msg", e.getMessage()); + result.put("success", false); + } + return result; + + } + + /** + * 通过paymentId获取医保结算实体 + * + * @param paymentId 付款id + * @return 查询结果 + */ + private InvoiceBaseInfoDto getClinicSettleByPaymentId(Long paymentId) { + + PaymentReconciliation paymentReconciliation = paymentReconciliationService.getById(paymentId); + List details = paymentRecDetailService + .list(new LambdaQueryWrapper().eq(PaymentRecDetail::getReconciliationId, paymentId)); + + InvoiceBaseInfoDto invoiceBaseInfoDto = initInvoiceBaseInfoDto(); + + for (PaymentRecDetail detail : details) { + // 现金 + if (YbPayment.SELF_CASH_PAY.getValue().equals(detail.getPayEnum())) { + invoiceBaseInfoDto.setPsnCashPay(detail.getAmount()); + } + // 公务员补助 + if (YbPayment.YB_BC_GWY_BZ_VALUE.getValue().equals(detail.getPayEnum())) { + invoiceBaseInfoDto.setCvlservPay(detail.getAmount()); + } + // 个人账户 + if (YbPayment.SELF_YB_ZH_PAY.getValue().equals(detail.getPayEnum())) { + invoiceBaseInfoDto.setAcctPay(detail.getAmount()); + } + // 基本统筹 + if (YbPayment.YB_TC_FUND_AMOUNT.getValue().equals(detail.getPayEnum())) { + invoiceBaseInfoDto.setHifpPay(detail.getAmount()); + } + // 全自费金额 + if (YbPayment.FULAMT_OWNPAY_AMT.getValue().equals(detail.getPayEnum())) { + invoiceBaseInfoDto.setPsnPartAmt(detail.getAmount()); + } + // 个人负担总金额 + if (YbPayment.SELF_PAY.getValue().equals(detail.getPayEnum())) { + invoiceBaseInfoDto.setFulamtOwnpayAmt(detail.getAmount()); + } + // 基金支付总额 + if (YbPayment.YB_FUND_PAY.getValue().equals(detail.getPayEnum())) { + invoiceBaseInfoDto.setFundPaySumamt(detail.getAmount()); + } + // 个人医保账户支付 + if (YbPayment.SELF_YB_ZH_PAY.getValue().equals(detail.getPayEnum())) { + invoiceBaseInfoDto.setAcctPay(detail.getAmount()); + } + // 基本医保统筹基金支出 + if (YbPayment.YB_TC_FUND_AMOUNT.getValue().equals(detail.getPayEnum())) { + invoiceBaseInfoDto.setHifpPay(detail.getAmount()); + } + // 超限价自费费用 + if (YbPayment.OVERLMT_SELFPAY.getValue().equals(detail.getPayEnum())) { + invoiceBaseInfoDto.setOverlmtSelfpay(detail.getAmount()); + } + } + return invoiceBaseInfoDto; + } + + /** + * 初始化发票参数 + * + * @return 发票参数 + */ + private InvoiceBaseInfoDto initInvoiceBaseInfoDto() { + InvoiceBaseInfoDto clinicSettle = new InvoiceBaseInfoDto(); + return clinicSettle.setMedfeeSumamt(new BigDecimal("0.0")).setFulamtOwnpayAmt(new BigDecimal("0.0")) + .setOverlmtSelfpay(new BigDecimal("0.0")).setPreselfpayAmt(new BigDecimal("0.0")) + .setInscpScpAmt(new BigDecimal("0.0")).setActPayDedc(new BigDecimal("0.0")) + .setHifpPay(new BigDecimal("0.0")).setPoolPropSelfpay(new BigDecimal("0.0")) + .setCvlservPay(new BigDecimal("0.0")).setHifesPay(new BigDecimal("0.0")).setHifmiPay(new BigDecimal("0.0")) + .setHifobPay(new BigDecimal("0.00")).setMafPay(new BigDecimal("0.0")).setOthPay(new BigDecimal("0.0")) + .setFundPaySumamt(new BigDecimal("0.0")).setPsnPartAmt(new BigDecimal("0.0")) + .setAcctPay(new BigDecimal("0.0")).setPsnCashPay(new BigDecimal("0.0")) + .setHospPartAmt(new BigDecimal("0.0")).setBalc(new BigDecimal("0.0")) + .setAcctMulaidPay(new BigDecimal("0.0")).setHifdmPay(new BigDecimal("0.0")); + } + + @Override + public Invoice getInvoiceById(Long invoiceId) { + return invoiceService.getById(invoiceId); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/IChargeBillServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/IChargeBillServiceImpl.java new file mode 100644 index 00000000..99306b01 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/IChargeBillServiceImpl.java @@ -0,0 +1,569 @@ +package com.openhis.web.paymentmanage.appservice.impl; + +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.core.common.exception.ServiceException; +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.service.*; +import com.openhis.clinical.domain.Condition; +import com.openhis.clinical.domain.ConditionDefinition; +import com.openhis.clinical.service.IConditionDefinitionService; +import com.openhis.clinical.service.IConditionService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.constant.YbCommonConstants; +import com.openhis.common.enums.DelFlag; +import com.openhis.common.enums.InvoiceStatus; +import com.openhis.common.enums.PaymentType; +import com.openhis.common.enums.Whether; +import com.openhis.common.enums.ybenums.YbMedChrgItmType; +import com.openhis.common.enums.ybenums.YbPayment; +import com.openhis.financial.domain.Contract; +import com.openhis.financial.domain.PaymentRecDetail; +import com.openhis.financial.domain.PaymentReconciliation; +import com.openhis.financial.service.IContractService; +import com.openhis.financial.service.IPaymentRecDetailService; +import com.openhis.financial.service.IPaymentReconciliationService; +import com.openhis.medication.domain.MedicationDefinition; +import com.openhis.medication.service.IMedicationDefinitionService; +import com.openhis.web.paymentmanage.appservice.IChargeBillService; +import com.openhis.web.paymentmanage.dto.ReportVo; +import com.openhis.web.paymentmanage.dto.ReturnBillVO; +import com.openhis.web.paymentmanage.mapper.ChargeBillMapper; +import com.openhis.web.paymentmanage.dto.ChargeItemDetailVO; +import com.openhis.workflow.domain.ActivityDefinition; +import com.openhis.workflow.service.IActivityDefinitionService; +import com.openhis.yb.domain.ClinicSettle; +import com.openhis.yb.domain.ClinicUnSettle; +import com.openhis.yb.domain.InfoPerson; +import com.openhis.yb.service.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RequestParam; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Component +@Slf4j +public class IChargeBillServiceImpl implements IChargeBillService { + + @Resource + private IAccountService iAccountService; + @Resource + private IEncounterService iEncounterService; + @Resource + private IInvoiceService iInvoiceService; + @Resource + private IPaymentReconciliationService paymentReconciliationService; + @Resource + private IPaymentRecDetailService paymentRecDetailService; + @Resource + private IContractService contractService; + @Resource + private IChargeItemService chargeItemService; + @Resource + private IPatientService iPatientService; + @Autowired + private IChargeItemDefinitionService iChargeItemDefinitionService; + @Autowired + private IPerinfoService iPerinfoService; + @Autowired + private IEncounterDiagnosisService iEncounterDiagnosisService; + @Autowired + private IConditionDefinitionService iConditionDefinitionService; + @Autowired + private IConditionService iConditionService; + @Autowired + private ChargeBillMapper chargeBillMapper; + @Autowired + private IMedicationDefinitionService iMedicationDefinitionService; + @Autowired + private IDeviceDefinitionService iDeviceDefinitionService; + @Autowired + private IActivityDefinitionService iActivityDefinitionService; + @Autowired + private IPractitionerService iPractitionerService; + @Autowired + private IHealthcareServiceService iHealthcareServiceService; + @Autowired + private IClinicSettleService iClinicSettleService; + @Autowired + private IClinicUnRegService iClinicUnRegService; + @Autowired + private IRegService iRegService; + @Autowired + private IClinicUnSettleService iClinicUnSettleService; + + + @Override + public Map getDetail(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("paymentAmount",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)); + paymentRecDetails.stream() + .collect(Collectors.groupingBy( + PaymentRecDetail::getPayEnum, // 替换为实际的分类属性getter方法 + Collectors.reducing( + BigDecimal.ZERO, + PaymentRecDetail::getAmount, // 替换为实际的amount getter方法 + BigDecimal::add + ) + )); + if(paymentRecDetails.isEmpty()){ + throw new ServiceException("未查询到付款信息"); + } + map.put("detail",paymentRecDetails);//支付详细 + + 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){ + throw new ServiceException("未查询到发票信息"); + } + map.put("invoiceNo",invoice.getBillNo());//支付详细 + map.put("pictureUrl",invoice.getPictureUrl());//图片 + List chargeItemIdList = Arrays.stream(paymentReconciliation.getChargeItemIds().split(",")) + .map(Long::parseLong) + .collect(Collectors.toList()); + + List chargeItemList = chargeItemService.list(new LambdaQueryWrapper().in(ChargeItem::getId, chargeItemIdList)); + List chargeItemDetailList = new ArrayList<>(); + ChargeItemDetailVO chargeItemDetailVO; + for (ChargeItem chargeItem : chargeItemList) { + chargeItemDetailVO = new ChargeItemDetailVO(); + BeanUtils.copyProperties(chargeItem,chargeItemDetailVO); + if (CommonConstants.TableName.MED_MEDICATION_DEFINITION.equals(chargeItem.getProductTable())) { + MedicationDefinition medication = iMedicationDefinitionService.getById(chargeItem.getProductId()); + chargeItemDetailVO.setDirClass(medication.getYbNo()).setChargeItemName(medication.getName()) + .setTotalPrice(chargeItem.getTotalPrice()).setQuantityUnit(chargeItem.getQuantityUnit()) + .setQuantityValue(chargeItem.getQuantityValue()); + } else if (CommonConstants.TableName.ADM_DEVICE_DEFINITION.equals(chargeItem.getProductTable())) { + DeviceDefinition device = iDeviceDefinitionService.getById(chargeItem.getProductId()); + chargeItemDetailVO.setDirClass(device.getYbNo()).setChargeItemName(device.getName()) + .setTotalPrice(chargeItem.getTotalPrice()).setQuantityUnit(chargeItem.getQuantityUnit()) + .setQuantityValue(chargeItem.getQuantityValue()); + } else if(CommonConstants.TableName.WOR_ACTIVITY_DEFINITION.equals(chargeItem.getProductTable())){ + ActivityDefinition activity = iActivityDefinitionService.getById(chargeItem.getProductId()); + chargeItemDetailVO.setDirClass(activity.getYbNo()).setChargeItemName(activity.getName()) + .setTotalPrice(chargeItem.getTotalPrice()).setQuantityUnit(chargeItem.getQuantityUnit()) + .setQuantityValue(chargeItem.getQuantityValue()); + }else{ + HealthcareService healthcareService = iHealthcareServiceService.getById(chargeItem.getServiceId()); + chargeItemDetailVO.setDirClass(healthcareService.getYbNo()).setChargeItemName(healthcareService.getName()) + .setTotalPrice(chargeItem.getTotalPrice()).setQuantityUnit(chargeItem.getQuantityUnit()) + .setQuantityValue(chargeItem.getQuantityValue()); + } + chargeItemDetailList.add(chargeItemDetailVO); + } + map.put("chargeItem",chargeItemDetailList);//收费项 + + if(chargeItemList.isEmpty()){ + throw new ServiceException("未查询到收费项"); + } + Encounter encounter = iEncounterService.getById(paymentReconciliation.getEncounterId()); + if(encounter==null){ + throw new ServiceException("未查询到就诊信息"); + } + map.put("classEnum",encounter.getYbClassEnum());//门诊/住院 + map.put("regNo",encounter.getBusNo());//门诊号 + + Account account = iAccountService.getOne(new LambdaQueryWrapper().eq(Account::getEncounterId, encounter.getId()).eq(Account::getEncounterFlag,Whether.YES.getValue())); + if(account==null){ + throw new ServiceException("未查询到就诊信息"); + } + + 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());//患者参保地区划 + } + + Contract contract = contractService.getOne(new LambdaQueryWrapper().eq(Contract::getBusNo, account.getContractNo())); + if(contract==null){ + throw new ServiceException("未查询到合同信息"); + } + //查询主诊断信息 + 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());//诊断名 + } + } + } + + BigDecimal sum01 = BigDecimal.ZERO; + BigDecimal sum02 = BigDecimal.ZERO; + BigDecimal sum03 = BigDecimal.ZERO; + BigDecimal sum04 = BigDecimal.ZERO; + BigDecimal sum05 = BigDecimal.ZERO; + BigDecimal sum06 = BigDecimal.ZERO; + BigDecimal sum07 = BigDecimal.ZERO; + BigDecimal sum08 = BigDecimal.ZERO; + BigDecimal sum09 = BigDecimal.ZERO; + BigDecimal sum10 = BigDecimal.ZERO; + BigDecimal sum11 = BigDecimal.ZERO; + BigDecimal sum12 = BigDecimal.ZERO; + BigDecimal sum13 = BigDecimal.ZERO; + BigDecimal sum14 = BigDecimal.ZERO; + + for (ChargeItem chargeItem : chargeItemList) { + + Long definitionId = chargeItem.getDefinitionId(); + + ChargeItemDefinition chargeItemDefinition = iChargeItemDefinitionService.getById(definitionId); + + YbMedChrgItmType medChrgItmType = YbMedChrgItmType.getByCode(Integer.parseInt(chargeItemDefinition.getYbType())); + + switch (medChrgItmType){ + case BED_FEE: + sum01 = sum01.add(chargeItem.getTotalPrice()); + break; + case DIAGNOSTIC_FEE: + sum02 = sum02.add(chargeItem.getTotalPrice()); + break; + case CHECK_FEE: + sum03 = sum03.add(chargeItem.getTotalPrice()); + break; + case DIAGNOSTIC_TEST_FEE: + sum04 = sum04.add(chargeItem.getTotalPrice()); + break; + case MEDICAL_EXPENSE_FEE: + sum05 = sum05.add(chargeItem.getTotalPrice()); + break; + case OPERATION_FEE: + sum06 = sum06.add(chargeItem.getTotalPrice()); + break; + case NURSING_FEE: + sum07 = sum07.add(chargeItem.getTotalPrice()); + break; + case SANITARY_MATERIALS_FEE: + sum08 = sum08.add(chargeItem.getTotalPrice()); + break; + case WEST_MEDICINE: + sum09 = sum09.add(chargeItem.getTotalPrice()); + break; + case CHINESE_MEDICINE_SLICES_FEE: + sum10 = sum10.add(chargeItem.getTotalPrice()); + break; + case CHINESE_MEDICINE_FEE: + sum11 = sum11.add(chargeItem.getTotalPrice()); + break; + case GENERAL_CONSULTATION_FEE: + sum12 = sum12.add(chargeItem.getTotalPrice()); + break; + case REGISTRATION_FEE: + sum13 = sum13.add(chargeItem.getTotalPrice()); + break; + default: + sum14 = sum14.add(chargeItem.getTotalPrice()); + break; + } + } + map.put("BED_FEE",sum01);//床位费 + map.put("DIAGNOSTIC_FEE",sum02);//诊察费 + map.put("CHECK_FEE",sum03);//检查费 + map.put("DIAGNOSTIC_TEST_FEE",sum04);//化验费 + map.put("MEDICAL_EXPENSE_FEE",sum05);//治疗费 + map.put("OPERATION_FEE",sum06);//手术费 + map.put("NURSING_FEE",sum07);//护理费 + map.put("SANITARY_MATERIALS_FEE",sum08);//卫生材料费 + map.put("WEST_MEDICINE",sum09);//西药费 + map.put("CHINESE_MEDICINE_SLICES_FEE",sum10);//中药饮片费 + map.put("CHINESE_MEDICINE_FEE",sum11);//中成药费 + map.put("GENERAL_CONSULTATION_FEE",sum12);//一般诊疗费 + map.put("REGISTRATION_FEE",sum13);//挂号费 + map.put("OTHER_FEE",sum14);//其他费用 + + //String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); + 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; + } + + + /** + * 农大版本 + * @param reportVo + * @return + */ + @Override + public Map getTotal(String startTime, String endTime, Long entererId) { + + Map map = new HashMap<>(); + + //SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS"); + Date startDate = DateUtils.parseDate(startTime); + Date endDate = DateUtils.parseDate(endTime); + + //查询所有的支付 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper().between(PaymentReconciliation::getBillDate, startDate, endDate).eq(PaymentReconciliation::getDeleteFlag,DelFlag.NO.getCode()); + if(entererId!=null){ + queryWrapper.eq(PaymentReconciliation::getEntererId,entererId); + } + List paymentReconciliationList = paymentReconciliationService.list(queryWrapper); + if(paymentReconciliationList.isEmpty()){ + throw new ServiceException("该时间段内未收费"); + } + //查询所有的支付详情 + List paymentIdList = paymentReconciliationList.stream().map(PaymentReconciliation::getId).collect(Collectors.toList()); + List paymentDetails = paymentRecDetailService.list(new LambdaQueryWrapper().in(PaymentRecDetail::getReconciliationId, paymentIdList).eq(PaymentRecDetail::getDeleteFlag, DelFlag.NO.getCode())); + if(paymentDetails.isEmpty()){ + throw new ServiceException("该时间段内未收费"); + } + Map> paymentDetailsKV = paymentDetails.stream().collect(Collectors.groupingBy(PaymentRecDetail::getReconciliationId)); + + //查询所有的收费项 + List chargeItemIdStrs = paymentReconciliationList.stream().map(PaymentReconciliation::getChargeItemIds).collect(Collectors.toList()); + List chargeItemIds = new ArrayList<>(); + for (String chargeItemIdStr : chargeItemIdStrs) { + List strings = Arrays.asList(chargeItemIdStr.split(",")); + for (String string : strings) { + Long id = Long.parseLong(string); + chargeItemIds.add(id); + } + } + List chargeItemList = chargeItemService.list(new LambdaQueryWrapper().in(ChargeItem::getId, chargeItemIds).eq(ChargeItem::getDeleteFlag,DelFlag.NO.getCode())); + if(paymentDetails.isEmpty()){ + throw new ServiceException("该时间段内未收费"); + } + + //查询收费定义列表 + List chargeItemDefinitionIdList= chargeItemList.stream().map(ChargeItem::getDefinitionId).collect(Collectors.toList()); + List chargeItemDefinitions = iChargeItemDefinitionService.listByIds(chargeItemDefinitionIdList); + Map> chargeItemDefKV = chargeItemDefinitions.stream().collect(Collectors.groupingBy(ChargeItemDefinition::getId)); + + //查询医保结算id + List settleIds = new ArrayList<>(); + for (PaymentReconciliation paymentReconciliation : paymentReconciliationList) { + if(!StringUtils.isEmpty(paymentReconciliation.getYbSettleIds())){ + List strings = Arrays.asList(paymentReconciliation.getYbSettleIds().split(",")); + settleIds.addAll(strings); + } + } + List clinicSettle = new ArrayList<>(); + if (!settleIds.isEmpty()){ + clinicSettle = iClinicSettleService.getBySettleIds(settleIds); + //List collect = clinicSettle.stream().map(ClinicSettle::getInsutype).collect(Collectors.toList()); + } + + BigDecimal cashSum = BigDecimal.ZERO;//现金总数 = rmbCashSum + vxCashSum + aliCashSum + uniCashSum + BigDecimal rmbCashSum = BigDecimal.ZERO;//现金总数 + BigDecimal vxCashSum = BigDecimal.ZERO;//现金总数() + BigDecimal aliCashSum = BigDecimal.ZERO;//现金总数() + BigDecimal uniCashSum = BigDecimal.ZERO;//现金总数() + BigDecimal vxSum = BigDecimal.ZERO;//微信总数 + BigDecimal aliSum = BigDecimal.ZERO;//支付宝总数 + BigDecimal uniSum = BigDecimal.ZERO;//银行卡总数 + BigDecimal tcSum = BigDecimal.ZERO;//基本统筹 + BigDecimal zhSum = BigDecimal.ZERO;//医保账户 + BigDecimal fundSum = BigDecimal.ZERO;//基金支总额 + //农大版本只查询收款员,日期,现金多少钱,挂号费多少钱 + for (PaymentRecDetail paymentDetail : paymentDetails) { + if(YbPayment.SELF_CASH_PAY.getValue().equals(paymentDetail.getPayEnum())){ + cashSum = cashSum.add(paymentDetail.getAmount()); + } + if(YbPayment.SELF_CASH_VALUE.getValue().equals(paymentDetail.getPayEnum())){ + rmbCashSum = rmbCashSum.add(paymentDetail.getAmount()); + } + if(YbPayment.SELF_CASH_VX_VALUE.getValue().equals(paymentDetail.getPayEnum())){ + vxCashSum = vxCashSum.add(paymentDetail.getAmount()); + } + if(YbPayment.SELF_CASH_ALI_VALUE.getValue().equals(paymentDetail.getPayEnum())){ + aliCashSum = aliCashSum.add(paymentDetail.getAmount()); + } + if(YbPayment.SELF_CASH_UNION_VALUE.getValue().equals(paymentDetail.getPayEnum())){ + uniCashSum = uniCashSum.add(paymentDetail.getAmount()); + } + if(YbPayment.YB_TC_FUND_AMOUNT.getValue().equals(paymentDetail.getPayEnum())){ + tcSum = tcSum.add(paymentDetail.getAmount()); + } + if(YbPayment.YB_FUND_PAY.getValue().equals(paymentDetail.getPayEnum())){ + fundSum = fundSum.add(paymentDetail.getAmount()); + } + if(YbPayment.SELF_YB_ZH_PAY.getValue().equals(paymentDetail.getPayEnum())){ + zhSum = zhSum.add(paymentDetail.getAmount()); + } + } + + //处理退费单 + List returnList = new ArrayList<>(); + List returnPaymentList = new ArrayList<>(); + ReturnBillVO returnBillVO; + for (PaymentReconciliation paymentReconciliation : paymentReconciliationList) { + if(PaymentType.UN_PAY.getValue().equals(paymentReconciliation.getPaymentEnum())){ + returnPaymentList.add(paymentReconciliation); + } + } + if(!returnPaymentList.isEmpty()) { + List returnIds = returnPaymentList.stream().map(PaymentReconciliation::getId).collect(Collectors.toList()); + + List invoiceList = iInvoiceService.list(new LambdaUpdateWrapper().in(Invoice::getReconciliationId, returnIds).eq(Invoice::getDeleteFlag, DelFlag.NO.getCode())); + if (!invoiceList.isEmpty()) { + Map> invoiceKV = invoiceList.stream().collect(Collectors.groupingBy(Invoice::getReconciliationId)); + for (PaymentReconciliation paymentReconciliation : returnPaymentList) { + returnBillVO = new ReturnBillVO(); + returnBillVO.setTotalAmount(paymentReconciliation.getTenderedAmount()); + List paymentRecDetails = paymentDetailsKV.get(paymentReconciliation.getId()); + for (PaymentRecDetail paymentRecDetail : paymentRecDetails) { + if (YbPayment.SELF_CASH_PAY.getValue().equals(paymentRecDetail.getPayEnum())) { + returnBillVO.setPaidAmount(paymentRecDetail.getAmount()); + } + } + + Optional max = invoiceKV.get(paymentReconciliation.getId()).stream().max(Comparator.comparing(Invoice::getCreateTime)); + + if (max.isPresent()) { + returnBillVO.setInvoiceNo(max.get().getBillNo()); + } else { + returnBillVO.setInvoiceNo(""); + } + + returnBillVO.setPaymentNo(paymentReconciliation.getPaymentNo()); + returnList.add(returnBillVO); + } + map.put("returnList", returnList);//退费单 + } + } + + map.put("cashSum",cashSum);//现金支付 + map.put("rmbCashSum",rmbCashSum);//现金支付 + map.put("vxCashSum",vxCashSum);//现金支付() + map.put("aliCashSum",aliCashSum);//现金支付() + map.put("uniCashSum",uniCashSum);//现金支付() + map.put("tcSum",tcSum);//基本统筹 + map.put("zhSum",zhSum);//账户支付 + map.put("fundSum",fundSum);//基金支付总额 + + + BigDecimal sum01 = BigDecimal.ZERO; + BigDecimal sum02 = BigDecimal.ZERO; + BigDecimal sum03 = BigDecimal.ZERO; + BigDecimal sum04 = BigDecimal.ZERO; + BigDecimal sum05 = BigDecimal.ZERO; + BigDecimal sum06 = BigDecimal.ZERO; + BigDecimal sum07 = BigDecimal.ZERO; + BigDecimal sum08 = BigDecimal.ZERO; + BigDecimal sum09 = BigDecimal.ZERO; + BigDecimal sum10 = BigDecimal.ZERO; + BigDecimal sum11 = BigDecimal.ZERO; + BigDecimal sum12 = BigDecimal.ZERO; + BigDecimal sum13 = BigDecimal.ZERO; + BigDecimal sum14 = BigDecimal.ZERO; + + for (ChargeItem chargeItem : chargeItemList) { + + Long definitionId = chargeItem.getDefinitionId(); + + ChargeItemDefinition chargeItemDefinition = chargeItemDefKV.get(definitionId).get(0); + + YbMedChrgItmType medChrgItmType = YbMedChrgItmType.getByCode(Integer.parseInt(chargeItemDefinition.getYbType())); + + switch (medChrgItmType){ + case BED_FEE: + sum01 = sum01.add(chargeItem.getTotalPrice()); + break; + case DIAGNOSTIC_FEE: + sum02 = sum02.add(chargeItem.getTotalPrice()); + break; + case CHECK_FEE: + sum03 = sum03.add(chargeItem.getTotalPrice()); + break; + case DIAGNOSTIC_TEST_FEE: + sum04 = sum04.add(chargeItem.getTotalPrice()); + break; + case MEDICAL_EXPENSE_FEE: + sum05 = sum05.add(chargeItem.getTotalPrice()); + break; + case OPERATION_FEE: + sum06 = sum06.add(chargeItem.getTotalPrice()); + break; + case NURSING_FEE: + sum07 = sum07.add(chargeItem.getTotalPrice()); + break; + case SANITARY_MATERIALS_FEE: + sum08 = sum08.add(chargeItem.getTotalPrice()); + break; + case WEST_MEDICINE: + sum09 = sum09.add(chargeItem.getTotalPrice()); + break; + case CHINESE_MEDICINE_SLICES_FEE: + sum10 = sum10.add(chargeItem.getTotalPrice()); + break; + case CHINESE_MEDICINE_FEE: + sum11 = sum11.add(chargeItem.getTotalPrice()); + break; + case GENERAL_CONSULTATION_FEE: + sum12 = sum12.add(chargeItem.getTotalPrice()); + break; + case REGISTRATION_FEE: + sum13 = sum13.add(chargeItem.getTotalPrice()); + break; + default: + sum14 = sum14.add(chargeItem.getTotalPrice()); + break; + } + } + map.put("BED_FEE",sum01);//床位费 + map.put("DIAGNOSTIC_FEE",sum02);//诊察费 + map.put("CHECK_FEE",sum03);//检查费 + map.put("DIAGNOSTIC_TEST_FEE",sum04);//化验费 + map.put("MEDICAL_EXPENSE_FEE",sum05);//治疗费 + map.put("OPERATION_FEE",sum06);//手术费 + map.put("NURSING_FEE",sum07);//护理费 + map.put("SANITARY_MATERIALS_FEE",sum08);//卫生材料费 + map.put("WEST_MEDICINE",sum09);//西药费 + map.put("CHINESE_MEDICINE_SLICES_FEE",sum10);//中药饮片费 + map.put("CHINESE_MEDICINE_FEE",sum11);//中成药费 + map.put("GENERAL_CONSULTATION_FEE",sum12);//一般诊疗费 + map.put("REGISTRATION_FEE",sum13);//挂号费 + map.put("OTHER_FEE",sum14);//其他费用 + + //String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); + 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/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/PaymentRecServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/PaymentRecServiceImpl.java new file mode 100644 index 00000000..c6810476 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/PaymentRecServiceImpl.java @@ -0,0 +1,1770 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.appservice.impl; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import com.openhis.yb.dto.Clinic2208UnSetlInfoOutput; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.util.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import com.alibaba.fastjson.JSON; +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.redis.RedisCache; +import com.core.common.exception.ServiceException; +import com.core.common.utils.AssignSeqUtil; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.core.common.utils.bean.BeanUtils; +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.enums.ybenums.YbMdtrtCertType; +import com.openhis.common.enums.ybenums.YbPayment; +import com.openhis.common.enums.ybenums.YbPsnSetlWay; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.financial.domain.Contract; +import com.openhis.financial.domain.PaymentRecDetail; +import com.openhis.financial.domain.PaymentReconciliation; +import com.openhis.financial.model.PaymentRecDetailDto; +import com.openhis.financial.model.PaymentedItemModel; +import com.openhis.financial.model.PrePaymentResult; +import com.openhis.financial.model.PrePaymentResultModel; +import com.openhis.financial.service.IContractService; +import com.openhis.financial.service.IPaymentNoticeService; +import com.openhis.financial.service.IPaymentRecDetailService; +import com.openhis.financial.service.IPaymentReconciliationService; +import com.openhis.medication.domain.MedicationRequest; +import com.openhis.medication.service.IMedicationDispenseService; +import com.openhis.medication.service.IMedicationRequestService; +import com.openhis.web.chargemanage.appservice.impl.OutpatientRegistrationAppServiceImpl; +import com.openhis.web.chargemanage.dto.*; +import com.openhis.web.chargemanage.mapper.OutpatientRegistrationAppMapper; +import com.openhis.web.doctorstation.appservice.IDoctorStationAdviceAppService; +import com.openhis.web.doctorstation.dto.AdviceBaseDto; +import com.openhis.web.doctorstation.dto.AdvicePriceDto; +import com.openhis.web.paymentmanage.appservice.IPaymentRecService; +import com.openhis.web.paymentmanage.dto.*; +import com.openhis.web.paymentmanage.mapper.PaymentMapper; +import com.openhis.web.personalization.dto.ActivityDeviceDto; +import com.openhis.workflow.domain.DeviceRequest; +import com.openhis.workflow.domain.ServiceRequest; +import com.openhis.workflow.service.IDeviceDispenseService; +import com.openhis.workflow.service.IDeviceRequestService; +import com.openhis.workflow.service.IServiceRequestService; +import com.openhis.yb.domain.ClinicReg; +import com.openhis.yb.domain.ClinicSettle; +import com.openhis.yb.dto.Clinic2206OrderOutput; +import com.openhis.yb.model.OutpatientRegistrationModel; +import com.openhis.yb.service.IClinicSettleService; +import com.openhis.yb.service.IRegService; +import com.openhis.yb.service.YbManager; + +import lombok.extern.slf4j.Slf4j; + +/** + * 付款应用层Service + * + * @author SunJQ + * @date 2025-03-29 + */ +@Component +@Slf4j +public class PaymentRecServiceImpl implements IPaymentRecService { + + Logger logger = LoggerFactory.getLogger(PaymentRecServiceImpl.class); + @Resource + private IPaymentNoticeService paymentNoticeService; + @Resource + private IAccountService iAccountService; + @Resource + private IEncounterService iEncounterService; + @Resource + private IInvoiceService iInvoiceService; + @Resource + private IPaymentReconciliationService paymentReconciliationService; + @Resource + private IPaymentRecDetailService paymentRecDetailService; + @Resource + private IContractService contractService; + @Resource + private IChargeItemService chargeItemService; + @Resource + private AssignSeqUtil assignSeqUtil; + @Resource + private PaymentMapper paymentMapper; + @Resource + private IMedicationDispenseService medicationDispenseService; + @Resource + private IDeviceDispenseService deviceDispenseService; + @Resource + private IMedicationRequestService medicationRequestService; + @Resource + private IDeviceRequestService deviceRequestService; + @Resource + private IServiceRequestService serviceRequestService; + @Resource + private IClinicSettleService clinicSettleService; + @Resource + private OutpatientRegistrationAppMapper outpatientRegistrationAppMapper; + @Resource + private IRegService iRegService; + @Resource + private IPatientService iPatientService; + @Autowired + private IPractitionerService iPractitionerService; + @Autowired + private IOrganizationService iOrganizationService; + @Autowired + private IEncounterParticipantService iEncounterParticipantService; + @Autowired + private IChargeItemService iChargeItemService; + @Autowired + private OutpatientRegistrationAppServiceImpl outpatientRegistrationAppService; + @Autowired + private IServiceRequestService iServiceRequestService; + @Autowired + private IDoctorStationAdviceAppService iDoctorStationAdviceAppService; + @Autowired + private IEncounterDiagnosisService iEncounterDiagnosisService; + @Autowired + private IPaymentReconciliationService iPaymentReconciliationService; + @Autowired + private IPaymentRecDetailService iPaymentRecDetailService; + @Autowired + private YbManager ybManager; + @Autowired + private RedisCache redisCache; + + @Override + public R prePayment(PrePaymentDto prePaymentDto) { + logger.info("预结算:参数:" + JSON.toJSONString(prePaymentDto)); + // 查收费项 + List chargeItemList = getChargeItems(prePaymentDto.getChargeItemIds()); + if (chargeItemList.isEmpty()) { + return R.fail("未选择收费项"); + } + + // 此次chargeItem的就诊诊断id集合 + List diagIdList = + chargeItemList.stream().map(ChargeItem::getEncounterDiagnosisId).collect(Collectors.toList()); + if(diagIdList.isEmpty()){ + throw new ServiceException("收费项的就诊诊断查询为空"); + } + // 此次就诊的医疗类型列表 + List diagList = iEncounterDiagnosisService.getDiagnosisList(diagIdList); + if(diagList.isEmpty()){ + throw new ServiceException("就诊诊断查询为空,错误信息:EncounterDiagnosis"); + } + List medTypeList = + diagList.stream().map(EncounterDiagnosis::getMedTypeCode).distinct().collect(Collectors.toList()); + if (medTypeList.size() > 1) { + return R.fail("收费项的就诊类型未统一"); + } + + // 获取所有的账户id + List accountIdList = chargeItemList.stream().map(ChargeItem::getAccountId).collect(Collectors.toList()); + // account去重 + List distinctAccountIdList = accountIdList.stream().distinct().collect(Collectors.toList()); + List accountList = iAccountService.list(new LambdaQueryWrapper() + .in(Account::getId, distinctAccountIdList).eq(Account::getEncounterId, prePaymentDto.getEncounterId())); + if (accountList.size() != distinctAccountIdList.size()) { + throw new ServiceException("未查询到账户信息"); + } + + // 账户id,对应的账单列表 + Map> chargeItemMapByAccountId = + chargeItemList.stream().collect(Collectors.groupingBy(ChargeItem::getAccountId)); + // 查询合同信息 + List contractList = contractService.list(); + + // 根据不同的账户支付 + List preSettleResultList = new ArrayList<>(); + for (Account account : accountList) { + Contract settleContract = null; + if (account != null && account.getContractNo() != null && contractList != null) { + settleContract = contractList.stream().filter(Objects::nonNull) + .filter(e -> account.getContractNo().equals(e.getBusNo())).findFirst() // 或 findAny,根据业务需求 + .orElse(null); + } // 根据accountid,获取结算合同 + if (settleContract != null) { + List chargeItemsForPreSettle = chargeItemMapByAccountId.get(account.getId()); + List prePaymentedItems = new ArrayList<>(); + for (ChargeItem chargeItem : chargeItemsForPreSettle) { + // TODO:后续添加可调价逻辑,当前都用子项目价格进行结算 + // 处理套餐项目,如果ChargeItem有子项,并且此项目是不可调价项目要被拆出来 + // 这是不拆的逻辑,如果TODO完成,会多一种情况进入这个逻辑 + if (StringUtils.isEmpty(chargeItem.getChildrenJson()) || "0000".equals(account.getContractNo()) + || "0".equals( + SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH))) { + PaymentedItemModel piModel = ConverterToPaymenItemModel(diagList, chargeItem); + prePaymentedItems.add(piModel); + } else { + try { + List childrenList = + JSON.parseArray(chargeItem.getChildrenJson(), ChargeItem.class); + for (ChargeItem child : childrenList) { + PaymentedItemModel piModel = ConverterToPaymenItemModel(diagList, child); + prePaymentedItems.add(piModel); + } + } catch (Exception ex) { + throw new ServiceException("套餐项目反序列化失败"); + } + } + } + + // 调用核心预结算方法 + PrePaymentResult prePaymentResult = iPaymentReconciliationService.prePayment( + YbMdtrtCertType.getByValue(prePaymentDto.getYbMdtrtCertType()), prePaymentDto.getBusiCardInfo(), + settleContract.getBusNo(), prePaymentedItems); + // 把多个account的预结算结果加入preSettleResultList + if (prePaymentResult != null) { + prePaymentResult.setAccountId(account.getId()); + preSettleResultList.add(prePaymentResult); + // redisCache.setCacheObject("pre-settle:pre-settle-"+account.getNo(),prePaymentResult,180, + // TimeUnit.SECONDS); + } + } else { + throw new ServiceException("收费项找不到相应的合同"); + } + } + + // 定义应收金额 + BigDecimal amount = BigDecimal.ZERO; + for (PrePaymentResult prePaymentResult : preSettleResultList) { + amount = amount.add(prePaymentResult.getMedfeeSumamt()); + } + // TODO 通过多次预结算,得到最后的预结算账单:finalPrePaymenResult + // PrePaymentResultModel finalResult = calcFinalResult(preSettleResultList); + // 创建草稿状态的付款实体 + // 处理时间 + Date setlTime = new Date(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(setlTime); + calendar.add(Calendar.HOUR_OF_DAY, 24); + Date futureTime = calendar.getTime(); + // 生成流水号 + String paymentNo = assignSeqUtil.getSeqByDay(AssignSeqEnum.PAYMENT_NO.getPrefix(), 20); + + // 新增支付信息 + PaymentReconciliation payment = new PaymentReconciliation(); + payment.setStatusEnum(PaymentStatus.DRAFT.getValue()).setPaymentNo(paymentNo).setYbSettleIds("") + .setPaymentEnum(PaymentType.PAY.getValue()).setEntererId(SecurityUtils.getLoginUser().getPractitionerId()) + .setPaymentReconciliationId(prePaymentDto.getPatientId()).setPatientId(prePaymentDto.getPatientId()) + .setKindEnum(PaymentKind.OUTPATIENT_CLINIC.getValue()).setPractitionerId(prePaymentDto.getEntererId()) + .setOutcomeEnum(PaymentOutcome.PARTIAL.getCode()).setLocationId(-99l).setExpirationDate(futureTime) + .setBillDate(setlTime).setPrintCount(0) + .setChargeItemIds( + prePaymentDto.getChargeItemIds().stream().map(String::valueOf).collect(Collectors.joining(","))) + .setTenderedAmount(amount).setDisplayAmount(amount).setReturnedAmount(new BigDecimal("0.0")) + .setEncounterId(prePaymentDto.getEncounterId()); + // 保存付款信息 + paymentReconciliationService.save(payment); + // 保存付款详情 + List paymentRecDetails = this.savePaymentDetail(preSettleResultList, payment); + List paymentRecDetailDtoList = this.getPaymentRecDetailDtoList(paymentRecDetails); + + PrePaymentResultModel prePaymentResultModel = new PrePaymentResultModel(); + prePaymentResultModel.setDetails(paymentRecDetailDtoList).setPaymentReconciliation(payment) + .setPaymentId(String.valueOf(payment.getId())); + + return R.ok(prePaymentResultModel); + } + + /** + * 转换实体给页面显示 + * + * @param paymentRecDetails + * @return + */ + private List getPaymentRecDetailDtoList(List paymentRecDetails) { + List list = new ArrayList<>(); + PaymentRecDetailDto paymentRecDetailDto; + for (PaymentRecDetail paymentRecDetail : paymentRecDetails) { + YbPayment ybPayment = YbPayment.getByValue(paymentRecDetail.getPayEnum()); + + paymentRecDetailDto = new PaymentRecDetailDto(); + paymentRecDetailDto.setPayEnum(paymentRecDetail.getPayEnum()).setId(paymentRecDetail.getId()) + .setAccountId(paymentRecDetail.getAccountId()).setAmount(paymentRecDetail.getAmount()) + .setPayEnumText(ybPayment == null ? "" : ybPayment.getInfo()); + list.add(paymentRecDetailDto); + } + return list; + } + + /** + * 付款/结算 + * + * @param paymentDto 入参 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R savePayment(PaymentDto paymentDto) { + if (paymentDto.getChargeItemIds().isEmpty()) { + return R.fail("未选择收费项"); + } + // 查找付款实例 + PaymentReconciliation paymentReconciliation = paymentReconciliationService.getById(paymentDto.getId()); + if (paymentReconciliation == null) { + return R.fail("查无此付款信息"); + } + if (!PaymentStatus.DRAFT.getValue().equals(paymentReconciliation.getStatusEnum())) { + return R.fail("该账单不是待支付账单"); + } + // 查找对应的收费详情,根据批次号查询 + List paymentRecDetails = + paymentRecDetailService.list(new LambdaQueryWrapper() + .eq(PaymentRecDetail::getReconciliationId, paymentReconciliation.getId())); + if (!paymentDto.getChargeItemIds().stream().map(String::valueOf).collect(Collectors.joining(",")) + .equals(paymentReconciliation.getChargeItemIds())) { + return R.fail("收费项目变动,请重新预结算"); + } + // 校验金额 + BigDecimal sum = BigDecimal.ZERO; + for (PaymentRecDetail paymentRecDetail : paymentRecDetails) { + if (paymentRecDetail.getPayEnum().equals(YbPayment.SELF_CASH_PAY.getValue())) { + sum = sum.add(paymentRecDetail.getAmount()); + } + } + BigDecimal chargeAmount = BigDecimal.ZERO; + for (PaymentDetailDto paymentDetail : paymentDto.getPaymentDetails()) { + chargeAmount = chargeAmount.add(paymentDetail.getAmount()); + } + if (sum.compareTo(chargeAmount) != 0) { + throw new ServiceException("交款金额与预结算金额不相等"); + } + + // 前端传过来的收费项 + List chargeItemList = getChargeItems(paymentDto.getChargeItemIds()); + if (chargeItemList.isEmpty()) { + return R.fail("未选择收费项"); + } + if (chargeItemList.stream().map(ChargeItem::getStatusEnum) + .anyMatch(x -> x.equals(ChargeItemStatus.BILLED.getValue()))) { + return R.fail("已收费账单,请误重复提交"); + } + // 分别获取各个请求id列表 + List medReqIdList = new ArrayList<>(); + List devReqIdList = new ArrayList<>(); + Integer minpacuntDrugTracCnt = 0; + Integer mcsTracCnt = 0; + chargeItemList.forEach(item -> { + switch (item.getServiceTable()) { + case CommonConstants.TableName.MED_MEDICATION_REQUEST -> medReqIdList.add(item.getServiceId()); + case CommonConstants.TableName.WOR_DEVICE_REQUEST -> devReqIdList.add(item.getServiceId()); + } + }); + if (!medReqIdList.isEmpty()) { + List medicationRequestList = medicationRequestService.list( + new LambdaQueryWrapper().in(MedicationRequest::getId, medReqIdList)); + if (!medicationRequestList.isEmpty()) { + minpacuntDrugTracCnt = medicationRequestList.stream().mapToInt(MedicationRequest::getQuantity).sum(); + } + } + if (!devReqIdList.isEmpty()) { + List deviceRequestList = deviceRequestService + .list(new LambdaQueryWrapper().in(DeviceRequest::getId, devReqIdList)); + if (!deviceRequestList.isEmpty()) { + mcsTracCnt = deviceRequestList.stream().mapToInt(DeviceRequest::getQuantity).sum(); + } + } + + Map> payTransNoMap = + paymentRecDetails.stream().collect(Collectors.groupingBy(PaymentRecDetail::getPayTransNo)); + + com.openhis.financial.model.PaymentResult paymentResult; + List paymentResultList = new ArrayList<>(); + for (Map.Entry> stringListEntry : payTransNoMap.entrySet()) { + // paymentResult = new PaymentResult(); + paymentResult = iPaymentReconciliationService.settle(stringListEntry.getKey(), + YbMdtrtCertType.getByValue(paymentDto.getYbMdtrtCertType()), paymentDto.getBusiCardInfo(), + minpacuntDrugTracCnt, mcsTracCnt); + paymentResult.setAccountId(stringListEntry.getValue().get(0).getAccountId()); + for (PaymentRecDetail paymentRecDetail : stringListEntry.getValue()) { + paymentRecDetail.setPayTransText(paymentResult.getSetlId());//医保结算赋值结算id;用于医保对账清算时使用 + } + if (paymentResult != null) { + paymentResultList.add(paymentResult); + } + } + + List collect = paymentResultList.stream().map(com.openhis.financial.model.PaymentResult::getSetlId) + .collect(Collectors.toList()); + + // 更改付款状态 + logger.info("更新付款状态:payment:" + JSON.toJSONString(paymentReconciliation)); + iPaymentReconciliationService.updatePaymentStatusAndSettleIdsById(paymentReconciliation.getId(), + PaymentStatus.SUCCESS, collect); + iPaymentRecDetailService.updateResultByPaymentId(paymentReconciliation.getId(), PaymentResult.PAID); + + //更改付款详情的信息 + iPaymentRecDetailService.updateBatchById(paymentRecDetails); + + // 记录卡余额等信息 + com.openhis.financial.model.PaymentResult minAmountResult = null; + for (com.openhis.financial.model.PaymentResult result : paymentResultList) { + if (result.getBalc() == null) { + continue; + } + if (minAmountResult == null || result.getBalc().compareTo(minAmountResult.getBalc()) < 0) { + minAmountResult = result; + } + } + + if (minAmountResult != null) { + // 賬戶餘額 + BigDecimal balc = minAmountResult.getBalc(); + if (balc != null) { + PaymentRecDetail paymentRecDetail = new PaymentRecDetail(); + // paymentRecDetail.setReconciliationId(paymentReconciliation.getId()) + // .setPayEnum(YbPayment.YB_JZ_FUND_AMOUNT.getValue()) + // .setPayLevelEnum(YbPayment.YB_JZ_FUND_AMOUNT.getLevel()).setAmount(balc) + // .setPayTransNo(minAmountResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + // .setAccountId(minAmountResult.getAccountId()); + paymentRecDetail.setReconciliationId(paymentReconciliation.getId()) + .setPayEnum(YbPayment.BALC.getValue()).setPayLevelEnum(YbPayment.BALC.getLevel()).setAmount(balc) + .setPayTransNo(minAmountResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + .setAccountId(minAmountResult.getAccountId()).setPayTransText(minAmountResult.getSetlId()); + iPaymentRecDetailService.save(paymentRecDetail); + } + } + + // 更改chargeItem的状态 + List chargeItemIdList = chargeItemList.stream().map(ChargeItem::getId).collect(Collectors.toList()); + chargeItemService.updatePaymentStatus(chargeItemIdList, ChargeItemStatus.BILLED.getValue()); + // 生成发票信息 + Invoice invoice = new Invoice(); + invoice.setPatientId(paymentReconciliation.getPatientId()).setStatusEnum(InvoiceStatus.DRAFT) + .setReconciliationId(paymentReconciliation.getId()).setTypeCode(InvoiceType.ISSUING_INVOICES.getValue()) + .setChargeItemIds(paymentReconciliation.getChargeItemIds()); + iInvoiceService.save(invoice); + + // 获取收费项对应的项目请求id + List medicationRequestIdList = new ArrayList<>(); + List deviceRequestIdList = new ArrayList<>(); + List serviceRequestIdList = new ArrayList<>(); + + chargeItemList.forEach(item -> { + switch (item.getServiceTable()) { + 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()); + } + }); + + if (!medicationRequestIdList.isEmpty()) { + // 更新药品发放状态为待配药 + medicationDispenseService.updatePreparationDispenseStatus(medicationRequestIdList); + } + if (!deviceRequestIdList.isEmpty()) { + // 更新耗材发放状态为待配药 + deviceDispenseService.updatePreparationDispenseStatus(deviceRequestIdList); + } + if (!serviceRequestIdList.isEmpty()) { + // 更新服务请求状态为待执行 + serviceRequestService.updatePreparationStatus(serviceRequestIdList); + } + logger.info("收费成功:payment:" + JSON.toJSONString(paymentReconciliation)); + // throw new ServiceException(""); + return R.ok(paymentReconciliation, + MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[] {"收费"})); + } + + /** + * 退费 + * + * @param cancelPaymentDto 入参 + * @return 结果 + */ + @Override + public R cancelPayment(CancelPaymentDto cancelPaymentDto) { + // 当前登录用户 + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + // 查找付款实例 + PaymentReconciliation paymentReconciliation = paymentReconciliationService.getById(cancelPaymentDto.getId()); + if (paymentReconciliation == null) { + throw new ServiceException("未查询到结算信息"); + } + // 原结算的ChargeItemIdList + List chargeItemIdList = Arrays.asList(paymentReconciliation.getChargeItemIds().split(",")).stream() + .filter(Objects::nonNull).map(Long::parseLong).collect(Collectors.toList()); + if (chargeItemIdList.isEmpty()) { + throw new ServiceException("未查询到收费项信息"); + } + // 原结算的chargeItem集合 + List chargeItems = getChargeItems(chargeItemIdList); + if (chargeItems.isEmpty()) { + throw new ServiceException("未查询到收费项信息"); + } + if (chargeItems.stream().map(ChargeItem::getStatusEnum) + .anyMatch(x -> x.equals(ChargeItemStatus.REFUNDED.getValue()))) { + throw new ServiceException("请勿重复退费"); + } + // 查找对应的收费详情 + List PaymentRecDetails = + paymentRecDetailService.list(new LambdaQueryWrapper() + .eq(PaymentRecDetail::getReconciliationId, cancelPaymentDto.getId())); + // 查询账户信息 + // Account account = iAccountService.getById(paymentReconciliation.getAccountId()); + if (PaymentRecDetails.isEmpty()) { + throw new ServiceException("未查询到结算信息"); + } + // 新的chargeitem + String chargeItemIds = StringUtil.join(cancelPaymentDto.getChargeItemIds().toArray(), ","); + List chargeItemList; + if (chargeItemIds.isEmpty()) { + chargeItemList = new ArrayList<>(); + } else { + chargeItemList = chargeItemService + .list(new LambdaQueryWrapper().in(ChargeItem::getId, cancelPaymentDto.getChargeItemIds())); + } + + // 全退 + String ybSettleIds = paymentReconciliation.getYbSettleIds(); + PaymentReconciliation unPaymentReconciliation = normalUnCharge(paymentReconciliation, PaymentRecDetails,null); + if (!StringUtils.isEmpty(ybSettleIds)) { + // 医保结算信息 + List ybSettleIdList = Arrays.asList(ybSettleIds.split(",")); + if (!ybSettleIdList.isEmpty()) { + // 医保反结 + List clinicSettleList = clinicSettleService + .list(new LambdaQueryWrapper().in(ClinicSettle::getSetlId, ybSettleIdList)); + StringBuilder stringBuilder = new StringBuilder(); + for (ClinicSettle clinicSettle : clinicSettleList) { + R r = ybManager.unSettle(clinicSettle.getSetlId()); + if (r.getCode() == 200) { + //获取医保反结算后的2208输出参数 + Clinic2208UnSetlInfoOutput clinic2208UnSetlInfoOutput = null; + if (Clinic2208UnSetlInfoOutput.class.isAssignableFrom(r.getData().getClass())) { + clinic2208UnSetlInfoOutput = (Clinic2208UnSetlInfoOutput)r.getData(); + stringBuilder.append(clinic2208UnSetlInfoOutput.getSetlId()).append(","); + //对payment详情的结算id进行处理 + List paymentRecDetailList = iPaymentRecDetailService.list(new LambdaQueryWrapper().eq(PaymentRecDetail::getReconciliationId, unPaymentReconciliation).eq(PaymentRecDetail::getPayTransText, clinicSettle.getSetlId())); + if(!paymentRecDetailList.isEmpty()){ + for (PaymentRecDetail paymentRecDetail : paymentRecDetailList) { + paymentRecDetail.setPayTransText(clinic2208UnSetlInfoOutput.getSetlId()); + } + iPaymentRecDetailService.updateBatchById(paymentRecDetailList); + } + } + } + } + // 删除最后一个逗号 + if (stringBuilder.length() > 0 && stringBuilder.charAt(stringBuilder.length() - 1) == ',') { + stringBuilder.deleteCharAt(stringBuilder.length() - 1); + } + //回填payment的settleId字段 + unPaymentReconciliation.setYbSettleIds(stringBuilder.toString()); + iPaymentReconciliationService.updateById(unPaymentReconciliation); + } + } + + if (!chargeItemList.isEmpty()) { + // + PrePaymentDto prePaymentDto = new PrePaymentDto(); + prePaymentDto.setEncounterId(paymentReconciliation.getEncounterId()).setEntererId(practitionerId) + .setPatientId(paymentReconciliation.getPatientId()) + .setYbMdtrtCertType(cancelPaymentDto.getYbMdtrtCertType()) + .setChargeItemIds(cancelPaymentDto.getChargeItemIds()) + .setBusiCardInfo(cancelPaymentDto.getBusiCardInfo()); + + R preResult = prePayment(prePaymentDto); + + if (200 != preResult.getCode()) { + throw new ServiceException("重新预结算失败请联系工程师"); + } + + PrePaymentResultModel prePaymentResultModel = + JSON.parseObject(JSON.toJSONString(preResult.getData()), PrePaymentResultModel.class); + // 新的应收 + BigDecimal cashPay = BigDecimal.ZERO; + for (PaymentRecDetailDto paymentRecDetail : prePaymentResultModel.getDetails()) { + if (paymentRecDetail.getPayEnum().equals(YbPayment.SELF_CASH_PAY.getValue())) { + cashPay = cashPay.add(paymentRecDetail.getAmount()); + } + } + + // 已付金额 + BigDecimal payAmount = BigDecimal.ZERO; + for (PaymentRecDetail paymentRecDetail : PaymentRecDetails) { + if (YbPayment.SELF_CASH_PAY.getValue().equals(paymentRecDetail.getPayEnum())) { + payAmount = payAmount.add(paymentRecDetail.getAmount()); + } + } + + // 拼接重新结算参数 + PaymentDto paymentDto = new PaymentDto(); + ArrayList paymentDetailDtoList = new ArrayList<>(); + paymentDetailDtoList.add(new PaymentDetailDto().setPayEnum(YbPayment.SELF_CASH_PAY.getValue()) + .setAmount(cashPay).setChargeAmount(cashPay).setReturnAmount(new BigDecimal("0.0"))); + paymentDto.setEncounterId(paymentReconciliation.getEncounterId()) + .setChargeItemIds(chargeItemList.stream().map(ChargeItem::getId).collect(Collectors.toList())) + .setPaymentDetails(paymentDetailDtoList).setId(Long.parseLong(prePaymentResultModel.getPaymentId())); + + R settleResult = savePayment(paymentDto); + + if (200 != settleResult.getCode()) { + throw new ServiceException("重新结算失败请联系工程师"); + } + + // 获取新的付款参数表 + PaymentReconciliation payment = + JSON.parseObject(JSON.toJSONString(settleResult.getData()), PaymentReconciliation.class); + // 获取实付金额 + List paymentRecDetail = paymentRecDetailService.list( + new LambdaQueryWrapper().eq(PaymentRecDetail::getReconciliationId, payment.getId()) + .eq(PaymentRecDetail::getPayEnum, YbPayment.SELF_CASH_PAY.getValue())); + + BigDecimal chargedPay = BigDecimal.ZERO; + for (PaymentRecDetailDto paymentRecDet : prePaymentResultModel.getDetails()) { + if (paymentRecDet.getPayEnum().equals(YbPayment.SELF_CASH_PAY.getValue())) { + chargedPay = chargedPay.add(paymentRecDet.getAmount()); + } + } + logger.info( + "部分退款:原payment:" + JSON.toJSONString(paymentReconciliation) + "新payment:" + JSON.toJSONString(payment)); + if (chargedPay.compareTo(payAmount) >= 0) { + return R.ok("请患者补交" + chargedPay.subtract(payAmount).setScale(1, RoundingMode.HALF_UP) + "元"); + } else { + return R.ok("请返还患者" + payAmount.subtract(chargedPay).setScale(1, RoundingMode.HALF_UP) + "元"); + } + } + // 更新收费状态:已退费 + chargeItemService.updatePaymentStatus(chargeItemIdList, ChargeItemStatus.REFUNDED.getValue()); + return R.ok(unPaymentReconciliation, "退款成功"); + } + + /** + * 单纯做 payment*-1 + * + * @param cancelPaymentDto 入参 + * @return + */ + @Override + public R cancelRegPayment(CancelPaymentDto cancelPaymentDto) { + // 获取付费id + Long paymentId = cancelPaymentDto.getId(); + PaymentReconciliation paymentReconciliation = iPaymentReconciliationService.getById(paymentId); + if (paymentReconciliation == null) { + throw new ServiceException("查询不到付款记录"); + } + List paymentRecDetails = iPaymentRecDetailService + .list(new LambdaQueryWrapper().eq(PaymentRecDetail::getReconciliationId, paymentId)); + if (paymentRecDetails.isEmpty()) { + throw new ServiceException("查询不到付款记录"); + } + + PaymentReconciliation unPaymentReconciliation = normalUnCharge(paymentReconciliation, paymentRecDetails,cancelPaymentDto.getSetlId()); + + return R.ok(unPaymentReconciliation); + } + + /** + * 分页查询 + * + * @param searchKey 查询条件 + * @param pageNo 分页参数 + * @param pageSize 分页参数 + * @param request 请求参数 + * @return 结果 + */ + @Override + public IPage getPage(String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request) { + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(new PaymentVO(), searchKey, + new HashSet<>(Arrays.asList(CommonConstants.FieldName.encounterId, CommonConstants.FieldName.contractNo, + CommonConstants.FieldName.paymentNo)), request); + + IPage paymentDtoIPage = paymentMapper.getPage(new Page<>(pageNo, pageSize), queryWrapper); + + for (PaymentVO record : paymentDtoIPage.getRecords()) { + record.setPaymentId(record.getId().toString()); + record.setEncounterIdStr(record.getEncounterId().toString()); + } + + // todo:sjq 1.是否联表查询患者名字,收款员姓名等信息 2.赋值 + // paymentDtoIPage.getRecords().forEach(e -> { + // // 性别 + // e.setKindEnum_enumText(EnumUtils.getInfoByValue(PaymentKind.class, e.getKindEnum())); + // // 计算年龄 + // e.setAgeString(AgeCalculatorUtil.getAge(DateUtils.parseDate(e.getBirthDate()))); + // }); + + return paymentDtoIPage; + } + + /** + * 查找收费详情(明细) + * + * @param paymentDto 入参 + * @return 结果 + */ + @Override + public List getDetail(PaymentDto paymentDto) { + return paymentMapper.getPaymentDetailList(paymentDto.getId()); + } + + /** + * 常规退费 + * + * @param paymentReconciliation 付款实体 + * @param paymentRecDetails 付款详情 + * @return 结果 + */ + private PaymentReconciliation normalUnCharge(PaymentReconciliation paymentReconciliation, + List paymentRecDetails, String setlIds) { + + // 获取原ID + Long id = paymentReconciliation.getId(); + // SJQ:2025.04.01 确认locationId暂不做处理,location表只记录库房药房信息 + paymentReconciliation.setId(null).setStatusEnum(PaymentStatus.REFUND_ALL.getValue()) + .setPaymentEnum(PaymentType.UN_PAY.getValue()).setRelationId(id) + .setEntererId(SecurityUtils.getLoginUser().getPractitionerId()).setBillDate(new Date()) + .setTenderedAmount(paymentReconciliation.getTenderedAmount().negate()) + .setReturnedAmount(paymentReconciliation.getReturnedAmount().negate()) + .setDisplayAmount(paymentReconciliation.getDisplayAmount().negate()); + if(setlIds!=null){ + paymentReconciliation.setYbSettleIds(setlIds); + } + paymentReconciliationService.save(paymentReconciliation); + // 新增详情信息 + PaymentRecDetail newPaymentRecDetail; + List addDetailList = new ArrayList<>(); + for (PaymentRecDetail paymentRecDetail : paymentRecDetails) { + newPaymentRecDetail = new PaymentRecDetail(); + BeanUtils.copyProperties(paymentRecDetail, newPaymentRecDetail); + newPaymentRecDetail.setId(null); + newPaymentRecDetail.setReconciliationId(paymentReconciliation.getId()); + newPaymentRecDetail.setPredecessorId(paymentRecDetail.getId()); + newPaymentRecDetail.setResultEnum(PaymentResult.PAID.getValue()); + newPaymentRecDetail.setAmount(paymentRecDetail.getAmount().multiply(new BigDecimal("-1"))); + newPaymentRecDetail.setDeleteFlag(DelFlag.NO.getCode()); + if(setlIds!=null){ + newPaymentRecDetail.setPayTransText(setlIds); + } + addDetailList.add(newPaymentRecDetail); + } + + paymentRecDetailService.saveBatch(addDetailList); + + // 修改详情信息 + List list = new ArrayList<>(); + for (PaymentRecDetail item : paymentRecDetails) { + item.setResultEnum(1); + list.add(item); + } + paymentRecDetailService.updateBatchById(list); + logger.info("退款payment:" + JSON.toJSONString(paymentReconciliation)); + return paymentReconciliation; + } + + /** + * 初始化一个收费参数 + * + * @return 预结算的参数 + */ + public Clinic2206OrderOutput initClinic2206OrderOutput() { + Clinic2206OrderOutput clinic2206OrderResult = new Clinic2206OrderOutput(); + return clinic2206OrderResult.setMedfeeSumamt(new BigDecimal("0.0")).setFulamtOwnpayAmt(new BigDecimal("0.0")) + .setOverlmtSelfpay(new BigDecimal("0.0")).setPreselfpayAmt(new BigDecimal("0.0")) + .setInscpScpAmt(new BigDecimal("0.0")).setActPayDedc(new BigDecimal("0.0")) + .setHifpPay(new BigDecimal("0.0")).setPoolPropSelfpay(new BigDecimal("0.0")) + .setCvlservPay(new BigDecimal("0.0")).setHifesPay(new BigDecimal("0.0")).setHifmiPay(new BigDecimal("0.0")) + .setHifobPay(new BigDecimal("0.00")).setMafPay(new BigDecimal("0.0")).setOthPay(new BigDecimal("0.0")) + .setFundPaySumamt(new BigDecimal("0.0")).setPsnPartAmt(new BigDecimal("0.0")) + .setAcctPay(new BigDecimal("0.0")).setPsnCashPay(new BigDecimal("0.0")) + .setHospPartAmt(new BigDecimal("0.0")).setBalc(new BigDecimal("0.0")) + .setAcctMulaidPay(new BigDecimal("0.0")).setHifdmPay(new BigDecimal("0.0")); + } + + /** + * 保存付款详情 + * + * @param prePaymentResults 预付款集合 + * @param payment 付款实体 + */ + private List savePaymentDetail(List prePaymentResults, + PaymentReconciliation payment) { + // 保存付款详情 + List paymentRecDetails = new ArrayList<>(); + for (PrePaymentResult prePaymentResult : prePaymentResults) { + // 个人现金支出 + BigDecimal psnCashPay = prePaymentResult.getPsnCashPay(); + // 现金支付 + if (psnCashPay != null) { + PaymentRecDetail paymentRecDetail10 = new PaymentRecDetail(); + paymentRecDetail10.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_CASH_PAY.getValue()) + .setPayLevelEnum(YbPayment.SELF_CASH_PAY.getLevel()).setAmount(psnCashPay) + .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + .setAccountId(prePaymentResult.getAccountId()); + paymentRecDetails.add(paymentRecDetail10); + } + + // 个人负担总金额 + BigDecimal psnPartAmt = prePaymentResult.getPsnPartAmt(); + if (psnCashPay != null) { + PaymentRecDetail paymentRecDetail1 = new PaymentRecDetail(); + paymentRecDetail1.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_PAY.getValue()) + .setPayLevelEnum(YbPayment.SELF_PAY.getLevel()).setAmount(psnPartAmt) + .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + .setAccountId(prePaymentResult.getAccountId()); + paymentRecDetails.add(paymentRecDetail1); + } + // 基本医疗保险统筹基金支出 + BigDecimal hifpPay = prePaymentResult.getHifpPay(); + if (psnCashPay != null) { + PaymentRecDetail paymentRecDetail2 = new PaymentRecDetail(); + paymentRecDetail2.setReconciliationId(payment.getId()) + .setPayEnum(YbPayment.YB_TC_FUND_AMOUNT.getValue()) + .setPayLevelEnum(YbPayment.YB_TC_FUND_AMOUNT.getLevel()).setAmount(hifpPay) + .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + .setAccountId(prePaymentResult.getAccountId()); + paymentRecDetails.add(paymentRecDetail2); + } + + // 公务员医疗补助资金支出 + BigDecimal cvlservPay = prePaymentResult.getCvlservPay(); + if (psnCashPay != null) { + PaymentRecDetail paymentRecDetail3 = new PaymentRecDetail(); + paymentRecDetail3.setReconciliationId(payment.getId()) + .setPayEnum(YbPayment.YB_BC_GWY_BZ_VALUE.getValue()) + .setPayLevelEnum(YbPayment.YB_BC_GWY_BZ_VALUE.getLevel()).setAmount(cvlservPay) + .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + .setAccountId(prePaymentResult.getAccountId()); + paymentRecDetails.add(paymentRecDetail3); + } + // 企业补充医疗保险基金支出 + BigDecimal hifesPay = prePaymentResult.getHifesPay(); + if (psnCashPay != null) { + PaymentRecDetail paymentRecDetail4 = new PaymentRecDetail(); + paymentRecDetail4.setReconciliationId(payment.getId()) + .setPayEnum(YbPayment.YB_BC_FUND_AMOUNT.getValue()) + .setPayLevelEnum(YbPayment.YB_BC_FUND_AMOUNT.getLevel()).setAmount(hifesPay) + .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + .setAccountId(prePaymentResult.getAccountId()); + paymentRecDetails.add(paymentRecDetail4); + } + // 居民大病保险资金支出 + BigDecimal hifmiPay = prePaymentResult.getHifmiPay(); + if (psnCashPay != null) { + PaymentRecDetail paymentRecDetail5 = new PaymentRecDetail(); + paymentRecDetail5.setReconciliationId(payment.getId()) + .setPayEnum(YbPayment.YB_BC_JM_DB_VALUE.getValue()) + .setPayLevelEnum(YbPayment.YB_BC_JM_DB_VALUE.getLevel()).setAmount(hifmiPay) + .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + .setAccountId(prePaymentResult.getAccountId()); + paymentRecDetails.add(paymentRecDetail5); + } + // 职工大额医疗费用补助基金支出 + BigDecimal hifobPay = prePaymentResult.getHifobPay(); + if (psnCashPay != null) { + PaymentRecDetail paymentRecDetail6 = new PaymentRecDetail(); + paymentRecDetail6.setReconciliationId(payment.getId()).setPayTransNo(prePaymentResult.getChrgBchno()) + .setPayLevelEnum(YbPayment.YB_BC_ZG_DE_BZ_VALUE.getLevel()).setAmount(hifobPay) + .setPayEnum(YbPayment.YB_BC_ZG_DE_BZ_VALUE.getValue()) + .setResultEnum(PaymentResult.UNPAID.getValue()).setAccountId(prePaymentResult.getAccountId()); + paymentRecDetails.add(paymentRecDetail6); + } + // 医疗救助基金支出 + BigDecimal mafPay = prePaymentResult.getMafPay(); + if (psnCashPay != null) { + PaymentRecDetail paymentRecDetail7 = new PaymentRecDetail(); + paymentRecDetail7.setReconciliationId(payment.getId()) + .setPayEnum(YbPayment.YB_JZ_FUND_AMOUNT.getValue()) + .setPayLevelEnum(YbPayment.YB_JZ_FUND_AMOUNT.getLevel()).setAmount(mafPay) + .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + .setAccountId(prePaymentResult.getAccountId()); + paymentRecDetails.add(paymentRecDetail7); + } + // 其他支出 + BigDecimal othPay = prePaymentResult.getOthPay(); + if (psnCashPay != null) { + PaymentRecDetail paymentRecDetail8 = new PaymentRecDetail(); + paymentRecDetail8.setReconciliationId(payment.getId()).setPayEnum(YbPayment.OTHER_PAY.getValue()) + .setPayLevelEnum(YbPayment.OTHER_PAY.getLevel()).setAmount(othPay) + .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + .setAccountId(prePaymentResult.getAccountId()); + paymentRecDetails.add(paymentRecDetail8); + } + // 基金支付总额 + BigDecimal fundPaySumamt = prePaymentResult.getFundPaySumamt(); + if (psnCashPay != null) { + PaymentRecDetail paymentRecDetail9 = new PaymentRecDetail(); + paymentRecDetail9.setReconciliationId(payment.getId()).setPayEnum(YbPayment.YB_FUND_PAY.getValue()) + .setPayLevelEnum(YbPayment.YB_FUND_PAY.getLevel()).setAmount(fundPaySumamt) + .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + .setAccountId(prePaymentResult.getAccountId()); + paymentRecDetails.add(paymentRecDetail9); + } + // 个人账户支出 + BigDecimal acctPay = prePaymentResult.getAcctPay(); + if (psnCashPay != null) { + PaymentRecDetail paymentRecDetail11 = new PaymentRecDetail(); + paymentRecDetail11.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_YB_ZH_PAY.getValue()) + .setPayLevelEnum(YbPayment.SELF_YB_ZH_PAY.getLevel()).setAmount(acctPay) + .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + .setAccountId(prePaymentResult.getAccountId()); + paymentRecDetails.add(paymentRecDetail11); + } + // 医院负担金额 + BigDecimal hospPartAmt = prePaymentResult.getHospPartAmt(); + if (psnCashPay != null) { + PaymentRecDetail paymentRecDetail12 = new PaymentRecDetail(); + paymentRecDetail12.setReconciliationId(payment.getId()).setPayEnum(YbPayment.HOSP_PART_AMT.getValue()) + .setPayLevelEnum(YbPayment.HOSP_PART_AMT.getLevel()).setAmount(hospPartAmt) + .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + .setAccountId(prePaymentResult.getAccountId()); + paymentRecDetails.add(paymentRecDetail12); + } + // 个人账户共济支付金额 + BigDecimal acctMulaidPay = prePaymentResult.getAcctMulaidPay(); + if (psnCashPay != null) { + PaymentRecDetail paymentRecDetail13 = new PaymentRecDetail(); + paymentRecDetail13.setReconciliationId(payment.getId()) + .setPayEnum(YbPayment.SELF_YB_ZH_GJ_VALUE.getValue()) + .setPayLevelEnum(YbPayment.SELF_YB_ZH_GJ_VALUE.getLevel()).setAmount(acctMulaidPay) + .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + .setAccountId(prePaymentResult.getAccountId()); + paymentRecDetails.add(paymentRecDetail13); + } + // 全自费金额 + BigDecimal fulamtOwnpayAmt = prePaymentResult.getFulamtOwnpayAmt(); + if (psnCashPay != null) { + PaymentRecDetail paymentRecDetail14 = new PaymentRecDetail(); + paymentRecDetail14.setReconciliationId(payment.getId()) + .setPayEnum(YbPayment.FULAMT_OWNPAY_AMT.getValue()) + .setPayLevelEnum(YbPayment.FULAMT_OWNPAY_AMT.getLevel()).setAmount(fulamtOwnpayAmt) + .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + .setAccountId(prePaymentResult.getAccountId()); + paymentRecDetails.add(paymentRecDetail14); + } + // 超限价自费费用 + BigDecimal overlmtSelfpay = prePaymentResult.getOverlmtSelfpay(); + if (psnCashPay != null) { + PaymentRecDetail paymentRecDetail15 = new PaymentRecDetail(); + paymentRecDetail15.setReconciliationId(payment.getId()).setPayEnum(YbPayment.OVERLMT_SELFPAY.getValue()) + .setPayLevelEnum(YbPayment.OVERLMT_SELFPAY.getLevel()).setAmount(overlmtSelfpay) + .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + .setAccountId(prePaymentResult.getAccountId()); + paymentRecDetails.add(paymentRecDetail15); + } + // BigDecimal balc = prePaymentResult.getBalc(); + // PaymentRecDetail paymentRecDetail16 = new PaymentRecDetail(); + // paymentRecDetail16.setReconciliationId(payment.getId()).setPayEnum(YbPayment.BALC.getValue()) + // .setPayLevelEnum(YbPayment.BALC.getLevel()).setAmount(balc) + // .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(clinicOrder2207Result.getAccountId()); + // paymentRecDetails.add(paymentRecDetail16); + BigDecimal preselfpayAmt = prePaymentResult.getPreselfpayAmt(); + if (psnCashPay != null) { + PaymentRecDetail paymentRecDetail17 = new PaymentRecDetail(); + paymentRecDetail17.setReconciliationId(payment.getId()).setPayEnum(YbPayment.PRESELFPAY_AMT.getValue()) + .setPayLevelEnum(YbPayment.PRESELFPAY_AMT.getLevel()).setAmount(preselfpayAmt) + .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + .setAccountId(prePaymentResult.getAccountId()); + paymentRecDetails.add(paymentRecDetail17); + } + BigDecimal inscpScpAmt = prePaymentResult.getInscpScpAmt(); + if (psnCashPay != null) { + PaymentRecDetail paymentRecDetail18 = new PaymentRecDetail(); + paymentRecDetail18.setReconciliationId(payment.getId()).setPayEnum(YbPayment.INSCP_SCP_AMT.getValue()) + .setPayLevelEnum(YbPayment.INSCP_SCP_AMT.getLevel()).setAmount(inscpScpAmt) + .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + .setAccountId(prePaymentResult.getAccountId()); + paymentRecDetails.add(paymentRecDetail18); + } + BigDecimal actPayDedc = prePaymentResult.getActPayDedc(); + if (psnCashPay != null) { + PaymentRecDetail paymentRecDetail19 = new PaymentRecDetail(); + paymentRecDetail19.setReconciliationId(payment.getId()).setPayEnum(YbPayment.ACT_PAY_DEDC.getValue()) + .setPayLevelEnum(YbPayment.ACT_PAY_DEDC.getLevel()).setAmount(actPayDedc) + .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + .setAccountId(prePaymentResult.getAccountId()); + paymentRecDetails.add(paymentRecDetail19); + } + } + paymentRecDetailService.saveBatch(paymentRecDetails); + return paymentRecDetails; + } + + /** + * 保存付款详情 + * + * @param paymentResult 总付款金额集合 + * @param payment 付款实体 + * @param paymentDetails 付款详情 + */ + private void savePaymentDetail(com.openhis.financial.model.PaymentResult paymentResult, + PaymentReconciliation payment, List paymentDetails, Long accountId) { + // 保存付款详情 + List paymentRecDetails = new ArrayList<>(); + // BigDecimal amount = BigDecimal.ZERO; + // String AccountEnum = "04"; + // Account account = accountService.getById(payment.getAccountId()); + // AccountEnum = account.getTypeCode(); + PaymentRecDetail paymentRecDetail; + for (PaymentDetailDto paymentDetail : paymentDetails) { + paymentRecDetail = new PaymentRecDetail(); + if (YbPayment.SELF_CASH_VX_VALUE.getValue().equals(paymentDetail.getPayEnum())) { + paymentRecDetail = new PaymentRecDetail(); + paymentRecDetail.setReconciliationId(payment.getId()) + .setPayEnum(YbPayment.SELF_CASH_VX_VALUE.getValue()).setAccountId(accountId) + .setPayLevelEnum(YbPayment.SELF_CASH_VX_VALUE.getLevel()).setAmount(paymentDetail.getAmount()) + .setResultEnum(PaymentResult.PAID.getValue()); + paymentRecDetails.add(paymentRecDetail); + } + if (YbPayment.SELF_CASH_ALI_VALUE.getValue().equals(paymentDetail.getPayEnum())) { + paymentRecDetail = new PaymentRecDetail(); + paymentRecDetail.setReconciliationId(payment.getId()) + .setPayEnum(YbPayment.SELF_CASH_ALI_VALUE.getValue()).setAccountId(accountId) + .setPayLevelEnum(YbPayment.SELF_CASH_ALI_VALUE.getLevel()).setAmount(paymentDetail.getAmount()) + .setResultEnum(PaymentResult.PAID.getValue()); + paymentRecDetails.add(paymentRecDetail); + } + if (YbPayment.SELF_CASH_UNION_VALUE.getValue().equals(paymentDetail.getPayEnum())) { + paymentRecDetail = new PaymentRecDetail(); + paymentRecDetail.setReconciliationId(payment.getId()) + .setPayEnum(YbPayment.SELF_CASH_UNION_VALUE.getValue()).setAccountId(accountId) + .setPayLevelEnum(YbPayment.SELF_CASH_UNION_VALUE.getLevel()).setAmount(paymentDetail.getAmount()) + .setResultEnum(PaymentResult.PAID.getValue()); + paymentRecDetails.add(paymentRecDetail); + } + if (YbPayment.SELF_CASH_VALUE.getValue().equals(paymentDetail.getPayEnum())) { + paymentRecDetail = new PaymentRecDetail(); + paymentRecDetail.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_CASH_VALUE.getValue()) + .setPayLevelEnum(YbPayment.SELF_CASH_VALUE.getLevel()).setAmount(paymentDetail.getAmount()) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(accountId); + paymentRecDetails.add(paymentRecDetail); + } + + // amount = amount.add(paymentDetail.getAmount()); + } + // 个人现金支出 + BigDecimal psnCashPay = paymentResult.getPsnCashPay(); + // if(psnCashPay.compareTo(amount)!=0){ + // throw new ServiceException("金额校验失败"); + // } + // 现金支付 + PaymentRecDetail paymentRecDetail10 = new PaymentRecDetail(); + paymentRecDetail10.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_CASH_PAY.getValue()) + .setPayLevelEnum(YbPayment.SELF_CASH_PAY.getLevel()).setAmount(psnCashPay).setPayTransText(paymentResult.getSetlId()) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(accountId); + paymentRecDetails.add(paymentRecDetail10); + // 个人负担总金额 + BigDecimal psnPartAmt = paymentResult.getPsnPartAmt(); + PaymentRecDetail paymentRecDetail1 = new PaymentRecDetail(); + paymentRecDetail1.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_PAY.getValue()) + .setPayLevelEnum(YbPayment.SELF_PAY.getLevel()).setAmount(psnPartAmt).setPayTransText(paymentResult.getSetlId()) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(accountId); + paymentRecDetails.add(paymentRecDetail1); + // 基本医疗保险统筹基金支出 + BigDecimal hifpPay = paymentResult.getHifpPay(); + PaymentRecDetail paymentRecDetail2 = new PaymentRecDetail(); + paymentRecDetail2.setReconciliationId(payment.getId()).setPayEnum(YbPayment.YB_TC_FUND_AMOUNT.getValue()) + .setPayLevelEnum(YbPayment.YB_TC_FUND_AMOUNT.getLevel()).setAmount(hifpPay).setPayTransText(paymentResult.getSetlId()) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(accountId); + paymentRecDetails.add(paymentRecDetail2); + // 公务员医疗补助资金支出 + BigDecimal cvlservPay = paymentResult.getCvlservPay(); + PaymentRecDetail paymentRecDetail3 = new PaymentRecDetail(); + paymentRecDetail3.setReconciliationId(payment.getId()).setPayEnum(YbPayment.YB_BC_GWY_BZ_VALUE.getValue()) + .setPayLevelEnum(YbPayment.YB_BC_GWY_BZ_VALUE.getLevel()).setAmount(cvlservPay).setPayTransText(paymentResult.getSetlId()) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(accountId); + paymentRecDetails.add(paymentRecDetail3); + // 企业补充医疗保险基金支出 + BigDecimal hifesPay = paymentResult.getHifesPay(); + PaymentRecDetail paymentRecDetail4 = new PaymentRecDetail(); + paymentRecDetail4.setReconciliationId(payment.getId()).setPayEnum(YbPayment.YB_BC_FUND_AMOUNT.getValue()) + .setPayLevelEnum(YbPayment.YB_BC_FUND_AMOUNT.getLevel()).setAmount(hifesPay).setPayTransText(paymentResult.getSetlId()) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(accountId); + paymentRecDetails.add(paymentRecDetail4); + // 居民大病保险资金支出 + BigDecimal hifmiPay = paymentResult.getHifmiPay(); + PaymentRecDetail paymentRecDetail5 = new PaymentRecDetail(); + paymentRecDetail5.setReconciliationId(payment.getId()).setPayEnum(YbPayment.YB_BC_JM_DB_VALUE.getValue()) + .setPayLevelEnum(YbPayment.YB_BC_JM_DB_VALUE.getLevel()).setAmount(hifmiPay).setPayTransText(paymentResult.getSetlId()) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(accountId); + paymentRecDetails.add(paymentRecDetail5); + // 职工大额医疗费用补助基金支出 + BigDecimal hifobPay = paymentResult.getHifobPay(); + PaymentRecDetail paymentRecDetail6 = new PaymentRecDetail(); + paymentRecDetail6.setReconciliationId(payment.getId()) + .setPayLevelEnum(YbPayment.YB_BC_ZG_DE_BZ_VALUE.getLevel()).setAmount(hifobPay).setPayTransText(paymentResult.getSetlId()) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(accountId); + paymentRecDetails.add(paymentRecDetail6); + // 医疗救助基金支出 + BigDecimal mafPay = paymentResult.getMafPay(); + PaymentRecDetail paymentRecDetail7 = new PaymentRecDetail(); + paymentRecDetail7.setReconciliationId(payment.getId()).setPayEnum(YbPayment.YB_JZ_FUND_AMOUNT.getValue()) + .setPayLevelEnum(YbPayment.YB_JZ_FUND_AMOUNT.getLevel()).setAmount(mafPay).setPayTransText(paymentResult.getSetlId()) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(accountId); + paymentRecDetails.add(paymentRecDetail7); + // 其他支出 + BigDecimal othPay = paymentResult.getOthPay(); + PaymentRecDetail paymentRecDetail8 = new PaymentRecDetail(); + paymentRecDetail8.setReconciliationId(payment.getId()).setPayEnum(YbPayment.OTHER_PAY.getValue()) + .setPayLevelEnum(YbPayment.OTHER_PAY.getLevel()).setAmount(othPay).setPayTransText(paymentResult.getSetlId()) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(accountId); + paymentRecDetails.add(paymentRecDetail8); + // 基金支付总额 + BigDecimal fundPaySumamt = paymentResult.getFundPaySumamt(); + PaymentRecDetail paymentRecDetail9 = new PaymentRecDetail(); + paymentRecDetail9.setReconciliationId(payment.getId()).setPayEnum(YbPayment.YB_FUND_PAY.getValue()) + .setPayLevelEnum(YbPayment.YB_FUND_PAY.getLevel()).setAmount(fundPaySumamt).setPayTransText(paymentResult.getSetlId()) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(accountId); + paymentRecDetails.add(paymentRecDetail9); + // 个人账户支出 + BigDecimal acctPay = paymentResult.getAcctPay(); + PaymentRecDetail paymentRecDetail11 = new PaymentRecDetail(); + paymentRecDetail11.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_YB_ZH_PAY.getValue()) + .setPayLevelEnum(YbPayment.SELF_YB_ZH_PAY.getLevel()).setAmount(acctPay).setPayTransText(paymentResult.getSetlId()) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(accountId); + paymentRecDetails.add(paymentRecDetail11); + // 医院负担金额 + BigDecimal hospPartAmt = paymentResult.getHospPartAmt(); + PaymentRecDetail paymentRecDetail12 = new PaymentRecDetail(); + paymentRecDetail12.setReconciliationId(payment.getId()).setPayEnum(YbPayment.OTHER_PAY.getValue()) + .setPayLevelEnum(YbPayment.OTHER_PAY.getLevel()).setAmount(hospPartAmt).setPayTransText(paymentResult.getSetlId()) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(accountId); + paymentRecDetails.add(paymentRecDetail12); + // 个人账户共济支付金额 + BigDecimal acctMulaidPay = paymentResult.getAcctMulaidPay(); + PaymentRecDetail paymentRecDetail13 = new PaymentRecDetail(); + paymentRecDetail13.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_YB_ZH_GJ_VALUE.getValue()) + .setPayLevelEnum(YbPayment.SELF_YB_ZH_GJ_VALUE.getLevel()).setAmount(acctMulaidPay).setPayTransText(paymentResult.getSetlId()) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(accountId); + paymentRecDetails.add(paymentRecDetail13); + // 全自费金额 + BigDecimal fulamtOwnpayAmt = paymentResult.getFulamtOwnpayAmt(); + PaymentRecDetail paymentRecDetail14 = new PaymentRecDetail(); + paymentRecDetail14.setReconciliationId(payment.getId()).setPayEnum(YbPayment.FULAMT_OWNPAY_AMT.getValue()) + .setPayLevelEnum(YbPayment.FULAMT_OWNPAY_AMT.getLevel()).setAmount(fulamtOwnpayAmt).setPayTransText(paymentResult.getSetlId()) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(accountId); + paymentRecDetails.add(paymentRecDetail14); + // 超限价自费费用 + BigDecimal overlmtSelfpay = paymentResult.getOverlmtSelfpay(); + PaymentRecDetail paymentRecDetail15 = new PaymentRecDetail(); + paymentRecDetail15.setReconciliationId(payment.getId()).setPayEnum(YbPayment.OVERLMT_SELFPAY.getValue()) + .setPayLevelEnum(YbPayment.OVERLMT_SELFPAY.getLevel()).setAmount(overlmtSelfpay).setPayTransText(paymentResult.getSetlId()) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(accountId); + paymentRecDetails.add(paymentRecDetail15); + BigDecimal balc = paymentResult.getBalc(); + PaymentRecDetail paymentRecDetail16 = new PaymentRecDetail(); + paymentRecDetail16.setReconciliationId(payment.getId()).setPayEnum(YbPayment.BALC.getValue()) + .setAccountId(accountId).setPayLevelEnum(YbPayment.BALC.getLevel()).setAmount(balc).setPayTransText(paymentResult.getSetlId()) + .setResultEnum(PaymentResult.PAID.getValue()); + paymentRecDetails.add(paymentRecDetail16); + BigDecimal preselfpayAmt = paymentResult.getPreselfpayAmt(); + PaymentRecDetail paymentRecDetail17 = new PaymentRecDetail(); + paymentRecDetail17.setReconciliationId(payment.getId()).setPayEnum(YbPayment.PRESELFPAY_AMT.getValue()) + .setPayLevelEnum(YbPayment.PRESELFPAY_AMT.getLevel()).setAmount(preselfpayAmt).setAccountId(accountId).setPayTransText(paymentResult.getSetlId()) + .setResultEnum(PaymentResult.PAID.getValue()); + paymentRecDetails.add(paymentRecDetail17); + BigDecimal inscpScpAmt = paymentResult.getInscpScpAmt(); + PaymentRecDetail paymentRecDetail18 = new PaymentRecDetail(); + paymentRecDetail18.setReconciliationId(payment.getId()).setPayEnum(YbPayment.INSCP_SCP_AMT.getValue()) + .setPayLevelEnum(YbPayment.INSCP_SCP_AMT.getLevel()).setAmount(inscpScpAmt).setAccountId(accountId).setPayTransText(paymentResult.getSetlId()) + .setResultEnum(PaymentResult.PAID.getValue()); + paymentRecDetails.add(paymentRecDetail18); + BigDecimal actPayDedc = paymentResult.getActPayDedc(); + PaymentRecDetail paymentRecDetail19 = new PaymentRecDetail(); + paymentRecDetail19.setReconciliationId(payment.getId()).setPayEnum(YbPayment.ACT_PAY_DEDC.getValue()) + .setPayLevelEnum(YbPayment.ACT_PAY_DEDC.getLevel()).setAmount(actPayDedc).setAccountId(accountId).setPayTransText(paymentResult.getSetlId()) + .setResultEnum(PaymentResult.PAID.getValue()); + paymentRecDetails.add(paymentRecDetail19); + + paymentRecDetailService.saveBatch(paymentRecDetails); + } + + /** + * 保存付款详情(弃用,若启用,需要确认一下setAccountId是否正确) + * + * @param clinicOrder2207ResultList 总付款金额集合 + * @param payment 付款实体 + * @param paymentDetails 付款详情 + */ + private void savePaymentDetail(List clinicOrder2207ResultList, + PaymentReconciliation payment, List paymentDetails) { + // 保存付款详情 + List paymentRecDetails = new ArrayList<>(); + // BigDecimal amount = BigDecimal.ZERO; + // String AccountEnum = "04"; + // Account account = accountService.getById(payment.getAccountId()); + // AccountEnum = account.getTypeCode(); + PaymentRecDetail paymentRecDetail; + for (PaymentDetailDto paymentDetail : paymentDetails) { + paymentRecDetail = new PaymentRecDetail(); + if (YbPayment.SELF_CASH_VX_VALUE.getValue().equals(paymentDetail.getPayEnum())) { + paymentRecDetail = new PaymentRecDetail(); + paymentRecDetail.setReconciliationId(payment.getId()) + .setPayEnum(YbPayment.SELF_CASH_VX_VALUE.getValue()) + .setPayLevelEnum(YbPayment.SELF_CASH_VX_VALUE.getLevel()).setAmount(paymentDetail.getAmount()) + .setResultEnum(PaymentResult.PAID.getValue()); + paymentRecDetails.add(paymentRecDetail); + } + if (YbPayment.SELF_CASH_ALI_VALUE.getValue().equals(paymentDetail.getPayEnum())) { + paymentRecDetail = new PaymentRecDetail(); + paymentRecDetail.setReconciliationId(payment.getId()) + .setPayEnum(YbPayment.SELF_CASH_ALI_VALUE.getValue()) + .setPayLevelEnum(YbPayment.SELF_CASH_ALI_VALUE.getLevel()).setAmount(paymentDetail.getAmount()) + .setResultEnum(PaymentResult.PAID.getValue()); + paymentRecDetails.add(paymentRecDetail); + } + if (YbPayment.SELF_CASH_UNION_VALUE.getValue().equals(paymentDetail.getPayEnum())) { + paymentRecDetail = new PaymentRecDetail(); + paymentRecDetail.setReconciliationId(payment.getId()) + .setPayEnum(YbPayment.SELF_CASH_UNION_VALUE.getValue()) + .setPayLevelEnum(YbPayment.SELF_CASH_UNION_VALUE.getLevel()).setAmount(paymentDetail.getAmount()) + .setResultEnum(PaymentResult.PAID.getValue()); + paymentRecDetails.add(paymentRecDetail); + } + if (YbPayment.SELF_CASH_VALUE.getValue().equals(paymentDetail.getPayEnum())) { + paymentRecDetail = new PaymentRecDetail(); + paymentRecDetail.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_CASH_VALUE.getValue()) + .setPayLevelEnum(YbPayment.SELF_CASH_VALUE.getLevel()).setAmount(paymentDetail.getAmount()) + .setResultEnum(PaymentResult.PAID.getValue()); + paymentRecDetails.add(paymentRecDetail); + } + + // amount = amount.add(paymentDetail.getAmount()); + } + for (Clinic2207OrderResultDto clinicOrder2207Result : clinicOrder2207ResultList) { + // 个人现金支出 + BigDecimal psnCashPay = clinicOrder2207Result.getPsnCashPay(); + // if(psnCashPay.compareTo(amount)!=0){ + // throw new ServiceException("金额校验失败"); + // } + // 现金支付 + PaymentRecDetail paymentRecDetail10 = new PaymentRecDetail(); + paymentRecDetail10.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_CASH_PAY.getValue()) + .setPayLevelEnum(YbPayment.SELF_CASH_PAY.getLevel()).setAmount(psnCashPay) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(clinicOrder2207Result.getAccountId()); + paymentRecDetails.add(paymentRecDetail10); + // 个人负担总金额 + BigDecimal psnPartAmt = clinicOrder2207Result.getPsnPartAmt(); + PaymentRecDetail paymentRecDetail1 = new PaymentRecDetail(); + paymentRecDetail1.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_PAY.getValue()) + .setPayLevelEnum(YbPayment.SELF_PAY.getLevel()).setAmount(psnPartAmt) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(clinicOrder2207Result.getAccountId()); + paymentRecDetails.add(paymentRecDetail1); + // 基本医疗保险统筹基金支出 + BigDecimal hifpPay = clinicOrder2207Result.getHifpPay(); + PaymentRecDetail paymentRecDetail2 = new PaymentRecDetail(); + paymentRecDetail2.setReconciliationId(payment.getId()).setPayEnum(YbPayment.YB_TC_FUND_AMOUNT.getValue()) + .setPayLevelEnum(YbPayment.YB_TC_FUND_AMOUNT.getLevel()).setAmount(hifpPay) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(clinicOrder2207Result.getAccountId()); + paymentRecDetails.add(paymentRecDetail2); + // 公务员医疗补助资金支出 + BigDecimal cvlservPay = clinicOrder2207Result.getCvlservPay(); + PaymentRecDetail paymentRecDetail3 = new PaymentRecDetail(); + paymentRecDetail3.setReconciliationId(payment.getId()).setPayEnum(YbPayment.YB_BC_GWY_BZ_VALUE.getValue()) + .setPayLevelEnum(YbPayment.YB_BC_GWY_BZ_VALUE.getLevel()).setAmount(cvlservPay) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(clinicOrder2207Result.getAccountId()); + paymentRecDetails.add(paymentRecDetail3); + // 企业补充医疗保险基金支出 + BigDecimal hifesPay = clinicOrder2207Result.getHifesPay(); + PaymentRecDetail paymentRecDetail4 = new PaymentRecDetail(); + paymentRecDetail4.setReconciliationId(payment.getId()).setPayEnum(YbPayment.YB_BC_FUND_AMOUNT.getValue()) + .setPayLevelEnum(YbPayment.YB_BC_FUND_AMOUNT.getLevel()).setAmount(hifesPay) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(clinicOrder2207Result.getAccountId()); + paymentRecDetails.add(paymentRecDetail4); + // 居民大病保险资金支出 + BigDecimal hifmiPay = clinicOrder2207Result.getHifmiPay(); + PaymentRecDetail paymentRecDetail5 = new PaymentRecDetail(); + paymentRecDetail5.setReconciliationId(payment.getId()).setPayEnum(YbPayment.YB_BC_JM_DB_VALUE.getValue()) + .setPayLevelEnum(YbPayment.YB_BC_JM_DB_VALUE.getLevel()).setAmount(hifmiPay) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(clinicOrder2207Result.getAccountId()); + paymentRecDetails.add(paymentRecDetail5); + // 职工大额医疗费用补助基金支出 + BigDecimal hifobPay = clinicOrder2207Result.getHifobPay(); + PaymentRecDetail paymentRecDetail6 = new PaymentRecDetail(); + paymentRecDetail6.setReconciliationId(payment.getId()) + .setPayLevelEnum(YbPayment.YB_BC_ZG_DE_BZ_VALUE.getLevel()).setAmount(hifobPay) + .setPayEnum(YbPayment.YB_BC_ZG_DE_BZ_VALUE.getValue()).setResultEnum(PaymentResult.PAID.getValue()) + .setAccountId(clinicOrder2207Result.getAccountId()); + paymentRecDetails.add(paymentRecDetail6); + // 医疗救助基金支出 + BigDecimal mafPay = clinicOrder2207Result.getMafPay(); + PaymentRecDetail paymentRecDetail7 = new PaymentRecDetail(); + paymentRecDetail7.setReconciliationId(payment.getId()).setPayEnum(YbPayment.YB_JZ_FUND_AMOUNT.getValue()) + .setPayLevelEnum(YbPayment.YB_JZ_FUND_AMOUNT.getLevel()).setAmount(mafPay) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(clinicOrder2207Result.getAccountId()); + paymentRecDetails.add(paymentRecDetail7); + // 其他支出 + BigDecimal othPay = clinicOrder2207Result.getOthPay(); + PaymentRecDetail paymentRecDetail8 = new PaymentRecDetail(); + paymentRecDetail8.setReconciliationId(payment.getId()).setPayEnum(YbPayment.OTHER_PAY.getValue()) + .setPayLevelEnum(YbPayment.OTHER_PAY.getLevel()).setAmount(othPay) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(clinicOrder2207Result.getAccountId()); + paymentRecDetails.add(paymentRecDetail8); + // 基金支付总额 + BigDecimal fundPaySumamt = clinicOrder2207Result.getFundPaySumamt(); + PaymentRecDetail paymentRecDetail9 = new PaymentRecDetail(); + paymentRecDetail9.setReconciliationId(payment.getId()).setPayEnum(YbPayment.YB_FUND_PAY.getValue()) + .setPayLevelEnum(YbPayment.YB_FUND_PAY.getLevel()).setAmount(fundPaySumamt) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(clinicOrder2207Result.getAccountId()); + paymentRecDetails.add(paymentRecDetail9); + // 个人账户支出 + BigDecimal acctPay = clinicOrder2207Result.getAcctPay(); + PaymentRecDetail paymentRecDetail11 = new PaymentRecDetail(); + paymentRecDetail11.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_YB_ZH_PAY.getValue()) + .setPayLevelEnum(YbPayment.SELF_YB_ZH_PAY.getLevel()).setAmount(acctPay) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(clinicOrder2207Result.getAccountId()); + paymentRecDetails.add(paymentRecDetail11); + // 医院负担金额 + BigDecimal hospPartAmt = clinicOrder2207Result.getHospPartAmt(); + PaymentRecDetail paymentRecDetail12 = new PaymentRecDetail(); + paymentRecDetail12.setReconciliationId(payment.getId()).setPayEnum(YbPayment.HOSP_PART_AMT.getValue()) + .setPayLevelEnum(YbPayment.HOSP_PART_AMT.getLevel()).setAmount(hospPartAmt) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(clinicOrder2207Result.getAccountId()); + paymentRecDetails.add(paymentRecDetail12); + // 个人账户共济支付金额 + BigDecimal acctMulaidPay = clinicOrder2207Result.getAcctMulaidPay(); + PaymentRecDetail paymentRecDetail13 = new PaymentRecDetail(); + paymentRecDetail13.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_YB_ZH_GJ_VALUE.getValue()) + .setPayLevelEnum(YbPayment.SELF_YB_ZH_GJ_VALUE.getLevel()).setAmount(acctMulaidPay) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(clinicOrder2207Result.getAccountId()); + paymentRecDetails.add(paymentRecDetail13); + // 全自费金额 + BigDecimal fulamtOwnpayAmt = clinicOrder2207Result.getFulamtOwnpayAmt(); + PaymentRecDetail paymentRecDetail14 = new PaymentRecDetail(); + paymentRecDetail14.setReconciliationId(payment.getId()).setPayEnum(YbPayment.FULAMT_OWNPAY_AMT.getValue()) + .setPayLevelEnum(YbPayment.FULAMT_OWNPAY_AMT.getLevel()).setAmount(fulamtOwnpayAmt) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(clinicOrder2207Result.getAccountId()); + paymentRecDetails.add(paymentRecDetail14); + // 超限价自费费用 + BigDecimal overlmtSelfpay = clinicOrder2207Result.getOverlmtSelfpay(); + PaymentRecDetail paymentRecDetail15 = new PaymentRecDetail(); + paymentRecDetail15.setReconciliationId(payment.getId()).setPayEnum(YbPayment.OVERLMT_SELFPAY.getValue()) + .setPayLevelEnum(YbPayment.OVERLMT_SELFPAY.getLevel()).setAmount(overlmtSelfpay) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(clinicOrder2207Result.getAccountId()); + paymentRecDetails.add(paymentRecDetail15); + BigDecimal balc = clinicOrder2207Result.getBalc(); + PaymentRecDetail paymentRecDetail16 = new PaymentRecDetail(); + paymentRecDetail16.setReconciliationId(payment.getId()).setPayEnum(YbPayment.BALC.getValue()) + .setPayLevelEnum(YbPayment.BALC.getLevel()).setAmount(balc).setResultEnum(PaymentResult.PAID.getValue()) + .setAccountId(clinicOrder2207Result.getAccountId()); + paymentRecDetails.add(paymentRecDetail16); + BigDecimal preselfpayAmt = clinicOrder2207Result.getPreselfpayAmt(); + PaymentRecDetail paymentRecDetail17 = new PaymentRecDetail(); + paymentRecDetail17.setReconciliationId(payment.getId()).setPayEnum(YbPayment.PRESELFPAY_AMT.getValue()) + .setPayLevelEnum(YbPayment.PRESELFPAY_AMT.getLevel()).setAmount(preselfpayAmt) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(clinicOrder2207Result.getAccountId()); + paymentRecDetails.add(paymentRecDetail17); + BigDecimal inscpScpAmt = clinicOrder2207Result.getInscpScpAmt(); + PaymentRecDetail paymentRecDetail18 = new PaymentRecDetail(); + paymentRecDetail18.setReconciliationId(payment.getId()).setPayEnum(YbPayment.INSCP_SCP_AMT.getValue()) + .setPayLevelEnum(YbPayment.INSCP_SCP_AMT.getLevel()).setAmount(inscpScpAmt) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(clinicOrder2207Result.getAccountId()); + paymentRecDetails.add(paymentRecDetail18); + BigDecimal actPayDedc = clinicOrder2207Result.getActPayDedc(); + PaymentRecDetail paymentRecDetail19 = new PaymentRecDetail(); + paymentRecDetail19.setReconciliationId(payment.getId()).setPayEnum(YbPayment.ACT_PAY_DEDC.getValue()) + .setPayLevelEnum(YbPayment.ACT_PAY_DEDC.getLevel()).setAmount(actPayDedc) + .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(clinicOrder2207Result.getAccountId()); + paymentRecDetails.add(paymentRecDetail19); + } + // 由于多次付款整合为一个payment,所以每次医保结算的基金详细支付需要去医保的表中查询 + // for (Clinic2206FundPaymentResult clinic2206FundPaymentResult : clinicOrder2207Result.getSetldetail()) { + // PaymentRecDetail detail = new PaymentRecDetail(); + // YbPayment ybPayment = YbPayment.getByValue(Integer.parseInt(clinic2206FundPaymentResult.getFundPayType())); + // detail.setReconciliationId(payment.getId()).setAccountId(paymentDetails.get(0).getAccountId()) + // .setAccountCode(AccountEnum).setPayEnum(ybPayment.getValue()).setPayLevelEnum(ybPayment.getLevel()) + // .setAmount(new BigDecimal(clinic2206FundPaymentResult.getFundPayamt().toString())) + // .setResultEnum(PaymentResult.PAID.getValue()); + // paymentRecDetails.add(detail); + // } + paymentRecDetailService.saveBatch(paymentRecDetails); + } + + @Override + public R regPrePay(OutpatientRegistrationAddParam outpatientRegistrationAddParam) { + + // // 患者ID + // Long patientId = outpatientRegistrationAddParam.getEncounterFormData().getPatientId(); + // // 服务项目ID + // Long serviceTypeId = outpatientRegistrationAddParam.getEncounterFormData().getServiceTypeId(); + // // 校验是否重复挂号(不包括退号) + // Integer num = outpatientRegistrationAppMapper.getNumByPatientIdAndOrganizationId(patientId, serviceTypeId, + // EncounterStatus.CANCELLED.getValue()); + // if (num > 0) { + // return R.fail(null, "当日已挂号此服务"); + // } + + Patient patient = iPatientService.getById(outpatientRegistrationAddParam.getEncounterFormData().getPatientId()); + if (patient == null) { + throw new ServiceException("未查询到患者信息"); + } + // 定义日期时间格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH-mm-ss.SSS+08"); + + // 获取当前日期时间的 0 点 + LocalDateTime startOfDay = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0); + String startOfDayStr = startOfDay.format(formatter); + + // 转换为 Date 类型 + Date startOfDayDate = Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant()); + + // 获取第二天日期时间的 0 点 + LocalDateTime startOfNextDay = startOfDay.plusDays(1); + String startOfNextDayStr = startOfNextDay.format(formatter); + + // 转换为 Date 类型 + Date startOfNextDayDate = Date.from(startOfNextDay.atZone(ZoneId.systemDefault()).toInstant()); + + // 查询科室信息 + Organization organization = + iOrganizationService.getById(outpatientRegistrationAddParam.getEncounterFormData().getOrganizationId()); + if (organization == null) { + throw new ServiceException("未查询到科室信息"); + } + + // 主治医生查询 + Practitioner doctor = null; + if (outpatientRegistrationAddParam.getEncounterParticipantFormData().getPractitionerId() == null) { + doctor = iPractitionerService.getById(organization.getDefDoctorId()); + } else { + doctor = iPractitionerService + .getById(outpatientRegistrationAddParam.getEncounterParticipantFormData().getPractitionerId()); + } + + if (doctor == null) { + throw new ServiceException("医保挂号未选择医生,并且没配置默认挂号医生"); + } + + // 校验当天是否已经医保挂号,若有则冲销 + List list = + iRegService.list(new LambdaQueryWrapper().eq(ClinicReg::getMdtrtCertNo, patient.getIdCard()) + .between(ClinicReg::getBegntime, startOfDayDate, startOfNextDayDate)); + for (ClinicReg clinicReg : list) { + if (organization.getYbNo().equals(clinicReg.getDeptCode()) + && doctor.getYbNo().equals(clinicReg.getDeptCode())) { + ybManager.cancelRegById(clinicReg.getId()); + } + } + + Clinic2206OrderOutput clinic2206OrderResult; + if ("1".equals(SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH)) + && !"0000".equals(outpatientRegistrationAddParam.getAccountFormData().getContractNo())) { + OutpatientRegistrationModel model = new OutpatientRegistrationModel(); + model.setMdtrtCertType(outpatientRegistrationAddParam.getYbMdtrtCertType()); + model.setBusiCardInfo(outpatientRegistrationAddParam.getBusiCardInfo()); + model.setPsnSetlWay(outpatientRegistrationAddParam.getYbPsnSetlWay()); + model.setTotalPrice(outpatientRegistrationAddParam.getChargeItemFormData().getTotalPrice()); + // 进入医保挂号及预结算流程 + clinic2206OrderResult = ybManager.getPreSettleInfo(model, patient, organization, doctor); + } else { + // 自费预结算流程 + clinic2206OrderResult = preSettleByZfForReg(outpatientRegistrationAddParam); + } + return R.ok(clinic2206OrderResult); + } + + private Clinic2206OrderOutput preSettleByZfForReg(OutpatientRegistrationAddParam outpatientRegistrationAddParam) { + // BigDecimal sumAmount = BigDecimal.ZERO; + ChargeItem chargeItem = new ChargeItem(); + BeanUtils.copyProperties(outpatientRegistrationAddParam.getChargeItemFormData(), chargeItem); + chargeItem.setContextEnum(ChargeItemContext.REGISTER.getValue());// 挂号 + + Clinic2206OrderOutput clinic2206OrderResult = this.initClinic2206OrderOutput(); + return clinic2206OrderResult + .setChrgBchno(assignSeqUtil.getSeqByDay(AssignSeqEnum.SF_CLINIC_ORDER.getPrefix(), 12)) + .setMedfeeSumamt(chargeItem.getTotalPrice()).setFulamtOwnpayAmt(chargeItem.getTotalPrice()) + .setPsnPartAmt(chargeItem.getTotalPrice()).setPsnCashPay(chargeItem.getTotalPrice()) + .setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.ENCOUNTER_NUM.getPrefix(), 8)); + } + + @Override + public R regPay(OutpatientRegistrationSettleParam outpatientRegistrationSettleParam, String chrgBchno, + List paymentDetails) { + + OutpatientRegistrationAddParam outpatientRegistrationAddParam = + outpatientRegistrationSettleParam.getOutpatientRegistrationAddParam(); + ChargeItem chargeItem = new ChargeItem(); + BeanUtils.copyProperties(outpatientRegistrationAddParam.getChargeItemFormData(), chargeItem); + chargeItem.setContextEnum(ChargeItemContext.REGISTER.getValue());// 挂号 + + YbPsnSetlWay finCategory = YbPsnSetlWay.getByValue(outpatientRegistrationAddParam.getYbPsnSetlWay()); + if (finCategory == null) { + throw new ServiceException("请选择收费方式"); + } + + // 就诊管理-表单数据 + EncounterFormData encounterFormData = outpatientRegistrationAddParam.getEncounterFormData(); + // 就诊位置管理-表单数据 + // EncounterLocationFormData encounterLocationFormData = + // outpatientRegistrationAddParam.getEncounterLocationFormData(); + // 就诊参数者管理-表单数据 + EncounterParticipantFormData encounterParticipantFormData = + outpatientRegistrationAddParam.getEncounterParticipantFormData(); + // 就诊账户管理-表单数据 + AccountFormData accountFormData = outpatientRegistrationAddParam.getAccountFormData(); + // 费用项管理-表单数据 + ChargeItemFormData chargeItemFormData = outpatientRegistrationAddParam.getChargeItemFormData(); + + // 患者ID + Long patientId = encounterFormData.getPatientId(); + // 服务项目ID + Long serviceTypeId = encounterFormData.getServiceTypeId(); + // 校验是否重复挂号(不包括退号) + Integer num = outpatientRegistrationAppMapper.getNumByPatientIdAndOrganizationId(patientId, serviceTypeId, + EncounterStatus.CANCELLED.getValue()); + if (num > 0) { + return R.fail(null, "当日已挂号此服务"); + } + + com.openhis.financial.model.PaymentResult paymentResult; + if ("1".equals(SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH)) + && !"0000".equals(outpatientRegistrationAddParam.getAccountFormData().getContractNo())) { + // 医保结算 + paymentResult = ybManager.settle(chrgBchno); + } else { + // 自费结算 + paymentResult = new com.openhis.financial.model.PaymentResult(); + paymentResult.setChrgBchno(chrgBchno).setMedfeeSumamt(chargeItem.getTotalPrice()) + .setFulamtOwnpayAmt(chargeItem.getTotalPrice()).setPsnPartAmt(chargeItem.getTotalPrice()) + .setPsnCashPay(chargeItem.getTotalPrice()).setSetlId("0000"); + } + + // 生成payment + // 处理时间 + Date setlTime = paymentResult.getSetlTime() == null ? new Date() : paymentResult.getSetlTime(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(setlTime); + calendar.add(Calendar.HOUR_OF_DAY, 24); + Date futureTime = calendar.getTime(); + + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + + // 保存就诊信息 + Encounter encounter = new Encounter(); + BeanUtils.copyProperties(encounterFormData, encounter); + encounter.setBusNo(outpatientRegistrationSettleParam.getBusNo()); + // 就诊ID + Long encounterId = iEncounterService.saveEncounterByRegister(encounter); + // 保存就诊位置信息 + // 挂号时不选Location了 + // encounterLocationFormData.setEncounterId(encounterId); + // EncounterLocation encounterLocation = new EncounterLocation(); + // BeanUtils.copyProperties(encounterLocationFormData, encounterLocation); + // iEncounterLocationService.saveEncounterLocationByRegister(encounterLocation); + // 保存就诊参数者信息 , 选了参与者才保存 + if (encounterParticipantFormData.getPractitionerId() != null) { + encounterParticipantFormData.setEncounterId(encounterId); + EncounterParticipant encounterParticipant = new EncounterParticipant(); + BeanUtils.copyProperties(encounterParticipantFormData, encounterParticipant); + encounterParticipant.setTypeCode(ParticipantType.REGISTRATION_DOCTOR.getCode()); // 挂号医生 + iEncounterParticipantService.saveEncounterParticipantByRegister(encounterParticipant); + } + // 保存就诊账户信息 + accountFormData.setEncounterId(encounterId); + Account account = new Account(); + BeanUtils.copyProperties(accountFormData, account); + account.setTypeCode(outpatientRegistrationAddParam.getYbMdtrtCertType() == null + ? YbMdtrtCertType.MDTRT_CERT_TYPE02.getValue() : outpatientRegistrationAddParam.getYbMdtrtCertType()); + // 账户ID + Long accountId = iAccountService.saveAccountByRegister(account); + // 2025/05/23 如果是医保挂号,创建两个ACCOUNT + if (!"0000".equals(outpatientRegistrationAddParam.getAccountFormData().getContractNo())) { + Account accountZf = new Account(); + BeanUtils.copyProperties(accountFormData, accountZf); + accountZf.setContractNo("0000").setEncounterFlag(0) + .setTypeCode(outpatientRegistrationAddParam.getYbMdtrtCertType() == null + ? YbMdtrtCertType.MDTRT_CERT_TYPE02.getValue() + : outpatientRegistrationAddParam.getYbMdtrtCertType()); + iAccountService.save(accountZf); + } + // 保存挂号费 + chargeItem.setEncounterId(encounterId); + chargeItem.setAccountId(accountId); + chargeItem.setEntererId(SecurityUtils.getLoginUser().getPractitionerId()); + chargeItem.setQuantityValue(1); + iChargeItemService.saveChargeItemByRegister(chargeItem); + // 处理诊疗费并返回对应的收费项目id集合用于医保结算 + List chargeItemIdList = this.handleActivityPrice(encounter, account.getId()); + chargeItemIdList.add(chargeItem.getId().toString()); + + String paymentNo; + if(StringUtils.isEmpty(paymentResult.getPaymentNo())){ + paymentNo = paymentResult.getPaymentNo(); + }else{ + // 统一生成业务流水 + paymentNo = assignSeqUtil.getSeqByDay(AssignSeqEnum.PAYMENT_NO.getPrefix(), 20); + } + + // 新增支付信息 + PaymentReconciliation payment = new PaymentReconciliation(); + payment.setStatusEnum(PaymentStatus.SUCCESS.getValue()).setPaymentNo(paymentNo) + .setYbSettleIds(paymentResult.getSetlId()).setPaymentEnum(PaymentType.PAY.getValue()) + .setPaymentReconciliationId(outpatientRegistrationAddParam.getEncounterFormData().getPatientId()) + .setPatientId(outpatientRegistrationAddParam.getEncounterFormData().getPatientId()) + .setKindEnum(PaymentKind.OUTPATIENT_CLINIC.getValue()).setEntererId(practitionerId) + .setPractitionerId(practitionerId).setOutcomeEnum(PaymentOutcome.PARTIAL.getCode()).setLocationId(-99l) + .setExpirationDate(futureTime).setBillDate(setlTime).setPrintCount(0) + .setChargeItemIds(chargeItemIdList.stream().map(String::valueOf).collect(Collectors.joining(","))) + .setTenderedAmount(chargeItem.getTotalPrice()).setDisplayAmount(paymentResult.getPsnPartAmt()) + .setReturnedAmount(new BigDecimal("0.0")).setEncounterId(encounter.getId()); + // 保存付款信息 + paymentReconciliationService.save(payment); + // 保存付款详情 + this.savePaymentDetail(paymentResult, payment, paymentDetails, accountId); + // 更改chargeItem的状态 + List chargeItemIds = + Arrays.stream(payment.getChargeItemIds().split(",")).map(Long::parseLong).collect(Collectors.toList()); + chargeItemService.updatePaymentStatus(chargeItemIds, ChargeItemStatus.BILLED.getValue()); + // 生成发票信息 + Invoice invoice = new Invoice(); + invoice.setPatientId(encounter.getPatientId()).setStatusEnum(InvoiceStatus.DRAFT) + .setReconciliationId(payment.getId()).setTypeCode(InvoiceType.ISSUING_INVOICES.getValue()) + .setChargeItemIds(payment.getChargeItemIds().toString()); + iInvoiceService.save(invoice); + return R.ok(payment, "收费成功"); + } + + /** + * 处理诊疗费 + * + * @param encounter 就诊信息 + * @param accountId 就诊账号id + */ + private List handleActivityPrice(Encounter encounter, Long accountId) { + // 号源id + String serviceTypeId = String.valueOf(encounter.getServiceTypeId()); + // 挂号对应科室id + Long organizationId = encounter.getOrganizationId(); + // 诊疗定义id集合 + List tmpActivityList = outpatientRegistrationAppMapper.getTmpActivityList(serviceTypeId, + CommonConstants.TableName.WOR_ACTIVITY_DEFINITION); + AdviceBaseDto adviceBaseDto; + ServiceRequest serviceRequest; + ChargeItem chargeItem; + List chargeItemIdList = new ArrayList<>(); + // 当前时间 + Date curDate = new Date(); + for (ActivityDeviceDto activityDeviceDto : tmpActivityList) { + adviceBaseDto = new AdviceBaseDto(); + Integer quantity = activityDeviceDto.getQuantity(); // 请求数量 + adviceBaseDto.setAdviceDefinitionId(activityDeviceDto.getDevActId()); + // 对应的诊疗医嘱信息 + AdviceBaseDto activityAdviceBaseDto = iDoctorStationAdviceAppService + .getAdviceBaseInfo(adviceBaseDto, null, null, null, organizationId, 1, 1, Whether.NO.getValue()) + .getRecords().get(0); + // 价格信息 + if (activityAdviceBaseDto != null) { + // 费用定价 + AdvicePriceDto advicePriceDto = activityAdviceBaseDto.getPriceList().get(0); + if (advicePriceDto != null) { + // 生成诊疗请求 + serviceRequest = new ServiceRequest(); + serviceRequest.setStatusEnum(RequestStatus.COMPLETED.getValue());// 请求状态,默认已完成 + serviceRequest.setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 10)); + serviceRequest.setQuantity(quantity); // 请求数量 + serviceRequest.setUnitCode(activityAdviceBaseDto.getUnitCode()); // 请求单位编码 + serviceRequest.setCategoryEnum(EncounterClass.AMB.getValue()); // 请求类型,默认-门诊 + serviceRequest.setActivityId(activityAdviceBaseDto.getAdviceDefinitionId());// 诊疗定义id + serviceRequest.setPatientId(encounter.getPatientId()); // 患者 + serviceRequest.setRequesterId(SecurityUtils.getLoginUser().getPractitionerId()); // 开方医生 + serviceRequest.setEncounterId(encounter.getId()); // 就诊id + serviceRequest.setAuthoredTime(curDate); // 请求签发时间 + serviceRequest.setOrgId(organizationId); // 执行科室 + iServiceRequestService.save(serviceRequest); + + // 生成账单 + chargeItem = new ChargeItem(); + chargeItem.setGenerateSourceEnum(ChargeItemGenerateSource.MEDICAL_ORDER_BINDING.getValue()); + chargeItem.setStatusEnum(ChargeItemStatus.PLANNED.getValue()); // 待收费 + chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(serviceRequest.getBusNo())); + chargeItem.setPatientId(encounter.getPatientId()); // 患者 + chargeItem.setContextEnum(ChargeItemContext.ACTIVITY.getValue()); // 类型 + chargeItem.setEncounterId(encounter.getId()); // 就诊id + chargeItem.setDefinitionId(advicePriceDto.getDefinitionId()); // 费用定价ID + chargeItem.setEntererId(SecurityUtils.getLoginUser().getPractitionerId());// 开立人ID + chargeItem.setEnteredDate(curDate); // 开立时间 + chargeItem.setServiceTable(CommonConstants.TableName.WOR_SERVICE_REQUEST);// 医疗服务类型 + chargeItem.setServiceId(serviceRequest.getId()); // 医疗服务ID + chargeItem.setProductTable(activityAdviceBaseDto.getAdviceTableName());// 产品所在表 + chargeItem.setProductId(activityAdviceBaseDto.getAdviceDefinitionId());// 收费项id + chargeItem.setAccountId(accountId);// 关联账户ID + + chargeItem.setQuantityValue(quantity); // 数量 + chargeItem.setQuantityUnit(activityAdviceBaseDto.getUnitCode()); // 单位 + chargeItem.setUnitPrice(advicePriceDto.getPrice()); // 单价 + // 计算总价,保留4位小数 + BigDecimal qty = new BigDecimal(quantity); + chargeItem.setTotalPrice(qty.multiply(advicePriceDto.getPrice()).setScale(4, RoundingMode.HALF_UP)); // 总价 + + iChargeItemService.save(chargeItem); + chargeItemIdList.add(chargeItem.getId().toString()); + } + + } + } + return chargeItemIdList; + } + + private List getChargeItems(List chargeItemIds) { + return chargeItemService.list(new LambdaQueryWrapper().in(ChargeItem::getId, chargeItemIds)); + } + + private PaymentedItemModel ConverterToPaymenItemModel(List diagList, ChargeItem chargeItem) { + PaymentedItemModel piModel = new PaymentedItemModel(); + piModel.setBusNo(chargeItem.getBusNo()); + + EncounterDiagnosis encounterDiagnosis; + Optional optional = + diagList.stream().filter(e -> e.getId().equals(chargeItem.getEncounterDiagnosisId())).findFirst(); + + if (optional.isPresent()) { + encounterDiagnosis = optional.get(); + } else { + throw new ServiceException( + "诊断信息与收费项的诊断信息未对应,错误信息:费用项" + chargeItem.getBusNo() + chargeItem.getEncounterDiagnosisId()); + } + piModel.setMedType(encounterDiagnosis.getMedTypeCode()); + piModel.setTotalPrice(chargeItem.getTotalPrice()); + piModel.setEncounterId(chargeItem.getEncounterId()); + piModel.setChargeItemId(chargeItem.getId()); + return piModel; + } + + @Override + public R unPrePayment(Long paymentId) { + + PaymentReconciliation byId = iPaymentReconciliationService.getById(paymentId); + + List paymentRecDetails = iPaymentRecDetailService + .list(new LambdaQueryWrapper().eq(PaymentRecDetail::getReconciliationId, paymentId)); + if (paymentRecDetails.isEmpty() || byId == null) { + throw new ServiceException("未查询到收费详情"); + } + List payTransNoList = + paymentRecDetails.stream().map(PaymentRecDetail::getPayTransNo).distinct().collect(Collectors.toList()); + + for (String s : payTransNoList) { + ybManager.unPreSettle(byId.getEncounterId(), s); + } + return R.ok("取消预结算"); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/ChargeBillController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/ChargeBillController.java new file mode 100644 index 00000000..7b643322 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/ChargeBillController.java @@ -0,0 +1,50 @@ +package com.openhis.web.paymentmanage.controller; + +import com.core.common.core.domain.R; +import com.openhis.web.paymentmanage.appservice.IChargeBillService; +import com.openhis.web.paymentmanage.dto.PaymentSettleDto; +import com.openhis.web.paymentmanage.dto.ReportVo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; + +/** + * 报表 + * + * @author SunJQ + * @date 2025-03-29 + */ +@RestController +@RequestMapping("/payment/bill") +@Slf4j +public class ChargeBillController { + + @Autowired + private IChargeBillService iChargeBillService; + + /** + * 单次结算账单 + * + * @param paymentId 付款实体 + */ + @PostMapping("/getDetail") + public R getDetail(Long paymentId) { + return R.ok(iChargeBillService.getDetail(paymentId)); + } + + + /** + * 日结算账单 + * + * @param startTime 结算参数 + * @param endTime 结算参数 + * @param entererId 结算参数 + */ + @GetMapping("/getTotal") + public R getTotal(@RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime, @RequestParam("entererId")Long entererId) { + return R.ok(iChargeBillService.getTotal(startTime,endTime,entererId)); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/EleInvoiceController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/EleInvoiceController.java new file mode 100644 index 00000000..8d9b67fb --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/EleInvoiceController.java @@ -0,0 +1,105 @@ +package com.openhis.web.paymentmanage.controller; + +import com.core.common.core.domain.R; +import com.core.common.exception.ServiceException; +import com.openhis.administration.domain.Invoice; +import com.openhis.common.enums.ybenums.YbEncounterClass; +import com.openhis.financial.domain.PaymentReconciliation; +import com.openhis.web.paymentmanage.appservice.IChargeBillService; +import com.openhis.web.paymentmanage.appservice.IEleInvoiceService; +import com.openhis.web.paymentmanage.dto.MakeInvoiceDto; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * 电子发票 + * + * @author yuxj + * @date 2025-05-28 + */ +@RestController +@RequestMapping("/invoice") +@Slf4j +public class EleInvoiceController { + + @Autowired + private IEleInvoiceService eleInvoiceService; + + @Autowired + private IChargeBillService iChargeBillService; + + /** + * 电子票据补开接口 + * + * @param makeInvoiceDto 发票开具dto + * @return + */ + @PostMapping("/invoiceReissue") + public R invoiceReissue(@RequestBody MakeInvoiceDto makeInvoiceDto) { + // 付款成功后,开具发票 + R result = eleInvoiceService.invoiceReissue(makeInvoiceDto.getPaymentId(), makeInvoiceDto.getEncounterId()); + if (result.getCode() == 200) { + if (result.getData() == YbEncounterClass.REG.getValue()) { + // 付款成功后,开具发票 + R eleResult = eleInvoiceService.invoiceRegMake(makeInvoiceDto.getPaymentId(), makeInvoiceDto.getEncounterId()); + if (eleResult.getCode() != 200) { + return R.ok(" 挂号电子发票开具失败 :" + eleResult.getMsg()); + } + } else if (result.getData() == YbEncounterClass.AMB.getValue()) { + // 付款成功后,开具发票 + R eleResult = eleInvoiceService.invoiceMZMake(makeInvoiceDto.getPaymentId(), makeInvoiceDto.getEncounterId()); + if (eleResult.getCode() != 200) { + return R.ok(" 门诊电子发票开具失败 :" + eleResult.getMsg()); + } + } else if (result.getData() == YbEncounterClass.IMP.getValue()) { + // 付款成功后,开具发票 + R eleResult = eleInvoiceService.invoiceZYMake(makeInvoiceDto.getPaymentId(), makeInvoiceDto.getEncounterId()); + if (eleResult.getCode() != 200) { + return R.ok(" 住院电子发票开具失败 :" + eleResult.getMsg()); + } + } else { + return R.ok("电子发票类型不明确!"); + } + } + Map detail = iChargeBillService.getDetail(makeInvoiceDto.getPaymentId()); + return R.ok(detail); + } + + /** + * 医疗电子票据红冲接口 + * + * @param paymentId 原付款id + * @param reason 取消理由 + * @return + */ + @PostMapping("/invoiceWriteoff") + public R invoiceWriteoff(Long paymentId, String reason) { + // 退款成功后,开具发票 + R eleResult = eleInvoiceService.invoiceWriteoff(paymentId, reason); + if (eleResult.getCode() != 200) { + return R.ok(" 电子票据红冲失败 :" + eleResult.getMsg()); + } + Map detail = iChargeBillService.getDetail(paymentId); + return R.ok(detail); + } + + /** + * 医疗电子票据红冲接口 + * + * @param invoiceId 原付款id + * @return + */ + @PutMapping("/invoiceOpen") + public R invoiceOpen(@RequestParam("invoiceId") String invoiceId) { + // 退款成功后,开具发票 + Invoice invoice = eleInvoiceService.getInvoiceById(Long.parseLong(invoiceId)); + if(invoice ==null){ + throw new ServiceException("未查询到发票信息"); + } + return R.ok(invoice.getPictureUrl()); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/PaymentReconciliationController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/PaymentReconciliationController.java new file mode 100644 index 00000000..f2da5c65 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/PaymentReconciliationController.java @@ -0,0 +1,181 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.controller; + +import java.util.Date; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; + +import com.openhis.web.paymentmanage.dto.PaymentVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import com.core.common.core.domain.R; +import com.openhis.financial.domain.PaymentReconciliation; +import com.openhis.web.chargemanage.dto.OutpatientRegistrationAddParam; +import com.openhis.web.chargemanage.dto.OutpatientRegistrationSettleParam; +import com.openhis.web.paymentmanage.appservice.IChargeBillService; +import com.openhis.web.paymentmanage.appservice.IEleInvoiceService; +import com.openhis.web.paymentmanage.appservice.IPaymentRecService; +import com.openhis.web.paymentmanage.dto.CancelPaymentDto; +import com.openhis.web.paymentmanage.dto.PaymentDto; +import com.openhis.web.paymentmanage.dto.PrePaymentDto; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * 付款管理 + * + * @author SunJQ + * @date 2025-03-29 + */ +@RestController +@RequestMapping("/payment/payment") +@Slf4j +@AllArgsConstructor +public class PaymentReconciliationController { + + @Autowired + private IPaymentRecService paymentReconciliationService; + + @Autowired + private IEleInvoiceService eleInvoiceService; + + @Autowired + private IChargeBillService iChargeBillService; + + /** + * 预付款 + * + * @param prePaymentDto 付款实体 + */ + @PostMapping("/precharge") + public R savePrePayment(@Validated @RequestBody PrePaymentDto prePaymentDto) { + return paymentReconciliationService.prePayment(prePaymentDto); + } + + @PostMapping("/unprecharge") + public R unPrePayment(Long encounterId) { + return paymentReconciliationService.unPrePayment(encounterId); + } + + /** + * 付款 + * + * @param paymentDto 付款实体 + */ + @PostMapping("/charge") + public R savePayment(@Validated @RequestBody PaymentDto paymentDto) { + R result = paymentReconciliationService.savePayment(paymentDto); + // 付款成功后,开具发票 + if (result.getCode() == 200) { + PaymentReconciliation paymentRecon = null; + if (PaymentReconciliation.class.isAssignableFrom(result.getData().getClass())) { + paymentRecon = (PaymentReconciliation)result.getData(); + } + R eleResult = eleInvoiceService.invoiceMZMake(paymentRecon.getId(), paymentDto.getEncounterId()); + if (eleResult.getCode() != 200) { + // 因收费成功前端需要关闭弹窗,此处信息仅用于提示所以返回ok + return R.ok(null, " 收费成功,电子发票开具失败 :" + eleResult.getMsg()); + } + Map detail = iChargeBillService.getDetail(paymentRecon.getId()); + return R.ok(detail); + } + return result; + } + + /** + * 取消付款 + * + * @param cancelPaymentDto 付款实体 + */ + @PostMapping("/uncharge") + public R cancelPayment(@RequestBody CancelPaymentDto cancelPaymentDto) { + R result = paymentReconciliationService.cancelPayment(cancelPaymentDto); + // 取消付款成功后,开具发票 + if (result.getCode() == 200) { + PaymentReconciliation paymentRecon = null; + if (PaymentReconciliation.class.isAssignableFrom(result.getData().getClass())) { + paymentRecon = (PaymentReconciliation)result.getData(); + } + R eleResult = eleInvoiceService.invoiceWriteoff(paymentRecon.getRelationId(), cancelPaymentDto.getReason()); + if (eleResult.getCode() != 200) { + // 因取消付款成功前端需要关闭弹窗,此处信息仅用于提示所以返回ok + return R.ok(null, " 取消付款成功,电子发票开具失败 :" + eleResult.getMsg()); + } + } + return result; + } + + /** + * 支付列表 + * + * @param searchKey + * @param pageNo + * @param pageSize + * @param request + * @return + */ + @GetMapping("/page") + public R paymentPage(@RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { + return R.ok(paymentReconciliationService.getPage(searchKey, pageNo, pageSize, request)); + } + + /** + * 支付详情 + * + * @param paymentDto + * @return + */ + @PostMapping("/detail") + public R paymentDetail(@RequestBody PaymentDto paymentDto) { + return R.ok(paymentReconciliationService.getDetail(paymentDto)); + } + + /** + * 挂号收费(挂号收费先医保挂号,收费成功后再本系统挂号) + * + * @param outpatientRegistrationAddParam + * @return + */ + @PostMapping("/reg-pre-pay") + public R regPrePay(@Valid @RequestBody OutpatientRegistrationAddParam outpatientRegistrationAddParam) { + return paymentReconciliationService.regPrePay(outpatientRegistrationAddParam); + } + + /** + * 挂号收费(挂号收费先医保挂号,收费成功后再本系统挂号) + * + * @param outpatientRegistrationAddParam + * @return + */ + @PostMapping("/reg-pay") + public R regPay(@Valid @RequestBody OutpatientRegistrationSettleParam outpatientRegistrationAddParam) { + R result = paymentReconciliationService.regPay(outpatientRegistrationAddParam, + outpatientRegistrationAddParam.getChrgBchno(), outpatientRegistrationAddParam.getPaymentDetails()); + // 付款成功后,开具发票 + if (result.getCode() == 200) { + PaymentReconciliation paymentRecon = null; + if (PaymentReconciliation.class.isAssignableFrom(result.getData().getClass())) { + paymentRecon = (PaymentReconciliation)result.getData(); + } + Long encounterId = paymentRecon.getEncounterId(); + R eleResult = eleInvoiceService.invoiceRegMake(paymentRecon.getId(), encounterId); + if (eleResult.getCode() != 200) { + // 因收费成功前端需要关闭弹窗,此处信息仅用于提示所以返回ok + return R.ok(null, " 收费成功,电子发票开具失败 :" + eleResult.getMsg()); + } + Map detail = iChargeBillService.getDetail(paymentRecon.getId()); + return R.ok(detail); + } + return result; + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/CancelPaymentDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/CancelPaymentDto.java new file mode 100644 index 00000000..0e34849f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/CancelPaymentDto.java @@ -0,0 +1,48 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.List; + +/** + * 退费入参 + * + * @author SunJQ + * @date 2025-05-08 + */ +@Data +@Accessors(chain = true) +public class CancelPaymentDto { + /** + * id + */ + private Long id; + + /** 收费项 */ + private List chargeItemIds;//收费时传收费的项目,退费时传退费的项目,2025/05/07去掉notEmpty的注解,与前端约定此字段必传,可以是空集合 + + /** 支付详细 */ + @NotEmpty + private List paymentDetails; + + /** 支付批次号 */ + private String chrgBchno;//医保预结算时返回,医保结算时必传,否则结算时一直预结算(弃用) + + private String ybMdtrtCertType;//社保卡/身份证/电子医保码 + + private String busiCardInfo;//社保卡号/身份证号/ecToken + + private String reason;//退款理由 + + private String setlId;//结算id +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/CancelRegPaymentDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/CancelRegPaymentDto.java new file mode 100644 index 00000000..e949b735 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/CancelRegPaymentDto.java @@ -0,0 +1,53 @@ +package com.openhis.web.paymentmanage.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.List; + +@Data +@Accessors(chain = true) +public class CancelRegPaymentDto { + /** + * id + */ + private Long id; + + /** 收款员 */ + private Long entererId; + + /** 支付的患者ID */ + @NotNull + private Long patientId; + + /** 应收金额 */ + private BigDecimal tenderedAmount; + + /** 找零金额 */ + private BigDecimal returnedAmount; + + /** 付款总额 */ + private BigDecimal displayAmount; + + /** 就诊ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterId; + + /** 收费项 */ + private List chargeItemIds;//收费时传收费的项目,退费时传退费的项目,2025/05/07去掉notEmpty的注解,与前端约定此字段必传,可以是空集合 + + /** 支付详细 */ + @NotEmpty + private List paymentDetails; + + /** 支付批次号 */ + private String chrgBchno;//医保预结算时返回,医保结算时必传,否则结算时一直预结算 + + private String reason;//退号理由 +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ChargeItemDetailVO.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ChargeItemDetailVO.java new file mode 100644 index 00000000..e848884c --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ChargeItemDetailVO.java @@ -0,0 +1,31 @@ +package com.openhis.web.paymentmanage.dto; + +import com.openhis.administration.domain.ChargeItem; +import com.openhis.common.annotation.Dict; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +@Data +@Accessors(chain = true) +public class ChargeItemDetailVO { + + @Dict(dictCode = "chrgitm_lv") + private String dirClass;//医保等级 + + private String chargeItemName;//医保等级 + + /** 数量 */ + private Integer quantityValue; + + /** 单位 */ + @Dict(dictCode = "prcunt_type") + private String quantityUnit; + + /** 单价 */ + private BigDecimal unitPrice; + + /** 总价 */ + private BigDecimal totalPrice; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ChargeItemDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ChargeItemDto.java new file mode 100644 index 00000000..68e640e1 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ChargeItemDto.java @@ -0,0 +1,22 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.dto; + +import com.openhis.administration.domain.ChargeItem; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 收费项目 + * + * @author SunJQ + * @date 2025-03-31 + */ +@Data +@Accessors(chain = true) +public class ChargeItemDto extends ChargeItem { + + private String typeCode; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ChargeItemGroupDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ChargeItemGroupDto.java new file mode 100644 index 00000000..ae1f4214 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ChargeItemGroupDto.java @@ -0,0 +1,30 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.dto; + +import com.openhis.administration.domain.ChargeItem; +import com.openhis.financial.domain.Contract; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * chargeItem分组 + * + * @author SunJQ + * @date 2025-05-08 + */ +@Data +@Accessors(chain = true) +public class ChargeItemGroupDto { + /** + * 合同 + */ + Contract contract; + /** + * 收费项 + */ + List chargeItemList; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/Clinic2206OrderResultDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/Clinic2206OrderResultDto.java new file mode 100644 index 00000000..d8dcf016 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/Clinic2206OrderResultDto.java @@ -0,0 +1,91 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 预结算结果集 + * + * @author SunJQ + * @date 2025-05-08 + */ +@Data +@Accessors(chain = true) +public class Clinic2206OrderResultDto { + + @JSONField(name = "medfee_sumamt") + private BigDecimal medfeeSumamt; // 医疗费总额 + + @JSONField(name = "fulamt_ownpay_amt") + private BigDecimal fulamtOwnpayAmt; // 全自费金额 + + @JSONField(name = "overlmt_selfpay") + private BigDecimal overlmtSelfpay; // 超限价自费费用 + + @JSONField(name = "preselfpay_amt") + private BigDecimal preselfpayAmt; // 先行自付金额 + + @JSONField(name = "inscp_scp_amt") + private BigDecimal inscpScpAmt; // 符合政策范围金额 + + @JSONField(name = "act_pay_dedc") + private BigDecimal actPayDedc; // 实际支付起付线 + + @JSONField(name = "hifp_pay") + private BigDecimal hifpPay; // 基本医疗保险统筹基金支出 + + @JSONField(name = "pool_prop_selfpay") + private BigDecimal poolPropSelfpay; // 基本医疗保险统筹基金支付比例 + + @JSONField(name = "cvlserv_pay") + private BigDecimal cvlservPay; // 公务员医疗补助资金支出 + + @JSONField(name = "hifes_pay") + private BigDecimal hifesPay; // 企业补充医疗保险基金支出 + + @JSONField(name = "hifmi_pay") + private BigDecimal hifmiPay; // 居民大病保险资金支出 + + @JSONField(name = "hifob_pay") + private BigDecimal hifobPay; // 职工大额医疗费用补助基金支出 + + @JSONField(name = "maf_pay") + private BigDecimal mafPay; // 医疗救助基金支出 + + @JSONField(name = "oth_pay") + private BigDecimal othPay; // 其他支出 + + @JSONField(name = "fund_pay_sumamt") + private BigDecimal fundPaySumamt; // 基金支付总额 + + @JSONField(name = "psn_part_amt") + private BigDecimal psnPartAmt; // 个人负担总金额 + + @JSONField(name = "acct_pay") + private BigDecimal acctPay; // 个人账户支出 + + @JSONField(name = "psn_cash_pay") + private BigDecimal psnCashPay; // 个人现金支出 + + @JSONField(name = "hosp_part_amt") + private BigDecimal hospPartAmt; // 医院负担金额 + + @JSONField(name = "hifdm_pay") + private BigDecimal hifdmPay; + + @JSONField(name = "acct_mulaid_pay") + private BigDecimal acctMulaidPay; // 个人账户共济支付金额 + + private String chrgBchno;//收费批次号 + + private Long accountId;//账户id + + private String medType;//医疗类型 +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/Clinic2207OrderResultDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/Clinic2207OrderResultDto.java new file mode 100644 index 00000000..7e2b9f42 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/Clinic2207OrderResultDto.java @@ -0,0 +1,16 @@ +package com.openhis.web.paymentmanage.dto; + +import com.openhis.yb.dto.Clinic2207OrderResult; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +@Getter +@Setter +@Accessors(chain = true) +public class Clinic2207OrderResultDto extends Clinic2207OrderResult { + + private Long accountId; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/Clinic2207OrderResultInfoDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/Clinic2207OrderResultInfoDto.java new file mode 100644 index 00000000..3099391d --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/Clinic2207OrderResultInfoDto.java @@ -0,0 +1,75 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.openhis.yb.dto.Clinic2206FundPaymentResult; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 结算基础信息 + * + * @author SunJQ + * @date 2025-05-08 + */ +@Data +@Accessors(chain = true) +public class Clinic2207OrderResultInfoDto { + // 主键字段 + @JSONField(name = "mdtrt_id") + private String mdtrtId; // 就诊ID + + @JSONField(name = "psn_no") + private String psnNo; // 人员编号 + + @JSONField(name = "psn_name") + private String psnName; // 人员姓名 + + @JSONField(name = "psn_cert_type") + private String psnCertType; // 人员证件类型 + + @JSONField(name = "certno") + private String certno; // 证件号码 + + @JSONField(name = "gend") + private String gend; // 性别 + + @JSONField(name = "naty") + private String naty; // 民族 + + @JSONField(name = "brdy") + private Date brdy; // 出生日期 + + @JSONField(name = "age") + private BigDecimal age; // 年龄 + + @JSONField(name = "insutype") + private String insutype; // 险种类型 + + @JSONField(name = "psn_type") + private String psnType; // 人员类别 + + @JSONField(name = "cvlserv_flag") + private String cvlservFlag; // 公务员标志 + + @JSONField(name = "setl_time") + private Date setlTime; // 结算时间 + + @JSONField(name = "mdtrt_cert_type") + private String mdtrtCertType; // 就诊凭证类型 + + @JSONField(name = "med_type") + private String medType; // 医疗类别 + + @JSONField(name = "medins_setl_id") + private String medinsSetlId; // 医药机构结算ID 存放发送方报文ID + + @JSONField(name = "setldetail") + private List setldetail;// 结算详细信息 +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/DispenseQuantityDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/DispenseQuantityDto.java new file mode 100644 index 00000000..a655367b --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/DispenseQuantityDto.java @@ -0,0 +1,28 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 发放数量 dto + * + * @author zwh + * @date 2025-06-04 + */ +@Data +@Accessors(chain = true) +public class DispenseQuantityDto { + + /* + * 本次结算应上传最小包装药品追溯码数量 + */ + private Integer minpacuntDrugTracCnt; + + /* + * 本次结算应上传耗材追溯码数量 + */ + private Integer mcsTracCnt; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoiceChargeDetailDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoiceChargeDetailDto.java new file mode 100644 index 00000000..4a7e0ddd --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoiceChargeDetailDto.java @@ -0,0 +1,37 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.dto; + +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.math.BigDecimal; + +/** + * 收费项目明细 + * + * @author yuxj + * @date 2025-04-22 + */ +@Data +@Accessors(chain = true) +public class EleInvoiceChargeDetailDto { + + // 医疗收费项目类别; + private String ybType; + // 数量 + private Integer number; + // 金额 + private BigDecimal amt; + // 自费金额 + private BigDecimal selfAmt; + // 收费项目名称 + private String chargeName; + // 收费项目代码 + private String chargeCode; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoiceListDetailDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoiceListDetailDto.java new file mode 100644 index 00000000..4f489639 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoiceListDetailDto.java @@ -0,0 +1,48 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.openhis.common.annotation.Dict; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +/** + * 清单项目明细 + * + * @author yuxj + * @date 2025-04-22 + */ +@Data +@Accessors(chain = true) +public class EleInvoiceListDetailDto { + // 明细流水号 + private Long listDetailNo; + // 医疗收费项目类别; + private String ybType; + // 药品编码 + private String code; + // 药品名称 + private String name; + // 医保项目编码 + private String ybCode; + // 计量单位 + private String unit; + // 单价 + private BigDecimal std; + // 数量 + private Integer number; + // 金额 + private BigDecimal amt; + // 自费金额 + private BigDecimal selfAmt; + // 医保药品分类 + private Integer medicalCareType; + // 收费项目名称 + private String chargeName; + // 收费项目代码 + private String chargeCode; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoicePatientInfoDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoicePatientInfoDto.java new file mode 100644 index 00000000..b924893d --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoicePatientInfoDto.java @@ -0,0 +1,75 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; + +/** + * 患者信息 + * + * @author yuxj + * @date 2025-04-22 + */ +@Data +@Accessors(chain = true) +public class EleInvoicePatientInfoDto { + // 患者id + private Long payerId; + + // 患者姓名 + private String payer; + + // 患者院内编码/病历号 + private String caseNumber; + + // 性别 + private Integer genderEnum; + private String genderEnum_enumText; + + // 生日 + private Date birthDate; + + // 电话 + private String tel; + + // 身份证号 + private String cardNo; + + // 就诊编码 + private String encounterBusNo; + + // 就诊日期 + private String consultationDate; + + // 住院日期 + private String inHospitalDate; + + // 出院日期 + private String outHospitalDate; + + // 就诊科室名称 + private String patientCategory; + + // 就诊科室编码 + private String patientCategoryCode; + + // 医疗机构类型 + private String medicalInstitution; + + // 医保区域编码 + private String medCareAreaCode; + + // 入院科室编码 + private String categoryCode; + // 入院科室名称 + private String category; + // 出院科室编码 + private String leaveCategoryCode; + // 出院科室名称 + private String leaveCategory; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoicePaymentInfoDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoicePaymentInfoDto.java new file mode 100644 index 00000000..3885d728 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoicePaymentInfoDto.java @@ -0,0 +1,65 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.dto; + +import java.math.BigDecimal; +import java.util.Date; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.apache.poi.hpsf.Decimal; + +/** + * 付款信息 + * + * @author yuxj + * @date 2025-04-22 + */ +@Data +@Accessors(chain = true) +public class EleInvoicePaymentInfoDto { + // 付款状态 + private Integer paymentStatus; + + // 发票id + private Long invoiceId; + + // 发票状态 + private Integer invoiceStatus; + + // 结算id + private Long paymentId; + + // 支付的业务标识符(用于显示,支付流水号) + private String busNo; + + // 收费员 + private String payee; + + // 开票总金额 + private BigDecimal totalAmt; + + // 个人现金支付金额 + private BigDecimal rmbCashPayAmount; + // 个人现金支付金额(微信) + private BigDecimal wxPayAmount; + // 个人现金支付金额(支付宝) + private BigDecimal aliPayAmount; + // 个人现金支付金额(银联) + private BigDecimal debitPayAmount; + // 个人医保账户支付 + private BigDecimal zhPayAmount; + // 基金支付总额 + private BigDecimal ybFundPayAmount; + // 其他(如医院负担金额) + private BigDecimal otherPayAmount; + // 账户共济支付金额 + private BigDecimal aelfYbZhGjValue; + + // 付款账单集合 + private String chargeItemIds; + + //结算时间 + private String billDate; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoiceResultDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoiceResultDto.java new file mode 100644 index 00000000..abe4a6a9 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/EleInvoiceResultDto.java @@ -0,0 +1,75 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.dto; + +import java.math.BigDecimal; + +import com.openhis.common.annotation.Dict; + +import com.openhis.common.enums.InvoiceStatus; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 返回信息 + * + * @author yuxj + * @date 2025-04-22 + */ +@Data +@Accessors(chain = true) +public class EleInvoiceResultDto { + + private Long id; + + /** 患者ID */ + private Long patientId; + + /** 状态 */ + private InvoiceStatus statusEnum; + + /** 类别 */ + private String typeCode; + + /** 取消原因 */ + private String cancelledReason; + + /** 收费项 */ + private String chargeItemIds; + + /** 发票净额总记 */ + private BigDecimal totalNet; + + /** 发票总计金额 */ + private BigDecimal totalGross; + + /** 付款详情 */ + private String paymentTerms; + + /** 账单批次号 */ + private String batchCode; + + /** 结算批次号 */ + private String qrCode; + + /** 发票编号 */ + private String busNo; + + /** 开票员 */ + private Long invoicingStaffId; + /** 电子票据代码 */ + private String billBatchCode; + /** 电子票据号码 */ + private String billNo; + /** 电子校验码 */ + private String random; + /** 电子票据生成时间 */ + private String billCreateTime; + /** 电子票据二维码图片数据 */ + private String billQrCode; + /** 电子票据H5页面URL */ + private String pictureUrl; + /** 电子票据外网H5页面URL */ + private String pictureNetUrl; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/InvoiceBaseInfoDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/InvoiceBaseInfoDto.java new file mode 100644 index 00000000..e2265fce --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/InvoiceBaseInfoDto.java @@ -0,0 +1,104 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 电子发票基础信息查询实体 + * + * @author SunJQ + * @date 2025-05-09 + */ +@Data +@Accessors(chain = true) +public class InvoiceBaseInfoDto { + //主键 + @TableId(type = IdType.ASSIGN_ID) + @JSONField(serialize=false) + private String id; + + private String setlId;//结算id + + private String mdtrtId; // 就诊ID + + private String psnName; // 人员姓名 + + private String psnCertType; // 人员证件类型 + + private String certno; // 证件号码 + + private String insutype; // 险种类型 + + private String psnType; // 人员类别 + + private String cvlservFlag; // 公务员标志 + + private Date setlTime; // 结算时间 + + private String mdtrtCertType; // 就诊凭证类型 + + private String medType; // 医疗类别 + + private BigDecimal medfeeSumamt; // 医疗费总额 + + private BigDecimal fulamtOwnpayAmt; // 全自费金额 + + private BigDecimal overlmtSelfpay; // 超限价自费费用 + + private BigDecimal preselfpayAmt; // 先行自付金额 + + private BigDecimal inscpScpAmt; // 符合政策范围金额 + + private BigDecimal actPayDedc; // 实际支付起付线 + + private BigDecimal hifpPay; // 基本医疗保险统筹基金支出 + + private BigDecimal poolPropSelfpay; // 基本医疗保险统筹基金支付比例 + + private BigDecimal cvlservPay; // 公务员医疗补助资金支出 + + private BigDecimal hifesPay; // 企业补充医疗保险基金支出 + + private BigDecimal hifmiPay; // 居民大病保险资金支出 + + private BigDecimal hifobPay; // 职工大额医疗费用补助基金支出 + + private BigDecimal mafPay; // 医疗救助基金支出 + + private BigDecimal othPay; // 其他支出 + + private BigDecimal fundPaySumamt; // 基金支付总额 + + private BigDecimal psnPartAmt; // 个人负担总金额 + + private BigDecimal acctPay; // 个人账户支出 + + private BigDecimal psnCashPay; // 个人现金支出 + + private BigDecimal hospPartAmt; // 医院负担金额 + + private BigDecimal balc; // 余额 + + private BigDecimal acctMulaidPay; // 个人账户共济支付金额 + + private String medinsSetlId; // 医药机构结算ID + + private String clrOptins; // 清算经办机构 + + private String clrWay; // 清算方式 + + private String clrType; // 清算类别 + + private BigDecimal hifdmPay; // 伤残人员医疗保障基金支出 + + private String paymentNo;//结算业务流水号 Payment与ClinicSettle是1:N +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/MakeInvoiceDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/MakeInvoiceDto.java new file mode 100644 index 00000000..568da516 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/MakeInvoiceDto.java @@ -0,0 +1,9 @@ +package com.openhis.web.paymentmanage.dto; + +import lombok.Data; + +@Data +public class MakeInvoiceDto { + private Long paymentId; + private Long encounterId; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentDetailDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentDetailDto.java new file mode 100644 index 00000000..1c0f11f5 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentDetailDto.java @@ -0,0 +1,34 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +/** + * 支付详情 + * + * @author SunJQ + * @date 2025-03-29 + */ +@Data +@Accessors(chain = true) +public class PaymentDetailDto { + + + /** 支付类型 */ + private Integer payEnum; + + /** 金额 */ + private BigDecimal amount; + + /** 找零 */ + private BigDecimal returnAmount; + + /** 交款 */ + private BigDecimal chargeAmount; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentDto.java new file mode 100644 index 00000000..b26fa49d --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentDto.java @@ -0,0 +1,48 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.dto; + +import java.math.BigDecimal; +import java.util.List; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 付款入参 + * + * @author SunJQ + * @date 2025-03-29 + */ +@Data +@Accessors(chain = true) +public class PaymentDto { + + /** + * 付款id + */ + private Long id;//paymentId + + /** 就诊ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterId; + + /** 收费项 */ + private List chargeItemIds;//收费时传收费的项目,退费时传退费的项目,2025/05/07去掉notEmpty的注解,与前端约定此字段必传,可以是空集合 + + /** 支付详细 */ + @NotEmpty + private List paymentDetails; + + private String ybMdtrtCertType;//社保卡/身份证/电子医保码 + + private String busiCardInfo;//社保卡号/身份证号/ecToken +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentSettleDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentSettleDto.java new file mode 100644 index 00000000..622efdb6 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentSettleDto.java @@ -0,0 +1,19 @@ +package com.openhis.web.paymentmanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; + +@Data +@Accessors(chain = true) +public class PaymentSettleDto { + + private Date endTime; + + private Date startTime; + + private Long enterId; + + private String contractNo; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentVO.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentVO.java new file mode 100644 index 00000000..539ce3dc --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentVO.java @@ -0,0 +1,92 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.dto; + +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 java.math.BigDecimal; +import java.util.Date; + +/** + * 映射对象 + * + * @author SunJQ + * @date 2025-05-06 + */ +@Data +public class PaymentVO { + + /** ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id;//付款id + + /** 状态 */ + @Dict(dictCode = "payment_status") + private Integer statusEnum; + private String statusEnum_dictText;//状态 + + /** 支付的业务标识符 */ + private String paymentNo;//业务流水 + + /** 付费/退款 */ + @Dict(dictCode = "payment_enum") + private String paymentEnum;//付费/退款 + private String paymentEnum_dictText; + + /** 收款员 */ + private Long entererId;//收款员 + + /** 收款员 */ + private String entererName;//收款员 + + /** 支付的患者ID */ + private Long patientId;//支付患者 + + /** 支付的患者 */ + private String patientName;//支付患者 + + /** 付款结果 */ + @Dict(dictCode = "outcome_enum") + private Integer outcomeEnum;//付款结果 + private String outcomeEnum_dictText; + + /** 应收金额 */ + private BigDecimal tenderedAmount;//应收 + + /** 找零金额 */ + private BigDecimal returnedAmount;//找零 + + /** 付款总额 */ + private BigDecimal displayAmount;//付款总额 + + /** 打印标识 */ + private Integer printCount;//打印标志 + + /** 结算时间 */ + private Date billDate;//结算时间 + + /** 发票编号 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long invoiceId;//发票id + + /** 发票no */ + private String invoiceNo;//发票no + + /** 发票no */ + private String encounterBusNo;//发票no + + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterId;//就诊id + private String encounterIdStr;//就诊id + + @JsonSerialize(using = ToStringSerializer.class) + private String paymentId;//付款id + + private String ybSettleIds;//医保付款id +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PrePaymentDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PrePaymentDto.java new file mode 100644 index 00000000..8288faf7 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PrePaymentDto.java @@ -0,0 +1,45 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.List; + +/** + * 预结算入参 + * + * @author SunJQ + * @date 2025-05-08 + */ +@Data +@Accessors(chain = true) +public class PrePaymentDto { + + /** 收款员 */ + private Long entererId; + + /** 支付的患者ID */ + @NotNull + private Long patientId; + + /** 就诊ID */ + private Long encounterId; + + /** 收费项 */ + @NotEmpty + private List chargeItemIds;// + + /** + * 类型 医保挂号时使用 + */ + private String ybMdtrtCertType;//社保卡/身份证/电子医保码 + + private String busiCardInfo;//社保卡号/身份证号/ecToken +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ReportVo.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ReportVo.java new file mode 100644 index 00000000..c4a388ba --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ReportVo.java @@ -0,0 +1,23 @@ +package com.openhis.web.paymentmanage.dto; + +import java.util.Date; + +import org.springframework.format.annotation.DateTimeFormat; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; + +@Data +public class ReportVo { + + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date startTime;// 开始时间 + + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + + private Date endTime;// 结束时间 + private Long entererId;// 收款员 +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ReturnBillVO.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ReturnBillVO.java new file mode 100644 index 00000000..2f7d508d --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ReturnBillVO.java @@ -0,0 +1,16 @@ +package com.openhis.web.paymentmanage.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 日结单返回实体 + */ +@Data +public class ReturnBillVO { + private String paymentNo;//收费单 + private BigDecimal totalAmount;//应收 + private BigDecimal paidAmount;//实收 + private String invoiceNo;//发票编号 +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/mapper/ChargeBillMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/mapper/ChargeBillMapper.java new file mode 100644 index 00000000..6724ed40 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/mapper/ChargeBillMapper.java @@ -0,0 +1,10 @@ +package com.openhis.web.paymentmanage.mapper; + +import com.openhis.web.paymentmanage.dto.ChargeItemDetailVO; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public interface ChargeBillMapper { +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/mapper/EleInvoiceMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/mapper/EleInvoiceMapper.java new file mode 100644 index 00000000..38995525 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/mapper/EleInvoiceMapper.java @@ -0,0 +1,79 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.mapper; + +import java.util.List; + +import com.openhis.web.paymentmanage.dto.EleInvoiceChargeDetailDto; +import com.openhis.web.paymentmanage.dto.EleInvoiceListDetailDto; + +import com.openhis.web.paymentmanage.dto.EleInvoicePatientInfoDto; +import com.openhis.web.paymentmanage.dto.EleInvoicePaymentInfoDto; +import org.apache.ibatis.annotations.Param; + +/** + * 电子发票 + * + * @author yuxj + * @date 2025-04-22 + */ +public interface EleInvoiceMapper { + + /** + * 获取付款信息 + * + * @param paymentId 付款ID + * @param encounterId 就诊ID + */ + EleInvoicePaymentInfoDto getPaymentInfo(@Param("paymentId") Long paymentId,@Param("encounterId") Long encounterId,@Param("selfYbZhPay") Integer selfYbZhPay, @Param("selfCashPay") Integer selfCashPay, + @Param("selfCashVxValue") Integer selfCashVxValue, @Param("selfCashAliValue") Integer selfCashAliValue, + @Param("selfCashUnionValue") Integer selfCashUnionValue, @Param("ybFundPay") Integer ybFundPay, @Param("otherPay") Integer otherPay, @Param("selfYbZhGjValue") Integer selfYbZhGjValue); + + /** + * 获取患者信息 + * + * @param encounterId 就诊ID + * @param encClassEnum 类别编码 + * @param orgClassEnum 类别编码 + */ + EleInvoicePatientInfoDto getPatientInfo(@Param("encounterId") Long encounterId, + @Param("encClassEnum") Integer encClassEnum, @Param("orgClassEnum") Integer orgClassEnum); + + /** + * 获取收费项目明细 + * + * @param encounterId 就诊ID + * @param ybTypeList 医疗收费项目类别 + * @param chrgitmType 字典类型 + * @param contrastType 对照类型 + */ + List getChargeDetail(@Param("encounterId") Long encounterId, + @Param("ybTypeList") List ybTypeList, @Param("chrgitmType") String chrgitmType, + @Param("contrastType") Integer contrastType,@Param("chargeItemIds") List chargeItemIds); + + /** + * 获取清单项目明细 + * + * @param encounterId 就诊ID + * @param ybTypeList 医疗收费项目类别 + * @param chrgitmType 字典类型 + * @param contrastType 对照类型 + */ + List getListDetail(@Param("encounterId") Long encounterId, + @Param("ybTypeList") List ybTypeList, @Param("chrgitmType") String chrgitmType, + @Param("contrastType") Integer contrastType,@Param("chargeItemIds") List chargeItemIds); + + /** + * 获取挂号清单项目明细 + * + * @param encounterId 就诊ID + * @param ybTypeList 医疗收费项目类别 + * @param chrgitmType 字典类型 + * @param contrastType 对照类型 + */ + List getRegListDetail(@Param("encounterId") Long encounterId, + @Param("ybTypeList") List ybTypeList, @Param("chrgitmType") String chrgitmType, + @Param("contrastType") Integer contrastType,@Param("chargeItemIds") List chargeItemIds); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/mapper/PaymentMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/mapper/PaymentMapper.java new file mode 100644 index 00000000..460f8e38 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/mapper/PaymentMapper.java @@ -0,0 +1,76 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.mapper; + +import java.util.List; + +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +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.paymentmanage.dto.ChargeItemDto; +import com.openhis.web.paymentmanage.dto.DispenseQuantityDto; +import com.openhis.web.paymentmanage.dto.PaymentDetailDto; +import com.openhis.web.paymentmanage.dto.PaymentVO; + +/** + * 付款Dao + * + * @author SunJQ + * @date 2025-03-29 + */ +@Repository +public interface PaymentMapper { + /** + * 付款列表 + * + * @param page + * @param queryWrapper + * @return + */ + IPage getPage(@org.apache.ibatis.annotations.Param("page") Page page, + @org.apache.ibatis.annotations.Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + /** + * 付款详情 + * + * @param id + * @return + */ + List getPaymentDetailList(@Param("id") Long id); + + /** + * 查找某一类型的chargeItem + * + * @param collect + * @param s + */ + List getChargeItemList(@Param("collect") String collect, @Param("s") String s); + + /** + * 查找chargeItem集合 + * + * @param collect + */ + List getChargeItems(@Param("collect") String collect); + + /** + * 根据就诊ID查找收费项 + * + * @param encounterId + * @return + */ + List getChargeItemListByEncounterId(Long encounterId); + + /** + * 查询发放数量 + * + * @param chargeItemIds 收费项ids + * @return 发放数量 + */ + DispenseQuantityDto selectDispenseQuantity(@Param("chargeItemIds") List chargeItemIds); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/util/MD5Util.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/util/MD5Util.java new file mode 100644 index 00000000..74f60543 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/paymentmanage/util/MD5Util.java @@ -0,0 +1,45 @@ +package com.openhis.web.paymentmanage.util; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +/** + * 加密工具类 + * + * @author + * + */ +public class MD5Util { + + /** + * md5加密 + * + * @param str + * @return + */ + public static String md5(String str) { + try { + MessageDigest md = MessageDigest.getInstance("MD5"); + md.update(str.getBytes()); + byte[] byteDigest = md.digest(); + int i; + StringBuffer buf = new StringBuffer(""); + for (int offset = 0; offset < byteDigest.length; offset++) { + i = byteDigest[offset]; + if (i < 0) + i += 256; + if (i < 16) + buf.append("0"); + buf.append(Integer.toHexString(i)); + } + // 32位加密 + return buf.toString(); + // 16位的加密 + // return buf.toString().substring(8, 24); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + return null; + } + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/appservice/IActivityDeviceAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/appservice/IActivityDeviceAppService.java new file mode 100644 index 00000000..44b50469 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/appservice/IActivityDeviceAppService.java @@ -0,0 +1,81 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.personalization.appservice; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.datadictionary.dto.DeviceManageSelParam; +import com.openhis.web.datadictionary.dto.DiagnosisTreatmentSelParam; +import com.openhis.web.personalization.dto.ActivityDeviceDto; + +/** + * 诊疗耗材绑定 service + * + * @author zwh + * @date 2025-04-09 + */ +public interface IActivityDeviceAppService { + + /** + * 查询诊疗项目分页列表 + * + * @param diagnosisTreatmentSelParam 查询条件 + * @param searchKey 查询条件-模糊查询 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request http请求 + * @return 诊疗项目分页列表 + */ + R getActivityPage(DiagnosisTreatmentSelParam diagnosisTreatmentSelParam, String searchKey, Integer pageNo, + Integer pageSize, HttpServletRequest request); + + /** + * 查询耗材分页列表 + * + * @param deviceManageSelParam 查询条件 + * @param searchKey 查询条件-模糊查询 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request http请求 + * @return 耗材分页列表 + */ + R getDevicePage(DeviceManageSelParam deviceManageSelParam, String searchKey, Integer pageNo, Integer pageSize, + HttpServletRequest request); + + /** + * 新增/编辑诊疗耗材绑定记录 + * + * @param activityDeviceDto 绑定信息 + * @return 操作结果 + */ + R addOrEditActivityDeviceBind(ActivityDeviceDto activityDeviceDto); + + /** + * 查询诊疗耗材绑定项目分页列表 + * + * @param activityDeviceDto 查询条件 + * @param searchKey 查询条件-模糊查询 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 诊疗耗材绑定项目分页列表 + */ + R getActivityDeviceBindPage(ActivityDeviceDto activityDeviceDto, String searchKey, Integer pageNo, + Integer pageSize); + + /** + * 删除绑定记录 + * + * @param bindId 绑定id + * @return 操作结果 + */ + R deleteActivityDeviceBind(Long bindId); + + /** + * 诊疗耗材绑定页面初始化 + * + * @return 初始化信息 + */ + R activityDeviceInit(); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/appservice/IOrderGroupAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/appservice/IOrderGroupAppService.java new file mode 100644 index 00000000..a9e53c26 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/appservice/IOrderGroupAppService.java @@ -0,0 +1,51 @@ +package com.openhis.web.personalization.appservice; + +import com.core.common.core.domain.R; +import com.openhis.web.personalization.dto.OrderGroupDto; + +/** + * 组套 service + * + * @author yangmo + * @date 2025-04-10 + */ +public interface IOrderGroupAppService { + + /** + * 查询组套信息 + * + * @return 组套信息 + */ + R getOrderGroup(OrderGroupDto orderGroupDto, String searchKey); + + /** + * 新增组套信息 + * + * @param orderGroupDto 组套信息 + * @return 操作结果 + */ + R addOrderGroup(OrderGroupDto orderGroupDto); + + /** + * 编辑组套信息 + * + * @param orderGroupDto 组套信息 + * @return 操作结果 + */ + R editOrderGroup(OrderGroupDto orderGroupDto); + + /** + * 删除组套信息 + * + * @param id 组套id + * @return 操作结果 + */ + R deleteOrderGroup(Long id); + + /** + * 组套页面初始化 + * + * @return 初始化信息 + */ + R init(); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/ActivityDeviceAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/ActivityDeviceAppServiceImpl.java new file mode 100644 index 00000000..c3ef34b6 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/ActivityDeviceAppServiceImpl.java @@ -0,0 +1,176 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.personalization.appservice.impl; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.core.common.core.domain.R; +import com.core.common.utils.MessageUtils; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.PublicationStatus; +import com.openhis.common.utils.EnumUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.template.domain.ActivityDevice; +import com.openhis.template.service.IActivityDeviceService; +import com.openhis.web.datadictionary.appservice.IDeviceManageAppService; +import com.openhis.web.datadictionary.appservice.IDiagTreatMAppService; +import com.openhis.web.datadictionary.dto.DeviceManageSelParam; +import com.openhis.web.datadictionary.dto.DiagnosisTreatmentSelParam; +import com.openhis.web.personalization.appservice.IActivityDeviceAppService; +import com.openhis.web.personalization.dto.ActivityDeviceDto; +import com.openhis.web.personalization.dto.ActivityDeviceInitDto; +import com.openhis.web.personalization.mapper.ActivityDeviceAppMapper; + +/** + * 诊疗耗材绑定 实现类 + * + * @author zwh + * @date 2025-04-09 + */ +@Service +public class ActivityDeviceAppServiceImpl implements IActivityDeviceAppService { + + @Resource + private IDiagTreatMAppService diagnosisTreatmentManageAppService; + @Resource + private IDeviceManageAppService deviceManageAppService; + @Resource + private IActivityDeviceService activityDeviceService; + @Resource + private ActivityDeviceAppMapper activityDeviceAppMapper; + + /** + * 诊疗耗材绑定页面初始化 + * + * @return 初始化信息 + */ + @Override + public R activityDeviceInit() { + ActivityDeviceInitDto initDto = new ActivityDeviceInitDto(); + // 状态 + List statusOptions = new ArrayList<>(); + statusOptions.add(new ActivityDeviceInitDto.statusOption(PublicationStatus.ACTIVE.getValue(), + PublicationStatus.ACTIVE.getInfo())); + statusOptions.add(new ActivityDeviceInitDto.statusOption(PublicationStatus.RETIRED.getValue(), + PublicationStatus.RETIRED.getInfo())); + initDto.setStatusOptions(statusOptions); + return R.ok(initDto); + } + + /** + * 查询诊疗项目分页列表 + * + * @param diagnosisTreatmentSelParam 查询条件 + * @param searchKey 查询条件-模糊查询 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request http请求 + * @return 诊疗项目分页列表 + */ + @Override + public R getActivityPage(DiagnosisTreatmentSelParam diagnosisTreatmentSelParam, String searchKey, Integer pageNo, + Integer pageSize, HttpServletRequest request) { + return diagnosisTreatmentManageAppService.getDiseaseTreatmentPage(diagnosisTreatmentSelParam, searchKey, pageNo, + pageSize, request); + } + + /** + * 查询耗材分页列表 + * + * @param deviceManageSelParam 查询条件 + * @param searchKey 查询条件-模糊查询 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request http请求 + * @return 耗材分页列表 + */ + @Override + public R getDevicePage(DeviceManageSelParam deviceManageSelParam, String searchKey, Integer pageNo, + Integer pageSize, HttpServletRequest request) { + // 只查询单次消耗类耗材 + deviceManageSelParam.setCategoryCode(CommonConstants.BusinessName.SINGLE_CONSUMPTION); + return deviceManageAppService.getDevicePage(deviceManageSelParam, searchKey, pageNo, pageSize, request); + } + + /** + * 新增/编辑诊疗耗材绑定记录 + * + * @param activityDeviceDto 绑定信息 + * @return 操作结果 + */ + @Override + public R addOrEditActivityDeviceBind(ActivityDeviceDto activityDeviceDto) { + ActivityDevice activityDevice = new ActivityDevice(); + if (activityDeviceDto.getId() != null) { + activityDeviceService.update(new LambdaUpdateWrapper() + .set(ActivityDevice::getQuantity, activityDeviceDto.getQuantity()) + .set(ActivityDevice::getRangeCode, activityDeviceDto.getRangeCode()) + .set(ActivityDevice::getStatusEnum, activityDeviceDto.getStatusEnum()) + .set(ActivityDevice::getDevActTable, activityDeviceDto.getDevActTable()) + .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()); + activityDeviceService.save(activityDevice); + } + return R.ok(activityDevice.getId().toString()); + } + + /** + * 查询诊疗耗材绑定项目分页列表 + * + * @param activityDeviceDto 查询条件 + * @param searchKey 查询条件-模糊查询 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 诊疗耗材绑定项目分页列表 + */ + @Override + public R getActivityDeviceBindPage(ActivityDeviceDto activityDeviceDto, String searchKey, Integer pageNo, + Integer pageSize) { + + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(activityDeviceDto, searchKey, + new HashSet<>(Arrays.asList(CommonConstants.FieldName.ActivityName, CommonConstants.FieldName.ActivityWbStr, + CommonConstants.FieldName.ActivityPyStr, CommonConstants.FieldName.DevicePyStr, + CommonConstants.FieldName.DeviceWbStr, CommonConstants.FieldName.DeviceName)), + null); + + // 查询诊疗耗材绑定项目分页列表 + Page activityDevicePage = + activityDeviceAppMapper.selectActivityDevicePage(new Page<>(pageNo, pageSize), queryWrapper); + activityDevicePage.getRecords().forEach(e -> { + // 状态 + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(PublicationStatus.class, e.getStatusEnum())); + }); + return R.ok(activityDevicePage); + } + + /** + * 删除绑定记录 + * + * @param bindId 绑定id + * @return 操作结果 + */ + @Override + public R deleteActivityDeviceBind(Long bindId) { + activityDeviceService.removeById(bindId); + return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00005, null)); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/IOrderGroupAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/IOrderGroupAppServiceImpl.java new file mode 100644 index 00000000..746eb659 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/IOrderGroupAppServiceImpl.java @@ -0,0 +1,157 @@ +package com.openhis.web.personalization.appservice.impl; + +import java.util.HashSet; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javax.annotation.Resource; + +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.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.OrderGroupType; +import com.openhis.common.utils.EnumUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.template.domain.OrderGroup; +import com.openhis.template.mapper.OrderGroupMapper; +import com.openhis.template.service.OrderGroupService; +import com.openhis.web.personalization.appservice.IOrderGroupAppService; +import com.openhis.web.personalization.dto.OrderGroupDto; +import com.openhis.web.personalization.dto.OrderGroupInitDto; +import com.openhis.web.personalization.mapper.OrderGroupAppMapper; + +/** + * 组套 实现类 + * + * @author yangmo + * @date 2025-04-10 + */ +@Service +public class IOrderGroupAppServiceImpl implements IOrderGroupAppService { + + @Resource + private OrderGroupAppMapper orderGroupAppMapper; + + @Resource + private OrderGroupMapper orderGroupMapper; + + @Resource + private OrderGroupService orderGroupService; + + /** + * 组套页面初始化 + * + * @return 初始化信息 + */ + @Override + public R init() { + OrderGroupInitDto initDto = new OrderGroupInitDto(); + // 状态 + List typeOptions = Stream.of(OrderGroupType.values()) + .map( + orderGroupType -> new OrderGroupInitDto.typeOption(orderGroupType.getValue(), orderGroupType.getInfo())) + .collect(Collectors.toList()); + initDto.setTypeOptions(typeOptions); + return R.ok(initDto); + } + + /** + * 查询组套信息 + * + * @return 组套信息 + */ + @Override + public R getOrderGroup(OrderGroupDto orderGroupDto, String searchKey) { + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(orderGroupDto, searchKey, + new HashSet<>(List.of(CommonConstants.FieldName.Name)), null); + + // 分页查询 + Page orderGroupPage = orderGroupAppMapper.selectOrderGroup(new Page<>(1, 50), queryWrapper); + orderGroupPage.getRecords().forEach(e -> { + // 组套类型 + e.setTypeEnum_enumText(EnumUtils.getInfoByValue(OrderGroupType.class, e.getTypeEnum())); + }); + return R.ok(orderGroupPage); + } + + /** + * 新增组套信息 + * + * @param orderGroupDto 组套信息 + * @return 操作结果 + */ + @Override + public R addOrderGroup(OrderGroupDto orderGroupDto) { + + boolean exists = orderGroupMapper + .exists(new LambdaQueryWrapper().eq(OrderGroup::getName, orderGroupDto.getName()) + .eq(OrderGroup::getRangeCode, orderGroupDto.getRangeCode())); + if (exists) { + return R.fail("该名称已存在"); + } + + // 组套 + OrderGroup orderGroup = new OrderGroup(); + // 新增组套信息 + orderGroup.setName(orderGroupDto.getName()).setTypeEnum(orderGroupDto.getTypeEnum()) + .setRangeCode(orderGroupDto.getRangeCode()) + .setPractitionerId(SecurityUtils.getLoginUser().getPractitionerId()) + .setOrgId(SecurityUtils.getLoginUser().getOrgId()).setGroupJson(orderGroupDto.getGroupJson()) + .setVersionNo(orderGroupDto.getVersionNo()); + boolean result = orderGroupService.save(orderGroup); + if (result) { + return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00002, null)); + } + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null)); + } + + /** + * 编辑组套信息 + * + * @param orderGroupDto 组套信息 + * @return 操作结果 + */ + @Override + public R editOrderGroup(OrderGroupDto orderGroupDto) { + boolean exists = orderGroupMapper + .exists(new LambdaQueryWrapper().eq(OrderGroup::getName, orderGroupDto.getName()) + .eq(OrderGroup::getRangeCode, orderGroupDto.getRangeCode()).ne(OrderGroup::getId, orderGroupDto)); + if (exists) { + return R.fail("该名称已存在"); + } + // 组套 + OrderGroup orderGroup = new OrderGroup(); + // 修改组套信息 + orderGroup.setId(orderGroup.getId()).setName(orderGroupDto.getName()).setTypeEnum(orderGroupDto.getTypeEnum()) + .setRangeCode(orderGroupDto.getRangeCode()) + .setPractitionerId(SecurityUtils.getLoginUser().getPractitionerId()) + .setOrgId(SecurityUtils.getLoginUser().getOrgId()).setGroupJson(orderGroupDto.getGroupJson()) + .setVersionNo(orderGroupDto.getVersionNo()); + boolean result = orderGroupService.saveOrUpdate(orderGroup); + if (result) { + return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00002, null)); + } + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null)); + } + + /** + * 删除组套信息 + * + * @param id 组套id + * @return 操作结果 + */ + @Override + public R deleteOrderGroup(Long id) { + orderGroupService.removeById(id); + return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00005, null)); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/controller/ActivityDeviceController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/controller/ActivityDeviceController.java new file mode 100644 index 00000000..1573838f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/controller/ActivityDeviceController.java @@ -0,0 +1,121 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.personalization.controller; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import com.core.common.core.domain.R; +import com.openhis.web.datadictionary.dto.DeviceManageSelParam; +import com.openhis.web.datadictionary.dto.DiagnosisTreatmentSelParam; +import com.openhis.web.personalization.appservice.IActivityDeviceAppService; +import com.openhis.web.personalization.dto.ActivityDeviceDto; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * 耗材诊疗绑定 controller + * + * @author zwh + * @date 2025-04-09 + */ +@RestController +@RequestMapping("/personalization/activity-device") +@Slf4j +@AllArgsConstructor +public class ActivityDeviceController { + + @Resource + private IActivityDeviceAppService activityDeviceAppService; + + /** + * 诊疗耗材绑定页面初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R activityDeviceInit() { + return activityDeviceAppService.activityDeviceInit(); + } + + /** + * 查询诊疗项目分页列表 + * + * @param diagnosisTreatmentSelParam 查询条件 + * @param searchKey 查询条件-模糊查询 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request http请求 + * @return 诊疗项目分页列表 + */ + @GetMapping("/activity-page") + public R getActivityPage(DiagnosisTreatmentSelParam diagnosisTreatmentSelParam, + @RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { + return activityDeviceAppService.getActivityPage(diagnosisTreatmentSelParam, searchKey, pageNo, pageSize, + request); + } + + /** + * 查询耗材分页列表 + * + * @param deviceManageSelParam 查询条件 + * @param searchKey 查询条件-模糊查询 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request http请求 + * @return 耗材分页列表 + */ + @GetMapping("/device-page") + public R getDevicePage(DeviceManageSelParam deviceManageSelParam, + @RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "50") Integer pageSize, HttpServletRequest request) { + return activityDeviceAppService.getDevicePage(deviceManageSelParam, searchKey, pageNo, pageSize, request); + } + + /** + * 查询诊疗耗材绑定项目分页列表 + * + * @param activityDeviceDto 查询条件 + * @param searchKey 查询条件-模糊查询 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 诊疗耗材绑定项目分页列表 + */ + @GetMapping("/activity-device") + public R getActivityDeviceBindPage(ActivityDeviceDto activityDeviceDto, + @RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return activityDeviceAppService.getActivityDeviceBindPage(activityDeviceDto, searchKey, pageNo, pageSize); + } + + /** + * 新增/编辑诊疗耗材绑定记录 + * + * @param activityDeviceDto 绑定信息 + * @return 操作结果 + */ + @PostMapping("/activity-device") + public R addOrEditActivityDeviceBind(@Validated @RequestBody ActivityDeviceDto activityDeviceDto) { + return activityDeviceAppService.addOrEditActivityDeviceBind(activityDeviceDto); + } + + /** + * 删除绑定记录 + * + * @param bindId 绑定id + * @return 操作结果 + */ + @DeleteMapping("/activity-device") + public R deleteActivityDeviceBind(Long bindId) { + return activityDeviceAppService.deleteActivityDeviceBind(bindId); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/controller/OrderGroupController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/controller/OrderGroupController.java new file mode 100644 index 00000000..aaf84215 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/controller/OrderGroupController.java @@ -0,0 +1,85 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.personalization.controller; + +import javax.annotation.Resource; + +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import com.core.common.core.domain.R; +import com.openhis.web.personalization.appservice.IOrderGroupAppService; +import com.openhis.web.personalization.dto.OrderGroupDto; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * 组套 controller + * + * @author yangmo + * @date 2025-04-10 + */ +@RestController +@RequestMapping("/personalization/order-group") +@Slf4j +@AllArgsConstructor +public class OrderGroupController { + + @Resource + private IOrderGroupAppService orderGroupAppService; + + /** + * 组套页面初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R init() { + return orderGroupAppService.init(); + } + + /** + * 查询组套信息 + * + * @return 组套信息 + */ + @GetMapping("/order-group") + public R getOrderGroup(OrderGroupDto orderGroupDto, String searchKey) { + return orderGroupAppService.getOrderGroup(orderGroupDto, searchKey); + } + + /** + * 新增组套信息 + * + * @param orderGroupDto 组套信息 + * @return 操作结果 + */ + @PostMapping("/order-group") + public R addOrderGroup(@Validated @RequestBody OrderGroupDto orderGroupDto) { + return orderGroupAppService.addOrderGroup(orderGroupDto); + } + + /** + * 编辑组套信息 + * + * @param orderGroupDto 组套信息 + * @return 操作结果 + */ + @PutMapping("/order-group") + public R editOrderGroup(@Validated @RequestBody OrderGroupDto orderGroupDto) { + return orderGroupAppService.editOrderGroup(orderGroupDto); + } + + /** + * 删除组套信息 + * + * @param id 组套id + * @return 操作结果 + */ + @DeleteMapping("/order-group") + public R deleteOrderGroup(@RequestParam Long id) { + return orderGroupAppService.deleteOrderGroup(id); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/dto/ActivityDeviceDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/dto/ActivityDeviceDto.java new file mode 100644 index 00000000..26a60560 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/dto/ActivityDeviceDto.java @@ -0,0 +1,73 @@ +/* + * 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 com.openhis.common.annotation.Dict; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 耗材诊疗绑定 dto + * + * @author zwh + * @date 2025-04-09 + */ +@Data +@Accessors(chain = true) +public class ActivityDeviceDto { + + /** ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 范围 */ + @Dict(dictCode = "use_range") + private String rangeCode; + private String rangeCode_dictText; + + /** 类型 */ + @Dict(dictCode = "bind_type") + private String typeCode; + private String typeCode_dictText; + + /** 诊疗/用法/号源的编码(id) */ + private String itemNo; + + /** 耗材/诊疗id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long devActId; + + /** + * 耗材/诊疗表名 + */ + private String devActTable; + + /** 耗材名称 */ + private String deviceName; + + /** 耗材五笔码 */ + private String devicePyStr; + + /** 耗材拼音码 */ + private String deviceWbStr; + + /** 诊疗名称 */ + private String activityName; + + /** 诊疗拼音码 */ + private String activityPyStr; + + /** 诊疗五笔码 */ + private String activityWbStr; + + /** 耗材数量 */ + private Integer quantity; + + /** 状态 */ + private Integer statusEnum; + private String statusEnum_enumText; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/dto/ActivityDeviceInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/dto/ActivityDeviceInitDto.java new file mode 100644 index 00000000..787dfbaa --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/dto/ActivityDeviceInitDto.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; + +/** + * 诊疗耗材绑定初始化 + * + * @author zwh + * @date 2025-04-09 + */ +@Data +@Accessors(chain = true) +public class ActivityDeviceInitDto { + + private List statusOptions; + + /** + * 状态 + */ + @Data + public static class statusOption { + private Integer value; + private String info; + + public statusOption(Integer value, String info) { + this.value = value; + this.info = info; + } + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrderGroupDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrderGroupDto.java new file mode 100644 index 00000000..b1f20deb --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrderGroupDto.java @@ -0,0 +1,50 @@ +/* + * 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 com.openhis.common.annotation.Dict; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 组套 dto + * + * @author yangmo + * @date 2025-04-10 + */ +@Data +@Accessors(chain = true) +public class OrderGroupDto { + + /** ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 名称 */ + private String name; + + /** 类型 */ + private Integer typeEnum; + private String typeEnum_enumText; + + /** 范围 */ + @Dict(dictCode = "use_range") + private String rangeCode; + private String rangeCode_dictText; + + /** 参与者ID */ + private Long practitionerId; + + /** 机构ID */ + private Long orgId; + + /** 组套信息 */ + private String groupJson; + + /** 版本号 */ + private String versionNo; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrderGroupInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrderGroupInitDto.java new file mode 100644 index 00000000..439ab26b --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrderGroupInitDto.java @@ -0,0 +1,40 @@ +/* + * 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 yangmo + * @date 2025-04-10 + */ +@Data +@Accessors(chain = true) +public class OrderGroupInitDto { + + /** + * 类型 + */ + private List typeOptions; + + /** + * 类型 + */ + @Data + public static class typeOption { + private Integer value; + private String info; + + public typeOption(Integer value, String info) { + this.value = value; + this.info = info; + } + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/mapper/ActivityDeviceAppMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/mapper/ActivityDeviceAppMapper.java new file mode 100644 index 00000000..285ca073 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/mapper/ActivityDeviceAppMapper.java @@ -0,0 +1,32 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.personalization.mapper; + +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; +import com.openhis.web.personalization.dto.ActivityDeviceDto; + +/** + * 诊疗耗材绑定 appMapper + * + * @author zwh + * @date 2025-04-09 + */ +@Repository +public interface ActivityDeviceAppMapper { + + /** + * 诊疗耗材绑定分页列表 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @return 诊疗耗材绑定分页列表 + */ + Page selectActivityDevicePage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/mapper/OrderGroupAppMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/mapper/OrderGroupAppMapper.java new file mode 100644 index 00000000..cf3db5c3 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/personalization/mapper/OrderGroupAppMapper.java @@ -0,0 +1,32 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.personalization.mapper; + +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; +import com.openhis.web.personalization.dto.OrderGroupDto; + +/** + * 组套 Mapper + * + * @author zwh + * @date 2025-05-16 + */ +@Repository +public interface OrderGroupAppMapper { + + /** + * 组套分页列表 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @return 组套分页列表 + */ + Page selectOrderGroup(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IChineseMedicineDispenseAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IChineseMedicineDispenseAppService.java new file mode 100644 index 00000000..8e06fd86 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IChineseMedicineDispenseAppService.java @@ -0,0 +1,69 @@ +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/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicationDetailsAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicationDetailsAppService.java new file mode 100644 index 00000000..2eff34f5 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicationDetailsAppService.java @@ -0,0 +1,75 @@ +package com.openhis.web.pharmacymanage.appservice; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.pharmacymanage.dto.MedDetailsSearchParam; + +/** + * 发药明细 应用实现接口 + * + * @author yuanzs + * @date 2025/4/14 + */ +public interface IMedicationDetailsAppService { + + /** + * 页面初始化 + * + * @return 初始化信息 + */ + R init(); + + /** + * 门诊人员发药明细表 + * + * @param medDetailsSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 门诊发药明细表 + */ + R getAmbPractitionerDetailPage(MedDetailsSearchParam medDetailsSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request); + + /** + * 门诊发药明细流水账 + * + * @param medDetailsSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 门诊发药明细流水账 + */ + R getAmbMedicationDispenseDetailPage(MedDetailsSearchParam medDetailsSearchParam, Integer pageNo, + Integer pageSize, String searchKey, HttpServletRequest request); + +// /** +// * 门诊/住院人员发药明细帐、住院耗材记账领用明细 +// * +// * @param medDetailsSearchParam 查询条件 +// * @param pageNo 当前页码 +// * @param pageSize 查询条数 +// * @param searchKey 模糊查询关键字 +// * @param request 请求数据 +// * @return 门诊/住院人员发药明细、住院耗材记账领用明细分页列表 +// */ +// R getMedDetailedAccountPage(MedDetailsSearchParam medDetailsSearchParam, Integer pageNo, Integer pageSize, +// String searchKey, HttpServletRequest request); +// +// /** +// * 门诊/住院发药明细流水帐、住院耗材记账领用流水账 +// * +// * @param medDetailsSearchParam 查询条件 +// * @param pageNo 当前页码 +// * @param pageSize 查询条数 +// * @param searchKey 模糊查询关键字 +// * @param request 请求数据 +// * @return 门诊/住院发药明细流水帐、住院耗材记账领用流水账分页列表 +// */ +// R getMedRunningAccountPage(MedDetailsSearchParam medDetailsSearchParam, Integer pageNo, Integer pageSize, +// String searchKey, HttpServletRequest request); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicineConsumablesDispenseAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicineConsumablesDispenseAppService.java new file mode 100644 index 00000000..ff10f7f1 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicineConsumablesDispenseAppService.java @@ -0,0 +1,69 @@ +//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 IMedicineConsumablesDispenseAppService { +// +// /** +// * 页面初始化 +// * +// * @return 初始化信息 +// */ +// R init(); +// +// /** +// * 分页查询就诊病人列表 +// * +// * @param encounterInfoSearchParam 查询条件 +// * @param pageNo 当前页码 +// * @param pageSize 查询条数 +// * @param request 请求数据 +// * @return 就诊病人分页列表 +// */ +// R getEncounterInfoListPage(EncounterInfoSearchParam encounterInfoSearchParam, 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 consumablesDispense(String prescriptionNo); +// +// /** +// * 处方单作废 +// * +// * @param prescriptionNo 处方号 +// * @param notPerformedReasonEnum 未发药原因 +// * @return 处理结果 +// */ +// R consumablesCancel(String prescriptionNo, Integer notPerformedReasonEnum); +//} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IPendingMedicationDetailsAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IPendingMedicationDetailsAppService.java new file mode 100644 index 00000000..f3fac197 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IPendingMedicationDetailsAppService.java @@ -0,0 +1,29 @@ +package com.openhis.web.pharmacymanage.appservice; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.pharmacymanage.dto.PendingMedicationSearchParam; + +/** + * 待发药明细 应用实现接口 + * + * @author yuanzs + * @date 2025/4/14 + */ +public interface IPendingMedicationDetailsAppService { + + /** + * 分页查询待发药明细 + * + * @param pendingMedicationSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 待发药明细 + */ + R getPage(PendingMedicationSearchParam pendingMedicationSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/ReturnMedicineAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/ReturnMedicineAppService.java new file mode 100644 index 00000000..cb0e6a46 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/ReturnMedicineAppService.java @@ -0,0 +1,55 @@ +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.EncounterInfoPageDto; +import com.openhis.web.pharmacymanage.dto.ReturnMedicineDto; + +/** + * 退药管理 应用实现接口 + * + * @author yangmo + * @date 2025/4/4 + */ +public interface ReturnMedicineAppService { + + /** + * 页面初始化 + * + * @return 初始化信息 + */ + R init(); + + /** + * 查询退药患者分页列表 + * + * @param encounterInfoPageDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request 请求数据 + * @return 退药患者分页列表 + */ + R getReturnMedicinePatientPage(EncounterInfoPageDto encounterInfoPageDto, String searchKey, Integer pageNo, + Integer pageSize, HttpServletRequest request); + + /** + * 查询退药信息 + * + * @param encounterId 就诊ID + * @param refundStatus 退药id + * @return 退药信息 + */ + R getReturnMedicineInfo(Long encounterId, Integer refundStatus); + + /** + * 退药处理 + * + * @param medicineReturnList 退药清单 + * @return 处理结果 + */ + R medicineReturn(List medicineReturnList); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IChineseMedicineDispenseAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IChineseMedicineDispenseAppServiceImpl.java new file mode 100644 index 00000000..a8862749 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IChineseMedicineDispenseAppServiceImpl.java @@ -0,0 +1,329 @@ +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/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IMedicineConsumablesDispenseAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IMedicineConsumablesDispenseAppServiceImpl.java new file mode 100644 index 00000000..ab9726d1 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/IMedicineConsumablesDispenseAppServiceImpl.java @@ -0,0 +1,326 @@ +/* +package com.openhis.web.pharmacymanage.appservice.impl; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javax.servlet.http.HttpServletRequest; + +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.web.pharmacymanage.appservice.IMedicineConsumablesDispenseAppService; +import com.openhis.web.pharmacymanage.dto.*; +import com.openhis.web.pharmacymanage.mapper.MedicineConsumablesDispenseMapper; +import com.openhis.workflow.domain.InventoryItem; +import com.openhis.workflow.service.IInventoryItemService; + +*/ +/** + * 耗材发放 应用实现类 + * + * @author wangyang + * @date 2025/3/14 + *//* + +@Service +public class IMedicineConsumablesDispenseAppServiceImpl implements IMedicineConsumablesDispenseAppService { + + @Autowired + private IOrganizationService iOrganizationService; + + @Autowired + IConsumablesDispenseService iConsumablesDispenseService; + + @Autowired + IInventoryItemService iInventoryItemService; + + @Autowired + MedicineConsumablesDispenseMapper medicineConsumablesDispenseMapper; + + */ +/** + * 获取页面初始化信息 + * + * @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 pageNo 当前页码 + * @param pageSize 查询条数 + * @param request 请求数据 + * @return 就诊病人列表 + *//* + + @Override + public R getEncounterInfoListPage(EncounterInfoSearchParam encounterInfoSearchParam, Integer pageNo, + Integer pageSize, HttpServletRequest request) { + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(encounterInfoSearchParam, null, null, request); + + // 查询就诊病人列表 + Page encounterInfoPageDto = + medicineConsumablesDispenseMapper.selectEncounterInfoListPage(new Page<>(pageNo, pageSize), queryWrapper); + + // 个别项目设定 + encounterInfoPageDto.getRecords().forEach(prescriptionPatientInfoDto -> { + // 性别 + prescriptionPatientInfoDto.setGenderEnum_enumText( + EnumUtils.getInfoByValue(AdministrativeGender.class, prescriptionPatientInfoDto.getGenderEnum())); + }); + return R.ok(encounterInfoPageDto); + } + + */ +/** + * 查询处方单列表 + * + * @param encounterId 就诊号 + * @return 处方单列表 + *//* + + @Override + public R getPrescriptionInfo(Long encounterId) { + + // 患者基本信息查询 + PrescriptionPatientInfoDto prescriptionPatientInfoDto = + medicineConsumablesDispenseMapper.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 = + medicineConsumablesDispenseMapper.selectPrescriptionConsumablesInfoList(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 consumablesDispenseList = new ArrayList<>(); + boolean iConsumablesDispenseUpdFlg = true; + + // 配药人检查 + if (!preparerId.equals(SecurityUtils.getLoginUser().getPractitionerId())) { + // 获取器材待发放信息 + List dispenseInventoryList = + medicineConsumablesDispenseMapper.selectDispenseInventoryInfoByPrescriptionNo(prescriptionNo, + CommonConstants.TableName.ADM_DEVICE_DEFINITION); + if (!dispenseInventoryList.isEmpty()) { + + ConsumablesDispense consumablesDispense; + + for (DispenseInventoryDto dispenseInventoryDto : dispenseInventoryList) { + + // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量) + BigDecimal quantity = dispenseInventoryDto.getInventoryQuantity().subtract(dispenseInventoryDto + .getPartPercent().multiply(new BigDecimal(dispenseInventoryDto.getDispenseQuantity()))); + // 库存数量判定 + if (quantity.compareTo(BigDecimal.ZERO) < 0) { + // 库存数量不足 + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Inventory.M00002, null)); + } + + // 器材发放表项目设定 + consumablesDispense = new ConsumablesDispense(); + // id + consumablesDispense.setId(dispenseInventoryDto.getDispenseId()); + // 器材发放状态 + consumablesDispense.setStatusEnum(DispenseStatus.PREPARED.getValue()); + // 配药时间 + consumablesDispense.setPrepareTime(DateUtils.getNowDate()); + consumablesDispenseList.add(consumablesDispense); + + } + // 药品发放更新 + iConsumablesDispenseUpdFlg = iConsumablesDispenseService.updateBatchById(consumablesDispenseList); + + return iConsumablesDispenseUpdFlg + ? 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 consumablesDispense(String prescriptionNo) { + + List consumablesDispenseList = new ArrayList<>(); + List inventoryItemList = new ArrayList<>(); + boolean iConsumablesDispenseUpdFlg = true; + boolean iInventoryItemUpdFlg = true; + + // 获取器材待发放和库存信息 + List dispenseInventoryList = + medicineConsumablesDispenseMapper.selectDispenseInventoryInfoByPrescriptionNo(prescriptionNo, + CommonConstants.TableName.ADM_DEVICE_DEFINITION); + if (!dispenseInventoryList.isEmpty()) { + + ConsumablesDispense consumablesDispense; + InventoryItem inventoryItem; + + for (DispenseInventoryDto dispenseInventoryDto : dispenseInventoryList) { + + // 器材发放表项目设定 + consumablesDispense = new ConsumablesDispense(); + // id + consumablesDispense.setId(dispenseInventoryDto.getDispenseId()); + // 器材发放状态 + consumablesDispense.setStatusEnum(DispenseStatus.COMPLETED.getValue()); + // 发药人 + consumablesDispense.setPerformerId(SecurityUtils.getLoginUser().getPractitionerId()); + // 已发药数量 + consumablesDispense.setDispenseQuantity(dispenseInventoryDto.getDispenseQuantity()); + // 发药时间 + consumablesDispense.setDispenseTime(DateUtils.getNowDate()); + consumablesDispenseList.add(consumablesDispense); + + // 库存表项目设定 + inventoryItem = new InventoryItem(); + + // id + inventoryItem.setId(dispenseInventoryDto.getInventoryId()); + // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量) + inventoryItem.setQuantity(dispenseInventoryDto.getInventoryQuantity().subtract(dispenseInventoryDto + .getPartPercent().multiply(new BigDecimal(dispenseInventoryDto.getDispenseQuantity())))); + + inventoryItemList.add(inventoryItem); + } + // 药品发放更新 + iConsumablesDispenseUpdFlg = iConsumablesDispenseService.updateBatchById(consumablesDispenseList); + // 库存更新 + iInventoryItemUpdFlg = iInventoryItemService.updateBatchById(inventoryItemList); + + return iConsumablesDispenseUpdFlg && 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 consumablesCancel(String prescriptionNo, Integer notPerformedReasonEnum) { + + List consumablesDispenseList = new ArrayList<>(); + boolean iConsumablesDispenseUpdFlg = true; + + // 获取器材待发放记录 + List dispenseInventoryList = + medicineConsumablesDispenseMapper.selectDispenseInventoryInfoByPrescriptionNo(prescriptionNo, + CommonConstants.TableName.ADM_DEVICE_DEFINITION); + if (!dispenseInventoryList.isEmpty()) { + ConsumablesDispense consumablesDispense; + for (DispenseInventoryDto dispenseInventoryDto : dispenseInventoryList) { + + // 器材发放表项目设定 + consumablesDispense = new ConsumablesDispense(); + // id + consumablesDispense.setId(dispenseInventoryDto.getDispenseId()); + // 器材发放状态 + consumablesDispense.setStatusEnum(DispenseStatus.DECLINED.getValue()); + // 未发药原因 + consumablesDispense.setNotPerformedReasonEnum(notPerformedReasonEnum); + // 发药人 + consumablesDispense.setPerformerId(SecurityUtils.getLoginUser().getPractitionerId()); + consumablesDispenseList.add(consumablesDispense); + } + // 药品发放更新 + iConsumablesDispenseUpdFlg = iConsumablesDispenseService.updateBatchById(consumablesDispenseList); + } + return iConsumablesDispenseUpdFlg + ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null)); + } +} +*/ diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicationDetailsAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicationDetailsAppServiceImpl.java new file mode 100644 index 00000000..01c9b00e --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicationDetailsAppServiceImpl.java @@ -0,0 +1,120 @@ +package com.openhis.web.pharmacymanage.appservice.impl; + +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.administration.domain.Practitioner; +import com.openhis.administration.service.IPractitionerService; +import com.openhis.common.enums.*; +import com.openhis.web.pharmacymanage.dto.*; +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.constant.CommonConstants; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.pharmacymanage.appservice.IMedicationDetailsAppService; +import com.openhis.web.pharmacymanage.mapper.MedicationDetailsMapper; + +/** + * 发药明细 应用实现类 + * + * @author yuanzs + * @date 2025/4/14 + */ +@Service +public class MedicationDetailsAppServiceImpl implements IMedicationDetailsAppService { + + @Autowired + private MedicationDetailsMapper medicationDetailsMapper; + + @Autowired + private IPractitionerService iPractitionerService; + + /** + * 获取页面初始化信息 + * + * @return 初始化信息 + */ + @Override + public R init() { + + MedDetailsInitDto initDto = new MedDetailsInitDto(); + + // 查询医疗参与者列表 + List list = iPractitionerService.getList(); + initDto.setPractitionerList(list); + // 获取状态 + List statusEnumOptions = Stream.of(PublicationStatus.values()) + .map(status -> new MedDetailsInitDto.statusEnumOption(status.getValue(), status.getInfo())) + .collect(Collectors.toList()); + + // 结算状态 + initDto.setStatusSettlementOptions(statusEnumOptions) + // 出院状态 + .setStatusDischargeOptions(statusEnumOptions); + + return R.ok(initDto); + + } + + /** + * 门诊人员发药明细表 + * + * @param medDetailsSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 门诊人员发药明细表 + */ + @Override + public R getAmbPractitionerDetailPage(MedDetailsSearchParam medDetailsSearchParam, Integer pageNo, + Integer pageSize, String searchKey, HttpServletRequest request) { + + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(medDetailsSearchParam, + searchKey, new HashSet<>(Arrays.asList("patient_name", "medication_name", "bus_no")), request); + + Page medDetailsPage = medicationDetailsMapper.selectAmbPractitionerDetailPage( + new Page<>(pageNo, pageSize), queryWrapper, EncounterClass.AMB.getValue(), + DispenseStatus.COMPLETED.getValue(), DispenseStatus.REFUNDED.getValue(), 1); + + return R.ok(medDetailsPage); + + } + + /** + * 门诊发药明细流水账 + * + * @param medDetailsSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 门诊发药明细流水账 + */ + @Override + public R getAmbMedicationDispenseDetailPage(MedDetailsSearchParam medDetailsSearchParam, Integer pageNo, + Integer pageSize, String searchKey, HttpServletRequest request) { + + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(medDetailsSearchParam, + searchKey, new HashSet<>(Arrays.asList("patient_name", "medication_name", "bus_no")), request); + + Page medDetailsPage = medicationDetailsMapper.selectAmbPractitionerDetailPage( + new Page<>(pageNo, pageSize), queryWrapper, EncounterClass.AMB.getValue(), + DispenseStatus.COMPLETED.getValue(), DispenseStatus.REFUNDED.getValue(), 2); + + return R.ok(medDetailsPage); + + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/PendingMedicationDetailsAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/PendingMedicationDetailsAppServiceImpl.java new file mode 100644 index 00000000..83e11c04 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/PendingMedicationDetailsAppServiceImpl.java @@ -0,0 +1,65 @@ +package com.openhis.web.pharmacymanage.appservice.impl; + +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.enums.DispenseStatus; +import com.openhis.common.enums.EncounterClass; +import com.openhis.common.utils.EnumUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.pharmacymanage.appservice.IPendingMedicationDetailsAppService; +import com.openhis.web.pharmacymanage.dto.PendingMedicationPageDto; +import com.openhis.web.pharmacymanage.dto.PendingMedicationSearchParam; +import com.openhis.web.pharmacymanage.mapper.PendingMedicationDetailsMapper; +import com.openhis.web.reportmanage.dto.LossReportSearchParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.HashSet; + +/** + * 待发药明细 应用实现类 + * + * @author yuanzs + * @date 2025/4/14 + */ +@Service +public class PendingMedicationDetailsAppServiceImpl implements IPendingMedicationDetailsAppService { + + @Autowired + private PendingMedicationDetailsMapper pendingMedicationDetailsMapper; + + /** + * 分页查询待发药明细 + * + * @param pendingMedicationSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 待发药明细 + */ + @Override + public R getPage(PendingMedicationSearchParam pendingMedicationSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request) { + + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper( + pendingMedicationSearchParam, searchKey, new HashSet<>(Arrays.asList("medicine_name", "medicine_no")), request); + + // 查询待发药明细列表 + Page pendingMedicationPage = pendingMedicationDetailsMapper + .selectPendingMedicationDetailsPage(new Page<>(pageNo, pageSize), queryWrapper, + DispenseStatus.IN_PROGRESS.getValue(), EncounterClass.AMB.getValue(), EncounterClass.IMP.getValue()); + + pendingMedicationPage.getRecords().forEach(e -> { + // 发药类型 + e.setDispenseEnum_enumText(EnumUtils.getInfoByValue(EncounterClass.class, e.getDispenseEnum())); + }); + + return R.ok(pendingMedicationPage); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/ReturnMedicineAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/ReturnMedicineAppServiceImpl.java new file mode 100644 index 00000000..507d2f87 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/ReturnMedicineAppServiceImpl.java @@ -0,0 +1,493 @@ +package com.openhis.web.pharmacymanage.appservice.impl; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +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.exception.ServiceException; +import com.core.common.utils.AgeCalculatorUtil; +import com.core.common.utils.AssignSeqUtil; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.openhis.administration.domain.Account; +import com.openhis.administration.domain.ChargeItem; +import com.openhis.administration.domain.EncounterDiagnosis; +import com.openhis.administration.domain.Organization; +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.enums.ybenums.YbRxFlag; +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.ReturnMedicineAppService; +import com.openhis.web.pharmacymanage.dto.*; +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; +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; + +/** + * 退药管理 应用实现类 + * + * @author yangmo + * @date 2025/4/4 + */ +@Service +public class ReturnMedicineAppServiceImpl implements ReturnMedicineAppService { + + @Autowired + private IOrganizationService iOrganizationService; + + @Autowired + private IInventoryItemService iInventoryItemService; + + @Autowired + private ReturnMedicineMapper returnMedicineMapper; + + @Autowired + private IMedicationRequestService medicationRequestService; + + @Autowired + private IMedicationDispenseService medicationDispenseService; + + @Autowired + private IDeviceDispenseService deviceDispenseService; + + @Autowired + private IDeviceRequestService deviceRequestService; + + @Autowired + private AssignSeqUtil assignSeqUtil; + + @Autowired + private YbManager ybService; + + @Autowired + private IChargeItemService iChargeItemService; + + @Autowired + private IPaymentReconciliationService iPaymentReconciliationService; + + @Autowired + private IContractService iContractService; + + @Autowired + private IClinicSettleService clinicSettleService; + + @Autowired + private IEncounterDiagnosisService encounterDiagnosisService; + + @Autowired + private IAccountService accountService; + + @Autowired + private IRegService iRegService; + + /** + * 获取页面初始化信息 + * + * @return 初始化信息 + */ + @Override + public R init() { + + ReturnMedicineInitDto initDto = new ReturnMedicineInitDto(); + + // 获取科室下拉选列表 + List organizationList = + iOrganizationService.getList(OrganizationType.DEPARTMENT.getValue(), OrganizationClass.CLINIC.getValue()); + List organizationOptions = organizationList.stream().map( + organization -> new ReturnMedicineInitDto.DepartmentOption(organization.getId(), organization.getName())) + .collect(Collectors.toList()); + + // 发药状态 + List refundStatusOptions = new ArrayList<>(); + refundStatusOptions.add(new ReturnMedicineInitDto.RefundStatusOption(RequestStatus.IN_REFUND.getValue(), + RequestStatus.IN_REFUND.getInfo())); + refundStatusOptions.add(new ReturnMedicineInitDto.RefundStatusOption(RequestStatus.COMPLETED.getValue(), + RequestStatus.COMPLETED.getInfo())); + initDto.setDepartmentOptions(organizationOptions).setRefundStatusOptions(refundStatusOptions); + return R.ok(initDto); + } + + /** + * 查询退药患者分页列表 + * + * @param encounterInfoPageDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request 请求数据 + * @return 退药患者分页列表 + */ + @Override + public R getReturnMedicinePatientPage(EncounterInfoPageDto encounterInfoPageDto, 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); + // 查询退药患者分页列表 + Page encounterInfoPage = + returnMedicineMapper.selectEncounterInfoListPage(new Page<>(pageNo, pageSize), queryWrapper); + encounterInfoPage.getRecords().forEach(encounterInfo -> { + // 性别 + encounterInfo.setGenderEnum_enumText( + EnumUtils.getInfoByValue(AdministrativeGender.class, encounterInfo.getGenderEnum())); + // 年龄 + encounterInfo.setAge(AgeCalculatorUtil.getAge(encounterInfo.getBirthDate())); + // 退药状态 + encounterInfo + .setRefundEnum_enumText(EnumUtils.getInfoByValue(RequestStatus.class, encounterInfo.getRefundEnum())); + }); + return R.ok(encounterInfoPage); + } + + /** + * 查询退药信息 + * + * @param encounterId 就诊ID + * @param refundStatus 退药id + * @return 退药信息 + */ + @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, + ItemType.MEDICINE.getValue(), ItemType.DEVICE.getValue(), refundStatus, RequestStatus.IN_REFUND.getValue(), + RequestStatus.COMPLETED.getValue()); + returnMedicineInfoList.forEach(returnMedicineInfoDto -> { + // 退药状态 + returnMedicineInfoDto.setRefundEnum_enumText( + EnumUtils.getInfoByValue(DispenseStatus.class, returnMedicineInfoDto.getRefundEnum())); + // 退药请求状态 + returnMedicineInfoDto.setReqStatus_enumText( + EnumUtils.getInfoByValue(RequestStatus.class, returnMedicineInfoDto.getReqStatus())); + }); + + return R.ok(returnMedicineInfoList); + } + + /** + * 退药处理 + * + * @param medicineReturnList 退药清单 + * @return 处理结果 + */ + @Override + public R medicineReturn(List medicineReturnList) { + // 分别处理退药与退耗材的请求 + List returnMedicineList = new ArrayList<>(); + List returnDeviceList = new ArrayList<>(); + medicineReturnList.forEach(item -> { + switch (item.getTableName()) { + case CommonConstants.TableName.MED_MEDICATION_REQUEST -> returnMedicineList + .add(new ReturnMedicineDto().setDispenseId(item.getDispenseId()).setRequestId(item.getRequestId())); + case CommonConstants.TableName.WOR_DEVICE_REQUEST -> returnDeviceList + .add(new ReturnMedicineDto().setDispenseId(item.getDispenseId()).setRequestId(item.getRequestId())); + } + }); + // 获取药品发放id列表 + List medDispenseIdList = + returnMedicineList.stream().map(ReturnMedicineDto::getDispenseId).collect(Collectors.toList()); + // 获取药品退药请求id列表 + List medRequestIdList = + returnMedicineList.stream().map(ReturnMedicineDto::getRequestId).collect(Collectors.toList()); + + // 药品已退药信息查询 + List refundList = medicationDispenseService + .list(new LambdaQueryWrapper().in(MedicationDispense::getMedReqId, medRequestIdList)); + if (refundList != null) { + if (refundList.stream().map(MedicationDispense::getStatusEnum) + .anyMatch(x -> x.equals(DispenseStatus.REFUNDED.getValue()))) { + throw new ServiceException("药品已退药,请勿重复退药"); + } + } + // 退药单列表 + List medicationRefundList = new ArrayList<>(); + if (!medDispenseIdList.isEmpty()) { + // 药品已发放信息查询 + List medicationDispenseList = medicationDispenseService + .list(new LambdaQueryWrapper().in(MedicationDispense::getId, medDispenseIdList)); + // 根据发药单对应生成退药单 + for (MedicationDispense medicationDispense : medicationDispenseList) { + // 退药的药品请求id + for (ReturnMedicineDto returnMedicineDto : returnMedicineList) { + if (returnMedicineDto.getDispenseId().equals(medicationDispense.getId())) { + medicationDispense.setMedReqId(returnMedicineDto.getRequestId()) + .setTraceNo(returnMedicineDto.getTraceNo()); + } + } + // 药品发放编码 + medicationDispense.setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.MEDICATION_DIS_NO.getPrefix(), 10)); + // 退药状态 + medicationDispense.setStatusEnum(DispenseStatus.REFUNDED.getValue()); + medicationDispense.setId(null); + medicationRefundList.add(medicationDispense); + } + medicationDispenseService.saveBatch(medicationRefundList); + // 药品退药请求状态变更(待退药→已完成) + medicationRequestService.updateCompletedStatusBatch(medRequestIdList); + } + // 获取耗材发放id列表 + List devDispenseIdList = + returnDeviceList.stream().map(ReturnMedicineDto::getDispenseId).collect(Collectors.toList()); + // 获取退耗材请求id列表 + List devRequestIdList = + returnDeviceList.stream().map(ReturnMedicineDto::getRequestId).collect(Collectors.toList()); + // 退耗材单列表 + List devRefundList = new ArrayList<>(); + if (!devDispenseIdList.isEmpty()) { + // 耗材已发放信息查询 + List deviceDispenseList = deviceDispenseService + .list(new LambdaQueryWrapper().in(DeviceDispense::getId, devDispenseIdList)); + // 根据发药单对应生成退药单 + for (DeviceDispense deviceDispense : deviceDispenseList) { + if (DispenseStatus.REFUNDED.getValue().equals(deviceDispense.getStatusEnum())) { + throw new ServiceException("耗材已退药,请勿重复退药"); + } + deviceDispense.setId(null); + // 耗材发放编码 + deviceDispense.setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.DEVICE_DIS_NO.getPrefix(), 10)); + // 退药的药品请求id + for (ReturnMedicineDto returnDeviceDto : returnDeviceList) { + if (returnDeviceDto.getDispenseId().equals(deviceDispense.getId())) { + deviceDispense.setDeviceReqId(returnDeviceDto.getRequestId()) + .setTraceNo(returnDeviceDto.getTraceNo()); + } + } + // 退药状态 + deviceDispense.setStatusEnum(DispenseStatus.REFUNDED.getValue()); + devRefundList.add(deviceDispense); + } + deviceDispenseService.saveBatch(devRefundList); + // 药品退药请求状态变更(待退药→已完成) + deviceRequestService.updateCompletedStatusBatch(devRequestIdList); + } + + List inventoryItemList = new ArrayList<>(); + // 获取库存信息 + List inventoryList = + returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, medDispenseIdList, + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); + + // 设置库存数量 + for (InventoryDto inventory : inventoryList) { + // 库存表项目设定 + InventoryItem inventoryItem = new InventoryItem(); + // id + inventoryItem.setId(inventory.getInventoryId()); + // 库存数量 + if (inventory.getDispenseUnit().equals(inventory.getInventoryUnitCode())) { + // 当前库存数量(拆零单位)=当前库存数量(拆零单位)+待退数量 + inventoryItem.setQuantity(inventory.getInventoryQuantity().add(inventory.getDispenseQuantity())); + } else { + // 当前库存数量(拆零单位)=当前库存数量(拆零单位)+退药数量(拆零比×待退数量) + inventoryItem.setQuantity(inventory.getInventoryQuantity() + .add(inventory.getPartPercent().multiply(inventory.getDispenseQuantity()))); + } + inventoryItemList.add(inventoryItem); + } + // 库存更新 + iInventoryItemService.updateBatchById(inventoryItemList); + // 返回信息 + String returnMsg = null; + // 调用医保商品销售退货接口 + 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); + if (uploadFailedNoList != null) { + returnMsg = "3506商品销售退货上传错误,错误项目编码" + uploadFailedNoList; + } else { + returnMsg = "3506商品销售退货上传成功"; + } + } + } + // 返回退药成功信息 + return R.ok(returnMsg, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[] {"退药"})); + } + + /** + * 医保退药相关进销存接口 + * + * @param dispenseMedIdList 退药id列表 + * @param dispenseDevIdList 退耗材id列表 + * @return 上传失败的编号集合 + */ + public List ybReturnIntegrated(List dispenseMedIdList, List dispenseDevIdList) { + List uploadFailedNoList = new ArrayList<>(); + R result; + if (!dispenseMedIdList.isEmpty() || !dispenseDevIdList.isEmpty()) { + // 查询退药项目相关信息 + // 因暂时无发药材的需求,不查询退耗材的信息 + List dispenseInventoryList = returnMedicineMapper.selectReturnItemDetail( + dispenseDevIdList, dispenseMedIdList, CommonConstants.TableName.MED_MEDICATION_DEFINITION, + CommonConstants.TableName.ADM_DEVICE_DEFINITION); + for (DispenseInventoryDto dispenseInventoryDto : dispenseInventoryList) { + if (dispenseInventoryDto.getYbNo() == null) { + continue; + } + result = ybService.cancelMerchandise(getMedical3505Result(dispenseInventoryDto)); + if (result.getCode() != 200) { + uploadFailedNoList.add(dispenseInventoryDto.getDispenseNo()); + } + } + } + return uploadFailedNoList; + } + + private Medical3506Param getMedical3505Result(DispenseInventoryDto dispenseInventoryDto) { + Medical3506Param medical3506Param = new Medical3506Param(); + ObjectMapper mapper = new ObjectMapper(); + // 查询费用结算信息 + ChargeItem chargeItem = iChargeItemService.getOne(new LambdaQueryWrapper() + .eq(ChargeItem::getServiceTable, CommonConstants.TableName.MED_MEDICATION_REQUEST) + .eq(ChargeItem::getServiceId, dispenseInventoryDto.getMedReqId()) + .eq(ChargeItem::getTenantId, SecurityUtils.getLoginUser().getTenantId())); + if (chargeItem == null) { + throw new ServiceException("未查询到收费项"); + } + // 查询就诊诊断信息 + EncounterDiagnosis encounterDiagnosis = encounterDiagnosisService.getById(chargeItem.getEncounterDiagnosisId()); + if (encounterDiagnosis == null) { + throw new ServiceException("未查找到就诊诊断信息"); + } + // 查询付款信息 + PaymentReconciliation paymentReconciliation = + iPaymentReconciliationService.getOne(new LambdaQueryWrapper() + .eq(PaymentReconciliation::getEncounterId, chargeItem.getEncounterId()) + .like(PaymentReconciliation::getChargeItemIds, chargeItem.getId()) + .eq(PaymentReconciliation::getStatusEnum, PaymentStatus.SUCCESS.getValue()) + .eq(PaymentReconciliation::getPatientId, chargeItem.getPatientId()) + .eq(PaymentReconciliation::getPaymentEnum, PaymentType.PAY.getValue())); + if (paymentReconciliation == null) { + throw new ServiceException("未查询到收费"); + } + + // 查询账户信息 + Account account = accountService + .getOne(new LambdaQueryWrapper().eq(Account::getEncounterId, chargeItem.getEncounterId()) + .eq(Account::getEncounterFlag, Whether.YES.getValue())); + if (account == null) { + throw new ServiceException("未查询到账户"); + } + // 查询合同实体 + Contract contract = + iContractService.getOne(new LambdaQueryWrapper().eq(Contract::getBusNo, account.getContractNo())); + if (contract == null) { + throw new ServiceException("未查询到合同信息"); + } + YbMdtrtCertType mdtrtCertType; + if (AccountType.PERSONAL_CASH_ACCOUNT.getCode().equals(account.getTypeCode())) { + mdtrtCertType = YbMdtrtCertType.MDTRT_CERT_TYPE02; + } else { + mdtrtCertType = YbMdtrtCertType.getByValue(account.getTypeCode());// 2025/05/28 该值存01/02/03 + } + if (mdtrtCertType == null) { + throw new ServiceException("未查询到电子凭证"); + } + // 查询就诊id + if (contract.getCategoryEnum().equals(Category.SELF.getValue()) + || contract.getCategoryEnum().equals(Category.PUBLIC.getValue())) { + medical3506Param.setMdtrtSn(dispenseInventoryDto.getEncounterNo()); + } else { + ClinicSettle clinicSettle = clinicSettleService.getOne(new LambdaQueryWrapper() + .in(ClinicSettle::getSetlId, List.of(paymentReconciliation.getYbSettleIds())) + .eq(ClinicSettle::getMedType, encounterDiagnosis.getMedTypeCode()).last(" LIMIT 1")); + if (clinicSettle != null) { + medical3506Param.setMdtrtSn(clinicSettle.getMdtrtId()); + } + } + // // 查询发票信息 + // Invoice invoice = iInvoiceService.getById(paymentReconciliation.getInvoiceId()); + // if (invoice == null) { + // throw new ServiceException("未查询到发票信息"); + // } + // 转换为JSON + JSONArray medicalTraceNo = new JSONArray(); + // 获取追溯码信息 + if (dispenseInventoryDto.getTraceNo() != null) { + List traceNoList = + Arrays.stream(dispenseInventoryDto.getTraceNo().split(CommonConstants.Common.COMMA)).map(String::trim) + .filter(s -> !s.isEmpty()).collect(Collectors.toList()); + for (String traceNo : traceNoList) { + Map traceNoMap = new HashMap<>(); + traceNoMap.put("drug_trac_codg", traceNo); + medicalTraceNo.add(traceNoMap); + } + } + medical3506Param.setMedListCodg(dispenseInventoryDto.getYbNo()) + .setFixmedinsBchno(dispenseInventoryDto.getLotNumber()) + .setFixmedinsHilistId(dispenseInventoryDto.getMedicationNo()) + .setFixmedinsHilistName(CommonConstants.TableName.ADM_DEVICE_DEFINITION) + .setPsnCertType(mdtrtCertType.getValue()).setManuLotnum(dispenseInventoryDto.getLotNumber()) + .setManuDate(dispenseInventoryDto.getProductionDate()) + .setSelRetnCnt(new BigDecimal(dispenseInventoryDto.getDispenseQuantity().toString())) + .setSelRetnTime(dispenseInventoryDto.getDispenseTime()) + .setSelRetnOpterName(dispenseInventoryDto.getPreparerName()) + .setExpyEnd(dispenseInventoryDto.getExpirationDate()) + .setMedinsProdSelNo(dispenseInventoryDto.getDispenseNo()).setDrugtracinfo(medicalTraceNo); + if (dispenseInventoryDto.getInventoryUnitCode().equals(dispenseInventoryDto.getDispenseUnitCode())) { + medical3506Param.setTrdnFlag(Whether.YES.getCode()); + } else { + medical3506Param.setTrdnFlag(Whether.NO.getCode()); + } + if (YbRxFlag.IMPORTANT_HERBAL_SLICES.getCode() == dispenseInventoryDto.getRxFlag()) { + medical3506Param.setRxFlag(YbRxFlag.IMPORTANT_HERBAL_SLICES.getName()); + } else if (YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getCode() == dispenseInventoryDto.getRxFlag()) { + medical3506Param.setRxFlag(YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getName()); + } else if (YbRxFlag.SELF_PREPARED_MEDICATION.getCode() == dispenseInventoryDto.getRxFlag()) { + medical3506Param.setRxFlag(YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getName()); + } + return medical3506Param; + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ChineseMedicineDispenseController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ChineseMedicineDispenseController.java new file mode 100644 index 00000000..5e79b390 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ChineseMedicineDispenseController.java @@ -0,0 +1,101 @@ +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/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicationDetailsController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicationDetailsController.java new file mode 100644 index 00000000..4d3aed2d --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicationDetailsController.java @@ -0,0 +1,118 @@ +package com.openhis.web.pharmacymanage.controller; + +import javax.servlet.http.HttpServletRequest; + +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.pharmacymanage.appservice.IMedicationDetailsAppService; +import com.openhis.web.pharmacymanage.dto.MedDetailsSearchParam; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * 发药明细 + * + * @author yuanzs + * @date 2025/4/14 + */ +@RestController +@RequestMapping("/pharmacy-manage/medication-details") +@Slf4j +@AllArgsConstructor +public class MedicationDetailsController { + + @Autowired + public IMedicationDetailsAppService medicationDetailsAppService; + + /** + * 获取页面初始化信息 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R init() { + return medicationDetailsAppService.init(); + } + + /** + * 门诊人员发药明细表 + * + * @param medDetailsSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 门诊发药明细表 + */ + @GetMapping(value = "/amb-practitioner-detail") + public R getAmbPractitionerDetailPage(MedDetailsSearchParam medDetailsSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return medicationDetailsAppService.getAmbPractitionerDetailPage(medDetailsSearchParam, pageNo, pageSize, + searchKey, request); + } + + /** + * 门诊发药明细流水账 + * + * @param medDetailsSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 门诊发药明细流水账 + */ + @GetMapping(value = "/amb-medication-detail") + public R getAmbMedicationDispenseDetailPage(MedDetailsSearchParam medDetailsSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return medicationDetailsAppService.getAmbMedicationDispenseDetailPage(medDetailsSearchParam, pageNo, pageSize, + searchKey, request); + } + +// /** +// * 门诊/住院人员发药明细帐、住院耗材记账领用明细 +// * +// * @param medDetailsSearchParam 查询条件 +// * @param pageNo 当前页码 +// * @param pageSize 查询条数 +// * @param searchKey 模糊查询关键字 +// * @param request 请求数据 +// * @return 门诊/住院人员发药明细、住院耗材记账领用明细分页列表 +// */ +// @GetMapping(value = "/med-detail-page") +// public R getMedDetailedAccountPage(MedDetailsSearchParam medDetailsSearchParam, +// @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, +// @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, +// @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { +// return medicationDetailsAppService.getMedDetailedAccountPage(medDetailsSearchParam, pageNo, pageSize, searchKey, +// request); +// } +// +// /** +// * 门诊/住院发药明细流水帐、住院耗材记账领用流水账 +// * +// * @param medDetailsSearchParam 查询条件 +// * @param pageNo 当前页码 +// * @param pageSize 查询条数 +// * @param searchKey 模糊查询关键字 +// * @param request 请求数据 +// * @return 门诊/住院发药明细流水帐、住院耗材记账领用流水账分页列表 +// */ +// @GetMapping(value = "/med-running-page") +// public R getMedRunningAccountPage(MedDetailsSearchParam medDetailsSearchParam, +// @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, +// @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, +// @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { +// return medicationDetailsAppService.getMedRunningAccountPage(medDetailsSearchParam, pageNo, pageSize, searchKey, +// request); +// } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicineConsumablesDispenseController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicineConsumablesDispenseController.java new file mode 100644 index 00000000..e14948fb --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicineConsumablesDispenseController.java @@ -0,0 +1,110 @@ +//package com.openhis.web.pharmacymanage.controller; +// +//import com.core.common.core.domain.R; +//import com.openhis.web.pharmacymanage.dto.EncounterInfoSearchParam; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.web.bind.annotation.*; +//import com.openhis.web.pharmacymanage.appservice.IMedicineConsumablesDispenseAppService; +// +// +//import lombok.AllArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +// +//import javax.servlet.http.HttpServletRequest; +// +// +//@RestController +//@Slf4j +//@AllArgsConstructor +//@RequestMapping("/pharmacy-manage/medicine-consumables-dispense") +//public class MedicineConsumablesDispenseController { +// +// @Autowired +// public IMedicineConsumablesDispenseAppService iMedicineConsumablesDispenseService; +// +// /** +// * 获取页面初始化信息 +// * +// * @return 初始化信息 +// */ +// @GetMapping(value = "/init") +// public R consumablesDispenseInit() { +// return iMedicineConsumablesDispenseService.init(); +// } +// +// /** +// * 分页查询就诊病人列表 +// * +// * @param encounterInfoSearchParam 查询条件 +// * @param pageNo 当前页码 +// * @param pageSize 查询条数 +// * @param request 请求数据 +// * @return 就诊病人列表 +// */ +// @GetMapping("/encounter-list") +// public R getEncounterInfoList(EncounterInfoSearchParam encounterInfoSearchParam, +// @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, +// @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { +// return iMedicineConsumablesDispenseService.getEncounterInfoListPage(encounterInfoSearchParam, pageNo, pageSize, +// request); +// } +// +// /** +// * 处方单查询 +// * +// * @param encounterId 就诊Id +// */ +// @GetMapping("/prescription-list") +// public R getPatientInfoList(@RequestParam(value = "encounterId") Long encounterId) { +// return iMedicineConsumablesDispenseService.getPrescriptionInfo(encounterId); +// } +// +// /** +// * 配药 +// * +// * @param prescriptionNo 处方号 +// * @param preparerId 配药人 +// */ +// @PutMapping("/prepare") +// public R prepare(@RequestParam(value = "prescriptionNo") String prescriptionNo, +// @RequestParam(value = "preparerId") Long preparerId) { +// return iMedicineConsumablesDispenseService.prepare(prescriptionNo, preparerId); +// } +// +// /** +// * 核对发药 +// * +// * @param prescriptionNo 处方号 +// */ +// @PutMapping("/consumables-dispense") +// public R consumablesDispense(@RequestParam(value = "prescriptionNo") String prescriptionNo) { +// return iMedicineConsumablesDispenseService.consumablesDispense(prescriptionNo); +// } +// +// /** +// * 作废 +// * +// * @param prescriptionNo 处方号 +// * @param notPerformedReasonEnum 未发药原因 +// */ +// @PutMapping("/consumables-cancel") +// public R medicineCancel(@RequestParam(value = "prescriptionNo") String prescriptionNo, +// @RequestParam(value = "notPerformedReasonEnum") Integer notPerformedReasonEnum) { +// return iMedicineConsumablesDispenseService.consumablesCancel(prescriptionNo, notPerformedReasonEnum); +// } +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +//} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/PendingMedicationDetailsController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/PendingMedicationDetailsController.java new file mode 100644 index 00000000..45d3acc8 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/PendingMedicationDetailsController.java @@ -0,0 +1,52 @@ +package com.openhis.web.pharmacymanage.controller; + +import javax.servlet.http.HttpServletRequest; + +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.pharmacymanage.appservice.IPendingMedicationDetailsAppService; +import com.openhis.web.pharmacymanage.dto.PendingMedicationSearchParam; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * 待发药明细 + * + * @author yuanzs + * @date 2025/4/14 + */ +@RestController +@RequestMapping("/pharmacy-manage/pending-medication") +@Slf4j +@AllArgsConstructor +public class PendingMedicationDetailsController { + + @Autowired + public IPendingMedicationDetailsAppService pendingMedicationDetailsAppService; + + /** + * 分页查询待发药明细 + * + * @param pendingMedicationSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 待发药明细 + */ + @GetMapping("/pending-medication-page") + public R getPage(PendingMedicationSearchParam pendingMedicationSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return pendingMedicationDetailsAppService.getPage(pendingMedicationSearchParam, pageNo, pageSize, searchKey, + request); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ReturnMedicineController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ReturnMedicineController.java new file mode 100644 index 00000000..79a27065 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ReturnMedicineController.java @@ -0,0 +1,85 @@ +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.ReturnMedicineAppService; +import com.openhis.web.pharmacymanage.dto.EncounterInfoPageDto; +import com.openhis.web.pharmacymanage.dto.ReturnMedicineDto; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * 退药管理 + * + * @author yangmo + * @date 2025/4/4 + */ +@RestController +@RequestMapping("/pharmacy-manage/return-medicine") +@Slf4j +@AllArgsConstructor +public class ReturnMedicineController { + + @Autowired + public ReturnMedicineAppService returnMedicineAppService; + + /** + * 获取页面初始化信息 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R returnMedicineInit() { + return returnMedicineAppService.init(); + } + + /** + * 查询退药患者分页列表 + * + * @param encounterInfoPageDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request 请求数据 + * @return 退药患者分页列表 + */ + @GetMapping(value = "/return-patient-page") + public R getReturnMedicinePatientPage(EncounterInfoPageDto encounterInfoPageDto, + @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, + request); + } + + /** + * 查询退药信息 + * + * @param encounterId 就诊ID + * @param refundStatus 退药id + * @return 退药信息 + */ + @GetMapping("/medicine-return-list") + public R getReturnMedicineInfo(@RequestParam Long encounterId, @RequestParam Integer refundStatus) { + return returnMedicineAppService.getReturnMedicineInfo(encounterId, refundStatus); + } + + /** + * 退药处理 + * + * @param medicineReturnList 退药清单 + * @return 处理结果 + */ + @PutMapping("/medicine-return") + public R medicineReturn(@RequestBody List medicineReturnList) { + return returnMedicineAppService.medicineReturn(medicineReturnList); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseInitDto.java new file mode 100644 index 00000000..45203d64 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseInitDto.java @@ -0,0 +1,80 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.pharmacymanage.dto; + +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 + */ +@Data +@Accessors(chain = true) +public class DispenseInitDto { + + /** 科室列表 */ + private List departmentOptions; + + /** 未发药原因 */ + private List notPerformedReasonOptions; + + /** 发药状态 */ + private List dispenseStatusOptions; + + /** 发药状态 */ + private List preparerDoctorOptions; + + @Data + public static class DepartmentOption { + @JsonSerialize(using = ToStringSerializer.class) + private Long value; + private String label; + + public DepartmentOption(Long value, String label) { + this.value = value; + this.label = label; + } + } + + @Data + public static class NotPerformedReasonOption { + private Integer value; + private String label; + + public NotPerformedReasonOption(Integer value, String label) { + this.value = value; + this.label = label; + } + } + + @Data + public static class DispenseStatusOption { + private Integer value; + private String label; + + public DispenseStatusOption(Integer value, String label) { + this.value = value; + this.label = label; + } + } + + @Data + public static class PreparerDoctorOption { + @JsonSerialize(using = ToStringSerializer.class) + private Long value; + private String label; + + public PreparerDoctorOption(Long value, String label) { + this.value = value; + this.label = label; + } + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseMedicineDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseMedicineDto.java new file mode 100644 index 00000000..d8130aa2 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseMedicineDto.java @@ -0,0 +1,41 @@ +/* + * 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 zwh + * @date 2025-05-23 + */ +@Data +@Accessors(chain = true) +public class DispenseMedicineDto { + /** 药品请求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/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InventoryDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InventoryDto.java new file mode 100644 index 00000000..3f84e700 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InventoryDto.java @@ -0,0 +1,51 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.pharmacymanage.dto; + +import java.io.Serializable; +import java.math.BigDecimal; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 库存信息 + * + * @author yangmo + * @date 2025-04-08 + */ +@Data +@Accessors(chain = true) +public class InventoryDto implements Serializable { + + /** 库存ID */ + private Long inventoryId; + + /** 发药ID */ + private Long dispenseId; + + /** 拆零单位 */ + private String inventoryUnitCode; + + /** 发放单位 */ + private String dispenseUnit; + + /** 当前库存数量(拆零单位) */ + private BigDecimal inventoryQuantity; + + /** 已发数量 */ + private BigDecimal dispenseQuantity; + + /** 发药数量 */ + private BigDecimal quantity; + + /** 拆零比 */ + private BigDecimal partPercent; + + /** 药品名称 */ + private String itemName; + + /** 库存状态 */ + private Integer inventoryStatusEnum; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailedAccountPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailedAccountPageDto.java new file mode 100644 index 00000000..605aeb8e --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailedAccountPageDto.java @@ -0,0 +1,88 @@ +package com.openhis.web.pharmacymanage.dto; + +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.math.BigDecimal; +import java.util.Date; + +/** + * 发药明细账分页列表 dto + * + * @author yuanzs + * @date 2025-04-14 + */ +@Data +@Accessors(chain = true) +public class MedDetailedAccountPageDto { + + /** 门诊号 */ + private String outpatientNo; + + /** 处方号 */ + private String prescriptionNo; + + /** 患者 */ + private String patientName; + + /** 发药人 */ + @JsonSerialize(using = ToStringSerializer.class) + private String practitionerId; + + /** 发药人名称 */ + private String practitionerName; + + /** 药品项目 */ + private String medicationName; + + /** 项目编码 */ + private String busNo; + + /** 发药编码 */ + private String dispenseNo; + + /** 医保编码 */ + private String ybNo; + + /** 规格 */ + private String totalVolume; + + /** 发药数量 */ + private Integer dispenseQuantity; + + /** 发药金额 */ + private BigDecimal dispensePrice; + + /** 退药数量 */ + private Integer refundQuantity; + + /** 退药金额 */ + private BigDecimal refundPrice; + + /** 批号 */ + private String lotNumber; + + /** 厂商 */ + private String manufacturerText; + + /** 供应商 */ + private String supplierName; + + /** 发药单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 退药单位 */ + @Dict(dictCode = "unit_code") + private String refundUnitCode; + private String refundUnitCode_dictText; + + /** 发药时间 */ + private Date dispenseTime; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailsInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailsInitDto.java new file mode 100644 index 00000000..9089af0c --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailsInitDto.java @@ -0,0 +1,46 @@ +package com.openhis.web.pharmacymanage.dto; + +import com.openhis.administration.domain.Practitioner; +import com.openhis.web.datadictionary.dto.DiagnosisTreatmentInitDto; +import com.openhis.web.datadictionary.dto.SupplierInitDto; +import lombok.Data; +import lombok.experimental.Accessors; +import org.hibernate.validator.constraints.Length; + +import java.util.List; + +import java.util.List; + +/** + * 发药明细初始化信息 + * + * @author yuanzs + * @date 2025-04-14 + */ +@Data +@Accessors(chain = true) +public class MedDetailsInitDto { + + /** 发药人 */ + private List practitionerList; + + /** 结算状态 */ + private List statusSettlementOptions; + + /** 出院状态 */ + private List statusDischargeOptions; + + /** + * 状态 + */ + @Data + public static class statusEnumOption { + private Integer value; + private String info; + + public statusEnumOption(Integer value, String info) { + this.value = value; + this.info = info; + } + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailsSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailsSearchParam.java new file mode 100644 index 00000000..b13c18ce --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailsSearchParam.java @@ -0,0 +1,41 @@ +package com.openhis.web.pharmacymanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.hibernate.validator.constraints.Length; + +import java.util.Date; + +/** + * 发药明细查询条件 + * + * @author yuanzs + * @date 2025-04-14 + */ +@Data +@Accessors(chain = true) +public class MedDetailsSearchParam { + + /** 发药时间 */ + private Date dispenseTime; + + /** 药房 */ + private Long locationId; + + /** 患者姓名 */ + @Length(max = 2000) + private String patientName; + + /** 发药人 */ + private Long practitionerId; + + /** 药品名称 */ + private String medicationName; + + /** 药品项目(药品编码) */ + private String busNo; + + /** 出院状态 */ + private Integer dischargeStatus; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedRunningAccountPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedRunningAccountPageDto.java new file mode 100644 index 00000000..45a57cc2 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedRunningAccountPageDto.java @@ -0,0 +1,81 @@ +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/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PendingMedicationPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PendingMedicationPageDto.java new file mode 100644 index 00000000..7db449d0 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PendingMedicationPageDto.java @@ -0,0 +1,50 @@ +package com.openhis.web.pharmacymanage.dto; + +import com.openhis.common.annotation.Dict; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 待发药明细分页列表 dto + * + * @author yuanzs + * @date 2025-04-14 + */ +@Data +@Accessors(chain = true) +public class PendingMedicationPageDto { + + /** 药品编码 */ + private String medicineNo; + + /** 药品名称 */ + private String medicineName; + + /** 待发数量 */ + private String dispenseQuantity; + + /** 请求单位编码 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 发药类型(处方类型) */ + private Integer dispenseEnum; + private String dispenseEnum_enumText; + + /** 患者姓名 */ + private String patientName; + + /** 处方号 */ + private String prescriptionNo; + + /** 门诊号 */ + private String outpatientNo; + + /** 住院号 */ + private String admissionNo; + + /** 开单时间 */ + private String createTime; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PendingMedicationSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PendingMedicationSearchParam.java new file mode 100644 index 00000000..e70346b6 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/PendingMedicationSearchParam.java @@ -0,0 +1,36 @@ +package com.openhis.web.pharmacymanage.dto; + +import java.util.Date; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 待发药明细查询条件 + * + * @author yuanzs + * @date 2025-04-14 + */ +@Data +@Accessors(chain = true) +public class PendingMedicationSearchParam { + +// /** 开始时间 */ +// private Date startTime; +// +// /** 结束时间 */ +// private Date endTime; + + /** 开单时间 */ + private String createTime; + + /** 药品编码 */ + private String medicineNo; + + /** 药品名称 */ + private String medicineName; + + /** 统计类型 */ +// private Integer statisticTypeEnum; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/ReturnMedicineDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/ReturnMedicineDto.java new file mode 100644 index 00000000..46d85e9f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/ReturnMedicineDto.java @@ -0,0 +1,35 @@ +/* + * 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 zwh + * @date 2025-05-07 + */ +@Data +@Accessors(chain = true) +public class ReturnMedicineDto { + + /** 药品请求ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long requestId; + + /** 药品发放ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long dispenseId; + + /** 业务表名 */ + private String tableName; + + /** 退药追溯码 */ + private String traceNo; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/ReturnMedicineInfoDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/ReturnMedicineInfoDto.java new file mode 100644 index 00000000..c7c93029 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/ReturnMedicineInfoDto.java @@ -0,0 +1,75 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.pharmacymanage.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 lombok.Data; +import lombok.experimental.Accessors; + +/** + * 退药信息 + * + * @author yangmo + * @date 2025-04-07 + */ +@Data +@Accessors(chain = true) +public class ReturnMedicineInfoDto { + + /** 药品请求ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long requestId; + + /** 退药ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long refundMedicineId; + + /** 药品发放ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long dispenseId; + + /** 药品ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long itemId; + + /** 开单医生 */ + private String doctorName; + + /** 批号 */ + private String lotNumber; + + /** 药品 */ + private String itemName; + + /** 已退数量 */ + private Integer dispenseQuantity; + + /** 单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 总价 */ + private BigDecimal totalPrice; + + /** 退药状态 */ + private Integer refundEnum; + private String refundEnum_enumText; + + /** 退药请求状态 */ + private Integer reqStatus; + private String reqStatus_enumText; + + /** 业务表名 */ + private String serviceTable; + + /** 请求数量 */ + private Integer quantity; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/ReturnMedicineInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/ReturnMedicineInitDto.java new file mode 100644 index 00000000..3d25e887 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/ReturnMedicineInitDto.java @@ -0,0 +1,61 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.pharmacymanage.dto; + +import java.util.List; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import com.openhis.web.inventorymanage.dto.PurchaseInventoryInitDto; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * + * @author yangmo + * @date 2025-04-04 + */ +@Data +@Accessors(chain = true) +public class ReturnMedicineInitDto { + + /** 科室列表 */ + private List departmentOptions; + + /** 退药状态 */ + private List refundStatusOptions; + + /** + * 科室列表 + */ + @Data + public static class DepartmentOption { + + @JsonSerialize(using = ToStringSerializer.class) + private Long value; + private String label; + + public DepartmentOption(Long value, String label) { + this.value = value; + this.label = label; + } + } + + /** + * 退药状态 + */ + @Data + public static class RefundStatusOption { + + private Integer value; + private String label; + + public RefundStatusOption(Integer value, String label) { + this.value = value; + this.label = label; + } + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ChineseMedicineDispenseMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ChineseMedicineDispenseMapper.java new file mode 100644 index 00000000..68f0dbcd --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ChineseMedicineDispenseMapper.java @@ -0,0 +1,53 @@ +/* + * 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/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicationDetailsMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicationDetailsMapper.java new file mode 100644 index 00000000..c768135e --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicationDetailsMapper.java @@ -0,0 +1,50 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.pharmacymanage.mapper; + +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; +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 { + + /** + * 门诊人员发药明细表/门诊发药明细流水账 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param amb 发药类型:门诊 + * @param completed 发药状态:已发药 + * @param refunded 发药状态:已退药 + * @param dispenseEnum 统计类型 + * @return 门诊人员发药明细表 + */ + 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 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/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicineConsumablesDispenseMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicineConsumablesDispenseMapper.java new file mode 100644 index 00000000..3d10d553 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicineConsumablesDispenseMapper.java @@ -0,0 +1,53 @@ +/* + * 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 MedicineConsumablesDispenseMapper { + + /** + * 就诊病人列表分页查询 + * + * @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/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/PendingMedicationDetailsMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/PendingMedicationDetailsMapper.java new file mode 100644 index 00000000..cd8e525f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/PendingMedicationDetailsMapper.java @@ -0,0 +1,31 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.pharmacymanage.mapper; + +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; +import com.openhis.web.pharmacymanage.dto.PendingMedicationPageDto; +import com.openhis.web.pharmacymanage.dto.PendingMedicationSearchParam; + +@Repository +public interface PendingMedicationDetailsMapper { + + /** + * 分页查询待发药明细 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param inProgress 发药类型:待发药 + * @return 待发药明细 + */ + Page selectPendingMedicationDetailsPage( + @Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("inProgress") Integer inProgress, @Param("amb") Integer amb, @Param("imp") Integer imp); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ReturnMedicineMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ReturnMedicineMapper.java new file mode 100644 index 00000000..2675732f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ReturnMedicineMapper.java @@ -0,0 +1,83 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.pharmacymanage.mapper; + +import java.util.List; + +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; +import com.openhis.web.pharmacymanage.dto.*; + +@Repository +public interface ReturnMedicineMapper { + + /** + * 查询退药患者分页列表 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @return 退药患者分页列表 + */ + Page selectEncounterInfoListPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + /** + * 申请退药清单查询 + * + * @param encounterId 就诊ID + * @param medMedicationRequest 药品请求表 + * @param worDeviceRequest 耗材请求表 + * @param medicine 项目类型:药品 + * @param device 项目类型:耗材 + * @param refundStatus 退药状态 + * @param inRefund 退药状态:待退药 + * @param completed 退药状态:已完成 + * @return 申请退药清单 + */ + List selectReturnMedicineInfo(@Param("encounterId") Long encounterId, + @Param("worDeviceRequest") String worDeviceRequest, @Param("medMedicationRequest") String medMedicationRequest, + @Param("medicine") Integer medicine, @Param("device") Integer device, + @Param("refundStatus") Integer refundStatus, @Param("inRefund") Integer inRefund, + @Param("completed") Integer completed); + + /** + * 患者基本信息查询 + * + * @param encounterId 就诊ID + * @return 患者基本信息 + */ + PrescriptionPatientInfoDto selectPrescriptionPatientInfo(@Param("encounterId") Long encounterId); + + /** + * 库存信息查询 + * + * @param devDispenseIdList 耗材发放ID列表 + * @param medDispenseIdList 药品发放ID列表 + * @param medMedicationDefinition 药品定义表 + * @param admDeviceDefinition 耗材定义表 + * @return 待发药信息 + */ + List selectInventoryInfoList(@Param("devDispenseIdList") List devDispenseIdList, + @Param("medDispenseIdList") List medDispenseIdList, + @Param("medMedicationDefinition") String medMedicationDefinition, + @Param("admDeviceDefinition") String admDeviceDefinition); + + /** + * 退药详细信息查询 + * + * @param devDispenseIdList 耗材发放ID列表 + * @param medDispenseIdList 药品发放ID列表 + * @param medMedicationDefinition 药品定义表 + * @param admDeviceDefinition 耗材定义表 + * @return 退药信息 + */ + List selectReturnItemDetail(@Param("devDispenseIdList") List devDispenseIdList, + @Param("medDispenseIdList") List medDispenseIdList, + @Param("medMedicationDefinition") String medMedicationDefinition, + @Param("admDeviceDefinition") String admDeviceDefinition); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IChargeReportAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IChargeReportAppService.java new file mode 100644 index 00000000..f0b39994 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IChargeReportAppService.java @@ -0,0 +1,37 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.appservice; + +import com.core.common.core.domain.R; +import com.openhis.web.reportmanage.dto.ChargeReportSearchParam; + +import javax.servlet.http.HttpServletRequest; + +/** + * 费用明细报表 appService + * + * @author yuxj + * @date 2025-05-20 + */ +public interface IChargeReportAppService { + /** + * 下拉框 + * + * @return 下拉框信息 + */ + R chargeReportInit(); + + /** + * 费用明细列表 + * + * @param chargeReportSearchParam 费用明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 费用明细 + */ + R getPage(ChargeReportSearchParam chargeReportSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IInboundReportAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IInboundReportAppService.java new file mode 100644 index 00000000..a5dc3926 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IInboundReportAppService.java @@ -0,0 +1,38 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.appservice; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.reportmanage.dto.InboundReportSearchParam; + +/** + * 入库明细报表 appService + * + * @author GYY + * @date 2025-04-22 + */ +public interface IInboundReportAppService { + + /** + * 入库明细页面初始化 + * + * @return 初始化信息 + */ + R init(); + + /** + * 入库明细列表 + * + * @param inboundReportSearchParam 入库明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 入库明细 + */ + R getPage(InboundReportSearchParam inboundReportSearchParam, Integer pageNo, Integer pageSize, String searchKey, + HttpServletRequest request); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IInventoryProductReportAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IInventoryProductReportAppService.java new file mode 100644 index 00000000..a3771d74 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IInventoryProductReportAppService.java @@ -0,0 +1,31 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.appservice; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.reportmanage.dto.InventoryProductReportSearchParam; + +/** + * 库存商品明细报表 appService + * + * @author GYY + * @date 2025-04-21 + */ +public interface IInventoryProductReportAppService { + + /** + * 库存商品明细列表 + * + * @param inventoryProductReportSearchParam 库存商品明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 库存商品明细 + */ + R getPage(InventoryProductReportSearchParam inventoryProductReportSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/ILossReportAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/ILossReportAppService.java new file mode 100644 index 00000000..937becc1 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/ILossReportAppService.java @@ -0,0 +1,32 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.appservice; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.reportmanage.dto.LossReportSearchParam; +import com.openhis.web.reportmanage.dto.StocktakingReportSearchParam; + +/** + * 报损明细报表 appService + * + * @author ym + * @date 2025-05-21 + */ +public interface ILossReportAppService { + + /** + * 库存盘点明细列表 + * + * @param lossReportSearchParam 报损明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 报损明细 + */ + R getPage(LossReportSearchParam lossReportSearchParam, Integer pageNo, Integer pageSize, String searchKey, + HttpServletRequest request); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IOutboundReportAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IOutboundReportAppService.java new file mode 100644 index 00000000..6a741802 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IOutboundReportAppService.java @@ -0,0 +1,36 @@ +package com.openhis.web.reportmanage.appservice; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.reportmanage.dto.OutboundReportSearchParam; + +/** + * 出库明细报表 appService + * + * @author yuanzs + * @date 2025-04-21 + */ +public interface IOutboundReportAppService { + + /** + * 出库明细页面初始化 + * + * @return 初始化信息 + */ + R init(); + + /** + * 出库明细 + * + * @param outboundReportSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 出库明细分页列表 + */ + R getPage(OutboundReportSearchParam outboundReportSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IPrintReportAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IPrintReportAppService.java new file mode 100644 index 00000000..da4f718f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IPrintReportAppService.java @@ -0,0 +1,75 @@ +package com.openhis.web.reportmanage.appservice; + +import com.core.common.core.domain.R; + +import java.util.List; + +/** + * 院内处方和医嘱报告打印 接口 + * + * @author liuhr + * @date 2025/5/6 + */ +public interface IPrintReportAppService { + + /** + * 打印——处置单 + * + * @param encounterId 患者就诊Id + * @return 处置单信息 + */ + R disposalPrint(Long encounterId); + + /** + * 打印——检查申请单 + * + * @param encounterId 患者就诊Id + * @return 检查申请单信息 + */ + R checkApplicationPrint(Long encounterId); + + /** + * 打印——检验申请单 + * + * @param encounterId 患者就诊Id + * @return 检验申请单信息 + */ + R inspectionApplicationPrint(Long encounterId); + + /** + * 打印——处方单 + * + * @param prescriptionNo 院内处方编号 + * @param encounterId 患者就诊Id + * @return 处方单信息 + */ + R prescriptionPrint(String prescriptionNo, Long encounterId); + + /** + * 打印——护士输液的瓶签 + * + * @param serviceId 服务请求id + * @param encounterId 就诊id + * @param groupId 药品组id + * @return 输液的瓶签 + */ + R bottleLabelPrint(Long serviceId, Long encounterId, Long groupId); + + /** + * 打印——护士输液的瓶签 批量 + * + * @return 输液的瓶签 + */ + R bottleLabelBatchPrint(List serviceIds, + List encounterIds); + + /** + * 更新打印次数——护士输液的瓶签的打印次数 + * + * @param serviceId 服务请求id + * @param num 打印次数 + * @return 更新结果 + */ + R updatePrintCount(Long serviceId, Integer num); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IRegisterReportAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IRegisterReportAppService.java new file mode 100644 index 00000000..4c78f242 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IRegisterReportAppService.java @@ -0,0 +1,38 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.appservice; + +import com.core.common.core.domain.R; +import com.openhis.web.reportmanage.dto.RegisterReportSearchParam; +import com.openhis.web.reportmanage.dto.TransferReportSearchParam; + +import javax.servlet.http.HttpServletRequest; + +/** + * 挂号明细报表 appService + * + * @author yuxj + * @date 2025-05-20 + */ +public interface IRegisterReportAppService { + /** + * 下拉框 + * + * @return 下拉框信息 + */ + R registerReportInit(); + + /** + * 挂号明细列表 + * + * @param registerReportSearchParam 挂号明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 挂号明细 + */ + R getPage(RegisterReportSearchParam registerReportSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IReturnIssueReportAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IReturnIssueReportAppService.java new file mode 100644 index 00000000..d6e8ca9f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IReturnIssueReportAppService.java @@ -0,0 +1,36 @@ +package com.openhis.web.reportmanage.appservice; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.reportmanage.dto.ReturnIssueReportSearchParam; + +/** + * 领用退库明细报表 appService + * + * @author ym + * @date 2025-05-23 + */ +public interface IReturnIssueReportAppService { + + /** + * 领用退库明细页面初始化 + * + * @return 初始化信息 + */ + R init(); + + /** + * 领用退库明细 + * + * @param returnIssueReportSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 领用退库明细分页列表 + */ + R getPage(ReturnIssueReportSearchParam returnIssueReportSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IStocktakingReportAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IStocktakingReportAppService.java new file mode 100644 index 00000000..89c69a23 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IStocktakingReportAppService.java @@ -0,0 +1,31 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.appservice; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.reportmanage.dto.StocktakingReportSearchParam; + +/** + * 库存盘点明细报表 appService + * + * @author GYY + * @date 2025-04-16 + */ +public interface IStocktakingReportAppService { + + /** + * 库存盘点明细列表 + * + * @param stocktakingReportSearchParam 库存盘点明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 库存盘点明细 + */ + R getPage(StocktakingReportSearchParam stocktakingReportSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/ITransferReportAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/ITransferReportAppService.java new file mode 100644 index 00000000..db9786db --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/ITransferReportAppService.java @@ -0,0 +1,31 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.appservice; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.reportmanage.dto.TransferReportSearchParam; + +/** + * 商品调拨明细报表 appService + * + * @author GYY + * @date 2025-04-15 + */ +public interface ITransferReportAppService { + + /** + * 商品调拨明细列表 + * + * @param transferReportSearchParam 商品调拨明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 商品调拨明细 + */ + R getPage(TransferReportSearchParam transferReportSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/PurchaseReturnReportAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/PurchaseReturnReportAppService.java new file mode 100644 index 00000000..a9f9e33d --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/PurchaseReturnReportAppService.java @@ -0,0 +1,38 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.appservice; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.reportmanage.dto.PurchaseReturnReportSearchParam; + +/** + * 采购退货明细报表 appService + * + * @author ym + * @date 2025-05-23 + */ +public interface PurchaseReturnReportAppService { + + /** + * 采购退货明细页面初始化 + * + * @return 初始化信息 + */ + R init(); + + /** + * 采购退货明细列表 + * + * @param purchaseReturnReportSearchParam 采购退货明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 采购退货明细 + */ + R getPage(PurchaseReturnReportSearchParam purchaseReturnReportSearchParam, Integer pageNo, Integer pageSize, String searchKey, + HttpServletRequest request); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/ChargeReportAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/ChargeReportAppServiceImpl.java new file mode 100644 index 00000000..22903f83 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/ChargeReportAppServiceImpl.java @@ -0,0 +1,171 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.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.baomidou.mybatisplus.core.metadata.IPage; +import com.core.common.utils.AgeCalculatorUtil; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.utils.EnumUtils; +import com.openhis.web.basedatamanage.dto.UserAndPractitionerDto; +import com.openhis.web.pharmacymanage.dto.MedDetailedAccountPageDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +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.administration.domain.Organization; +import com.openhis.administration.domain.Practitioner; +import com.openhis.administration.service.IOrganizationService; +import com.openhis.administration.service.IPractitionerService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.enums.*; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.reportmanage.appservice.IChargeReportAppService; +import com.openhis.web.reportmanage.dto.*; +import com.openhis.web.reportmanage.mapper.ChargeReportMapper; + +/** + * 费用明细报表 impl + * + * @author yuxj + * @date 2025-05-20 + */ +@Service +public class ChargeReportAppServiceImpl implements IChargeReportAppService { + + @Autowired + private ChargeReportMapper chargeReportMapper; + @Resource + private IPractitionerService practitionerService; + + /** + * 下拉框 + * + * @return 下拉框信息 + */ + @Override + public R chargeReportInit() { + ChargeReportInitDto initDto = new ChargeReportInitDto(); + + // 统计类型 + List statisticsTypeOptions = Stream.of(StatisticsType.values()) + .map(statisticsType -> new ChargeReportInitDto.commonStatusOption(statisticsType.getValue(), + statisticsType.getInfo())) + .collect(Collectors.toList()); + // 查询制单人列表 + List applicantList = practitionerService.getList(); + + // 项目类型 + List clinicalTypeOptions = Stream.of(ChargeItemContext.values()) + .map(ChargeItemContext -> new ChargeReportInitDto.commonStatusOption(ChargeItemContext.getValue(), + ChargeItemContext.getInfo())) + .collect(Collectors.toList()); + + initDto.setStatisticsTypeOptions(statisticsTypeOptions) + .setIssuerOptions(applicantList).setPayeeOptions(applicantList).setClinicalTypeOptions(clinicalTypeOptions); + return R.ok(initDto); + } + + /** + * 费用明细列表 + * + * @param chargeReportSearchParam 费用明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 费用明细 + */ + @Override + public R getPage(ChargeReportSearchParam chargeReportSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request) { + // 保存统计类型 + String statisticsType = chargeReportSearchParam.getStatisticsType(); + chargeReportSearchParam.setStatisticsType(null); + + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(chargeReportSearchParam, searchKey, + new HashSet<>(Arrays.asList(CommonConstants.FieldName.YbCode, CommonConstants.FieldName.BusNo, + CommonConstants.FieldName.Name, CommonConstants.FieldName.ClinicalName, + CommonConstants.FieldName.ClinicalNo)), + request); + queryWrapper.orderByAsc(CommonConstants.FieldName.BusNo); + + + // 最终返回结果 + Page chargeReportList; + // 判断统计类型 + if (Objects.equals(statisticsType, StatisticsType.OUTPATIENT_REVENUE.getCode())) { + // 门诊整体收入明细 + chargeReportList = chargeReportMapper.selectRevenueReportPage(new Page<>(pageNo, pageSize),queryWrapper, + PaymentStatus.SUCCESS.getValue(), PaymentStatus.REFUND_ALL.getValue(), + ChargeItemContext.MEDICATION.getValue(), ChargeItemContext.DEVICE.getValue(), + ChargeItemContext.ACTIVITY.getValue(), ChargeItemContext.REGISTER.getValue(), 2); + } else if (Objects.equals(statisticsType, StatisticsType.OUTPATIENT_YB_REVENUE.getCode())) { + // 门诊医保收入明细 + chargeReportList = chargeReportMapper.selectRevenueReportPage(new Page<>(pageNo, pageSize),queryWrapper, + PaymentStatus.SUCCESS.getValue(), PaymentStatus.REFUND_ALL.getValue(), + ChargeItemContext.MEDICATION.getValue(), ChargeItemContext.DEVICE.getValue(), + ChargeItemContext.ACTIVITY.getValue(), ChargeItemContext.REGISTER.getValue(), 1); + + } else if (Objects.equals(statisticsType, StatisticsType.OUTPATIENT_SELF_REVENUE.getCode())) { + // 门诊自费收入明细 + chargeReportList = chargeReportMapper.selectRevenueReportPage(new Page<>(pageNo, pageSize),queryWrapper, + PaymentStatus.SUCCESS.getValue(), PaymentStatus.REFUND_ALL.getValue(), + ChargeItemContext.MEDICATION.getValue(), ChargeItemContext.DEVICE.getValue(), + ChargeItemContext.ACTIVITY.getValue(), ChargeItemContext.REGISTER.getValue(), 0); + } else if (Objects.equals(statisticsType, StatisticsType.OUTPATIENT_REFUND.getCode())) { + // 门诊退费明细 + chargeReportList = chargeReportMapper.selectRevenueReportPage(new Page<>(pageNo, pageSize),queryWrapper, + PaymentStatus.SUCCESS.getValue(), PaymentStatus.REFUND_ALL.getValue(), + ChargeItemContext.MEDICATION.getValue(), ChargeItemContext.DEVICE.getValue(), + ChargeItemContext.ACTIVITY.getValue(), ChargeItemContext.REGISTER.getValue(), 3); + + } else { + return R.fail(PromptMsgConstant.Report.M00002); + } + + // 年龄 性别 医保等级 状态转换 + chargeReportList.getRecords().forEach(infoDto -> { + infoDto.setAge(AgeCalculatorUtil.getAge(infoDto.getBirthDate())); + infoDto + .setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, infoDto.getGenderEnum())); + infoDto.setChrgitmLv_enumText(EnumUtils.getInfoByValue(InsuranceLevel.class, infoDto.getChrgitmLv())); + }); + + // 提取所有数据 + List content = chargeReportList.getRecords(); + // 按 busNo 分组,并合计 totalPrice + Map subtotalAmount = content.stream() + .collect(Collectors.groupingBy( + ChargeReportPageDto::getBusNo, + Collectors.reducing( + BigDecimal.ZERO, // 初始值 + dto -> dto.getTotalPrice() != null ? dto.getTotalPrice() : BigDecimal.ZERO, + BigDecimal::add) // 累加操作 + ) + ); + + // 更新每条数据的 Price 字段 + for (ChargeReportPageDto dto : content) { + String busNo = dto.getBusNo(); + dto.setSubtotalAmount(subtotalAmount.get(busNo)); + } + chargeReportList.setRecords(content); + + return R.ok(chargeReportList); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/IPrintReportAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/IPrintReportAppServiceImpl.java new file mode 100644 index 00000000..b869d118 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/IPrintReportAppServiceImpl.java @@ -0,0 +1,226 @@ +package com.openhis.web.reportmanage.appservice.impl; + +import java.util.List; + +import com.openhis.web.reportmanage.dto.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +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.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.AccountType; +import com.openhis.common.enums.AdministrativeGender; +import com.openhis.common.enums.ClinicalStatus; +import com.openhis.common.enums.Whether; +import com.openhis.common.enums.ybenums.YbRxItemTypeCode; +import com.openhis.common.utils.EnumUtils; +import com.openhis.web.reportmanage.appservice.IPrintReportAppService; +import com.openhis.web.reportmanage.mapper.PrintReportMapper; +import com.openhis.workflow.service.IServiceRequestService; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * 院内处方和医嘱报告打印 接口实现类 + * + * @author liuhr + * @date 2025/5/6 + */ +@Service +public class IPrintReportAppServiceImpl implements IPrintReportAppService { + + @Autowired + private PrintReportMapper printReportMapper; + @Autowired + private IServiceRequestService serviceRequestService; + + /** + * 打印——处置单 + * + * @param encounterId 患者就诊Id + * @return 处置单信息 + */ + @Override + public R disposalPrint(Long encounterId) { + + List disposalList = printReportMapper.getDisposalList(encounterId); + + // 获取所属医院id + Long hospitalId = SecurityUtils.getLoginUser().getHospitalId(); + + disposalList.forEach(e -> { + // 医院名 + e.setOrgId(hospitalId); + // 回显性别 + e.setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, e.getGenderEnum())); + // 计算年龄 + e.setAge(AgeCalculatorUtil.getAge(e.getBirthDate())); + }); + + return R.ok(disposalList); + } + + /** + * 打印——检查申请单 + * + * @param encounterId 患者就诊Id + * @return 检查申请单信息 + */ + @Override + public R checkApplicationPrint(Long encounterId) { + + List checkList = + printReportMapper.getCheckInspectionList(encounterId, YbRxItemTypeCode.MEDICAL_IMAGING.getValue()); + + // 获取所属医院id + Long hospitalId = SecurityUtils.getLoginUser().getHospitalId(); + + checkList.forEach(e -> { + // 医院名 + e.setOrgId(hospitalId); + // 回显性别 + e.setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, e.getGenderEnum())); + // 计算年龄 + e.setAge(AgeCalculatorUtil.getAge(e.getBirthDate())); + }); + + return R.ok(checkList); + } + + /** + * 打印——检验申请单 + * + * @param encounterId 患者就诊Id + * @return 检验申请单信息 + */ + @Override + public R inspectionApplicationPrint(Long encounterId) { + List inspectionList = + printReportMapper.getCheckInspectionList(encounterId, YbRxItemTypeCode.LAB_TEST.getValue()); + + // 获取所属医院id + Long hospitalId = SecurityUtils.getLoginUser().getHospitalId(); + + inspectionList.forEach(e -> { + // 医院名 + e.setOrgId(hospitalId); + // 回显性别 + e.setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, e.getGenderEnum())); + // 计算年龄 + e.setAge(AgeCalculatorUtil.getAge(e.getBirthDate())); + }); + + return R.ok(inspectionList); + } + + /** + * 打印——处方单 + * + * @param prescriptionNo 院内处方编号 + * @param encounterId 患者就诊Id + * @return 处方单信息 + */ + @Override + public R prescriptionPrint(String prescriptionNo, Long encounterId) { + + List list = printReportMapper.getPrescriptionList(prescriptionNo, encounterId); + // 获取所属医院id + Long hospitalId = SecurityUtils.getLoginUser().getHospitalId(); + + list.forEach(e -> { + // 医院名 + e.setOrgId(hospitalId); + // 性别枚举类回显赋值 + e.setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, e.getGenderEnum())); + // 计算年龄 + e.setAge(AgeCalculatorUtil.getAge(e.getBirthDate())); + // 是否慢病 + e.setNcdsFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getNcdsFlag())); + // 费别 + e.setTypeCode_enumText(EnumUtils.getInfoByCode(AccountType.class, e.getTypeCode())); + // 皮试结果 + e.setPsResult(EnumUtils.getInfoByValue(ClinicalStatus.class, e.getClinicalStatusEnum())); + + switch (e.getPharmacologyCategoryCode()) { + case "2": // 麻醉药品 + e.setPharmacologyCategoryCode_Text("麻醉"); + case "3": // 毒性药品 + e.setPharmacologyCategoryCode_Text("毒性"); + case "4": // 一类精神药 + e.setPharmacologyCategoryCode_Text("精一"); + case "5": // 二类精神药 + e.setPharmacologyCategoryCode_Text("精二"); + default: // 普通药品 + e.setPharmacologyCategoryCode_Text("普通"); + } + }); + + return R.ok(list); + } + + /** + * 打印——护士输液的瓶签 + * + * @param serviceId 服务请求id + * @param encounterId 就诊id + * @param groupId 药品组id + * @return 输液的瓶签 + */ + public R bottleLabelPrint(Long serviceId, Long encounterId, Long groupId) { + + List bottleLabelList = printReportMapper.getBottleLabelList(serviceId, encounterId, groupId); + // 获取所属医院id + Long hospitalId = SecurityUtils.getLoginUser().getHospitalId(); + + bottleLabelList.forEach(e -> { + // 医院名 + e.setOrgId(hospitalId); + // 回显性别 + e.setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, e.getGenderEnum())); + // 计算年龄 + e.setAge(AgeCalculatorUtil.getAge(e.getBirthDate())); + }); + + return R.ok(bottleLabelList); + } + + /** + * 打印——护士输液的瓶签 批量 + * + * @param @return 输液的瓶签 + */ + @Override + public R bottleLabelBatchPrint(List serviceIds, + List encounterIds) { + List bottleLabelList = printReportMapper.getBottleLabelBatchList(serviceIds, encounterIds); + // 获取所属医院id + Long hospitalId = SecurityUtils.getLoginUser().getHospitalId(); + + bottleLabelList.forEach(e -> { + // 医院名 + e.setOrgId(hospitalId); + // 回显性别 + e.setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, e.getGenderEnum())); + // 计算年龄 + e.setAge(AgeCalculatorUtil.getAge(e.getBirthDate())); + }); + + return R.ok(bottleLabelList); + } + + /** + * 更新打印次数——护士输液的瓶签的打印次数 + * + * @param serviceId 服务请求id + * @param num 打印次数 + * @return 更新结果 + */ + public R updatePrintCount(Long serviceId, Integer num) { + + serviceRequestService.updateCountPint(serviceId, num); + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[]{"打印次数"})); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InboundReportAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InboundReportAppServiceImpl.java new file mode 100644 index 00000000..950b4f4c --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InboundReportAppServiceImpl.java @@ -0,0 +1,96 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.appservice.impl; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.stream.Collectors; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import com.openhis.administration.domain.Supplier; +import com.openhis.administration.service.ISupplierService; +import com.openhis.common.enums.*; +import com.openhis.web.reportmanage.dto.InboundReportInitDto; +import com.openhis.web.reportmanage.dto.OutboundReportInitDto; +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.constant.CommonConstants; +import com.openhis.common.utils.EnumUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.reportmanage.appservice.IInboundReportAppService; +import com.openhis.web.reportmanage.dto.InboundReportPageDto; +import com.openhis.web.reportmanage.dto.InboundReportSearchParam; +import com.openhis.web.reportmanage.mapper.InboundReportMapper; + +/** + * 入库明细报表 impl + * + * @author GYY + * @date 2025-04-22 + */ +@Service +public class InboundReportAppServiceImpl implements IInboundReportAppService { + + @Autowired + private InboundReportMapper inboundReportMapperMapper; + + @Resource + private ISupplierService supplierService; + + /** + * 入库明细页面初始化 + * + * @return 初始化信息 + */ + @Override + public R init() { + + InboundReportInitDto initDto = new InboundReportInitDto(); + // 查询供应商列表 + List supplierList = supplierService.getList(); + + // 供应商信息 + List supplierListOptions = supplierList.stream() + .map(supplier -> new InboundReportInitDto.supplierListOption(supplier.getId(), supplier.getName())) + .collect(Collectors.toList()); + + initDto.setSupplierListOptions(supplierListOptions); + + return R.ok(initDto); + } + + /** + * 入库明细列表 + * + * @param inboundReportSearchParam 入库明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 入库明细 + */ + @Override + public R getPage(InboundReportSearchParam inboundReportSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request) { + + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(inboundReportSearchParam, + searchKey, new HashSet<>(Arrays.asList("supply_bus_no", "name", "bus_no")), request); + + // 查询入库明细分页列表 + Page inboundReportPage = inboundReportMapperMapper.selectInboundReportPage( + new Page<>(pageNo, pageSize), queryWrapper, CommonConstants.TableName.MED_MEDICATION_DEFINITION, + CommonConstants.TableName.ADM_DEVICE_DEFINITION, SupplyType.PURCHASE_INVENTORY.getValue(), + SupplyStatus.AGREE.getValue(), EventStatus.COMPLETED.getValue()); + + return R.ok(inboundReportPage); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InventoryProductReportAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InventoryProductReportAppServiceImpl.java new file mode 100644 index 00000000..4a882af5 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/InventoryProductReportAppServiceImpl.java @@ -0,0 +1,73 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.appservice.impl; + +import javax.servlet.http.HttpServletRequest; + +import com.openhis.common.constant.CommonConstants; +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.enums.CategoryType; +import com.openhis.common.enums.ConditionCode; +import com.openhis.common.enums.LocationForm; +import com.openhis.common.utils.EnumUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.reportmanage.appservice.IInventoryProductReportAppService; +import com.openhis.web.reportmanage.dto.InventoryProductReportPageDto; +import com.openhis.web.reportmanage.dto.InventoryProductReportSearchParam; +import com.openhis.web.reportmanage.mapper.InventoryProductReportMapper; + +import java.util.HashSet; + +/** + * 库存商品明细报表 impl + * + * @author GYY + * @date 2025-04-21 + */ +@Service +public class InventoryProductReportAppServiceImpl implements IInventoryProductReportAppService { + + @Autowired + private InventoryProductReportMapper inventoryProductReportMapper; + + /** + * 库存商品明细列表 + * + * @param inventoryProductReportSearchParam 库存商品明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 库存商品明细 + */ + @Override + public R getPage(InventoryProductReportSearchParam inventoryProductReportSearchParam, Integer pageNo, + Integer pageSize, String searchKey, HttpServletRequest request) { + + // 设置模糊查询的字段名 + HashSet searchFields = new HashSet<>(); + searchFields.add(CommonConstants.FieldName.BusNo); + + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(inventoryProductReportSearchParam, searchKey, searchFields, request); + + // 查询库存商品明细分页列表 + Page productReportPage = inventoryProductReportMapper.selectProductReportPage( + new Page<>(pageNo, pageSize), queryWrapper, ConditionCode.LOT_NUMBER.getValue().toString()); + + productReportPage.getRecords().forEach(e -> { + // 药品类型 + e.setItemTableText(EnumUtils.getInfoByValue(CategoryType.class, e.getItemTable())); + // 仓库类型 + e.setPurposeTypeEnum_enumText(EnumUtils.getInfoByValue(LocationForm.class, e.getPurposeTypeEnum())); + }); + return R.ok(productReportPage); + } +} \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/LossReportAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/LossReportAppServiceImpl.java new file mode 100644 index 00000000..1f2a564f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/LossReportAppServiceImpl.java @@ -0,0 +1,69 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.appservice.impl; + +import java.util.Arrays; +import java.util.HashSet; + +import javax.servlet.http.HttpServletRequest; + +import com.openhis.web.reportmanage.appservice.ILossReportAppService; +import com.openhis.web.reportmanage.dto.LossReportPageDto; +import com.openhis.web.reportmanage.dto.LossReportSearchParam; +import com.openhis.web.reportmanage.mapper.LossReportMapper; +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.constant.CommonConstants; +import com.openhis.common.enums.EventStatus; +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; + +/** + * 报损明细报表 impl + * + * @author ym + * @date 2025-05-21 + */ +@Service +public class LossReportAppServiceImpl implements ILossReportAppService { + + @Autowired + private LossReportMapper lossReportMapper; + + /** + * 报损明细列表 + * + * @param lossReportSearchParam 报损明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 报损明细 + */ + @Override + public R getPage(LossReportSearchParam lossReportSearchParam, Integer pageNo, Integer pageSize, String searchKey, + HttpServletRequest request) { + + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(lossReportSearchParam, + searchKey, new HashSet<>(Arrays.asList("name", "bus_no")), request); + + // 查询报损明细分页列表 + Page lossReportPage = lossReportMapper.selectLossReportPage(new Page<>(pageNo, pageSize), + queryWrapper, CommonConstants.TableName.MED_MEDICATION_DEFINITION, + CommonConstants.TableName.ADM_DEVICE_DEFINITION, SupplyType.LOSS_REPORT_FORM.getValue(), + SupplyStatus.AGREE.getValue(), EventStatus.COMPLETED.getValue()); + + return R.ok(lossReportPage); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/OutboundReportAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/OutboundReportAppServiceImpl.java new file mode 100644 index 00000000..5926cd09 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/OutboundReportAppServiceImpl.java @@ -0,0 +1,97 @@ +package com.openhis.web.reportmanage.appservice.impl; + +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.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import com.openhis.administration.domain.Practitioner; +import com.openhis.administration.domain.Supplier; +import com.openhis.administration.service.ISupplierService; +import com.openhis.common.enums.*; +import com.openhis.web.inventorymanage.dto.PurchaseInventoryInitDto; +import com.openhis.web.reportmanage.dto.OutboundReportInitDto; +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.constant.CommonConstants; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.reportmanage.appservice.IOutboundReportAppService; +import com.openhis.web.reportmanage.dto.OutboundReportPageDto; +import com.openhis.web.reportmanage.dto.OutboundReportSearchParam; +import com.openhis.web.reportmanage.mapper.OutboundReportMapper; + +/** + * 入库明细 应用实现类 + * + * @author yuanzs + * @date 2025/4/21 + */ +@Service +public class OutboundReportAppServiceImpl implements IOutboundReportAppService { + + @Autowired + OutboundReportMapper outboundReportMapper; + + @Resource + private ISupplierService supplierService; + + /** + * 出库明细页面初始化 + * + * @return 初始化信息 + */ + @Override + public R init() { + + OutboundReportInitDto initDto = new OutboundReportInitDto(); + // 查询供应商列表 + List supplierList = supplierService.getList(); + + // 供应商信息 + List supplierListOptions = supplierList.stream() + .map(supplier -> new OutboundReportInitDto.supplierListOption(supplier.getId(), supplier.getName())) + .collect(Collectors.toList()); + + initDto.setSupplierListOptions(supplierListOptions); + + return R.ok(initDto); + } + + /** + * 出库明细 + * + * @param outboundReportSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 出库明细分页列表 + */ + @Override + public R getPage(OutboundReportSearchParam outboundReportSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request) { + + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(outboundReportSearchParam, searchKey, + new HashSet<>(Arrays.asList("supply_bus_no", "name", "bus_no")), request); + + // 查询出库明细分页列表 + Page medDetailsPage = + outboundReportMapper.selectOutboundReportPage(new Page<>(pageNo, pageSize), queryWrapper, + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, + SupplyType.ISSUE_INVENTORY.getValue(), SupplyStatus.AGREE.getValue(), EventStatus.COMPLETED.getValue()); + + return R.ok(medDetailsPage); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/PurchaseReturnReportAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/PurchaseReturnReportAppServiceImpl.java new file mode 100644 index 00000000..3a707498 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/PurchaseReturnReportAppServiceImpl.java @@ -0,0 +1,94 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.appservice.impl; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.stream.Collectors; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import com.openhis.web.reportmanage.appservice.PurchaseReturnReportAppService; +import com.openhis.web.reportmanage.dto.*; +import com.openhis.web.reportmanage.mapper.PurchaseReturnReportMapper; +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.administration.domain.Supplier; +import com.openhis.administration.service.ISupplierService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.enums.EventStatus; +import com.openhis.common.enums.SupplyStatus; +import com.openhis.common.enums.SupplyType; +import com.openhis.common.utils.HisQueryUtils; + +/** + * 采购退货明细报表 impl + * + * @author ym + * @date 2025-05-23 + */ +@Service +public class PurchaseReturnReportAppServiceImpl implements PurchaseReturnReportAppService { + + @Autowired + private PurchaseReturnReportMapper purchaseReturnReportMapper; + + @Resource + private ISupplierService supplierService; + + /** + * 采购退货明细页面初始化 + * + * @return 初始化信息 + */ + @Override + public R init() { + + PurchaseReturnReportInitDto initDto = new PurchaseReturnReportInitDto(); + // 查询供应商列表 + List supplierList = supplierService.getList(); + + // 供应商信息 + List supplierListOptions = supplierList.stream() + .map(supplier -> new PurchaseReturnReportInitDto.supplierListOption(supplier.getId(), supplier.getName())) + .collect(Collectors.toList()); + + initDto.setSupplierListOptions(supplierListOptions); + + return R.ok(initDto); + } + + /** + * 采购退货明细列表 + * + * @param purchaseReturnReportSearchParam 采购退货明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 采购退货明细 + */ + @Override + public R getPage(PurchaseReturnReportSearchParam purchaseReturnReportSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request) { + + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(purchaseReturnReportSearchParam, + searchKey, new HashSet<>(Arrays.asList("supply_bus_no", "name", "bus_no")), request); + + // 查询采购退货明细分页列表 + Page purchaseReturnReportPageDto = purchaseReturnReportMapper.selectPurchaseReturnReportPage( + new Page<>(pageNo, pageSize), queryWrapper, CommonConstants.TableName.MED_MEDICATION_DEFINITION, + CommonConstants.TableName.ADM_DEVICE_DEFINITION, SupplyType.PRODUCT_RETURN.getValue(), + SupplyStatus.AGREE.getValue(), EventStatus.COMPLETED.getValue()); + + return R.ok(purchaseReturnReportPageDto); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/RegisterReportAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/RegisterReportAppServiceImpl.java new file mode 100644 index 00000000..cd9fd660 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/RegisterReportAppServiceImpl.java @@ -0,0 +1,106 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +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.R; +import com.openhis.administration.domain.Organization; +import com.openhis.administration.domain.Practitioner; +import com.openhis.administration.service.IOrganizationService; +import com.openhis.administration.service.IPractitionerService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.enums.*; +import com.openhis.common.utils.EnumUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.reportmanage.appservice.IRegisterReportAppService; +import com.openhis.web.reportmanage.appservice.IRegisterReportAppService; +import com.openhis.web.reportmanage.dto.ChargeReportInitDto; +import com.openhis.web.reportmanage.dto.RegisterReportInitDto; +import com.openhis.web.reportmanage.dto.RegisterReportPageDto; +import com.openhis.web.reportmanage.dto.RegisterReportSearchParam; +import com.openhis.web.reportmanage.mapper.RegisterReportMapper; +import com.openhis.web.reportmanage.mapper.RegisterReportMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.HashSet; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * 挂号明细报表 impl + * + * @author yuxj + * @date 2025-05-20 + */ +@Service +public class RegisterReportAppServiceImpl implements IRegisterReportAppService { + + @Autowired + private RegisterReportMapper registerReportMapper; + @Resource + private IPractitionerService practitionerService; + @Resource + private IOrganizationService organizationService; + + /** + * 下拉框 + * + * @return 下拉框信息 + */ + @Override + public R registerReportInit() { + RegisterReportInitDto initDto = new RegisterReportInitDto(); + // 查询科室列表 + List organizationList = + organizationService.getList(OrganizationType.DEPARTMENT.getValue(), OrganizationClass.CLINIC.getValue()); + // 科室 + List departmentOptions = organizationList.stream() + .map(organization -> new RegisterReportInitDto.longCommonStatusOption(organization.getId(), + organization.getName())) + .collect(Collectors.toList()); + // 查询医生列表 + List applicantList = practitionerService.getList(); + + initDto.setDoctorOptions(applicantList).setDepartmentOptions(departmentOptions); + return R.ok(initDto); + } + + /** + * 挂号明细列表 + * + * @param registerReportSearchParam 挂号明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 挂号明细 + */ + @Override + public R getPage(RegisterReportSearchParam registerReportSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request) { + + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(registerReportSearchParam, searchKey, null, request); + + // 查询挂号明细分页列表 + Page registerReportPage = + registerReportMapper.selectRegisterReportPage(new Page<>(pageNo, pageSize), queryWrapper, + ChargeItemContext.REGISTER.getValue(), ParticipantType.REGISTRATION_DOCTOR.getCode(), + PaymentStatus.SUCCESS.getValue(), PaymentStatus.REFUND_ALL.getValue()); + // 状态转换 单位 + registerReportPage.getRecords().forEach(infoDto -> { + if (infoDto.getQuantityUnit() == null || infoDto.getQuantityUnit().isEmpty()) { + infoDto.setQuantityUnit_dictText("次"); + } + }); + + return R.ok(registerReportPage); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/ReturnIssueReportAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/ReturnIssueReportAppServiceImpl.java new file mode 100644 index 00000000..10a24bf1 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/ReturnIssueReportAppServiceImpl.java @@ -0,0 +1,93 @@ +package com.openhis.web.reportmanage.appservice.impl; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.stream.Collectors; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import com.openhis.web.reportmanage.appservice.IReturnIssueReportAppService; +import com.openhis.web.reportmanage.dto.*; +import com.openhis.web.reportmanage.mapper.ReturnIssueReportMapper; +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.administration.domain.Supplier; +import com.openhis.administration.service.ISupplierService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.enums.EventStatus; +import com.openhis.common.enums.SupplyStatus; +import com.openhis.common.enums.SupplyType; +import com.openhis.common.utils.HisQueryUtils; + +/** + * 领用退库明细 应用实现类 + * + * @author ym + * @date 2025-05-23 + */ +@Service +public class ReturnIssueReportAppServiceImpl implements IReturnIssueReportAppService { + + @Autowired + ReturnIssueReportMapper returnIssueReportMapper; + + @Resource + private ISupplierService supplierService; + + /** + * 退库明细页面初始化 + * + * @return 初始化信息 + */ + @Override + public R init() { + + ReturnIssueReportInitDto initDto = new ReturnIssueReportInitDto(); + // 查询供应商列表 + List supplierList = supplierService.getList(); + + // 供应商信息 + List supplierListOptions = supplierList.stream() + .map(supplier -> new ReturnIssueReportInitDto.supplierListOption(supplier.getId(), supplier.getName())) + .collect(Collectors.toList()); + + initDto.setSupplierListOptions(supplierListOptions); + + return R.ok(initDto); + } + + /** + * 退库明细 + * + * @param returnIssueReportSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 退库明细分页列表 + */ + @Override + public R getPage(ReturnIssueReportSearchParam returnIssueReportSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request) { + + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(returnIssueReportSearchParam, searchKey, + new HashSet<>(Arrays.asList("supply_bus_no", "name", "bus_no")), request); + + // 查询退库明细分页列表 + Page medDetailsPage = + returnIssueReportMapper.selectReturnIssueReportPage(new Page<>(pageNo, pageSize), queryWrapper, + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, + SupplyType.RETURN_ISSUE.getValue(), SupplyStatus.AGREE.getValue(), EventStatus.COMPLETED.getValue()); + + return R.ok(medDetailsPage); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/StocktakingReportAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/StocktakingReportAppServiceImpl.java new file mode 100644 index 00000000..a043f39c --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/StocktakingReportAppServiceImpl.java @@ -0,0 +1,73 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.appservice.impl; + +import java.util.Arrays; +import java.util.HashSet; + +import javax.servlet.http.HttpServletRequest; + +import com.openhis.common.enums.EventStatus; +import com.openhis.web.inventorymanage.dto.ProductDetailsSearchParam; +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.constant.CommonConstants; +import com.openhis.common.enums.CategoryType; +import com.openhis.common.enums.SupplyStatus; +import com.openhis.common.enums.SupplyType; +import com.openhis.common.utils.EnumUtils; +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; + +/** + * 库存盘点明细报表 impl + * + * @author GYY + * @date 2025-04-16 + */ +@Service +public class StocktakingReportAppServiceImpl implements IStocktakingReportAppService { + + @Autowired + private StocktakingReportMapper stocktakingReportMapper; + + /** + * 库存盘点明细列表 + * + * @param stocktakingReportSearchParam 库存盘点明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 库存盘点明细 + */ + @Override + public R getPage(StocktakingReportSearchParam stocktakingReportSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request) { + + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper( + stocktakingReportSearchParam, searchKey, new HashSet<>(Arrays.asList("name", "bus_no")), request); + + // 查询库存盘点明细分页列表 + Page stocktakingReportPage = + stocktakingReportMapper.selectStocktakingReportPage(new Page<>(pageNo, pageSize), queryWrapper, + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, + SupplyType.PRODUCT_STOCKTAKING.getValue(), SupplyType.PRODUCT_BATCH_STOCKTAKING.getValue(), + SupplyStatus.AGREE.getValue(), EventStatus.COMPLETED.getValue()); + + // stocktakingReportPage.getRecords().forEach(e -> { + // // 药品类型 + // e.setItemTableText(EnumUtils.getInfoByValue(CategoryType.class, e.getItemTable())); + // }); + return R.ok(stocktakingReportPage); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/TransferReportAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/TransferReportAppServiceImpl.java new file mode 100644 index 00000000..1ae099e1 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/TransferReportAppServiceImpl.java @@ -0,0 +1,72 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.appservice.impl; + +import java.util.Arrays; +import java.util.HashSet; + +import javax.servlet.http.HttpServletRequest; + +import com.openhis.common.enums.EventStatus; +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.constant.CommonConstants; +import com.openhis.common.enums.CategoryType; +import com.openhis.common.enums.SupplyStatus; +import com.openhis.common.enums.SupplyType; +import com.openhis.common.utils.EnumUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.reportmanage.appservice.ITransferReportAppService; +import com.openhis.web.reportmanage.dto.TransferReportPageDto; +import com.openhis.web.reportmanage.dto.TransferReportSearchParam; +import com.openhis.web.reportmanage.mapper.TransferReportMapper; + +/** + * 商品调拨明细报表 impl + * + * @author GYY + * @date 2025-04-15 + */ +@Service +public class TransferReportAppServiceImpl implements ITransferReportAppService { + + @Autowired + private TransferReportMapper transferReportMapper; + + /** + * 商品调拨明细列表 + * + * @param transferReportSearchParam 商品调拨明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 商品调拨明细 + */ + @Override + public R getPage(TransferReportSearchParam transferReportSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request) { + + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper( + transferReportSearchParam, searchKey, new HashSet<>(Arrays.asList("name", "supply_bus_no")), request); + + // 查询商品调拨明细分页列表 + Page transferReportPage = + transferReportMapper.selectTransferReportPage(new Page<>(pageNo, pageSize), queryWrapper, + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, + SupplyType.PRODUCT_TRANSFER.getValue(), SupplyType.PRODUCT_BATCH_TRANSFER.getValue(), + SupplyStatus.AGREE.getValue(), EventStatus.COMPLETED.getValue()); + + transferReportPage.getRecords().forEach(e -> { + // 单据状态 + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum())); + }); + return R.ok(transferReportPage); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/ChargeReportController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/ChargeReportController.java new file mode 100644 index 00000000..bf39e14c --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/ChargeReportController.java @@ -0,0 +1,59 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.controller; + +import com.core.common.core.domain.R; +import com.openhis.web.reportmanage.appservice.IChargeReportAppService; +import com.openhis.web.reportmanage.dto.ChargeReportSearchParam; +import lombok.extern.slf4j.Slf4j; +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.openhis.common.enums.*; + +import javax.servlet.http.HttpServletRequest; + +/** + * 费用明细报表 controller + * + * @author yuxj + * @date 2025-05-20 + */ +@RestController +@RequestMapping("/report-manage/charge") +@Slf4j +public class ChargeReportController { + + @Autowired + private IChargeReportAppService chargeReportAppService; + /** + * 下拉框 + * + * @return 下拉框信息 + */ + @GetMapping("/init") + public R chargeReportInit() { + return chargeReportAppService.chargeReportInit(); + } + + /** + * 费用明细列表 + * + * @param chargeReportSearchParam 费用明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 费用明细 + */ + @GetMapping(value = "/report-charge-page") + public R getPage(ChargeReportSearchParam chargeReportSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "searchKey", required = false) String searchKey, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { + return chargeReportAppService.getPage(chargeReportSearchParam, pageNo, pageSize, searchKey, request); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InboundReportController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InboundReportController.java new file mode 100644 index 00000000..f862ae2c --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InboundReportController.java @@ -0,0 +1,61 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.controller; + +import javax.servlet.http.HttpServletRequest; + +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.IInboundReportAppService; +import com.openhis.web.reportmanage.dto.InboundReportSearchParam; + +import lombok.extern.slf4j.Slf4j; + +/** + * 入库明细报表 controller + * + * @author GYY + * @date 2025-04-22 + */ +@RestController +@RequestMapping("/report-manage/inbound") +@Slf4j +public class InboundReportController { + + @Autowired + private IInboundReportAppService inboundReportAppService; + + /** + * 入库明细页面初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R init() { + return inboundReportAppService.init(); + } + + /** + * 入库明细列表 + * + * @param inboundReportSearchParam 入库明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 入库明细 + */ + @GetMapping(value = "/report-inbound-page") + public R getPage(InboundReportSearchParam inboundReportSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return inboundReportAppService.getPage(inboundReportSearchParam, pageNo, pageSize, searchKey, request); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InventoryProductReportController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InventoryProductReportController.java new file mode 100644 index 00000000..b36d41a4 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/InventoryProductReportController.java @@ -0,0 +1,52 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.controller; + +import javax.servlet.http.HttpServletRequest; + +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.IInventoryProductReportAppService; +import com.openhis.web.reportmanage.dto.InventoryProductReportSearchParam; + +import lombok.extern.slf4j.Slf4j; + +/** + * 库存商品明细报表 controller + * + * @author GYY + * @date 2025-04-21 + */ +@RestController +@RequestMapping("/report-manage/inventory-product") +@Slf4j +public class InventoryProductReportController { + + @Autowired + private IInventoryProductReportAppService inventoryProductReportAppService; + + /** + * 库存商品明细列表 + * + * @param inventoryProductReportSearchParam 库存商品明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 库存盘点明细 + */ + @GetMapping(value = "/report-product-page") + public R getPage(InventoryProductReportSearchParam inventoryProductReportSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return inventoryProductReportAppService.getPage(inventoryProductReportSearchParam, pageNo, pageSize, searchKey, + request); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/LossReportController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/LossReportController.java new file mode 100644 index 00000000..618cec94 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/LossReportController.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 com.openhis.web.reportmanage.appservice.ILossReportAppService; +import com.openhis.web.reportmanage.dto.LossReportSearchParam; +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.IStocktakingReportAppService; +import com.openhis.web.reportmanage.dto.StocktakingReportSearchParam; + +import lombok.extern.slf4j.Slf4j; + +/** + * 报损明细报表 controller + * + * @author ym + * + * @date 2025-05-21 + */ +@RestController +@RequestMapping("/report-manage/loss") +@Slf4j +public class LossReportController { + + @Autowired + private ILossReportAppService lossReportAppService; + + /** + * 报损明细列表 + * + * @param lossReportSearchParam 报损明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 报损明细 + */ + @GetMapping(value = "/report-loss-page") + public R getPage(LossReportSearchParam lossReportSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return lossReportAppService.getPage(lossReportSearchParam, pageNo, pageSize, searchKey, request); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/OutboundReportController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/OutboundReportController.java new file mode 100644 index 00000000..8967e1ce --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/OutboundReportController.java @@ -0,0 +1,61 @@ +package com.openhis.web.reportmanage.controller; + +import javax.servlet.http.HttpServletRequest; + +import com.openhis.web.reportmanage.appservice.IOutboundReportAppService; +import lombok.AllArgsConstructor; +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.dto.OutboundReportSearchParam; + +import lombok.extern.slf4j.Slf4j; + +/** + * 出库明细报表 controller + * + * @author yuanzs + * @date 2025-04-21 + */ +@RestController +@RequestMapping("/report-manage/outbound") +@Slf4j +@AllArgsConstructor +public class OutboundReportController { + + @Autowired + private IOutboundReportAppService outboundReportAppService; + + /** + * 出库明细页面初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R init() { + return outboundReportAppService.init(); + } + + /** + * 出库明细 + * + * @param outboundReportSearchParam 出库明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 出库明细分页列表 + */ + @GetMapping(value = "/report-outbound-page") + public R getPage(OutboundReportSearchParam outboundReportSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return outboundReportAppService.getPage(outboundReportSearchParam, pageNo, pageSize, searchKey, request); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/PrintReportController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/PrintReportController.java new file mode 100644 index 00000000..8d2c433a --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/PrintReportController.java @@ -0,0 +1,121 @@ +package com.openhis.web.reportmanage.controller; + +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.IPrintReportAppService; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import java.util.List; + +/** + * 院内处方和医嘱报告打印 + * + * @author liuhr + * @date 2025/5/6 + */ +@RestController +@RequestMapping("/report-manage/print") +@Slf4j +@AllArgsConstructor +public class PrintReportController { + + @Autowired + private IPrintReportAppService printReportService; + + /** + * 打印——处置单 + * + * @param encounterId 患者就诊Id + * @return 处置单信息 + */ + @GetMapping(value = "/disposal-print") + public R disposalPrint(@RequestParam Long encounterId) { + + return printReportService.disposalPrint(encounterId); + } + + /** + * 打印——检验申请单 + * + * @param encounterId 患者就诊Id + * @return 检验申请单信息 + */ + @GetMapping(value = "/check-print") + public R checkApplicationPrint(@RequestParam Long encounterId) { + return printReportService.checkApplicationPrint(encounterId); + } + + /** + * 打印——检验申请单 + * + * @param encounterId 患者就诊Id + * @return 检验申请单信息 + */ + @GetMapping(value = "/inspection-print") + public R inspectionApplicationPrint(@RequestParam Long encounterId) { + return printReportService.inspectionApplicationPrint(encounterId); + } + + /** + * 打印——处方单 + * + * @param prescriptionNo 院内处方编号 + * @param encounterId 患者就诊Id + * @return 处方单信息 + */ + @GetMapping(value = "/prescription-print") + public R prescriptionPrint(@RequestParam String prescriptionNo, @RequestParam Long encounterId) { + return printReportService.prescriptionPrint(prescriptionNo, encounterId); + } + + /** + * 打印——护士输液的瓶签 + * + * @param serviceId 服务请求id + * @param encounterId 就诊id + * @param groupId 药品组id + * @return 输液的瓶签 + */ + @GetMapping(value = "/bottle-label-print") + public R bottleLabelPrint(@RequestParam Long serviceId, @RequestParam Long encounterId, + @RequestParam Long groupId) { + return printReportService.bottleLabelPrint(serviceId, encounterId, groupId); + } + + /** + * 打印——护士输液的瓶签 批量 + * + * @return 输液的瓶签 + */ + @GetMapping(value = "/bottle-label-batch-print") + public R bottleLabelBatchPrint(@RequestParam List serviceIds, + @RequestParam List encounterIds) { + if (serviceIds == null || serviceIds.isEmpty()) { + return R.fail("serviceIds cannot be null or empty"); + } + if (encounterIds == null || encounterIds.isEmpty()) { + return R.fail("encounterIds cannot be null or empty"); + } + return printReportService.bottleLabelBatchPrint(serviceIds, encounterIds); + } + + /** + * 更新打印次数——护士输液的瓶签的打印次数 + * + * @param serviceId 服务请求id + * @param num 打印次数 + * @return 更新结果 + */ + @GetMapping(value = "/print-count") + public R updatePrintCount(@RequestParam Long serviceId, @RequestParam Integer num) { + return printReportService.updatePrintCount(serviceId, num); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/PurchaseReturnReportController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/PurchaseReturnReportController.java new file mode 100644 index 00000000..8710a701 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/PurchaseReturnReportController.java @@ -0,0 +1,61 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.controller; + +import javax.servlet.http.HttpServletRequest; + +import com.openhis.web.reportmanage.appservice.PurchaseReturnReportAppService; +import com.openhis.web.reportmanage.dto.PurchaseReturnReportSearchParam; +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 lombok.extern.slf4j.Slf4j; + +/** + * 采购退货明细报表 controller + * + * @author ym + * @date 2025-05-23 + */ +@RestController +@RequestMapping("/report-manage/purchase-return") +@Slf4j +public class PurchaseReturnReportController { + + @Autowired + private PurchaseReturnReportAppService purchaseReturnReportAppService; + + /** + * 采购退货明细页面初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R init() { + return purchaseReturnReportAppService.init(); + } + + /** + * 采购退货明细列表 + * + * @param purchaseReturnReportSearchParam 采购退货明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 采购退货明细 + */ + @GetMapping(value = "/report-purchase-return") + public R getPage(PurchaseReturnReportSearchParam purchaseReturnReportSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return purchaseReturnReportAppService.getPage(purchaseReturnReportSearchParam, pageNo, pageSize, searchKey, request); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/RegisterReportController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/RegisterReportController.java new file mode 100644 index 00000000..45abab42 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/RegisterReportController.java @@ -0,0 +1,59 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.controller; + +import com.core.common.core.domain.R; +import com.openhis.web.reportmanage.appservice.IChargeReportAppService; +import com.openhis.web.reportmanage.appservice.IRegisterReportAppService; +import com.openhis.web.reportmanage.dto.RegisterReportSearchParam; +import lombok.extern.slf4j.Slf4j; +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 javax.servlet.http.HttpServletRequest; + +/** + * 挂号明细报表 controller + * + * @author yuxj + * @date 2025-05-20 + */ +@RestController +@RequestMapping("/report-manage/register") +@Slf4j +public class RegisterReportController { + + @Autowired + private IRegisterReportAppService registerReportAppService; + + /** + * 下拉框 + * + * @return 下拉框信息 + */ + @GetMapping("/init") + public R registerReportInit() { + return registerReportAppService.registerReportInit(); + } + /** + * 挂号明细列表 + * + * @param registerReportSearchParam 挂号明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 挂号明细 + */ + @GetMapping(value = "/report-register-page") + public R getPage(RegisterReportSearchParam registerReportSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "searchKey", required = false) String searchKey, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { + return registerReportAppService.getPage(registerReportSearchParam, pageNo, pageSize, searchKey, request); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/ReturnIssueReportController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/ReturnIssueReportController.java new file mode 100644 index 00000000..daca16f4 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/ReturnIssueReportController.java @@ -0,0 +1,61 @@ +package com.openhis.web.reportmanage.controller; + +import javax.servlet.http.HttpServletRequest; + +import com.openhis.web.reportmanage.appservice.IReturnIssueReportAppService; +import com.openhis.web.reportmanage.dto.ReturnIssueReportSearchParam; +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 lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * 领用退库明细报表 controller + * + * @author ym + * @date 2025-05-23 + */ +@RestController +@RequestMapping("/report-manage/return-issue") +@Slf4j +@AllArgsConstructor +public class ReturnIssueReportController { + + @Autowired + private IReturnIssueReportAppService returnIssueReportAppService; + + /** + * 领用退库明细页面初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R init() { + return returnIssueReportAppService.init(); + } + + /** + * 领用退库明细 + * + * @param returnIssueReportSearchParam 领用退库明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 领用退库明细分页列表 + */ + @GetMapping(value = "/report-return-issue") + public R getPage(ReturnIssueReportSearchParam returnIssueReportSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return returnIssueReportAppService.getPage(returnIssueReportSearchParam, pageNo, pageSize, searchKey, request); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/StocktakingReportController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/StocktakingReportController.java new file mode 100644 index 00000000..5258d8af --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/StocktakingReportController.java @@ -0,0 +1,51 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.controller; + +import javax.servlet.http.HttpServletRequest; + +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.IStocktakingReportAppService; +import com.openhis.web.reportmanage.dto.StocktakingReportSearchParam; + +import lombok.extern.slf4j.Slf4j; + +/** + * 库存盘点明细报表 controller + * + * @author GYY + * @date 2025-04-16 + */ +@RestController +@RequestMapping("/report-manage/stocktaking") +@Slf4j +public class StocktakingReportController { + + @Autowired + private IStocktakingReportAppService stocktakingReportAppService; + + /** + * 库存盘点明细列表 + * + * @param stocktakingReportSearchParam 库存盘点明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 库存盘点明细 + */ + @GetMapping(value = "/report-stocktaking-page") + public R getPage(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.getPage(stocktakingReportSearchParam, pageNo, pageSize, searchKey, request); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/TransferReportController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/TransferReportController.java new file mode 100644 index 00000000..a0cc49a8 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/TransferReportController.java @@ -0,0 +1,51 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.controller; + +import javax.servlet.http.HttpServletRequest; + +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 GYY + * @date 2025-04-15 + */ +@RestController +@RequestMapping("/report-manage/transfer") +@Slf4j +public class TransferReportController { + + @Autowired + private ITransferReportAppService transferReportAppService; + + /** + * 商品调拨明细列表 + * + * @param transferReportSearchParam 商品调拨明细查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 商品调拨明细 + */ + @GetMapping(value = "/report-transfer-page") + public R getPage(TransferReportSearchParam transferReportSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "searchKey", required = false) String searchKey, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { + return transferReportAppService.getPage(transferReportSearchParam, pageNo, pageSize, searchKey, request); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/BottleLabelDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/BottleLabelDto.java new file mode 100644 index 00000000..db19157f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/BottleLabelDto.java @@ -0,0 +1,105 @@ +package com.openhis.web.reportmanage.dto; + +import java.math.BigDecimal; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.openhis.common.annotation.Dict; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 护士输液的瓶签实体类 + * + * @author Wuser + * @date 2025/5/10 + */ +@Data +@Accessors(chain = true) +public class BottleLabelDto { + + /** + * 机构名 + */ + @Dict(dictTable = "adm_organization", dictCode = "id", dictText = "name") + private Long orgId; + private String orgId_dictText; + + /** + * 药品请求编码 + */ + private String busNo; + + /** + * 姓名 + */ + private String patientName; + + /** + * 性别 + */ + private Integer genderEnum; + private String genderEnum_enumText; + + /** + * 生日 + */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") + private Date birthDate; + + /** + * 年龄 + */ + private String age; + + /** + * 药品名称 + */ + private String medName; + + /** + * 药品规格 + */ + private String space; + + /** + * 单次剂量 + */ + private BigDecimal dose; + + /** + * 单次剂量单位 + */ + @Dict(dictCode = "unit_code") + private String doseUnitCode; + private String doseUnitCode_dictText; + + /** + * 用药频次 + */ + @Dict(dictCode = "rate_code") + private String rateCode; + private String rateCode_dictText; + + /** + * 用法 + */ + @Dict(dictCode = "method_code") + private String methodCode; + private String methodCode_dictText; + + /** + * 执行时间 + */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date occurrenceStartTime; + + /** + * 执行人 + */ + @Dict(dictTable = "adm_practitioner_role", dictCode = "practitioner_id", dictText = "name") + private Long performerId; + private String performerId_dictText; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ChargeReportInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ChargeReportInitDto.java new file mode 100644 index 00000000..cc497f86 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ChargeReportInitDto.java @@ -0,0 +1,68 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +import com.openhis.administration.domain.Practitioner; +import com.openhis.web.doctorstation.dto.ElepPrescriptionInitDto; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 费用明细报表下拉框 dto + * + * @author yuxj + * @date 2025-05-20 + */ +@Data +@Accessors(chain = true) +public class ChargeReportInitDto { + /** + * 统计类型 + */ + private List statisticsTypeOptions; + /** + * 科室 + */ + private List departmentOptions; + + /** + * 开单人 + */ + private List issuerOptions; + /** + * 收款人 + */ + private List payeeOptions; + + /** + * 项目类型 + */ + private List clinicalTypeOptions; + + + @Data + public static class commonStatusOption { + private Integer value; + private String label; + + public commonStatusOption(Integer value, String label) { + this.value = value; + this.label = label; + } + } + @Data + public static class longCommonStatusOption { + private Long value; + private String label; + + public longCommonStatusOption(Long value, String label) { + this.value = value; + this.label = label; + } + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ChargeReportPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ChargeReportPageDto.java new file mode 100644 index 00000000..24ec7e50 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ChargeReportPageDto.java @@ -0,0 +1,141 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +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.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 费用明细报表 dto + * + * @author yuxj + * @date 2025-05-20 + */ +@Data +@Accessors(chain = true) +public class ChargeReportPageDto { + + /** 支付ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long paymentId; + + /** 费用项ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long chargeId; + + /** + * 小计/合计 + */ + private BigDecimal subtotalAmount; + /** 患者姓名 */ + private String name; + + /** 性别 */ + private Integer genderEnum; + private String genderEnum_enumText; + + /** 出生日期 */ + private Date birthDate; + + /** 年龄 */ + private String age; + + /** 证件号 */ + private String idCard; + + /** 医保号 */ + private String ybCode; + + /** 就诊日期 */ + private String encounterDate; + + /** 患者院内编码/病历号/门诊号 */ + private String busNo; + + @JsonSerialize(using = ToStringSerializer.class) + private Long departmentId; + private String departmentName; + /** + * 项目类型 + */ + private Integer clinicalType; + /** + * 项目名 + */ + private String clinicalName; + /** + * 项目编码 + */ + private String clinicalNo; + + /** + * 医保码 + */ + private String ybNo; + /** + * 医保类别 + */ + @Dict(dictCode = "med_chrgitm_type") + private String type; + private String type_dictText; + /** + * 开单人 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long issuerId; + private String issuerName; + /** + * 收款人 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long payeeId; + private String payeeName; + /** + * 数量 + */ + private BigDecimal number; + /** + * 单位 + */ + @Dict(dictCode = "unit_code") + private String quantityUnit; + private String quantityUnit_dictText; + /** + * 单价 + */ + private BigDecimal price; + + /** + * 金额 + */ + private BigDecimal totalPrice; + + /** + * 收费时间 + */ + private String chargeTime; + + /** + * 规格 + */ + private String totalVolume; + + /** + * 医保等级 + */ + private Integer chrgitmLv; + private String chrgitmLv_enumText; + /** + * 就诊id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterId; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ChargeReportSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ChargeReportSearchParam.java new file mode 100644 index 00000000..22c7dd4f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ChargeReportSearchParam.java @@ -0,0 +1,58 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 费用明细查询条件 + * + * @author yuxj + * @date 2025-05-20 + */ +@Data +@Accessors(chain = true) +public class ChargeReportSearchParam { + + /** + * 统计类型 + */ + private String statisticsType; + /** + * 医保号 + */ + private String ybCode; + /** + * 门诊号 + */ + private String busNo; + /** + * 姓名 + */ + private String name; + + /** + * 科室id + */ + private Long departmentId; + + /** + * 开单人id + */ + private Long issuerId; + /** + * 收款人id + */ + private Long payeeId; + + /** + * 项目类型 + */ + private Integer clinicalType; + /** + * 项目名 + */ + private String clinicalName; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/CkInspAppDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/CkInspAppDto.java new file mode 100644 index 00000000..b0145aab --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/CkInspAppDto.java @@ -0,0 +1,83 @@ +package com.openhis.web.reportmanage.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.openhis.common.annotation.Dict; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 检验,检查申请单 实体类 + * + * @author liuhr + * @date 2025/5/12 + */ +@Data +@Accessors(chain = true) +public class CkInspAppDto { + + /** 机构名 */ + @Dict(dictTable = "adm_organization", dictCode = "id", dictText = "name") + private Long orgId; + private String orgId_dictText; + + /** 姓名 */ + private String patientName; + + /** 性别 */ + private Integer genderEnum; + private String genderEnum_enumText; + + /** 生日 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") + private Date birthDate; + + /** 年龄 */ + private String age; + + /** 电话 */ + private String phone; + + /** 门诊/住院病历号 */ + private String encounterBusNo; + + /** 医保/就诊卡号 */ + private String no; + + /** 执行科室 */ + @Dict(dictTable = "adm_location", dictCode = "id", dictText = "name") + private String locationId; + private String locationId_dictText; + + /** 临床诊断 */ + private String diagName; + + /** 治疗项目名 */ + private String activityName; + + /** 数量 */ + private Integer quantity; + + /** 单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 开具日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date reqAuthoredTime; + + /** 开方医师 */ + @Dict(dictTable = "adm_practitioner_role", dictCode = "practitioner_id", dictText = "name") + private Long dorId; + private String dorId_dictText; + + /** 检查单项目金额 */ + private BigDecimal price; + + /** 检查总金额 */ + private BigDecimal totalPrice; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/DisposalDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/DisposalDto.java new file mode 100644 index 00000000..2f92c480 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/DisposalDto.java @@ -0,0 +1,86 @@ +package com.openhis.web.reportmanage.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.openhis.common.annotation.Dict; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 处置单 实体类 + * + * @author Wuser + * @date 2025/5/10 + */ +@Data +@Accessors(chain = true) +public class DisposalDto { + + /** 机构名 */ + @Dict(dictTable = "adm_organization", dictCode = "id", dictText = "name") + private Long orgId; + private String orgId_dictText; + + /** 服务请求编码 */ + private String busNo; + + /** 姓名 */ + private String patientName; + + /** 性别 */ + private Integer genderEnum; + private String genderEnum_enumText; + + /** 生日 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") + private Date birthDate; + + /** 年龄 */ + private String age; + + /** 电话 */ + private String phone; + + /** 门诊/住院病历号 */ + private String encounterBusNo; + + /** 医保/就诊卡号 */ + private String no; + + /** 科室 */ + @Dict(dictTable = "adm_location", dictCode = "id", dictText = "name") + private String organizationId; + private String organizationId_dictText; + + /** 备注 */ + private String note; + + /** 临床诊断 */ + private String diagName; + + /** 治疗项目名 */ + private String activityName; + + /** 数量 */ + private Integer quantity; + + /** 单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 开具日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date reqAuthoredTime; + + /** 开方医师 */ + @Dict(dictTable = "adm_practitioner_role", dictCode = "practitioner_id", dictText = "name") + private Long dorId; + private String dorId_dictText; + + /** 处置总金额 */ + private BigDecimal totalPrice; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InboundReportInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InboundReportInitDto.java new file mode 100644 index 00000000..6d7faa38 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InboundReportInitDto.java @@ -0,0 +1,43 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.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 ym + * @date 2025-05-23 + */ +@Data +@Accessors(chain = true) +public class InboundReportInitDto { + + /** + * 供应商 + */ + private List supplierListOptions; + + /** + * 供应商 + */ + @Data + public static class supplierListOption { + @JsonSerialize(using = ToStringSerializer.class) + private Long value; + private String label; + + public supplierListOption(Long value, String label) { + this.value = value; + this.label = label; + } + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InboundReportPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InboundReportPageDto.java new file mode 100644 index 00000000..f1fbfafd --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InboundReportPageDto.java @@ -0,0 +1,83 @@ +/* + * 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 GYY + * @date 2025-04-22 + */ +@Data +@Accessors(chain = true) +public class InboundReportPageDto { + + /** 单据号 */ + private String supplyBusno; + + /** 项目名称 */ + private String name; + + /** 编码 */ + private String busNo; + + /** 产品批号 */ + private String lotNumber; + + /** 目的仓库id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long purposeLocationId; + + /** 存放仓库(目的仓库) */ + private String locationName; + + /** 仓库货位 */ + private String locationStoreName; + + /** 计量单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 采购数量 */ + private BigDecimal quantity; + + /** 采购单价 */ + private BigDecimal price; + + /** 采购金额 */ + private BigDecimal totalPrice; + + /** 售价 */ + private BigDecimal salePrice; + + /** 售价金额 */ + private BigDecimal totalSalePrice; + + /** 供应商 */ + private String supplier; + + /** 审批人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + private Long approverId; + private String approverId_dictText; + + /** 制单日期 */ + private Date createTime; + + /** 审批时间 */ + private Date approvalTime; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InboundReportSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InboundReportSearchParam.java new file mode 100644 index 00000000..fccb9b39 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InboundReportSearchParam.java @@ -0,0 +1,38 @@ +/* + * 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 GYY + * @date 2025-04-22 + */ +@Data +@Accessors(chain = true) +public class InboundReportSearchParam { + + /** 单据号 */ + private String supplyBusNo; + + /** 药品名称 */ + private String name; + + /** 编码 */ + private String busNo; + + /** 审核时间 */ + private Date approvalTime; + + /** 目的仓库 */ + private Long purposeLocationId; + + /** 供应商 */ + private Long supplierId; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InventoryProductReportPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InventoryProductReportPageDto.java new file mode 100644 index 00000000..c9ea6c39 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InventoryProductReportPageDto.java @@ -0,0 +1,93 @@ +/* + * 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 lombok.Data; +import lombok.experimental.Accessors; + +/** + * 库存商品明细报表 dto + * + * @author GYY + * @date 2025-04-21 + */ +@Data +@Accessors(chain = true) +public class InventoryProductReportPageDto { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 编码 */ + private String busNo; + + /** 项目名称 */ + private String name; + + /** 产品批号 */ + private String lotNumber; + + /** 厂家 */ + private String manufacturerText; + + /** 项目(药品类型) */ + private Integer itemTable; + private String itemTableText; + + /** 库存数量 */ + private BigDecimal itemQuantity; + + /** 计量单位 */ + private String unitCode; + + /** 小包装库存数 */ + private BigDecimal minPackageQuantity; + + /** 小包装单位 */ + private String minPackageUnit; + + /** 进价(采购单价) */ + private BigDecimal price; + + /** 售价 */ + private BigDecimal salePrice; + + /** 拆零进价 */ + private BigDecimal partPrice; + + /** 拆零售价 */ + private BigDecimal partSalePrice; + + /** 进价金额(总计) */ + private BigDecimal totalPrice; + + /** 售价金额(总计) */ + private BigDecimal totalSalePrice; + + /** 目的仓库类型 */ + private Integer purposeTypeEnum; + private String purposeTypeEnum_enumText; + + /** 仓库 */ + private String locationName; + + /** 仓库货位 */ + private String locationStoreName; + + /** 有效期 */ + private Date expirationDate; + + /** 医保编码 */ + private String ybNo; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InventoryProductReportSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InventoryProductReportSearchParam.java new file mode 100644 index 00000000..0e541cd7 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/InventoryProductReportSearchParam.java @@ -0,0 +1,41 @@ +/* + * 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 GYY + * @date 2025-04-21 + */ +@Data +@Accessors(chain = true) +public class InventoryProductReportSearchParam { + + /** 编码 */ + private String busNo; + + /** 项目名称 */ + private String name; + + /** 项目类型 */ + private Integer categoryType; + + /** 制单时间 */ + private Date occurrenceTime; + + /** 药房类型 */ + private Integer purposeTypeEnum; + + /** 库存范围 */ + private Integer inventoryScope; + + /** 供应商 */ + private Long supplierId; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/LossReportPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/LossReportPageDto.java new file mode 100644 index 00000000..40a40ede --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/LossReportPageDto.java @@ -0,0 +1,56 @@ +/* + * 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 ym + * @date 2025-05-21 + */ +@Data +@Accessors(chain = true) +public class LossReportPageDto { + + /** 编码 */ + private String busNo; + + /** 项目名称 */ + private String name; + + /** 规格 */ + private String totalVolume; + + /** 厂家 */ + private String manufacturerText; + + /** 产品批号 */ + private String lotNumber; + + /** 仓库 */ + private String locationName; + + /** 计量单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 数量 */ + private BigDecimal itemQuantity; + + /** 审批时间(盘点时间) */ + private Date approvalTime; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/LossReportSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/LossReportSearchParam.java new file mode 100644 index 00000000..1f1108e1 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/LossReportSearchParam.java @@ -0,0 +1,29 @@ +/* + * 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 ym + * @date 2025-05-21 + */ +@Data +@Accessors(chain = true) +public class LossReportSearchParam { + + /** 编码 */ + private String busNo; + + /** 项目名称 */ + private String name; + + /** 报损时间 */ + private Date approvalTime; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutboundReportInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutboundReportInitDto.java new file mode 100644 index 00000000..52d46772 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutboundReportInitDto.java @@ -0,0 +1,43 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.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 ym + * @date 2025-05-23 + */ +@Data +@Accessors(chain = true) +public class OutboundReportInitDto { + + /** + * 供应商 + */ + private List supplierListOptions; + + /** + * 供应商 + */ + @Data + public static class supplierListOption { + @JsonSerialize(using = ToStringSerializer.class) + private Long value; + private String label; + + public supplierListOption(Long value, String label) { + this.value = value; + this.label = label; + } + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutboundReportPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutboundReportPageDto.java new file mode 100644 index 00000000..4075a9dc --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutboundReportPageDto.java @@ -0,0 +1,93 @@ +package com.openhis.web.reportmanage.dto; + +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; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 出库明细账分页列表 dto + * + * @author yuanzs + * @date 2025-04-21 + */ +@Data +@Accessors(chain = true) +public class OutboundReportPageDto { + + /** 单据号 */ + private String supplyBusno; + + /** 药品名称 */ + private String name; + + /** 物品编码(编码) */ + private String busNo; + + /** 批次号 */ + private String lotNumber; + + /** 源仓库id(存放仓库) */ + @JsonSerialize(using = ToStringSerializer.class) + private Long sourceLocationId; + + /** 源仓库名称(存放仓库) */ + private String sourceLocationName; + + /** 源货位id(存放仓库) */ + private Long sourceLocationStoreId; + + /** 源货位名称(存放仓库) */ + private String sourceLocationStoreName; + + /** 目的仓库id(领用科室) */ + @JsonSerialize(using = ToStringSerializer.class) + private Long purposeLocationId; + + /** 目的仓库名称(领用科室) */ + private String purposeLocationName; + + /** 计量单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 出库数量 */ + private BigDecimal itemQuantity; + + /** 采购单价 */ + private BigDecimal purchasePrice; + + /** 领用单价 */ + private BigDecimal price; + + /** 金额 */ + private BigDecimal totalPrice; + + /** 供应商 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_supplier") + @JsonSerialize(using = ToStringSerializer.class) + private Long supplierId; + private String supplierId_dictText; + + /** 审核人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + @JsonSerialize(using = ToStringSerializer.class) + private Long approverId; + private String approverId_dictText; + + /** 审批日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date approvalTime; + + /** 备注 */ + private String remake; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutboundReportSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutboundReportSearchParam.java new file mode 100644 index 00000000..3b1928ea --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutboundReportSearchParam.java @@ -0,0 +1,42 @@ +package com.openhis.web.reportmanage.dto; + +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.util.Date; + +/** + * 出库明细查询条件 + * + * @author yuanzs + * @date 2025-04-21 + */ +@Data +@Accessors(chain = true) +public class OutboundReportSearchParam { + + /** 单据号 */ + private String supplyBusNo; + + /** 药品名称 */ + private String name; + + /** 编码 */ + private String busNo; + + /** 源仓库(存放库房) */ + private Long sourceLocationId; + + /** 目的仓库(领用科室) */ + private Long purposeLocationId; + + /** 审核日期 */ + private Date approvalTime; + + /** 供应商 */ + private Long supplierId; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutpatientSettlementDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutpatientSettlementDto.java new file mode 100644 index 00000000..8dba0f07 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/OutpatientSettlementDto.java @@ -0,0 +1,58 @@ +package com.openhis.web.reportmanage.dto; + +import com.openhis.common.annotation.Dict; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 门诊结算清单实体 + * + * @author liuhr + * @date 2025/5/9 + */ +@Data +@Accessors(chain = true) +public class OutpatientSettlementDto { + + /** 机构名 */ + /** 定点机构编码 */ + /** 结算ID */ + /** 登记流水号 */ + /** 统筹区 */ + /** 收据号 */ + /** 姓名 */ + /** 出生日期 */ + /** 人员类别 */ + /** 医疗类别 */ + /** 证件类型 */ + /** 证件号码 */ + /** 诊断名称 */ + /** 定点医疗机构名称 */ + /** 疾病名称 */ + /** 西药费 */ + /** 治疗费 */ + /** 检查费 */ + /** 手术费 */ + /** 材料费 */ + /** 其他费 */ + /** 中成药 */ + /** 中药费 */ + /** 检验费 */ + /** 起付线 */ + /** 账户余额 */ + /** 本次医疗费用总额 */ + /** 本次符合基本医疗费用合计 */ + /** 统筹基金支付 */ + /** 公务员补助支付 */ + /** 医疗救助支付 */ + /** 大额基金支付 */ + /** 居民大病支付 */ + /** 财产共济支付 */ + /** 个人账户支付 */ + /** 现金支付 */ + /** 本次支付总额 */ + /** 支付时间 */ + + + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PrescriptionPrintDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PrescriptionPrintDto.java new file mode 100644 index 00000000..394782dc --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PrescriptionPrintDto.java @@ -0,0 +1,136 @@ +package com.openhis.web.reportmanage.dto; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.openhis.common.annotation.Dict; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 西药(中成药)处方单 实体类 + * + * @author liuhr + * @date 2025/5/7 + */ +@Data +@Accessors(chain = true) +public class PrescriptionPrintDto { + + /** 机构名 */ + @Dict(dictTable = "adm_organization", dictCode = "id", dictText = "name") + private Long orgId; + private String orgId_dictText; + + /** 门诊/住院病历号 */ + private String encounterBusNo; + + /** 医保/就诊卡号 */ + private String no; + + /** 院内处方编号 */ + private String prescriptionNo; + + /** 姓名 */ + private String patientName; + + /** 性别 */ + private Integer genderEnum; + private String genderEnum_enumText; + + /** 生日 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") + private Date birthDate; + + /** 年龄 */ + private String age; + + /** 电话 */ + private String phone; + + /** 皮试结果 */ + private Integer clinicalStatusEnum; + private String psResult; + + /** 费别 【01医保电子凭证 | 02 居民身份证 | 03 社会保障卡 | 04 个人现金账户】*/ + private String typeCode; + private String typeCode_enumText; + + /** 慢病(1-慢病 0-非慢病) */ + private Integer ncdsFlag; + private String ncdsFlag_enumText; + + /** 药品性质 */ + private String pharmacologyCategoryCode; + /** 药品性质文本 */ + private String pharmacologyCategoryCode_Text; + + /** 开具日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date reqAuthoredTime; + + /** 科室 */ + @Dict(dictTable = "adm_location", dictCode = "id", dictText = "name") + private String departId; + private String departId_dictText; + + /** 临床诊断 */ + private String diagName; + + /** 药品信息列表 start */ + /** 药品名字 */ + private String medName; + + /** 分组id */ + private Long groupId; + + /** 药品规格 */ + private String totalVolume; + + /** 单次剂量 */ + private BigDecimal dose; + + /** 单次剂量单位 */ + @Dict(dictCode = "unit_code") + private String doseUnitCode; + private String doseUnitCode_dictText; + + /** 用药频次 */ + @Dict(dictCode = "rate_code") + private String rateCode; + private String rateCode_dictText; + + /** 用法 */ + @Dict(dictCode = "method_code") + private String methodCode; + private String methodCode_dictText; + /** 药品信息列表 end */ + + /** 开方医师 */ + @Dict(dictTable = "adm_practitioner_role", dictCode = "practitioner_id", dictText = "name") + private Long dorId; + private String dorId_dictText; + + /** 审核药师 */ + @Dict(dictTable = "adm_practitioner_role", dictCode = "practitioner_id", dictText = "name") + private Long pharId; + private String pharId_dictText; + + /** 调配药师 */ + @Dict(dictTable = "adm_practitioner_role", dictCode = "practitioner_id", dictText = "name") + private Long disRevPharId; + private String disRevPharId_dictText; + + /** 核对、发药药师 */ + @Dict(dictTable = "adm_practitioner_role", dictCode = "practitioner_id", dictText = "name") + private Long checkPharId; + private String checkPharId_dictText; + + /** 药品总金额 */ + private BigDecimal totalPrice; + + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PurchaseReturnReportInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PurchaseReturnReportInitDto.java new file mode 100644 index 00000000..0cac4d83 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PurchaseReturnReportInitDto.java @@ -0,0 +1,43 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.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 ym + * @date 2025-05-24 + */ +@Data +@Accessors(chain = true) +public class PurchaseReturnReportInitDto { + + /** + * 供应商 + */ + private List supplierListOptions; + + /** + * 供应商 + */ + @Data + public static class supplierListOption { + @JsonSerialize(using = ToStringSerializer.class) + private Long value; + private String label; + + public supplierListOption(Long value, String label) { + this.value = value; + this.label = label; + } + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PurchaseReturnReportPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PurchaseReturnReportPageDto.java new file mode 100644 index 00000000..14de1614 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PurchaseReturnReportPageDto.java @@ -0,0 +1,81 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +import java.math.BigDecimal; +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; + +/** + * 采购退货明细报表 dto + * + * @author ym + * @date 2025-05-24 + */ +@Data +@Accessors(chain = true) +public class PurchaseReturnReportPageDto { + + /** 单据号 */ + private String supplyBusno; + + /** 项目名称 */ + private String name; + + /** 编码 */ + private String busNo; + + /** 采购单据号 */ + private String originalBusNo; + + /** 产品批号 */ + private String lotNumber; + + /** 目的仓库id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long purposeLocationId; + + /** 存放仓库(目的仓库) */ + private String locationName; + + /** 仓库货位 */ + private String locationStoreName; + + /** 计量单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 退货数量 */ + private BigDecimal quantity; + + /** 采购单价 */ + private BigDecimal price; + + /** 退货单价 */ + private BigDecimal returnPrice; + + /** 退货金额 */ + private BigDecimal totalPrice; + + /** 供应商 */ + private String supplier; + + /** 审批人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + private Long approverId; + private String approverId_dictText; + + /** 制单日期 */ + private Date createTime; + + /** 审批时间 */ + private Date approvalTime; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PurchaseReturnReportSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PurchaseReturnReportSearchParam.java new file mode 100644 index 00000000..3e2b1941 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/PurchaseReturnReportSearchParam.java @@ -0,0 +1,38 @@ +/* + * 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 ym + * @date 2025-05-23 + */ +@Data +@Accessors(chain = true) +public class PurchaseReturnReportSearchParam { + + /** 单据号 */ + private String supplyBusNo; + + /** 药品名称 */ + private String name; + + /** 编码 */ + private String busNo; + + /** 审核时间 */ + private Date approvalTime; + + /** 目的仓库 */ + private Long purposeLocationId; + + /** 供应商 */ + private Long supplierId; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/RegisterReportInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/RegisterReportInitDto.java new file mode 100644 index 00000000..9b8f51c7 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/RegisterReportInitDto.java @@ -0,0 +1,43 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +import java.util.List; + +import com.openhis.administration.domain.Practitioner; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 挂号明细报表下拉框 dto + * + * @author yuxj + * @date 2025-05-20 + */ +@Data +@Accessors(chain = true) +public class RegisterReportInitDto { + + /** + * 科室 + */ + private List departmentOptions; + + /** + * 医生 + */ + private List doctorOptions; + + @Data + public static class longCommonStatusOption { + private Long value; + private String label; + + public longCommonStatusOption(Long value, String label) { + this.value = value; + this.label = label; + } + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/RegisterReportPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/RegisterReportPageDto.java new file mode 100644 index 00000000..9f653bd6 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/RegisterReportPageDto.java @@ -0,0 +1,89 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +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; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 挂号明细报表 dto + * + * @author yuxj + * @date 2025-05-20 + */ +@Data +@Accessors(chain = true) +public class RegisterReportPageDto { + + /** 患者院内编码/病历号 */ + private String busNo; + + /** 患者姓名 */ + private String name; + + /** 科室 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long departmentId; + private String departmentName; + + /** + * 项目名 + */ + private String clinicalName; + + /** + * 医保码 + */ + private String ybNo; + + /** + * 挂号医生 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long doctorId; + private String doctorName; + /** + * 收款人 + */ + private String payeeName; + /** + * 数量 + */ + private BigDecimal number; + /** + * 单价 + */ + private BigDecimal price; + /** + * 单位 + */ + private String quantityUnit; + private String quantityUnit_dictText; + + /** + * 金额 + */ + private BigDecimal totalPrice; + + /** + * 收费时间 + */ + private String chargeTime; + + /** + * 就诊id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterId; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/RegisterReportSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/RegisterReportSearchParam.java new file mode 100644 index 00000000..6b8179b7 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/RegisterReportSearchParam.java @@ -0,0 +1,26 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; + +/** + * 挂号明细查询条件 + * + * @author yuxj + * @date 2025-05-20 + */ +@Data +@Accessors(chain = true) +public class RegisterReportSearchParam { + + /** 科室id */ + private Long departmentId; + + /** 医生id */ + private Long doctorId; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReturnIssueReportInitDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReturnIssueReportInitDto.java new file mode 100644 index 00000000..569bbbd1 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReturnIssueReportInitDto.java @@ -0,0 +1,43 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.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 ym + * @date 2025-05-23 + */ +@Data +@Accessors(chain = true) +public class ReturnIssueReportInitDto { + + /** + * 供应商 + */ + private List supplierListOptions; + + /** + * 供应商 + */ + @Data + public static class supplierListOption { + @JsonSerialize(using = ToStringSerializer.class) + private Long value; + private String label; + + public supplierListOption(Long value, String label) { + this.value = value; + this.label = label; + } + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReturnIssueReportPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReturnIssueReportPageDto.java new file mode 100644 index 00000000..84216e8f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReturnIssueReportPageDto.java @@ -0,0 +1,92 @@ +package com.openhis.web.reportmanage.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; + +/** + * 退库明细账分页列表 dto + * + * @author ym + * @date 2025-05-23 + */ +@Data +@Accessors(chain = true) +public class ReturnIssueReportPageDto { + + /** 单据号 */ + private String supplyBusno; + + /** 药品名称 */ + private String name; + + /** 物品编码(编码) */ + private String busNo; + + /** 批次号 */ + private String lotNumber; + + /** 源仓库id(科室) */ + @JsonSerialize(using = ToStringSerializer.class) + private Long sourceLocationId; + + /** 源仓库名称(科室) */ + private String sourceLocationName; + + /** 目的仓库id(仓库) */ + @JsonSerialize(using = ToStringSerializer.class) + private Long purposeLocationId; + + /** 目的仓库名称(仓库) */ + private String purposeLocationName; + + /** 目的货位id(仓库) */ + private Long purposeLocationStoreId; + + /** 目的货位名称(仓库) */ + private String purposeLocationStoreName; + + /** 计量单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 出库数量 */ + private BigDecimal itemQuantity; + + /** 采购单价 */ + private BigDecimal purchasePrice; + + /** 领用单价 */ + private BigDecimal price; + + /** 金额 */ + private BigDecimal totalPrice; + + /** 供应商 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_supplier") + @JsonSerialize(using = ToStringSerializer.class) + private Long supplierId; + private String supplierId_dictText; + + /** 审核人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + @JsonSerialize(using = ToStringSerializer.class) + private Long approverId; + private String approverId_dictText; + + /** 审批日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date approvalTime; + + /** 备注 */ + private String remake; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReturnIssueReportSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReturnIssueReportSearchParam.java new file mode 100644 index 00000000..128e8dd8 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReturnIssueReportSearchParam.java @@ -0,0 +1,39 @@ +package com.openhis.web.reportmanage.dto; + +import java.util.Date; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 领用退库明细查询条件 + * + * @author ym + * @date 2025-05-23 + */ +@Data +@Accessors(chain = true) +public class ReturnIssueReportSearchParam { + + /** 单据号 */ + private String supplyBusNo; + + /** 药品名称 */ + private String name; + + /** 编码 */ + private String busNo; + + /** 源仓库(科室) */ + private Long sourceLocationId; + + /** 目的仓库(库房) */ + private Long purposeLocationId; + + /** 审核日期 */ + private Date approvalTime; + + /** 供应商 */ + private Long supplierId; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/StocktakingReportPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/StocktakingReportPageDto.java new file mode 100644 index 00000000..924a8e8e --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/StocktakingReportPageDto.java @@ -0,0 +1,65 @@ +/* + * 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 GYY + * @date 2025-04-16 + */ +@Data +@Accessors(chain = true) +public class StocktakingReportPageDto { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 编码 */ + private String busNo; + + /** 项目名称 */ + private String name; + + /** 规格 */ + private String totalVolume; + + /** 厂家 */ + private String manufacturerText; + +// /** 项目(药品类型) */ +// private Integer itemTable; +// private String itemTableText; + + /** 产品批号 */ + private String lotNumber; + + /** 仓库 */ + private String locationName; + + /** 计量单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 数量 */ + private BigDecimal itemQuantity; + + /** 审批时间(盘点时间) */ + private Date approvalTime; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/StocktakingReportSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/StocktakingReportSearchParam.java new file mode 100644 index 00000000..74038c6c --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/StocktakingReportSearchParam.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 GYY + * @date 2025-04-16 + */ +@Data +@Accessors(chain = true) +public class StocktakingReportSearchParam { + + /** 编码 */ + private String busNo; + + /** 项目名称 */ + private String name; + +// /** 项目类型 */ +// private Integer categoryType; + + /** 盘点时间 */ + private Date approvalTime; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/TransferReportPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/TransferReportPageDto.java new file mode 100644 index 00000000..1ab613cb --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/TransferReportPageDto.java @@ -0,0 +1,104 @@ +/* + * 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 GYY + * @date 2025-04-15 + */ +@Data +@Accessors(chain = true) +public class TransferReportPageDto { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 单据号 */ + private String supplyBusNo; + + /** 药品名称 */ + private String name; + + /** 状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + + /** 产品批号 */ + private String lotNumber; + + /** 源仓库id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long sourceLocationId; + + /** 源仓库名称 */ + private String sourceLocationName; + + /** 源货位id */ + private Long sourceLocationStoreId; + + /** 源货位名称 */ + private String sourceLocationStoreName; + + /** 目的仓库id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long purposeLocationId; + + /** 目的仓库名称 */ + private String purposeLocationName; + + /** 目的货位id */ + private Long purposeLocationStoreId; + + /** 目的货位名称 */ + private String purposeLocationStoreName; + + /** 数量 */ + private BigDecimal itemQuantity; + + /** 计量单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 单价 */ + private BigDecimal price; + + /** 合计金额 */ + private BigDecimal totalPrice; + + /** 申请人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + private Long applicantId; + private String applicantId_dictText; + + /** 审批人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + private Long approverId; + private String approverId_dictText; + + /** 制单日期 */ + private Date createTime; + + /** 申请日期 */ + private Date applyTime; + + /** 审批时间(调拨时间) */ + private Date approvalTime; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/TransferReportSearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/TransferReportSearchParam.java new file mode 100644 index 00000000..a0989157 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/TransferReportSearchParam.java @@ -0,0 +1,35 @@ +/* + * 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 GYY + * @date 2025-04-15 + */ +@Data +@Accessors(chain = true) +public class TransferReportSearchParam { + + /** 单据号 */ + private String supplyBusNo; + + /** 药品名称 */ + private String name; + + /** 源仓库 */ + private Long sourceLocationId; + + /** 目的仓库 */ + private Long purposeLocationId; + + /** 单据时间 */ + private Date createTime; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/ChargeReportMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/ChargeReportMapper.java new file mode 100644 index 00000000..f6aaef6e --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/ChargeReportMapper.java @@ -0,0 +1,43 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.openhis.web.reportmanage.dto.ChargeReportPageDto; +import com.openhis.web.reportmanage.dto.ChargeReportSearchParam; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import java.util.List; + +/** + * 费用明细报表查询用 mapper + * + * @author yuxj + * @date 2025-05-20 + */ +@Repository +public interface ChargeReportMapper { + + /** + * 查询费用明细 + * + * @param queryWrapper 查询条件 + * @param success 状态 :支付成功 + * @param refundAll 状态 :全部退款 + * @param medication 药品 + * @param device 耗材 + * @param activity 项目 + * @param register 挂号 + * @param statisticsFlg 统计类型flg + * @return 费用明细 + */ + Page selectRevenueReportPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("success") Integer success, + @Param("refundAll") Integer refundAll, @Param("medication") Integer medication, @Param("device") Integer device, + @Param("activity") Integer activity, @Param("register") Integer register, + @Param("statisticsFlg") Integer statisticsFlg); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/InboundReportMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/InboundReportMapper.java new file mode 100644 index 00000000..78ea0338 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/InboundReportMapper.java @@ -0,0 +1,41 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.mapper; + +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; +import com.openhis.web.reportmanage.dto.InboundReportPageDto; +import com.openhis.web.reportmanage.dto.InboundReportSearchParam; + +/** + * 入库明细查询用 mapper + * + * @author GYY + * @date 2025-04-22 + */ +@Repository +public interface InboundReportMapper { + + /** + * 入库商品明细 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param medicationTableName 药品表名 + * @param deviceTableName 耗材表名 + * @param purchaseInventory 单据类型:采购入库 + * @param supplyStatus 单据状态:同意 + * @param deliveryStatus 发放状态:已完成 + * @return 入库商品明细 + */ + Page selectInboundReportPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("medicationTableName") String medicationTableName, @Param("deviceTableName") String deviceTableName, + @Param("purchaseInventory") Integer purchaseInventory, @Param("supplyStatus") Integer supplyStatus, + @Param("deliveryStatus") Integer deliveryStatus); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/InventoryProductReportMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/InventoryProductReportMapper.java new file mode 100644 index 00000000..bcf1e808 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/InventoryProductReportMapper.java @@ -0,0 +1,35 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.mapper; + +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; +import com.openhis.web.reportmanage.dto.InventoryProductReportPageDto; +import com.openhis.web.reportmanage.dto.InventoryProductReportSearchParam; + +/** + * 库存商品明细查询用 mapper + * + * @author GYY + * @date 2025-04-21 + */ +@Repository +public interface InventoryProductReportMapper { + + /** + * 库存商品明细 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param lotNumber 命中条件枚举类型:产品批号 + * @return 库存商品明细 + */ + Page selectProductReportPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("lotNumber") String lotNumber); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/LossReportMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/LossReportMapper.java new file mode 100644 index 00000000..137d5266 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/LossReportMapper.java @@ -0,0 +1,43 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.mapper; + +import com.openhis.web.reportmanage.dto.LossReportPageDto; +import com.openhis.web.reportmanage.dto.LossReportSearchParam; +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; +import com.openhis.web.reportmanage.dto.StocktakingReportPageDto; +import com.openhis.web.reportmanage.dto.StocktakingReportSearchParam; + +/** + * 报损明细查询用 mapper + * + * @author ym + * @date 2025-05-21 + */ +@Repository +public interface LossReportMapper { + + /** + * 报损明细 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param medicationTableName 药品表名 + * @param deviceTableName 耗材表名 + * @param lossReport 单据类型:报损 + * @param supplyStatus 单据状态:同意 + * @param deliveryStatus 发放状态:已完成 + * @return 报损明细 + */ + Page selectLossReportPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("medicationTableName") String medicationTableName, @Param("deviceTableName") String deviceTableName, + @Param("lossReport") Integer lossReport, @Param("supplyStatus") Integer supplyStatus, + @Param("deliveryStatus") Integer deliveryStatus); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/OutboundReportMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/OutboundReportMapper.java new file mode 100644 index 00000000..daac9104 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/OutboundReportMapper.java @@ -0,0 +1,41 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.mapper; + +import com.openhis.web.reportmanage.dto.OutboundReportSearchParam; +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; +import com.openhis.web.reportmanage.dto.OutboundReportPageDto; + +/** + * 出库明细查询用 mapper + * + * @author yuanzs + * @date 2025-04-21 + */ +@Repository +public interface OutboundReportMapper { + + /** + * 出库明细查询 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param medicationTableName 药品表名 + * @param deviceTableName 耗材表名 + * @param issueInventory 单据类型:领用出库 + * @param supplyStatus 单据状态:同意 + * @param deliveryStatus 发放状态:已完成 + * @return 出库明细 + */ + Page selectOutboundReportPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("medicationTableName") String medicationTableName, @Param("deviceTableName") String deviceTableName, + @Param("issueInventory") Integer issueInventory, @Param("supplyStatus") Integer supplyStatus, + @Param("deliveryStatus") Integer deliveryStatus); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/PrintReportMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/PrintReportMapper.java new file mode 100644 index 00000000..94ec4572 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/PrintReportMapper.java @@ -0,0 +1,68 @@ +package com.openhis.web.reportmanage.mapper; + +import com.openhis.web.reportmanage.dto.BottleLabelDto; +import com.openhis.web.reportmanage.dto.CkInspAppDto; +import com.openhis.web.reportmanage.dto.DisposalDto; +import com.openhis.web.reportmanage.dto.PrescriptionPrintDto; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 处方和医嘱报告打印 mapper + * + * @author liuhr + * @date 2025-05-07 + */ +@Repository +public interface PrintReportMapper { + + /** + * 获取处置单 + * + * @param encounterId 患者就诊Id + * @return 处置单 + */ + List getDisposalList(@Param("encounterId") Long encounterId); + + /** + * 打印——检验,检查申请单 + * + * @param encounterId 患者就诊Id + * @param categoryCode 诊疗类型 + * @return 检验, 检查申请单信息 + */ + List getCheckInspectionList(@Param("encounterId") Long encounterId, + @Param("categoryCode") String categoryCode); + + /** + * 获取西药(中成药)处方单 + * + * @param prescriptionNo 院内处方编号 + * @param encounterId 就诊id + * @return 西药(中成药)处方单 + */ + List getPrescriptionList(@Param("prescriptionNo") String prescriptionNo, + @Param("encounterId") Long encounterId); + + /** + * 获取输液的瓶签 + * + * @param serviceId 服务请求id + * @param encounterId 就诊id + * @param groupId 药品组id + * @return 输液的瓶签列表 + */ + List getBottleLabelList(@Param("serviceId") Long serviceId, @Param("encounterId") Long encounterId, + @Param("groupId") Long groupId); + + /** + * 获取输液的瓶签 + * + * @param serviceIds 服务请求id集合 + * @param encounterIds 就诊id集合 + * @return 输液的瓶签列表 + */ + List getBottleLabelBatchList(@Param("serviceIds") List serviceIds, @Param("encounterIds") List encounterIds); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/PurchaseReturnReportMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/PurchaseReturnReportMapper.java new file mode 100644 index 00000000..0fab791e --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/PurchaseReturnReportMapper.java @@ -0,0 +1,41 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.mapper; + +import com.openhis.web.reportmanage.dto.PurchaseReturnReportPageDto; +import com.openhis.web.reportmanage.dto.PurchaseReturnReportSearchParam; +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 ym + * @date 2025-05-23 + */ +@Repository +public interface PurchaseReturnReportMapper { + + /** + * 入库商品明细 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param medicationTableName 药品表名 + * @param deviceTableName 耗材表名 + * @param productReturn 单据类型:采购退货 + * @param supplyStatus 单据状态:同意 + * @param deliveryStatus 发放状态:已完成 + * @return 采购退货商品明细 + */ + Page selectPurchaseReturnReportPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("medicationTableName") String medicationTableName, @Param("deviceTableName") String deviceTableName, + @Param("productReturn") Integer productReturn, @Param("supplyStatus") Integer supplyStatus, + @Param("deliveryStatus") Integer deliveryStatus); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/RegisterReportMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/RegisterReportMapper.java new file mode 100644 index 00000000..a6918bc2 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/RegisterReportMapper.java @@ -0,0 +1,40 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.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.reportmanage.dto.RegisterReportPageDto; +import com.openhis.web.reportmanage.dto.RegisterReportSearchParam; +import com.openhis.web.reportmanage.dto.TransferReportPageDto; +import com.openhis.web.reportmanage.dto.TransferReportSearchParam; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +/** + * 挂号明细报表查询用 mapper + * + * @author yuxj + * @date 2025-05-20 + */ +@Repository +public interface RegisterReportMapper { + + /** + * 查询挂号明细 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param contextEnum 类别 :挂号费 + * @param typeCode 参与者类型: 首诊医生 + * @param statusEnum 状态 :支付成功 + * @param paymentEnum 付款类别:付费 + * @return 挂号明细 + */ + Page selectRegisterReportPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("contextEnum") Integer contextEnum, @Param("typeCode") String typeCode, + @Param("success") Integer success, @Param("refundAll") Integer refundAll); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/ReturnIssueReportMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/ReturnIssueReportMapper.java new file mode 100644 index 00000000..ff60c0d6 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/ReturnIssueReportMapper.java @@ -0,0 +1,41 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.mapper; + +import com.openhis.web.reportmanage.dto.ReturnIssueReportPageDto; +import com.openhis.web.reportmanage.dto.ReturnIssueReportSearchParam; +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 ym + * @date 2025-05-23 + */ +@Repository +public interface ReturnIssueReportMapper { + + /** + * 出库明细查询 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param medicationTableName 药品表名 + * @param deviceTableName 耗材表名 + * @param returnissue 单据类型:领用退库 + * @param supplyStatus 单据状态:同意 + * @param deliveryStatus 发放状态:已完成 + * @return 出库明细 + */ + Page selectReturnIssueReportPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("medicationTableName") String medicationTableName, @Param("deviceTableName") String deviceTableName, + @Param("returnissue") Integer returnissue, @Param("supplyStatus") Integer supplyStatus, + @Param("deliveryStatus") Integer deliveryStatus); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/StocktakingReportMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/StocktakingReportMapper.java new file mode 100644 index 00000000..3d7c3ccb --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/StocktakingReportMapper.java @@ -0,0 +1,43 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.mapper; + +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; +import com.openhis.web.reportmanage.dto.StocktakingReportPageDto; +import com.openhis.web.reportmanage.dto.StocktakingReportSearchParam; + +/** + * 库存盘点明细查询用 mapper + * + * @author GYY + * @date 2025-04-16 + */ +@Repository +public interface StocktakingReportMapper { + + /** + * 库存盘点调拨明细 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param medicationTableName 药品表名 + * @param deviceTableName 耗材表名 + * @param stocktakingReport 单据类型:商品盘点 + * @param stocktakingBatchReport 单据类型:商品批量盘点 + * @param supplyStatus 单据状态:同意 + * @param deliveryStatus 发放状态:已完成 + * @return 库存盘点明细 + */ + Page selectStocktakingReportPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("medicationTableName") String medicationTableName, @Param("deviceTableName") String deviceTableName, + @Param("stocktakingReport") Integer stocktakingReport, + @Param("stocktakingBatchReport") Integer stocktakingBatchReport, @Param("supplyStatus") Integer supplyStatus, + @Param("deliveryStatus") Integer deliveryStatus); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/TransferReportMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/TransferReportMapper.java new file mode 100644 index 00000000..606019b4 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/reportmanage/mapper/TransferReportMapper.java @@ -0,0 +1,42 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.mapper; + +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; +import com.openhis.web.reportmanage.dto.TransferReportPageDto; +import com.openhis.web.reportmanage.dto.TransferReportSearchParam; + +/** + * 商品调拨明细查询用 mapper + * + * @author GYY + * @date 2025-04-15 + */ +@Repository +public interface TransferReportMapper { + + /** + * 查询商品调拨明细 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param medicationTableName 药品表名 + * @param deviceTableName 耗材表名 + * @param transferReport 单据类型:商品调拨 + * @param transferBatchReport 单据类型:商品批量调拨 + * @param supplyStatus 单据状态:同意 + * @param deliveryStatus 发放状态:已完成 + * @return 商品调拨明细 + */ + Page selectTransferReportPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("medicationTableName") String medicationTableName, @Param("deviceTableName") String deviceTableName, + @Param("transferReport") Integer transferReport, @Param("transferBatchReport") Integer transferBatchReport, + @Param("supplyStatus") Integer supplyStatus, @Param("deliveryStatus") Integer deliveryStatus); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/config/YbServiceConfig.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/config/YbServiceConfig.java new file mode 100644 index 00000000..1a002a06 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/config/YbServiceConfig.java @@ -0,0 +1,92 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.ConstructorBinding; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +/** + * 本地部署方案-医保配置类 + * + * @author SunJQ + * @date 2025-04-11 + */ +@Configuration +@ConstructorBinding +@PropertySource("classpath:properties/yb.properties") +@ConfigurationProperties(prefix = "ybapp.config") +@EnableConfigurationProperties +public class YbServiceConfig { + + private String url; + + private String eleUrl; + + private String key; + + private String timeOut; + + private String clrOptins;// 清算机构;必须是准确的6位编码,可以从3206A交易获取 + + private String fixmedinsCode;// 定点医药机构编号,如H22010200XXX + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getEleUrl() { + return eleUrl; + } + + public void setEleUrl(String eleUrl) { + this.eleUrl = eleUrl; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getTimeOut() { + return timeOut; + } + + public void setTimeOut(String timeOut) { + this.timeOut = timeOut; + } + + public YbServiceConfig(String url, String key, String timeOut) { + this.url = url; + this.key = key; + this.timeOut = timeOut; + } + + public YbServiceConfig() {} + + public String getClrOptins() { + return clrOptins; + } + + public void setClrOptins(String clrOptins) { + this.clrOptins = clrOptins; + } + + public String getFixmedinsCode() { + return fixmedinsCode; + } + + public void setFixmedinsCode(String fixmedinsCode) { + this.fixmedinsCode = fixmedinsCode; + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbController.java new file mode 100644 index 00000000..60691d3b --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbController.java @@ -0,0 +1,573 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.controller; + +import java.io.*; +import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.core.common.utils.StringUtils; +import com.openhis.administration.domain.Encounter; +import com.openhis.administration.domain.Patient; +import com.openhis.administration.service.IEncounterService; +import com.openhis.clinical.domain.ConditionDefinition; +import com.openhis.clinical.service.IConditionDefinitionService; +import com.openhis.yb.domain.InfoPerson; +import com.openhis.yb.dto.Catalogue1312Output; +import com.openhis.yb.dto.Clearing3205AWebParma; +import com.openhis.yb.dto.Financial3203AWebParam; +import com.openhis.yb.dto.Info1101Output; +import com.openhis.yb.dto.PatientInfoDto; +import com.openhis.yb.dto.Result; +import com.openhis.yb.dto.Settlement3201WebParam; +import com.openhis.yb.dto.Settlement3202WebParam; +import com.openhis.yb.dto.Settlement3209AWebParam; +import com.openhis.yb.service.IPerinfoService; +import com.openhis.yb.service.YbDao; +import com.openhis.yb.service.YbHttpUtils; +import com.openhis.yb.util.CommonConstant; +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import com.core.common.core.domain.R; +import com.core.common.exception.ServiceException; +import com.core.common.utils.SecurityUtils; +import com.openhis.administration.service.IPatientService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.yb.dto.*; + +/** + * 医保接口 + * + * @author SunJQ + * @date 2025-04-11 + */ +@RestController +@RequestMapping("/yb-request") +public class YbController { + + @Autowired + YbDao ybDao; + @Autowired + YbHttpUtils ybHttpUtils; + @Autowired + IPatientService patientService; + @Autowired + IPerinfoService iPerinfoService; + @Autowired + IEncounterService iEncounterService; + @Autowired + IConditionDefinitionService iConditionDefinitionService; + @Autowired + ResourceLoader resourceLoader; + + + /** + * 【9001】 + * + * @param practitionerId 参与者Id + * @param mac 加密后的mac地址 + * @return 结果 + */ + @PostMapping("/sign") + public R sign(String practitionerId, String mac, String ip) { + Sign signParam = ybDao.getSignParam(practitionerId, mac, ip); + if (signParam == null) { + throw new ServiceException("未生成签到参数"); + } + Sign9001Result signResult = ybHttpUtils.sign(signParam); + if (signResult != null) { + ybDao.saveSign(signParam, signResult); + return R.ok(signResult); + } + return R.fail(); + } + + /** + * 【1101】 + * + * @param certType 就诊id + * @param certNo 租户id + * @return 结果 + */ + @PostMapping("/per-info") + public R getPerInfo(String certType, String certNo, String psnCertType) { + Info1101ReadcardParam readcard = ybDao.getReadCard(certType, certNo); + Info1101Output perInfo = ybHttpUtils.getPerInfo(readcard); + if (perInfo != null) { + ybDao.saveReadcardAndPerinfo(readcard, perInfo); + PatientInfoDto patient = ybDao.getPatent(perInfo); + return R.ok(patient); + } else { + return R.fail("未查询到患者信息"); + } + } + + /** + * 【5301】获取人员慢病 + * + * @param encounterId 就诊id + * @return 结果 + */ + @GetMapping("/getConditionDefinition") + public R getSpecialDia(Long encounterId) { + + Encounter encounter = iEncounterService.getById(encounterId); + if (encounter == null) { + throw new ServiceException("未获取到就诊信息"); + } + Patient patient = patientService.getById(encounter.getPatientId()); + if (patient == null) { + throw new ServiceException("未获取到患者信息"); + } + InfoPerson perinfo = iPerinfoService.getPerInfoByIdCard(patient.getIdCard(), SecurityUtils.getLoginUser().getTenantId()); + if (perinfo == null) { + throw new ServiceException("未连接医保获取患者信息"); + } + Info1101Output info1101Output = JSON.parseObject(perinfo.getResult1101(), Info1101Output.class); + List feedetail = info1101Output.getFeedetail(); + + Date currentDate = new Date(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + List currentRangeResults = new ArrayList<>(); + for (Info5301SpecialConditionResult info5301SpecialConditionResult : feedetail) { + try { + Date begndate = dateFormat.parse(info5301SpecialConditionResult.getBegndate()); + Date enddate = dateFormat.parse(info5301SpecialConditionResult.getEnddate()); + + // 检查当前日期是否在 begndate 和 enddate 之间 + if (currentDate.compareTo(begndate) >= 0 && currentDate.compareTo(enddate) <= 0) { + currentRangeResults.add(info5301SpecialConditionResult); + } + } catch (ParseException e) { + e.printStackTrace(); // 处理日期解析异常 + } + } + List conditionDefinitions = null; + if (!currentRangeResults.isEmpty()) { + conditionDefinitions = iConditionDefinitionService.list(new LambdaUpdateWrapper().in(ConditionDefinition::getYbNo, currentRangeResults.stream().map(Info5301SpecialConditionResult::getOpspDiseCode).collect(Collectors.toList()))); + } + return R.ok(conditionDefinitions); + } + + /** + * 【3301】目录对照 + * + * @param tableName 就诊id + * @param id 付款id + * @return 结果 + */ + @PostMapping("/directory-cross-check") + public R directoryCheck(String tableName, Long id) { + MedicalDirectory3301Param medicalDirectory3301Param = ybDao.getMedicalDirectory3301Param(tableName, id); + ArrayList list = new ArrayList<>(); + list.add(medicalDirectory3301Param); + MedicalDirectory3301ListParam medicalDirectory3301ListParam = new MedicalDirectory3301ListParam(); + medicalDirectory3301ListParam.setData(list); + Result resultInfo = ybHttpUtils.directoryCheck(medicalDirectory3301ListParam); + if (resultInfo.getCode().equals(CommonConstant.SC_OK_200)) { + ybDao.saveDirectoryHistory(tableName, id, 3301, medicalDirectory3301Param); + } + return R.ok(); + } + + /** + * 【3302】目录对照撤销 + * + * @param tableName 就诊id + * @param id 付款id + * @return 结果 + */ + @PostMapping("/directory-un-check") + public R directoryUnCheck(String tableName, Long id) { + + MedicalDirectory3302Param medicalDirectory3302Param = ybDao.getMedicalDirectory3302Param(tableName, id); + Result resultInfo = ybHttpUtils.directoryUnCheck(medicalDirectory3302Param); + if (resultInfo.getCode().equals(CommonConstant.SC_OK_200)) { + ybDao.saveDirectoryHistory(tableName, id, 3302, medicalDirectory3302Param); + } + + return R.ok(); + } + + /** + * 【3201】对总账 + * + * @param settlement3201WebParam 3201入参条件 + * @return 结果 + */ + @PostMapping("/reconcile") + public R reconcileGeneralLedger(@RequestBody Settlement3201WebParam settlement3201WebParam) { + Financial3201Param financial3201Param = ybDao.getFinancial3201Param(settlement3201WebParam); + 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); + if("0".equals(financial3201Output.getStmtRslt())){ + return R.ok("OK"); + } + return R.ok(financial3201Output.getStmtRsltDscr()); + } + return R.fail("医保app通讯失败"); + } + + /** + * 【3201】对总账列表 + * + * @param settlement3201WebParam 3201入参条件 + * @return 结果 + */ + @GetMapping("/reconcile-list") + public R reconcileGeneralLedgerList(Settlement3201WebParam settlement3201WebParam) { + return R.ok(ybDao.reconcileGeneralLedgerDetail(settlement3201WebParam)); + + } + + /** + * 【3202】对明细账 + * + * @param settlement3202WebParam 3202查询数据 + * @return 结果 + */ + @PostMapping("/reconcile-detail-list") + public R reconcileGeneralLedgerDetail(@RequestBody Settlement3202WebParam settlement3202WebParam) { + List financial3202FileParams = ybDao.paymentCompareYbSettle(settlement3202WebParam); + + //FinancialSettlement3202Param financial3202Param = + // ybDao.getFinancialSettlement3202Param(settlement3202WebParam); + //FinancialSettlement3202Result resultInfo = ybHttpUtils.reconcileGeneralLedgerDetail(financial3202Param); + + return R.ok(financial3202FileParams); + } + + /** + * 【3202】生成txt文件 + * + * @param settlementIdList 3202查询数据 + * @return 结果 + */ + @PostMapping("/reconcile-detail-txt") + public R reconcileGeneralLedgerDetailTxt(List settlementIdList) throws IOException { + List financial3202FileParams = ybDao.paymentCompareYbSettle(settlementIdList); + String filePath = SecurityUtils.getLoginUser().getOptionJson().getString("filePath")+new Date().getTime()+".txt"; + try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) { + for (Financial3202FileParam item : financial3202FileParams) { + // 假设每个实体都有toString()方法返回逗号分隔的属性 + // 或者你可以自定义获取属性的方式 + String line = item.toString().replace(",", "\t"); + writer.write(line); + writer.newLine(); + } + } + return R.ok("生成txt文件成功,文件路径:"+filePath); + } + + /** + * 触发3202接口 + * @param settlementIdList 3202查询数据 + * @return + * @throws IOException + */ + @PostMapping("/reconcile-general") + public R reconcileGeneral(List settlementIdList, String filePath, String fileQuryNo, String setlOptins, String clrType) { + //todo:这里需要考虑3302接口的参数是后台合计还是由前台传入,因为这个参数还要和txt文件对应(既需要txt中的数据还需要db表中的一些数据), + //String filePath = SecurityUtils.getLoginUser().getOptionJson().getString("filePath")+new Date().getTime()+".txt"; + List financial3202FileParamList = new ArrayList<>(); + Resource resource = resourceLoader.getResource(filePath); // 或使用 "file:" 读取绝对路径 + + try (BufferedReader reader = new BufferedReader(new InputStreamReader(resource.getInputStream()))) { + String line; + while ((line = reader.readLine()) != null) { + if (!line.trim().isEmpty()) { + String[] fields = line.split("\t"); // 按 Tab 分割字段 + if (fields.length == 7) { + BigDecimal medfeeSumamt = new BigDecimal(fields[3]); + BigDecimal fundPaySumamt = new BigDecimal(fields[4]); + BigDecimal acctPay = new BigDecimal(fields[5]); + Financial3202FileParam person = new Financial3202FileParam(fields[0], fields[1], fields[2], medfeeSumamt, fundPaySumamt, acctPay, fields[6]); + financial3202FileParamList.add(person); + } + } + } + } catch (IOException e) { + e.printStackTrace(); + throw new ServiceException("IO异常,异常信息:"+e.getMessage()); + } + + BigDecimal medfeeSumamt = BigDecimal.ZERO;//医疗费总额 + BigDecimal fundPaySumamt = BigDecimal.ZERO;//基金支付 + //Integer fixmedinsSetlCnt = 0;//结算笔数 + + if(financial3202FileParamList.isEmpty()){ + throw new ServiceException("未获取txt文件中实体"); + } + for (Financial3202FileParam financial3202FileParam : financial3202FileParamList) { + medfeeSumamt = medfeeSumamt.add(financial3202FileParam.getMedfeeSumamt()); + fundPaySumamt = fundPaySumamt.add(financial3202FileParam.getFundPaySumamt()); + } + + FinancialSettlement3202Param financialSettlement3202Param = ybDao.getFinancialSettlement3202Param(settlementIdList, medfeeSumamt, fundPaySumamt); + if(financialSettlement3202Param==null){ + throw new ServiceException("未生成3202参数"); + } + financialSettlement3202Param.setClrType(clrType).setFileQuryNo(fileQuryNo) + .setRefdSetlFlag(financial3202FileParamList.get(0).getRefdSetlFlag()).setSetlOptins(setlOptins); + + FinancialSettlement3202Result financialSettlement3202Result = ybHttpUtils.reconcileGeneralLedgerDetail(financialSettlement3202Param); + if(financialSettlement3202Result==null){ + throw new ServiceException("未收到3202参数"); + } + + return R.ok(financialSettlement3202Result); + } + + + + /** + * 【3209A】第三方数据查询 + * + * @param settlement3209AWebParam 3209A入参条件 + * @return 结果 + */ + @PostMapping("/three-part-search-err") + public R threePartSearch(Settlement3209AWebParam settlement3209AWebParam) { + + FinancialSettlement3209AParam financialSettlement3209AParam = + ybDao.getFinancialSettlement3209AParam(settlement3209AWebParam); + List list = ybHttpUtils.threePartSearch(financialSettlement3209AParam); + + return R.ok(); + } + + /** + * 【3203A】清算申请(吉林省) + * + * @param financial3203AWebParam 3203A入参条件 + * @return 结果 + */ + @PostMapping("/apply-financial-clearing") + public R applyFinancialClearing(Financial3203AWebParam financial3203AWebParam) { + Financial3203AParam financial3203AParam = ybDao.getFinancial3203AParam(financial3203AWebParam); + String s = ybHttpUtils.applyFinancialClearing(financial3203AParam); + if(!StringUtils.isEmpty(s)){ + Result result = JSON.parseObject(s, Result.class); + if (result != null) { + if (result.getCode() == 200) { + ybDao.save3203AFinancialClearingApplycation(financial3203AParam, s); + return R.ok(result); + } + } + } + return R.fail(s); + } + + /** + * 【3204A】清算申请撤销(吉林省) + * + * @param clrAppyEvtId 3203A入参条件 + * @return 结果 + */ + @PostMapping("/apply-un-clearing") + public R cancelFinancialClearing(String clrAppyEvtId, String clrOptins) { + + Financial3204Param financial3204Param = new Financial3204Param(); + financial3204Param.setClrOptins(clrOptins).setClrAppyEvtId(clrAppyEvtId); + Result resultInfo = ybHttpUtils.cancelFinancialClearing(financial3204Param); + if (resultInfo.getCode().equals(CommonConstant.SC_OK_200)) { + ybDao.save3204AFinancialClearingApplycation(clrAppyEvtId, clrOptins); + return R.ok(); + } + return R.fail(); + } + + /** + * 【3205A】清算申请状态查询 + * + * @param clearing3205AWebParma 3205A入参条件 + * @return 结果 + */ + @PostMapping("/get-clearing-status") + public R getFinancialClearingStatus(Clearing3205AWebParma clearing3205AWebParma) { + + Clearing3205AParma clearing3205AParma = ybDao.getClearing3205AParma(clearing3205AWebParma); + Clearing3205AResult clearing3205AResult = ybHttpUtils.getFinancialClearingStatus(clearing3205AParma); + + return R.ok(clearing3205AResult); + } + + /** + * 【3501】商品盘存上传 + * + * @param id 供应申请id + * @return 结果 + */ + @PostMapping("/upload-inventory-count") + public R uploadInventoryCount(Long id) { + + MedicalInventory3501Param medicalInventory3501Param = + ybDao.getMedicalInventory3501Param(id, SecurityUtils.getLoginUser().getTenantId()); + Result resultInfo = ybHttpUtils.uploadInventoryCount(medicalInventory3501Param); + if (resultInfo.getCode().equals(CommonConstant.SC_OK_200)) { + ybDao.saveInventoryCheckRecord(medicalInventory3501Param, resultInfo.getMessage()); + return R.ok(); + } + ybDao.saveInventoryCheckRecord(medicalInventory3501Param, resultInfo.getMessage()); + return R.fail(); + } + + /** + * 【3502】商品信息变更 + * + * @param id 供应申请id + * @param invChgType 变更类型 参考枚举 + * @return 结果 + */ + @PostMapping("/upload-inventory") + public R updateInventoryCount(Long id, String invChgType) { + + MedicalInventory3502Param medicalInventory3502Param = + ybDao.getMedicalInventory3502Param(id, invChgType, SecurityUtils.getLoginUser().getTenantId()); + Result resultInfo = ybHttpUtils.updateInventoryCount(medicalInventory3502Param); + if (resultInfo.getCode().equals(CommonConstant.SC_OK_200)) { + ybDao.saveInventoryChangeRecord(medicalInventory3502Param, resultInfo.getMessage()); + return R.ok(); + } + return R.fail(); + } + + /** + * 【3503】商品采购 + * + * @param id 供应申请id + * @return 结果 + */ + @PostMapping("/procurement") + public R procurement(Long id) { + + Medical3503Param medical3503Param = + ybDao.getMedical3503Param(id, SecurityUtils.getLoginUser().getTenantId()); + Result resultInfo = ybHttpUtils.procurement(medical3503Param); + if (resultInfo.getCode().equals(CommonConstant.SC_OK_200)) { + ybDao.saveInventoryPurchaseRecord(medical3503Param, resultInfo.getMessage()); + return R.ok(); + } + return R.fail(); + } + + /** + * 【3504】商品采购退货 + * + * @param id 供应申请id + * @return 结果 + */ + @PostMapping("/procurement-cancel") + public R cancelProcurement(Long id) { + + MedicalPurchase3504Param medicalPurchase3504Param = + ybDao.getMedicalPurchase3504Param(id, SecurityUtils.getLoginUser().getTenantId()); + Result resultInfo = ybHttpUtils.cancelProcurement(medicalPurchase3504Param); + if (resultInfo.getCode().equals(CommonConstant.SC_OK_200)) { + ybDao.saveInventoryPurchaseReturnRecord(medicalPurchase3504Param, resultInfo.getMessage()); + return R.ok(); + } + return R.fail(); + } + + /** + * 【3505】商品销售 + * + * @param id 供应申请id + * @return 结果 + */ + @PostMapping("/merchandise") + public R merchandise(Long id, String ListType) { + Medical3505Param medical3505Param = + ybDao.getMedical3505Param(id, ListType, SecurityUtils.getLoginUser().getTenantId()); + Result result = ybHttpUtils.merchandise(medical3505Param); + Medical3505Result medical3505Result = + JSON.parseObject(JSON.toJSONString(result.getMessage()), Medical3505Result.class); + if ("1".equals(medical3505Result.getRetRslt())) { + ybDao.saveInventorySaleRecord(medical3505Param, medical3505Result.getMsgRslt()); + return R.ok(); + } + ybDao.saveInventorySaleRecord(medical3505Param, medical3505Result.getMsgRslt()); + return R.fail(); + } + + /** + * 【3506】商品销售退货 + * + * @param id 供应申请id + * @return 结果 + */ + @PostMapping("/cancel-merchandise") + public R cancelMerchandise(Long id, String ListType) { + Medical3506Param medical3506Param = + ybDao.getMedical3506Param(id, ListType, SecurityUtils.getLoginUser().getTenantId()); + Result result = ybHttpUtils.cancelMerchandise(medical3506Param); + Medical3505Result medical3505Result = + JSON.parseObject(JSON.toJSONString(result.getMessage()), Medical3505Result.class); + if ("1".equals(medical3505Result.getRetRslt())) { + ybDao.saveInventorySaleReturnRecord(medical3506Param, medical3505Result.getMsgRslt()); + return R.ok(); + } + ybDao.saveInventorySaleReturnRecord(medical3506Param, medical3505Result.getMsgRslt()); + return R.fail(); + } + + /** + * 【3507】商品信息删除 + * + * @param id 供应申请id + * @return 结果 + */ + @PostMapping("/del-goods") + public R deleteGoodsInfo(Long id, String ListType) { + Medical3507Param medical3507Param = ybDao.getMedical3507Param(id, ListType); + Result resultBody = ybHttpUtils.deleteGoodsInfo(medical3507Param); + if (resultBody.getCode().equals(CommonConstant.SC_OK_200)) { + ybDao.saveInventoryDelRecord(medical3507Param); + return R.ok(); + } + return R.fail(); + } + + /** + * 【1312】-医保目录信息查询 + * + * @param hilistCode 医保目录编码 + * @param dateStr 更新时间 + * @return 结果 + */ + @PostMapping("/query-yb-catalogue") + public R queryYbCatalogue(@RequestParam String hilistCode, @RequestParam String dateStr) { + Catalogue1312QueryParam catalogue1312QueryParam = new Catalogue1312QueryParam(); + catalogue1312QueryParam.setHilistCode(hilistCode); + catalogue1312QueryParam.setInsuplcAdmdvs( + SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.INSUPLC_ADMDVS)); + // 直接解析(默认 ISO 格式) + LocalDate localDate = LocalDate.parse(dateStr); + // 转换为 Date + Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + catalogue1312QueryParam.setUpdtTime(date); + catalogue1312QueryParam.setPageNum(1); + catalogue1312QueryParam.setPageSize(10); + catalogue1312QueryParam.setDecryptFlag("0"); // 不需要解密 + List outputList = ybHttpUtils.queryYbCatalogue(catalogue1312QueryParam); + return R.ok(outputList); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbElepController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbElepController.java new file mode 100644 index 00000000..31d849ea --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbElepController.java @@ -0,0 +1,252 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.controller; + +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.openhis.web.doctorstation.dto.AdviceBaseDto; +import com.openhis.web.ybmanage.dto.VeriPrescriptionParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.web.bind.annotation.*; + +import com.core.common.core.domain.R; +import com.openhis.web.ybmanage.service.IYbEleBaseService; +import com.openhis.web.ybmanage.service.IYbEleHttpService; +import com.openhis.ybelep.domain.*; + +import javax.servlet.http.HttpServletRequest; + +/** + * 医保电子处方业务接口 + * + * @author yuxj + * @date 2025-04-17 + */ +@RestController +@RequestMapping("/ybelep-request") +public class YbElepController { + + @Autowired + IYbEleBaseService ybEleBaseService; + + @Autowired + IYbEleHttpService ybEleHttpService; + + /** + * 医保电子处方查询 + * + * @param veriPrescriptionParam 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @param request 请求数据 + * @return 处方信息 + */ + @GetMapping(value = "/get-PrescriptionInfo") + public R getVeriPrescriptionInfo(VeriPrescriptionParam veriPrescriptionParam, + @RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { + return ybEleBaseService.getVeriPrescriptionInfo(veriPrescriptionParam, searchKey, pageNo, pageSize, request); + } + + /** + * 医保电子处方查看 + * + * @param prescriptionNo 处方号 + * @return 处方详细信息 + */ + @GetMapping(value = "/get-PrescriptionDetailInfo") + public R getPrescriptionDetailInfo(String prescriptionNo) { + return ybEleBaseService.getPrescriptionDetailInfo(prescriptionNo); + } + + /** + * 医保电子处方状态更新(上传) + * + * @param prescriptionNo 处方号 + * @return 处方信息 + */ + @PutMapping(value = "/uploadPrescriptionStatus") + public R uploadPrescriptionStatus(String prescriptionNo) { + return ybEleBaseService.uploadPrescriptionStatus(prescriptionNo); + } + + /** + * 医保电子处方拒绝上传 + * + * @param prescriptionNo 处方号 + * @return 处方信息 + */ + @PutMapping(value = "/refusePrescriptionStatus") + public R refusePrescriptionStatus(String prescriptionNo) { + return ybEleBaseService.refusePrescriptionStatus(prescriptionNo); + } + + /** + * 医保电子处方状态更新(撤销) + * + * @param prescriptionNo 处方号 + * @param quashReason 撤销原因 + * @return 处方信息 + */ + @PutMapping(value = "/quashPrescriptionStatus") + public R quashPrescriptionStatus(String prescriptionNo, String quashReason) { + return ybEleBaseService.quashPrescriptionStatus(prescriptionNo, quashReason); + } + + /** + * 电子处方上传预核验 + * + * @param prescriptionNo 处方信息 + * @param authNo 电子凭证线上身份核验流水号 + * @param ecToken 电子凭证令牌 + * @param tenantId 租户Id + * @return + */ + @GetMapping("/pre-verification") + public R preVerification(String prescriptionNo, String ecToken, String authNo, Integer tenantId) { + PreCheckPrescription pcp = ybEleBaseService.makePreCheckPrescription(prescriptionNo, tenantId); + ElepVeriPrescriptionOutput pcpResult = ybEleHttpService.preCheck(pcp); + // 入参和出参 保存 + if (pcp != null) { + pcp.getMdtrtinfo().setPrescriptionNo(prescriptionNo); + ybEleBaseService.savePreCheckPrescription(pcp); + } + if (pcpResult != null) { + pcpResult.setPrescriptionNo(prescriptionNo); + ybEleBaseService.saveEleVeriPrescriptionOutput(pcpResult); + } + + return R.ok(pcpResult); + } + + /** + * 电子处方医保电子签名 + * + * @param hiRxno 医保处方编号 + * @param practitionerId 审方药师Id + * @param checkDate 审方时间 + * @param tenantId 租户Id + * @return + */ + @GetMapping("/pre-signature") + public R eleSignature(String hiRxno, Long practitionerId, + @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date checkDate, Integer tenantId) { + + ElepSignatureInput eleSignature = + ybEleBaseService.makeEleSignature(hiRxno, practitionerId, checkDate, tenantId); + ElepSignatureOutput esResult = ybEleHttpService.eleSign(eleSignature); + + // 入参和出参都保存 + if (eleSignature != null) { + eleSignature.setHiRxno(hiRxno); + ybEleBaseService.saveEleSignature(eleSignature); + } + // 入参和出参都保存 + if (esResult != null) { + esResult.setHiRxno(hiRxno); + ybEleBaseService.saveEleSignatureOutput(esResult); + } + return R.ok(esResult); + } + + /** + * 电子处方上传 + * + * @param hiRxno 医保处方编号 + * @param practitionerId 审方药师Id + * @param checkDate 审方时间 + * @param tenantId 租户Id + * @return + */ + @GetMapping("/pre-upload") + public R uploadElePrescription(String hiRxno, Long practitionerId, + @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date checkDate, Integer tenantId) { + ElepUploadInput eleUploadInput = + ybEleBaseService.makeEleUploadInput(hiRxno, practitionerId, checkDate, tenantId); + ElepUploadOutput euResult = ybEleHttpService.uploadElePre(eleUploadInput); + + // 入参和出参都保存 + if (eleUploadInput != null) { + ybEleBaseService.saveEleUploadInput(eleUploadInput); + } + // 入参和出参都保存 + if (euResult != null) { + ybEleBaseService.saveEleUploadOutput(euResult); + } + return R.ok(euResult); + } + + /** + * 电子处方撤销 + * + * @param hiRxno 医保处方编号 + * @param practitionerId 撤销医师Id + * @param description 撤销原因 + * @param revokeDate 撤销时间 + * @param tenantId 租户Id + * @return + */ + @GetMapping("/pre-revoke") + public R revokePrescription(String hiRxno, Long practitionerId, String description, + @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date revokeDate, Integer tenantId) { + + ElepRevokeInput eleRevokeInput = + ybEleBaseService.makeEleRevokeInput(hiRxno, practitionerId, description, revokeDate, tenantId); // 入参和出参都保存 + ElepRevokeOutput ereResult = ybEleHttpService.revokePre(eleRevokeInput); + if (eleRevokeInput != null) { + ybEleBaseService.saveEleRevokeInput(eleRevokeInput); + } + // 入参和出参都保存 + if (ereResult != null) { + ybEleBaseService.saveEleRevokeOutput(ereResult); + } + return R.ok(ereResult); + } + + /** + * 电子处方信息查询 + * + * @param hiRxno 医保处方编号 + * @return + */ + @GetMapping("/pre-query") + public R queryPrescription(String hiRxno) { + + ElepQuerPrescriptionInput eleQueryPreResultInput = ybEleBaseService.makeEleQueryPrescriptionInput(hiRxno); + QueryPrescription emrResult = ybEleHttpService.queryPre(eleQueryPreResultInput); + // 入参和出参都保存 + if (eleQueryPreResultInput != null) { + ybEleBaseService.saveEleQueryPrescriptionInput(eleQueryPreResultInput); + } + // 入参和出参都保存 + if (emrResult != null) { + ybEleBaseService.saveEleMedResultOut(emrResult); + } + return R.ok(emrResult); + } + + /** + * 电子处方取药结果查询 + * + * @param hiRxno 医保处方编号 + * @return + */ + @GetMapping("/med-query") + public R queryMedPrescription(String hiRxno) { + + ElepMedresultInput eleMedInput = ybEleBaseService.makeEleMedResultInput(hiRxno); // 入参和出参都保存 + MedicationResultInquiry medResult = ybEleHttpService.queryMedPre(eleMedInput); + if (eleMedInput != null) { + ybEleBaseService.saveEleMedResultInput(eleMedInput); + } // 入参和出参都保存 + if (medResult != null) { + ybEleBaseService.saveMedicationResultInquiry(medResult); + } + return R.ok(medResult); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Catalogue1312Output.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Catalogue1312Output.java new file mode 100644 index 00000000..ac25d3d0 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Catalogue1312Output.java @@ -0,0 +1,118 @@ +package com.openhis.web.ybmanage.dto; + +import java.io.Serializable; +import java.util.Date; + +import com.core.common.core.domain.HisBaseEntity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * 【1312】医保目录信息查询 + * + * @author SunJQ + * @date 2025-04-16 + */ +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class Catalogue1312Output extends HisBaseEntity implements Serializable { + private static final long serialVersionUID = 1L; + // 医保目录编码 + private String hilistCode; + + // 医保目录名称 + private String hilistName; + + // 参保机构医保区划 + private String insuAdmdvs; + + // 开始日期 + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date begndate; + + // 结束日期 + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date enddate; + + // 医疗收费项目类别 + private String medChrgitmType; + + // 收费项目等级 + private String chrgitmLv; + + // 限制使用标志 + private String lmtUsedFlag; + + // 目录类别 + private String listType; + + // 医疗使用标志 + private String medUseFlag; + + // 生育使用标志 + private String matnUsedFlag; + + // 医保目录使用类别 + private String hilistUseType; + + // 限复方使用类型 + private String lmtCpndType; + + // 五笔助记码 + private String wubi; + + // 拼音助记码 + private String pinyin; + + // 备注 + private String memo; + + // 有效标志 + private String valiFlag; + + // 唯一记录号 + private String rid; + + // 更新时间 + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updtTime; + + // 创建人 + private String crterId; + + // 创建人姓名 + private String crterName; + + // 创建时间 + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date crteTime; + + // 创建机构 + private String crteOptinsNo; + + // 经办人 + private String opterId; + + // 经办人姓名 + private String opterName; + + // 经办时间 + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date optTime; + + // 经办机构 + private String optinsNo; + + // 统筹区 + private String poolareaNo; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clearing3205AWebParma.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clearing3205AWebParma.java new file mode 100644 index 00000000..a0f1ece0 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clearing3205AWebParma.java @@ -0,0 +1,28 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; + +/** + * 【3205A】前端入参 + * + * @author SunJQ + * @date 2025-04-17 + */ +@Data +public class Clearing3205AWebParma { + // 清算机构 + @NotNull + private String clrOptins; + + // 清算状态 + private String clrStas; + + // 清算月份 例如:202310 + private String clrYm; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clinic2207OrderOutput.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clinic2207OrderOutput.java new file mode 100644 index 00000000..c357494e --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clinic2207OrderOutput.java @@ -0,0 +1,114 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.openhis.yb.dto.Clinic2206FundPaymentResult; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 【2207】医保预结算的输出参数 + * + * @author SunJQ + * @date 2025-05-08 + */ +@Data +@Accessors(chain = true) +public class Clinic2207OrderOutput { + // 主键字段 + private String mdtrtId; // 就诊ID + + private String setlId;// 结算id 2207时有值 2206无值 + + private String psnNo; // 人员编号 + + private String psnName; // 人员姓名 + + private String psnCertType; // 人员证件类型 + + private String certno; // 证件号码 + + private String gend; // 性别 + + private String naty; // 民族 + + private Date brdy; // 出生日期 + + private BigDecimal age; // 年龄 + + private String insutype; // 险种类型 + + private String psnType; // 人员类别 + + private String cvlservFlag; // 公务员标志 + + private Date setlTime; // 结算时间 + + private String mdtrtCertType; // 就诊凭证类型 + + private String medType; // 医疗类别 + + private BigDecimal medfeeSumamt; // 医疗费总额 + + private BigDecimal fulamtOwnpayAmt; // 全自费金额 + + private BigDecimal overlmtSelfpay; // 超限价自费费用 + + private BigDecimal preselfpayAmt; // 先行自付金额 + + private BigDecimal inscpScpAmt; // 符合政策范围金额 + + private BigDecimal actPayDedc; // 实际支付起付线 + + private BigDecimal hifpPay; // 基本医疗保险统筹基金支出 + + private BigDecimal poolPropSelfpay; // 基本医疗保险统筹基金支付比例 + + private BigDecimal cvlservPay; // 公务员医疗补助资金支出 + + private BigDecimal hifesPay; // 企业补充医疗保险基金支出 + + private BigDecimal hifmiPay; // 居民大病保险资金支出 + + private BigDecimal hifobPay; // 职工大额医疗费用补助基金支出 + + private BigDecimal mafPay; // 医疗救助基金支出 + + private BigDecimal othPay; // 其他支出 + + private BigDecimal fundPaySumamt; // 基金支付总额 + + private BigDecimal psnPartAmt; // 个人负担总金额 + + private BigDecimal acctPay; // 个人账户支出 + + private BigDecimal psnCashPay; // 个人现金支出 + + private BigDecimal hospPartAmt; // 医院负担金额 + + private BigDecimal balc; // 余额 + + private BigDecimal acctMulaidPay; // 个人账户共济支付金额 + + private String medinsSetlId; // 医药机构结算ID 存放发送方报文ID + + private String clrOptins; // 清算经办机构 + + private String clrWay; // 清算方式 + + private String clrType; // 清算类别 + + private BigDecimal hifdmPay; // 伤残人员医疗保障基金支出 + + private String expContent; // 字段扩展 + + private List setldetail;// 结算详细信息 + + private String chrgBchno; // 收费批次号 +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clinic2208UnSetlInfoOutput.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clinic2208UnSetlInfoOutput.java new file mode 100644 index 00000000..46338c43 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clinic2208UnSetlInfoOutput.java @@ -0,0 +1,109 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.openhis.yb.dto.Clinic2206FundPaymentResult; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 【2208】门诊结算撤销 + * + * @author SunJQ + * @date 2025-04-21 + */ +@Data +@Accessors(chain = true) +public class Clinic2208UnSetlInfoOutput { + + // 1. 就诊ID(字符型,30位,必填) + private String mdtrtId; + + // 2. 结算ID(字符型,30位,必填) + private String setlId; + + // 3. 清算经办机构(字符型,6位) + private String clrOptins; + + // 4. 结算时间(日期时间型,格式:yyyy-MM-dd HH:mm:ss,必填) + private Date setlTime; + + // 5. 医疗费总额(数值型,16位含2位小数,必填) + private BigDecimal medfeeSumamt; + + // 6. 全自费金额(数值型,16位含2位小数,必填) + private BigDecimal fulamtOwnpayAmt; + + // 7. 超限价自费费用(数值型,16位含2位小数,必填) + private BigDecimal overlmtSelfpay; + + // 8. 先行自付金额(数值型,16位含2位小数,必填) + private BigDecimal preselfpayAmt; + + // 9. 符合政策范围金额(数值型,16位含2位小数,必填) + private BigDecimal inscpScpAmt; + + // 10. 实际支付起付线(数值型,16位含2位小数) + private BigDecimal actPayDedc; + + // 11. 基本医疗保险统筹基金支出(数值型,16位含2位小数,必填) + private BigDecimal hifpPay; + + // 12. 统筹基金支付比例(数值型,5位含4位小数,必填) + private BigDecimal poolPropSelfpay; + + // 13. 公务员医疗补助支出(数值型,16位含2位小数,必填) + private BigDecimal cvlservPay; + + // 14. 企业补充医保支出(数值型,16位含2位小数,必填) + private BigDecimal hifesPay; + + // 15. 居民大病保险支出(数值型,16位含2位小数,必填) + private BigDecimal hifmiPay; + + // 16. 职工大额医疗补助支出(数值型,16位含2位小数,必填) + private BigDecimal hifobPay; + + // 17. 医疗救助基金支出(数值型,16位含2位小数,必填) + private BigDecimal mafPay; + + // 18. 其他支出(数值型,16位含2位小数,必填) + private BigDecimal othPay; + + // 19. 基金支付总额(数值型,16位含2位小数,必填) + private BigDecimal fundPaySumamt; + + // 20. 个人负担总金额(数值型,16位含2位小数,必填) + private BigDecimal psnPartAmt; + + // 21. 个人账户支出(数值型,16位含2位小数,必填) + private BigDecimal acctPay; + + // 22. 余额(数值型,16位含2位小数,必填) + private BigDecimal balc; + + // 23. 个人账户共济支付(数值型,16位含2位小数,必填) + private BigDecimal acctMulaidPay; + + // 24. 医院负担金额(数值型,16位含2位小数,必填) + private BigDecimal hospPartAmt; + + // 25. 医药机构结算ID(字符型,30位,必填) + private String medinsSetlId; + + // 26. 个人现金支出(数值型,16位含2位小数,必填) + private BigDecimal pdnCashPay; + + // 27. 伤残人员医疗补助支出(数值型,16位含2位小数,必填) + private BigDecimal hifdmPay; + + //结算详细信息 + private List setldetail;//结算详细信息 +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/ClinicReg2201Output.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/ClinicReg2201Output.java new file mode 100644 index 00000000..19f03e5e --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/ClinicReg2201Output.java @@ -0,0 +1,67 @@ +package com.openhis.web.ybmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.openhis.common.annotation.Dict; +import lombok.Data; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +@Data +@Accessors(chain = true) +public class ClinicReg2201Output { + private static final long serialVersionUID = 1L; + //主键 + @TableId(type = IdType.ASSIGN_ID) + @JSONField(serialize=false) + private String id; + //就诊ID + private String mdtrtId; + //参保地医保区划 + @JSONField(serialize=false) + private String insuplcAdmdvs; + //人员编号 + private String psnNo; + //险种类型 + private String insutype; + //医疗类别 + @JSONField(serialize=false) + private String medType; + //挂号时间 + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date begntime; + //就诊凭证类型 + private String mdtrtCertType; + //就诊凭证编号 + private String mdtrtCertNo; + //证件加密串 + @JSONField(serialize=false) + @TableField(exist = false) + private String mdtrtCertNoEncrypt; + //住院/门诊号 + private String iptOtpNo; + //医师编码 + private String atddrNo; + //医师姓名 + private String drName; + //科室编码 + private String deptCode; + //科室名称 + private String deptName; + //科别 + private String caty; + //挂号费 + private Double regFee; + //检查费 + private Double checkFee; + //应收金额 + private Double totalFee; + //状态,0-挂号,1-看诊,2-费用明细,3-预结算,4-结算 + private String status; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial13203WebParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial13203WebParam.java new file mode 100644 index 00000000..c693c24f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial13203WebParam.java @@ -0,0 +1,49 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.Data; + +/** + * 【13202】前台入参 + * + * @author SunJQ + * @date 2025-04-29 + */ +@Data +public class Financial13203WebParam { + + // 对账日期,格式:YYYY-MM-DD + @JSONField(name = "stmt_date") + private String stmtDate; + + // 明细对账结果,1:不平,0:平 + @JSONField(name = "stmt_rslt") + private String stmtRslt; + + // 查询页面数据量,最大100 + @JSONField(name = "page_size") + private String pageSize; + + // 页数,默认1 + @JSONField(name = "page_num") + private String pageNum; + + // 清算机构编码 + @JSONField(name = "clr_optins") + private String clrOptins; + + // 清算类别 + @JSONField(name = "clr_type") + private String clrType; + + // 险种 + @JSONField(name = "insutype") + private String insutype; + + // 就医类别,2:本地就医,3:省内异地就医,4:跨省就医 + @JSONField(name = "clr_pay_loc") + private String clrPayLoc; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3203AWebParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3203AWebParam.java new file mode 100644 index 00000000..1082e395 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3203AWebParam.java @@ -0,0 +1,36 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.apache.poi.hssf.record.chart.DatRecord; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 【3203A】前台入参 + * + * @author SunJQ + * @date 2025-04-15 + */ +@Data +@Accessors(chain = true) +public class Financial3203AWebParam { + + /** 清算类别 */ + @NotNull + private String clrType; + /** 开始时间 */ + @NotNull + private Date stmtBegnDate; + /** 结束时间 */ + @NotNull + private Date stmtEndDate; + /** 清算机构 */ + @NotNull + private String clrOptins; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3203WebParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3203WebParam.java new file mode 100644 index 00000000..80cf0dbb --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3203WebParam.java @@ -0,0 +1,42 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + * 【3203】前台入参 + * + * @author SunJQ + * @date 2025-04-29 + */ +@Data +public class Financial3203WebParam { + + // 清算类别(字符型,30位,必填) + @JSONField(name = "clr_type") + private String clrType; + + // 清算方式(字符型,30位,必填) + @JSONField(name = "clr_way") + private String clrWay; + + // 开始日期(日期型,必填,格式:yyyy-MM-dd) + @JSONField(name = "begndate") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date begndate; + + // 结束日期(日期型,必填,格式:yyyy-MM-dd) + @JSONField(name = "enddate") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date enddate; + + // 清算年月 + @JSONField(name = "setlym") + private String setlym; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Info1101Output.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Info1101Output.java new file mode 100644 index 00000000..f28541c6 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Info1101Output.java @@ -0,0 +1,70 @@ +package com.openhis.web.ybmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.core.common.core.domain.HisBaseEntity; +import com.openhis.yb.dto.Info5301SpecialConditionResult; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *【1101】获取身份信息 + * + * @author SunJQ + * @date 2025-04-16 + */ +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class Info1101Output extends HisBaseEntity implements Serializable { + private static final long serialVersionUID = 1L; + //人员编号 + private String psnNo; + //人员证件类型 + private String psnCertType; + //证件号码 + private String certno; + //人员姓名 + private String psnName; + //性别 + private String gend; + //民族 + private String naty; + //出生日期 + private Date brdy; + //年龄 + private Double age; + //参保地医保区划 + private String insuplcAdmdvs; + //险种类型 + private String insutype; + //余额 + private String balc; + //人员类别 + @TableField(exist = false) + private String psnType; + + //人员参保状态 + @TableField(exist = false) + private String psnInsuStas; + + //个人参保日期 + @TableField(exist = false) + private String psnInsuDate; + + //公务员标志 + @TableField(exist = false) + private String cvlservFlag; + + //单位名称 + @TableField(exist = false) + private String empName; + //特慢病 + @TableField(exist = false) + private List feedetail; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/PatientInfoDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/PatientInfoDto.java new file mode 100644 index 00000000..e8e550cd --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/PatientInfoDto.java @@ -0,0 +1,85 @@ +package com.openhis.web.ybmanage.dto; + +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.yb.dto.Info5301SpecialConditionResult; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; +import java.util.List; + +@Data +@Accessors(chain = true) +public class PatientInfoDto { + + //患者信息 + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 活动标记 */ + private Integer activeFlag; + + /** 临时标识 */ + private Integer tempFlag; + + /** 患者姓名 */ + private String name; + + /** 患者院内编码/病历号 */ + private String busNo; + + /** 性别编码 */ + private Integer genderEnum; + + /** 生日 */ + private Date birthDate; + + /** 民族 */ + private String nationalityCode; + + /** 身份证号 */ + private String idCard; + + /** 拼音码 */ + private String pyStr; + + /** 五笔码 */ + private String wbStr; + + /** 机构Id */ + private Long organizationId; + + /** 特慢病等 */ + private List feedetail; + + //医保信息 2025/05/23 弃用,费用性质固定,如农大只有省医保,费用性质只显示省医保和自费即可,由@GetMapping(value = "/contract-list")接口提供数据 + /** 合同Id */ + private Long contractId;//弃用 2025/05/23 + + /** 合同名称 */ + private String contractName;//弃用 2025/05/23 + + /** 状态 */ + private Integer statusEnum;//弃用 2025/05/23 + + /** 合同的类别 */ + private Integer categoryEnum;//弃用 2025/05/23 + + /** 合同编码 */ + private String contractBusNo;//弃用 2025/05/23 + + /** 机构 */ + private Long contractOrgId;//弃用 2025/05/23 + + /** 是否医保 */ + private Integer ybFlag;//弃用 2025/05/23 + + /** 医保区划 */ + private String admVs;//弃用 2025/05/23 + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Result.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Result.java new file mode 100644 index 00000000..c0e5afe5 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Result.java @@ -0,0 +1,48 @@ +package com.openhis.web.ybmanage.dto; + +import java.io.Serializable; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +@Data +@ApiModel(value="接口返回对象", description="接口返回对象") +@JsonIgnoreProperties(ignoreUnknown = true) +public class Result implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 成功标志 + */ + @ApiModelProperty(value = "成功标志") + private boolean success = true; + + /** + * 返回处理消息 + */ + @ApiModelProperty(value = "返回处理消息") + private String message = "操作成功!"; + + /** + * 返回代码 + */ + @ApiModelProperty(value = "返回代码") + private Integer code = 0; + + /** + * 返回数据对象 data + */ + @ApiModelProperty(value = "返回数据对象") + private T result; + + /** + * 时间戳 + */ + @ApiModelProperty(value = "时间戳") + private long timestamp ; + +} \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/ResultBody.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/ResultBody.java new file mode 100644 index 00000000..5a192f00 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/ResultBody.java @@ -0,0 +1,40 @@ +package com.openhis.web.ybmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; + +import lombok.Data; + +/** + * 医保结果 + */ +@Data +public class ResultBody { + + /** 交易状态码 */ + @JSONField(name="infcode") + private String infcode; + /** 发送方报文ID */ + @JSONField(name="warnMsg") + private String warn_msg; + /** 数字签名信息 */ + @JSONField(name="cainfo") + private String cainfo; + /** 错误信息 */ + @JSONField(name="err_msg") + private String errMsg; + /** 接收报文时间 */ + @JSONField(name="refmsg_time") + private String refmsgTime; + /** 签名类型 */ + @JSONField(name="signtype") + private String signtype; + /** 响应报文时间 */ + @JSONField(name="respond_time") + private String respondTime; + /** 接收方报文ID */ + @JSONField(name="inf_refmsgid") + private String infRefmsgid; + /** 交易输出 */ + @JSONField(name="output") + private String output; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3201WebParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3201WebParam.java new file mode 100644 index 00000000..921bbe4b --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3201WebParam.java @@ -0,0 +1,39 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 【3201】前台入参 + * + * @author SunJQ + * @date 2025-04-15 + */ +@Data +public class Settlement3201WebParam { + + /** 险种 */ + @NotNull + private String insuType; + /** 清算类别 */ + @NotNull + private String clrType;//住院或门诊 + /** 合同id */ + @NotNull + private Long contractId; + /** 医院id */ + @NotNull + private Long orgId; + /** 开始时间 */ + @NotNull + private String stmtBegnDate; + /** 结束时间 */ + @NotNull + private String stmtEndDate; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3202WebParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3202WebParam.java new file mode 100644 index 00000000..0e3cbe0d --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3202WebParam.java @@ -0,0 +1,47 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +/** + * 【3202】前台入参 + * + * @author SunJQ + * @date 2025-04-17 + */ +@Data +public class Settlement3202WebParam { + /** 结算经办机构 */ + @NotNull + private String setlOptins;//前台传入,注意:先上传文件后核对明细的 + /** 清算类别 */ + private String clrType; + /** 文件查询号 */ + @NotNull + private String fileQuryNo; + /** 开始时间 */ + @NotNull + private String stmtBegnDate; + /** 结束时间 */ + @NotNull + private String stmtEndDate; + /** 医院id */ + private Long orgId; +// /** 医疗费用总额 */ +// @NotNull +// private BigDecimal medFeeSumAmt; +// /** 基金支付总额 */ +// @NotNull +// private BigDecimal fundPaySumAmt; +// /** 现金支付金额 */ +// @NotNull +// private BigDecimal cashPayAmt; +// /** 定点医药机构结算笔数 */ +// @NotNull +// private Integer fixMedInsSetlCnt; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3209AWebParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3209AWebParam.java new file mode 100644 index 00000000..97f675fa --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3209AWebParam.java @@ -0,0 +1,35 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.Data; + +import java.util.Date; + +/** + * [3209A]前台传参 + * + * @author SunJQ + * @date 2025-04-29 + */ +@Data +public class Settlement3209AWebParam { + + // 清算类别 + @JSONField(name = "clr_type") + private String clrType; + + // 开始日期 + @JSONField(name = "begndate") + private Date begndate; + + // 结束日期 + @JSONField(name = "enddate") + private Date enddate; + + // 清算机构 + @JSONField(name = "clr_optins") + private String clrOptins; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionDetailInfoDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionDetailInfoDto.java new file mode 100644 index 00000000..dcbb0568 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionDetailInfoDto.java @@ -0,0 +1,98 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import java.math.BigDecimal; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.openhis.common.annotation.Dict; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 医保电子处方信息 + * + * @author yuxj + * @date 2025-05-06 + */ +@Data +@Accessors(chain = true) +public class VeriPrescriptionDetailInfoDto { + + /** 处方号 */ + private String prescriptionNo; + /** 门诊号 */ + private String iptOtpNo; + /** 请求数量 */ + private Integer quantity; + /** 请求单位 */ + private String unitCode; + /** 审核状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + + /* --处方信息-- */ + /** 药品名 */ + private String medicationName; + /** 药品规格 */ + private String drugSpecification; + /** 药品剂量 */ + private BigDecimal medDosage; + /** 药品剂量单位 */ + private String medDosageUnitCode; + + /** 使用频次 */ + @Dict(dictCode = "elep_rate_code") + private String medFrequency; + private String medFrequency_dictText; + /** 途径 */ + @Dict(dictCode = "method_code") + private String medRoute; + private String medRoute_dictText; + /** 取药状态 */ + private String medStatus; + /** 处方状态 */ + private String prescriptionStatus; + /** 处方类别 */ + private Integer rxTypeCode; + private String rxTypeCode_enumText; + /** 支持用药信息 */ + private String supportInfo; + /** 服药时间(开始) */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date effectiveDoseStart; + /** 服药时间(结束) */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date effectiveDoseEnd; + /** 给药间隔 */ + private String dispenseInterval; + /** 单次发药数 */ + private Integer dispensePerQuantity; + /** 每次发药供应天数 */ + private Integer dispensePerDuration; + + /* --就诊信息-- */ + /** 患者姓名 */ + private String patnName; + /** 身份证号 */ + private String certno; + /** 开方医生名 */ + private String practitionerName; + /** 挂号科室 */ + private String mdtrtDeptName; + /** 开单科室 */ + private String prscDeptName; + /** 挂号日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date mdtrtTime; + /** 处方开立日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date prscTime; + + /* --诊断信息-- */ + /** 诊断名 */ + private String conditionName; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionInfoDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionInfoDto.java new file mode 100644 index 00000000..73ebad83 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionInfoDto.java @@ -0,0 +1,55 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import java.util.Date; + +import javax.validation.constraints.NotNull; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 医保电子处方信息 + * + * @author yuxj + * @date 2025-05-06 + */ +@Data +@Accessors(chain = true) +public class VeriPrescriptionInfoDto { + + /** 处方号 */ + private String prescriptionNo; + /** 门诊号 */ + private String iptOtpNo; + /** 姓名 */ + private String patientName; + /** 证件号 */ + private String certno; + /** 取药状态 */ + private String medStatus; + /** 状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + /** 开单科室 */ + private String prscDeptName; + /** 挂号日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date mdtrtTime; + /** 处方开立日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date prscTime; + + /** 租户ID */ + private Integer tenantId; + /** 电子凭证线上身份核验流水号 */ + private String authNo; + /** 电子凭证令牌 */ + private String ecToken; + /** 医保处方编号 */ + private String hiRxno; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionParam.java new file mode 100644 index 00000000..4879512c --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionParam.java @@ -0,0 +1,23 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import java.util.Date; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 医保电子处方信息查询条件 + * + * @author yuxj + * @date 2025-05-06 + */ +@Data +@Accessors(chain = true) +public class VeriPrescriptionParam { + + /** 门诊号/姓名 */ + private String name; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/mapper/YbElepMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/mapper/YbElepMapper.java new file mode 100644 index 00000000..b226ad49 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/mapper/YbElepMapper.java @@ -0,0 +1,44 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.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.ybmanage.dto.VeriPrescriptionDetailInfoDto; +import com.openhis.web.ybmanage.dto.VeriPrescriptionInfoDto; +import com.openhis.web.ybmanage.dto.VeriPrescriptionParam; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * mapper提供sql服务 + * + * @author yuxj + * @date 2025-05-06 + */ +@Repository +public interface YbElepMapper { + /** + * 医保电子处方查询 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @return 就诊病人列表 + */ + Page getVeriPrescriptionInfo(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + + /** + * 处方详细信息获取 + * + * @param prescriptionNo 处方号 + * @return 处方详细信息 + */ + List getVeriPrescriptionDetailInfo(@Param("prescriptionNo") String prescriptionNo); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbEleBaseService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbEleBaseService.java new file mode 100644 index 00000000..f95fb881 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbEleBaseService.java @@ -0,0 +1,225 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.service; + +import java.util.Date; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.core.common.core.domain.R; +import com.openhis.web.doctorstation.dto.AdviceBaseDto; +import com.openhis.web.ybmanage.dto.VeriPrescriptionParam; +import com.openhis.ybelep.domain.*; + +import javax.servlet.http.HttpServletRequest; + +/** + * + * @author yuxj + * @date 2025-04-17 + */ +public interface IYbEleBaseService { + + /** + * 医保电子处方查询 + * + * @param veriPrescriptionParam 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @param request 请求数据 + * @return 处方信息 + */ + R getVeriPrescriptionInfo(VeriPrescriptionParam veriPrescriptionParam, String searchKey, + Integer pageNo, Integer pageSize, HttpServletRequest request); + + /** + * 医保电子处方查看 + * + * @param prescriptionNo 处方号 + * @return 处方详细信息 + */ + R getPrescriptionDetailInfo(String prescriptionNo); + + /** + * 医保电子处方状态更新(上传) + * + * @param prescriptionNo 处方号 + * @return 处方信息 + */ + R uploadPrescriptionStatus(String prescriptionNo); + + /** + * 医保电子处方拒绝上传 + * + * @param prescriptionNo 处方号 + * @return 处方信息 + */ + R refusePrescriptionStatus(String prescriptionNo); + + /** + * 医保电子处方状态更新(撤销) + * + * @param prescriptionNo 处方号 + * @param quashReason 撤销原因 + * @return 处方信息 + */ + R quashPrescriptionStatus(String prescriptionNo,String quashReason); + + /** + * 做成电子处方上传预核验入参信息 + * + * @param prescriptionNo 处方号 + * @param tenantId 租户Id + * @return 处方信息 + */ + PreCheckPrescription makePreCheckPrescription(String prescriptionNo, + Integer tenantId); + + /** + * 电子处方上传预核验信息保存 + * + * @param pcpResult 电子处方上传预核验信息 + * @return 电子处方上传预核验信息 + */ + void savePreCheckPrescription(PreCheckPrescription pcpResult); + + /** + * 电子处方上传预核验响应出参信息保存 + * + * @param pcpResult 电子处方上传预核验响应出参信息 + * @return + */ + void saveEleVeriPrescriptionOutput(ElepVeriPrescriptionOutput pcpResult); + + /** + * 做成电子处方医保电子签名入参 + * + * @param hiRxno 医保处方编号 + * @param practitionerId 审方药师Id + * @param checkDate 审方时间 + * @param tenantId 租户Id + * @return 电子处方医保电子签名入参 + */ + ElepSignatureInput makeEleSignature(String hiRxno, Long practitionerId, Date checkDate, Integer tenantId); + + /** + * 保存电子处方医保电子签名入参 + * + * @param eSign 电子处方医保电子签名入参信息 + * @return + */ + void saveEleSignature(ElepSignatureInput eSign); + + /** + * 保存电子处方医保电子签名响应出参 + * + * @param esResult 电子处方医保电子签名响应出参信息 + * @return + */ + void saveEleSignatureOutput(ElepSignatureOutput esResult); + + /** + * 做成电子处方上传入参 + * + * @param hiRxno 医保处方编号 + * @param practitionerId 审方药师Id + * @param checkDate 审方时间 + * @param tenantId 租户Id + * @return 电子处方上传入参 + */ + ElepUploadInput makeEleUploadInput(String hiRxno, Long practitionerId, Date checkDate, Integer tenantId); + + /** + * 保存电子处方上传入参 + * + * @param eleUploadInput 电子处方上传入参信息 + * @return + */ + void saveEleUploadInput(ElepUploadInput eleUploadInput); + + /** + * 保存电子处方上传响应出参 + * + * @param euResult 电子处方上传响应出参信息 + * @return + */ + void saveEleUploadOutput(ElepUploadOutput euResult); + + /** + * 做成电子处方撤销入参 + * + * @param hiRxno 医保处方编号 + * @param practitionerId 撤销药师Id + * @param description 撤销原因 + * @param checkDate 撤销时间 + * @param tenantId 租户Id + * @return 电子处方撤销入参 + */ + ElepRevokeInput makeEleRevokeInput(String hiRxno, Long practitionerId,String description, Date checkDate, Integer tenantId); + + /** + * 保存电子处方撤销入参 + * + * @param eleRevokeInput 电子处方撤销入参信息 + * @return + */ + void saveEleRevokeInput(ElepRevokeInput eleRevokeInput); + + /** + * 保存电子处方撤销响应出参 + * + * @param ereResult 电子处方撤销响应出参信息 + * @return + */ + void saveEleRevokeOutput(ElepRevokeOutput ereResult); + + /** + * 做成电子处方信息查询入参 + * + * @param hiRxno 医保处方编号 + * @return 电子处方信息查询入参 + */ + ElepQuerPrescriptionInput makeEleQueryPrescriptionInput(String hiRxno); + + /** + * 保存电子处方信息查询入参 + * + * @param eleQueryPreInput 电子处方信息查询入参信息 + * @return + */ + void saveEleQueryPrescriptionInput(ElepQuerPrescriptionInput eleQueryPreInput); + + /** + * 保存电子处方信息查询响应出参信息 + * + * @param emrResult 电子处方信息查询响应出参信息 + * @return + */ + void saveEleMedResultOut(QueryPrescription emrResult); + + /** + * 做成电子处方取药结果查询入参 + * + * @param hiRxno 医保处方编号 + * @return 电子处方取药结果查询入参 + */ + ElepMedresultInput makeEleMedResultInput(String hiRxno); + + /** + * 保存电子处方取药结果查询入参 + * + * @param eleMedInput 电子处方取药结果查询入参信息 + * @return + */ + void saveEleMedResultInput(ElepMedresultInput eleMedInput); + + /** + * 保存电子处方取药结果查询响应出参 + * + * @param medResInquiry 电子处方取药结果查询响应出参信息 + * @return + */ + void saveMedicationResultInquiry(MedicationResultInquiry medResInquiry); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbEleHttpService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbEleHttpService.java new file mode 100644 index 00000000..1ed24141 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbEleHttpService.java @@ -0,0 +1,63 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.service; + +import com.openhis.ybelep.domain.*; + +/** + * + * @author yuxj + * @date 2025-04-17 + */ +public interface IYbEleHttpService { + + /** + * 采用HTTP协议中的 POST 方法,发送医保电子处方注册预核验请求,并处理响应结果 + * + * @param pcp 医保电子处方注册预核验入参实体 + * @return 医保电子处方注册预核验响应出参实体 + */ + ElepVeriPrescriptionOutput preCheck(PreCheckPrescription pcp); + + /** + * 采用HTTP协议中的 POST 方法,发送电子处方医保电子签名请求,并处理响应结果 + * + * @param eleSign 电子处方医保电子签名入参实体 + * @return 电子处方医保电子签名响应出参实体 + */ + ElepSignatureOutput eleSign(ElepSignatureInput eleSign); + + /** + * 采用HTTP协议中的 POST 方法,发送电子处方上传请求,并处理响应结果 + * + * @param eleUploadInput 电子处方上传入参实体 + * @return 电子处方上传响应出参实体 + */ + ElepUploadOutput uploadElePre(ElepUploadInput eleUploadInput); + + /** + * 采用HTTP协议中的 POST 方法,发送电子处方撤销请求,并处理响应结果 + * + * @param eleRevokeInput 电子处方撤销入参实体 + * @return 电子处方撤销响应出参实体 + */ + ElepRevokeOutput revokePre(ElepRevokeInput eleRevokeInput); + + /** + * 采用HTTP协议中的 POST 方法,电子处方信息查询请求,并处理响应结果 + * + * @param eleQueryPreInput 电子处方信息查询入参实体 + * @return 电子处方信息查询出参实体 + */ + QueryPrescription queryPre(ElepQuerPrescriptionInput eleQueryPreInput); + + /** + * 采用HTTP协议中的 POST 方法,电子处方取药结果查询请求,并处理响应结果 + * + * @param eleMedInput 电子处方取药结果查询入参实体 + * @return 电子处方取药结果查询出参实体 + */ + MedicationResultInquiry queryMedPre(ElepMedresultInput eleMedInput); + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbEleHttpServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbEleHttpServiceImpl.java new file mode 100644 index 00000000..e4f66e07 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbEleHttpServiceImpl.java @@ -0,0 +1,245 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.service.impl; + +import com.core.common.exception.ServiceException; +import com.openhis.yb.dto.BaseParam; +import com.openhis.yb.util.YbParamBuilderUtil; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.alibaba.fastjson2.JSON; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.openhis.web.ybmanage.config.YbServiceConfig; +import com.openhis.web.ybmanage.dto.Result; +import com.openhis.web.ybmanage.service.IYbEleHttpService; +import com.openhis.ybelep.domain.*; + +import java.io.IOException; + +/** + * http请求接口 + * + * @author yuxj + * @date 2025-04-17 + */ +@Service +public class YbEleHttpServiceImpl implements IYbEleHttpService { + + @Autowired + YbServiceConfig ybServiceConfig; + + @Autowired + YbParamBuilderUtil ybParamBuilderUtil; + /** + * 采用HTTP协议中的 POST 方法,发送医保电子处方注册预核验请求,并处理响应结果 + * + * @param pcp 医保电子处方注册预核验入参实体 + * @return 医保电子处方注册预核验响应出参实体 + */ + @Override + public ElepVeriPrescriptionOutput preCheck(PreCheckPrescription pcp) { + ElepVeriPrescriptionOutput pcpResult = new ElepVeriPrescriptionOutput(); + // 发送请求 + String s = httpPost(ybServiceConfig.getEleUrl() + "/preCheckPrescription", pcp); + // 参数处理 + ObjectMapper mapper = new ObjectMapper(); + Result result = null; + try { + result = mapper.readValue(s, Result.class); + } catch (Exception e) { + e.printStackTrace(); + } + if (result != null && result.isSuccess()) { + pcpResult = JSON.parseObject(JSON.toJSONString(result.getResult()), ElepVeriPrescriptionOutput.class);; + pcpResult.setPrescriptionNo(pcp.getHospRxno()); + } + + return pcpResult; + } + + /** + * 采用HTTP协议中的 POST 方法,发送电子处方医保电子签名请求,并处理响应结果 + * + * @param eleSign 电子处方医保电子签名入参实体 + * @return 电子处方医保电子签名响应出参实体 + */ + public ElepSignatureOutput eleSign(ElepSignatureInput eleSign) { + + ElepSignatureOutput esResult = new ElepSignatureOutput(); + // 发送请求 + String s = httpPost(ybServiceConfig.getEleUrl() + "/signature", eleSign); + // 参数处理 + ObjectMapper mapper = new ObjectMapper(); + Result result = null; + try { + result = mapper.readValue(s, Result.class); + } catch (Exception e) { + e.printStackTrace(); + } + if (result != null && result.isSuccess()) { + esResult = JSON.parseObject(JSON.toJSONString(result.getResult()), ElepSignatureOutput.class); + } + + return esResult; + } + + /** + * 采用HTTP协议中的 POST 方法,发送电子处方上传请求,并处理响应结果 + * + * @param eleUploadInput 电子处方上传入参实体 + * @return 电子处方上传响应出参实体 + */ + @Override + public ElepUploadOutput uploadElePre(ElepUploadInput eleUploadInput) { + + ElepUploadOutput euResult = new ElepUploadOutput(); + // 发送请求 + String s = httpPost(ybServiceConfig.getEleUrl() + "/upload", eleUploadInput); + // 参数处理 + ObjectMapper mapper = new ObjectMapper(); + Result result = null; + try { + result = mapper.readValue(s, Result.class); + } catch (Exception e) { + e.printStackTrace(); + } + if (result != null && result.isSuccess()) { + euResult = JSON.parseObject(JSON.toJSONString(result.getResult()), ElepUploadOutput.class); + } + + return euResult; + } + + /** + * 采用HTTP协议中的 POST 方法,发送电子处方撤销请求,并处理响应结果 + * + * @param eleRevokeInput 电子处方撤销入参实体 + * @return 电子处方撤销响应出参实体 + */ + @Override + public ElepRevokeOutput revokePre(ElepRevokeInput eleRevokeInput) { + + ElepRevokeOutput ereResult = new ElepRevokeOutput(); + // 发送请求 + String s = httpPost(ybServiceConfig.getEleUrl() + "/revoke", eleRevokeInput); + // 参数处理 + ObjectMapper mapper = new ObjectMapper(); + Result result = null; + try { + result = mapper.readValue(s, Result.class); + } catch (Exception e) { + e.printStackTrace(); + } + if (result != null && result.isSuccess()) { + ereResult = JSON.parseObject(JSON.toJSONString(result.getResult()), ElepRevokeOutput.class); + } + + return ereResult; + } + + /** + * 采用HTTP协议中的 POST 方法,电子处方信息查询请求,并处理响应结果 + * + * @param eleQueryPreInput 电子处方信息查询入参实体 + * @return 电子处方信息查询出参实体 + */ + @Override + public QueryPrescription queryPre(ElepQuerPrescriptionInput eleQueryPreInput) { + //拼参数 +// BaseParam baseParam = new BaseParam(); +// baseParam.setBaseInfo(ybParamBuilderUtil.getBaseInfo()).setData(eleQueryPreInput); +// baseParam.setBaseInfo(ybParamBuilderUtil.getBaseInfo()).setData(o); + QueryPrescription emrResult = new QueryPrescription(); + // 发送请求 + String s = + httpPost(ybServiceConfig.getEleUrl() + "/querPrescription", eleQueryPreInput); + // 参数处理 + ObjectMapper mapper = new ObjectMapper(); + Result result = null; + try { + result = mapper.readValue(s, Result.class); + } catch (Exception e) { + e.printStackTrace(); + } + if (result != null && result.isSuccess()) { + emrResult = JSON.parseObject(JSON.toJSONString(result.getResult()), QueryPrescription.class); + } + + return emrResult; + } + + /** + * 采用HTTP协议中的 POST 方法,电子处方取药结果查询请求,并处理响应结果 + * + * @param eleMedInput 电子处方取药结果查询入参实体 + * @return 电子处方取药结果查询出参实体 + */ + public MedicationResultInquiry queryMedPre(ElepMedresultInput eleMedInput){ + + MedicationResultInquiry medResult = new MedicationResultInquiry(); + // 发送请求 + String s = + httpPost(ybServiceConfig.getEleUrl() + "/medresult", eleMedInput); + // 参数处理 + ObjectMapper mapper = new ObjectMapper(); + Result result = null; + try { + result = mapper.readValue(s, Result.class); + } catch (Exception e) { + e.printStackTrace(); + } + if (result != null && result.isSuccess()) { + medResult = JSON.parseObject(JSON.toJSONString(result.getResult()), MedicationResultInquiry.class); + } + + return medResult; + } + /** + * 发送http请求(2025/05/02经测试,若以自带的工具类发送请求失败,故使用原peis系统中成功调用的写法重新封装) + * @param url 路径 + * @param o 参数 + * @return + */ + private String httpPost(String url,Object o){ + String resultString = ""; +// //拼参数 + BaseParam baseParam = new BaseParam(); + baseParam.setBaseInfo(ybParamBuilderUtil.getBaseInfo()).setData(o); + //创建Http请求 + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(30000).setConnectionRequestTimeout(30000) + .setSocketTimeout(30000).build(); + CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(requestConfig).build(); + CloseableHttpResponse response = null; + //发送请求 + try { + HttpPost httpPost = new HttpPost(url); + StringEntity stringEntity = new StringEntity(JSON.toJSONString(baseParam), ContentType.APPLICATION_JSON); + httpPost.setEntity(stringEntity); + // 执行http请求 + response = httpClient.execute(httpPost); + resultString = EntityUtils.toString(response.getEntity(), "utf-8"); + } + catch (Exception e) { + e.printStackTrace(); + throw new ServiceException("Http请求异常,请稍后再试。"); + } + finally { + try { + response.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return resultString; + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbElepBaseServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbElepBaseServiceImpl.java new file mode 100644 index 00000000..e04a0819 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbElepBaseServiceImpl.java @@ -0,0 +1,607 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.service.impl; + +import java.util.*; + +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.model.LoginUser; +import com.core.common.utils.DateUtils; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.openhis.administration.domain.Encounter; +import com.openhis.administration.domain.Patient; +import com.openhis.administration.domain.Practitioner; +import com.openhis.administration.service.IEncounterService; +import com.openhis.administration.service.IPatientService; +import com.openhis.administration.service.IPractitionerService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.PrescriptionType; +import com.openhis.common.enums.RequestStatus; +import com.openhis.common.utils.EnumUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.ybmanage.dto.VeriPrescriptionDetailInfoDto; +import com.openhis.web.ybmanage.dto.VeriPrescriptionInfoDto; +import com.openhis.web.ybmanage.dto.VeriPrescriptionParam; +import com.openhis.web.ybmanage.mapper.YbElepMapper; +import com.openhis.workflow.domain.ElepMedicationRequest; +import com.openhis.workflow.service.IElepMedicationRequestService; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.openhis.web.ybmanage.service.IYbEleBaseService; +import com.openhis.web.ybmanage.util.YbEleParamBuilderUtil; +import com.openhis.yb.domain.ClinicReg; +import com.openhis.yb.service.IRegService; +import com.openhis.ybelep.domain.*; +import com.openhis.ybelep.service.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +/** + * 医保表的增删改查接口 + * + * @author yuxj + * @date 2025-04-17 + */ +@Service +public class YbElepBaseServiceImpl implements IYbEleBaseService { + + @Autowired + IRegService iRegService; + @Autowired + YbEleParamBuilderUtil ybEleUtil; + @Autowired + IElepVeriPrescriptionInfoService eleVeriPrescriptionInfoService; + @Autowired + IElepVeriPrescriptionDetailService eleVeriPrescriptionDetailService; + @Autowired + IElepVeriVisitInfoService eleVeriVisitInfoService; + @Autowired + IElepVeriDiagnosisInfoService eleVeriDiagnosisInfoService; + @Autowired + IElepVeriPrescriptionOutputService elePresOutputService; + @Autowired + IElepSignatureInputService eleSignInfoService; + @Autowired + IElepSignatureOutputService eleSignOutService; + @Autowired + IElepUploadInputService eleUploadInputService; + @Autowired + IElepUploadOutputService eleUploadOutputService; + @Autowired + IElepRevokeInputService eleRevokeInputService; + @Autowired + IElepRevokeOutputService eleRevokeOutputService; + @Autowired + IElepMedresultInputService eleMedResultInputService; + @Autowired + IElepQuerPrescriptionInputService eleQueryPreInputService; + @Autowired + IElepMedresultInfoService eleMedResInfoService; + @Autowired + IElepMedresultInputService eleMedResInputService; + @Autowired + IElepMedresultDetailService eleMedDetailService; + @Autowired + YbElepMapper ybElepMapper; + @Autowired + IElepMedicationRequestService elepMedicationRequestService; + @Autowired + IElepQuerPrescriptionInfoService eleQuerPrescriptionInfoService; + @Autowired + IElepQuerPrescriptionDetailService eleQuerPrescriptionDetailService; + @Autowired + IElepQuerVisitInfoService eleQuerVisitInfoService; + @Autowired + IElepQuerDiagnosisInfoService eleQuerDiagnosisInfoService; + @Resource + IPractitionerService practitionerService; + @Resource + IEncounterService encounterService; + @Resource + IPatientService patientService; + + /** + * 医保电子处方查询 + * + * @param veriPrescriptionParam 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @param request 请求数据 + * @return 处方信息 + */ + @Override + public R getVeriPrescriptionInfo(VeriPrescriptionParam veriPrescriptionParam, String searchKey, Integer pageNo, + Integer pageSize, HttpServletRequest request) { + + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(veriPrescriptionParam, searchKey, + new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.IptOtpNo)), + request); + + // 医保电子处方查询 + IPage veriPrescriptionInfo = + ybElepMapper.getVeriPrescriptionInfo(new Page<>(pageNo, pageSize), queryWrapper); + // 状态转换 + veriPrescriptionInfo.getRecords().forEach(prescriptionInfoDto -> { + prescriptionInfoDto.setStatusEnum_enumText( + EnumUtils.getInfoByValue(RequestStatus.class, prescriptionInfoDto.getStatusEnum())); + }); + + return R.ok(veriPrescriptionInfo); + } + + /** + * 医保电子处方查看 + * + * @param prescriptionNo 处方号 + * @return 处方详细信息 + */ + @Override + public R getPrescriptionDetailInfo(String prescriptionNo) { + // 处方详细查询 + List prescriptionDetailInfo = + ybElepMapper.getVeriPrescriptionDetailInfo(prescriptionNo); + // 状态转换 + for (VeriPrescriptionDetailInfoDto item : prescriptionDetailInfo) { + item.setStatusEnum_enumText(EnumUtils.getInfoByValue(RequestStatus.class, item.getStatusEnum())); + item.setRxTypeCode_enumText(EnumUtils.getInfoByValue(PrescriptionType.class, item.getRxTypeCode())); + } + return R.ok(prescriptionDetailInfo); + } + + /** + * 医保电子处方状态更新(上传) + * + * @param prescriptionNo 处方号 + * @return 处方信息 + */ + @Override + public R uploadPrescriptionStatus(String prescriptionNo) { + // 获取当前登陆用户信息 + LoginUser loginUser = SecurityUtils.getLoginUser(); + Practitioner user = practitionerService.getPractitionerByUserId(loginUser.getUserId()); + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 获取医保处方号 + ElepVeriPrescriptionOutput prescriptionOutput = + elePresOutputService.getOne(new LambdaQueryWrapper() + .eq(ElepVeriPrescriptionOutput::getPrescriptionNo, prescriptionNo)); + if (prescriptionOutput == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null)); + } + // 获取电子处方信息 + List elepMedicationRequest = + elepMedicationRequestService.selectElepMedicationRequestByPrescriptionNo(prescriptionNo); + if (elepMedicationRequest == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null)); + } + boolean flg; + // 更改处方信息 + for (ElepMedicationRequest item : elepMedicationRequest) { + // 医保处方编号 + item.setHiRxno(prescriptionOutput.getHiRxno()); + // 电子处方追溯码 + item.setRxTraceCode(prescriptionOutput.getRxTraceCode()); + // 处方状态 + item.setStatusEnum(RequestStatus.COMPLETED.getValue()); + // 审核药师 + item.setReviewDrId(user.getId()); + // 审核时间 + item.setReviewTime(now); + flg = elepMedicationRequestService.updateById(item); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + + /** + * 医保电子处方拒绝上传 + * + * @param prescriptionNo 处方号 + * @return 处方信息 + */ + @Override + public R refusePrescriptionStatus(String prescriptionNo) { + // 获取当前登陆用户信息 + LoginUser loginUser = SecurityUtils.getLoginUser(); + Practitioner user = practitionerService.getPractitionerByUserId(loginUser.getUserId()); + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 获取电子处方信息 + List elepMedicationRequest = + elepMedicationRequestService.selectElepMedicationRequestByPrescriptionNo(prescriptionNo); + if (elepMedicationRequest == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null)); + } + boolean flg; + // 更改处方信息 + for (ElepMedicationRequest item : elepMedicationRequest) { + // 处方状态 + item.setStatusEnum(RequestStatus.ENDED.getValue()); + flg = elepMedicationRequestService.updateById(item); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + + /** + * 医保电子处方状态更新(撤销) + * + * @param prescriptionNo 处方号 + * @param quashReason 撤销原因 + * @return 处方信息 + */ + @Override + public R quashPrescriptionStatus(String prescriptionNo, String quashReason) { + // 获取当前登陆用户信息 + LoginUser loginUser = SecurityUtils.getLoginUser(); + Practitioner user = practitionerService.getPractitionerByUserId(loginUser.getUserId()); + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 获取电子处方信息 + List elepMedicationRequest = + elepMedicationRequestService.selectElepMedicationRequestByPrescriptionNo(prescriptionNo); + if (elepMedicationRequest == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null)); + } + boolean flg; + // 更改处方信息 + for (ElepMedicationRequest item : elepMedicationRequest) { + // 处方状态 + item.setStatusEnum(RequestStatus.CANCELLED.getValue()); + // 撤销药师 + item.setQuashDrId(user.getId()); + // 撤销时间 + item.setQuashTime(now); + // 撤销原因 + item.setQuashReason(quashReason); + flg = elepMedicationRequestService.updateById(item); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + + /** + * 做成电子处方上传预核验入参信息 + * + * @param prescriptionNo 处方号 + * @param tenantId 租户Id + * @return 处方信息 + */ + @Override + public PreCheckPrescription makePreCheckPrescription(String prescriptionNo, + Integer tenantId) { + + // 获取药品请求信息(处方表) + List medicationRequestList = elepMedicationRequestService.list( + new LambdaQueryWrapper().eq(ElepMedicationRequest::getPrescriptionNo, prescriptionNo) + .eq(ElepMedicationRequest::getTenantId, tenantId)); + if (medicationRequestList == null) { + return null; + } + ElepMedicationRequest medicationRequest = medicationRequestList.get(0); + + // 就诊信息 + Encounter encounter = encounterService.getById(medicationRequest.getEncounterId()); + //患者信息 + Patient patient = patientService.getById(encounter.getPatientId()); + // 获取医保挂号信息 todo clinicReg可能改成一对多 + ClinicReg clinicReg = iRegService.getByBusNo(encounter.getBusNo()); + if (clinicReg == null) { + return null; + } + + // 获取处方信息 + PreCheckPrescription prescriptionInfo = + ybEleUtil.getEleVeriPrescriptionInfo(medicationRequest, patient, tenantId); + // 获取处方明细信息 + List rxdrugdetail = + ybEleUtil.getEleVeriPrescriptionDetail(prescriptionNo, tenantId); + + // 获取就诊信息和诊断信息 + PreCheckPrescription eleVisAndDisInfo = + ybEleUtil.getEleVeriVisitAndDiagnosisInfo(medicationRequest, clinicReg, tenantId); + + // 电子处方上传预核验实体赋值 + + prescriptionInfo.setRxdrugdetail(rxdrugdetail) + .setMdtrtinfo(eleVisAndDisInfo.getMdtrtinfo()).setDiseinfo(eleVisAndDisInfo.getDiseinfo()); + + return prescriptionInfo; + } + + /** + * 电子处方上传预核验信息保存 + * + * @param pcpResult 电子处方上传预核验信息 + * @return + */ + @Override + public void savePreCheckPrescription(PreCheckPrescription pcpResult) { + + //todo dto和表的字段类型不一致 + ElepVeriPrescriptionInfo prescriptionInfo = new ElepVeriPrescriptionInfo(); + BeanUtils.copyProperties(pcpResult, prescriptionInfo); + + // 保存处方信息 + eleVeriPrescriptionInfoService.save(prescriptionInfo); + // 保存处方明细信息 + eleVeriPrescriptionDetailService.saveBatch(pcpResult.getRxdrugdetail()); + // 保存就诊信息 + eleVeriVisitInfoService.save(pcpResult.getMdtrtinfo()); + // 保存诊断信息 + eleVeriDiagnosisInfoService.save(pcpResult.getDiseinfo()); + } + + + /** + * 电子处方上传预核验响应出参信息保存 + * + * @param pcpResult 电子处方上传预核验响应出参信息 + * @return + */ + @Override + public void saveEleVeriPrescriptionOutput(ElepVeriPrescriptionOutput pcpResult) { + elePresOutputService.save(pcpResult); + } + + /** + * 做成电子处方医保电子签名入参 + * + * @param hiRxno 医保处方编号 + * @param practitionerId 审方药师Id + * @param checkDate 审方时间 + * @param tenantId 租户Id + * @return 处方信息 + */ + @Override + public ElepSignatureInput makeEleSignature(String hiRxno, Long practitionerId, Date checkDate, Integer tenantId) { + + ElepVeriPrescriptionOutput pcpResult = elePresOutputService.getOne( + new LambdaQueryWrapper().eq(ElepVeriPrescriptionOutput::getHiRxno, hiRxno)); + if (pcpResult == null) { + return null; + } + return ybEleUtil.getEleSignatureInput(pcpResult, practitionerId, checkDate, tenantId); + } + + /** + * 保存电子处方医保电子签名入参 + * + * @param eSign 电子处方医保电子签名入参信息 + * @return + */ + @Override + public void saveEleSignature(ElepSignatureInput eSign) { + eleSignInfoService.save(eSign); + } + + /** + * 保存电子处方医保电子签名响应出参 + * + * @param esResult 电子处方医保电子签名响应出参信息 + * @return + */ + @Override + public void saveEleSignatureOutput(ElepSignatureOutput esResult) { + eleSignOutService.save(esResult); + } + + /** + * 做成电子处方上传入参 + * + * @param hiRxno 医保处方编号 + * @param practitionerId 审方药师Id + * @param checkDate 审方时间 + * @param tenantId 租户Id + * @return 电子处方上传入参 + */ + @Override + public ElepUploadInput makeEleUploadInput(String hiRxno, Long practitionerId, Date checkDate, Integer tenantId) { + + ElepVeriPrescriptionOutput pcpResult = elePresOutputService.getOne( + new LambdaQueryWrapper().eq(ElepVeriPrescriptionOutput::getHiRxno, hiRxno)); + + ElepSignatureOutput esResult = eleSignOutService + .getOne(new LambdaQueryWrapper().eq(ElepSignatureOutput::getHiRxno, hiRxno)); + + if (pcpResult == null || esResult == null) { + return null; + } + return ybEleUtil.getEleUploadInput(pcpResult, esResult, practitionerId, checkDate, tenantId); + } + + /** + * 保存电子处方上传入参 + * + * @param eleUploadInput 电子处方上传入参信息 + * @return + */ + @Override + public void saveEleUploadInput(ElepUploadInput eleUploadInput) { + eleUploadInputService.save(eleUploadInput); + } + + /** + * 保存电子处方上传响应出参 + * + * @param euResult 电子处方上传响应出参信息 + * @return + */ + @Override + public void saveEleUploadOutput(ElepUploadOutput euResult) { + eleUploadOutputService.save(euResult); + } + + /** + * 做成电子处方撤销入参 + * + * @param hiRxno 医保处方编号 + * @param practitionerId 撤销药师Id + * @param description 撤销原因 + * @param revokeDate 撤销时间 + * @param tenantId 租户Id + * @return 电子处方撤销入参 + */ + @Override + public ElepRevokeInput makeEleRevokeInput(String hiRxno, Long practitionerId, String description, Date revokeDate, + Integer tenantId) { + + ElepVeriPrescriptionOutput pcpResult = elePresOutputService.getOne( + new LambdaQueryWrapper().eq(ElepVeriPrescriptionOutput::getHiRxno, hiRxno)); + if (pcpResult == null) { + return null; + } + ElepUploadOutput euResult = eleUploadOutputService + .getOne(new LambdaQueryWrapper().eq(ElepUploadOutput::getHiRxno, pcpResult.getHiRxno())); + + if (euResult == null) { + return null; + } + + return ybEleUtil.getElepRevokeInput(pcpResult, euResult, practitionerId, description, revokeDate, tenantId); + } + + /** + * 保存电子处方撤销入参 + * + * @param eleRevokeInput 电子处方撤销入参信息 + * @return + */ + @Override + public void saveEleRevokeInput(ElepRevokeInput eleRevokeInput) { + eleRevokeInputService.save(eleRevokeInput); + } + + /** + * 保存电子处方撤销响应出参 + * + * @param ereResult 电子处方撤销响应出参信息 + * @return + */ + @Override + public void saveEleRevokeOutput(ElepRevokeOutput ereResult) { + + eleRevokeOutputService.save(ereResult); + } + + /** + * 做成电子处方信息查询入参 + * + * @param hiRxno 医保处方编号 + * @return 电子处方信息查询入参 + */ + @Override + public ElepQuerPrescriptionInput makeEleQueryPrescriptionInput(String hiRxno) { + + ElepVeriPrescriptionOutput pcpResult = elePresOutputService.getOne( + new LambdaQueryWrapper().eq(ElepVeriPrescriptionOutput::getHiRxno, hiRxno)); + + if (pcpResult == null) { + return null; + } + return ybEleUtil.getEleQueryPrescriptionInput(pcpResult); + } + + /** + * 保存电子处方信息查询入参 + * + * @param eleQueryPreInput 电子处方信息查询入参信息 + * @return + */ + @Override + public void saveEleQueryPrescriptionInput(ElepQuerPrescriptionInput eleQueryPreInput) { + eleQueryPreInputService.save(eleQueryPreInput); + } + + /** + * 保存电子处方信息查询响应出参信息 + * + * @param emrResult 电子处方信息查询响应出参信息 + * @return + */ + @Override + public void saveEleMedResultOut(QueryPrescription emrResult) { + + ElepQuerPrescriptionInfo prescriptionInfo = new ElepQuerPrescriptionInfo(); + BeanUtils.copyProperties(emrResult, prescriptionInfo); + + // 保存处方信息 + eleQuerPrescriptionInfoService.save(prescriptionInfo); + // 保存处方明细信息 + eleQuerPrescriptionDetailService.saveBatch(emrResult.getRxDetlList()); + // 保存就诊信息 + eleQuerVisitInfoService.save(emrResult.getRxOtpinfo()); + // 保存诊断信息 + eleQuerDiagnosisInfoService.saveBatch(emrResult.getRxDiseList()); + + } + + /** + * 做成电子处方取药结果查询入参 + * + * @param hiRxno 医保处方编号 + * @return 电子处方取药结果查询入参 + */ + @Override + public ElepMedresultInput makeEleMedResultInput(String hiRxno) { + + ElepVeriPrescriptionOutput pcpResult = elePresOutputService.getOne( + new LambdaQueryWrapper().eq(ElepVeriPrescriptionOutput::getHiRxno, hiRxno)); + + if (pcpResult == null ) { + return null; + } + + return ybEleUtil.getEleMedResultInput(pcpResult); + } + + /** + * 保存电子处方取药结果查询入参 + * + * @param eleMedInput 电子处方取药结果查询入参信息 + * @return + */ + @Override + public void saveEleMedResultInput(ElepMedresultInput eleMedInput) { + eleMedResInputService.save(eleMedInput); + } + + /** + * 保存电子处方取药结果查询响应出参 + * + * @param medResInquiry 电子处方取药结果查询响应出参信息 + * @return + */ + @Override + public void saveMedicationResultInquiry(MedicationResultInquiry medResInquiry) { + ElepMedresultInfo medresultInfo = new ElepMedresultInfo(); + BeanUtils.copyProperties(medResInquiry, medresultInfo); + + // 保存处方信息 + eleMedResInfoService.save(medresultInfo); + eleMedDetailService.saveBatch(medResInquiry.getSeltdelts()); + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/util/YbEleParamBuilderUtil.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/util/YbEleParamBuilderUtil.java new file mode 100644 index 00000000..a52c30ae --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/util/YbEleParamBuilderUtil.java @@ -0,0 +1,647 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.Period; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; + +import com.core.common.utils.SecurityUtils; +import com.openhis.common.constant.CommonConstants; +import com.openhis.workflow.domain.ElepMedicationRequest; +import com.openhis.workflow.service.IElepMedicationRequestService; +import com.openhis.ybcatalog.domain.CatalogDrugInfo; +import com.openhis.ybcatalog.service.ICatalogDrugInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.core.common.utils.DateUtils; +import com.openhis.administration.domain.*; +import com.openhis.administration.service.*; +import com.openhis.clinical.domain.Condition; +import com.openhis.clinical.domain.ConditionDefinition; +import com.openhis.clinical.service.IConditionDefinitionService; +import com.openhis.clinical.service.IConditionService; +import com.openhis.common.enums.*; +import com.openhis.common.enums.ybenums.*; +import com.openhis.medication.domain.Medication; +import com.openhis.medication.domain.MedicationDefinition; +import com.openhis.medication.service.IMedicationDefinitionService; +import com.openhis.medication.service.IMedicationService; +import com.openhis.yb.domain.ClinicReg; +import com.openhis.yb.service.IRegService; +import com.openhis.ybelep.domain.*; +import com.openhis.ybelep.service.IElepVeriPrescriptionInfoService; +import com.openhis.ybelep.service.IElepVeriVisitInfoService; + +/** + * 医保接口调用工具 + * + * @author yuxj + * @date 2025-04-17 + */ +@Component +public class YbEleParamBuilderUtil { + + /********************* 业务实体服务 *******************/ + + // 就诊管理服务 + @Autowired + IEncounterService iEncounterService; + @Autowired + IElepMedicationRequestService elepMedicationRequestService; + // 就诊管理 + @Autowired + IAccountService accountService; + @Autowired + IMedicationDefinitionService medicationDefinitionService; + @Autowired + ICatalogDrugInfoService catalogDrugInfoService; + @Autowired + IEncounterDiagnosisService encounterDiagnosisService; + @Autowired + IEncounterService encounterService; + @Autowired + IPatientService patientService; + @Autowired + IOrganizationService organizationService; + @Autowired + IPractitionerService practitionerService; + @Autowired + IPractitionerRoleService practitionerRoleService; + @Autowired + IConditionService conditionService; + @Autowired + IConditionDefinitionService conditionDefinitionService; + + /********************* 医保实体服务 *******************/ + @Autowired + IRegService iRegService; + @Autowired + IElepVeriPrescriptionInfoService eleVerPreInfoService; + @Autowired + IElepVeriVisitInfoService eleVerVisInfoService; + + /** + * 获取处方信息 + * + * @param medicationRequest 处方信息 + * @param patient 患者信息 + * @param tenantId 租户Id + * @return 处方信息 + */ + public PreCheckPrescription getEleVeriPrescriptionInfo(ElepMedicationRequest medicationRequest, Patient patient, + Integer tenantId) { + + // 声明处方信息对象 + PreCheckPrescription elepVeriPrescriptionInfo = new PreCheckPrescription(); + elepVeriPrescriptionInfo.setMdtrtCertType("02") + .setMdtrtCertNo(patient.getIdCard()) + // 01-定点医疗机构就诊 + .setBizTypeCode("01").setHospRxno(medicationRequest.getPrescriptionNo()) + .setRxTypeCode(medicationRequest.getRxTypeCode().toString()).setPrscTime(medicationRequest.getIssueTime()) + // 处方有效天数 + .setValiDays(medicationRequest.getValidityDays().toString()) + // 计算截止时间 + .setValiEndTime(DateUtils.addDays(medicationRequest.getIssueTime(), medicationRequest.getValidityDays())); + + // 就诊凭证类型为03”时,填写社会保障卡卡号 + if (elepVeriPrescriptionInfo.getMdtrtCertType() == YbMdtrtCertType.MDTRT_CERT_TYPE03.getValue()) { + + Account account = accountService.getOne( + new LambdaQueryWrapper().eq(Account::getEncounterId, medicationRequest.getEncounterId()) + .eq(Account::getTypeCode, AccountType.SOCIAL_SECURITY_CARD.getValue()) + .eq(Account::getTenantId, tenantId)); + if (account == null) { + return null; + } + // 设置社会保障卡号 + elepVeriPrescriptionInfo.setCardSn(account.getNo()); + } + + // todo 药品类目数(剂数):西药、中成药时为药品的类目数量 + // 西药、中成药对应的处方类别list + List westernOrChineseList = new ArrayList<>(); + westernOrChineseList.add(Integer.parseInt(YbRxItemTypeCode.WESTERN_MEDICINE.getValue())); + westernOrChineseList.add(Integer.parseInt(YbRxItemTypeCode.CHINESE_PATENT_MEDICINE.getValue())); + + // 调用 count 方法 + Long countWesternOrChinese = elepMedicationRequestService + .selectWesternOrChineseCount(medicationRequest.getPrescriptionNo(), westernOrChineseList, tenantId); + // 西药、中成药时为药品的类目数量 + elepVeriPrescriptionInfo.setRxDrugCnt(countWesternOrChinese.toString()); + + return elepVeriPrescriptionInfo; + } + + /** + * 获取处方明细信息 + * + * @param prescriptionNo 处方号 + * @param tenantId 租户Id + * @return 处方明细信息 + */ + public List getEleVeriPrescriptionDetail(String prescriptionNo, Integer tenantId) { + + // 查询该处方所有中药饮片 + List materialObjs = elepMedicationRequestService.list(new LambdaQueryWrapper() + .eq(ElepMedicationRequest::getPrescriptionNo, prescriptionNo).eq(ElepMedicationRequest::getTenantId, tenantId)); + // 未查到返回空 + if (materialObjs == null) { + return null; + } + + List eleDetList = new ArrayList<>(); + + // 遍历 materialObjs 列表 + for (ElepMedicationRequest materialObj : materialObjs) { + CatalogDrugInfo mObj = catalogDrugInfoService.getOne(new LambdaQueryWrapper() + .eq(CatalogDrugInfo::getMedicalCatalogCode, materialObj.getMedicationId()).orderByDesc(CatalogDrugInfo::getCreatedAt).last("LIMIT 1")); + // 未查到返回空 + if (mObj == null) { + return null; + } + + ElepVeriPrescriptionDetail eleObj = new ElepVeriPrescriptionDetail(); + eleObj.setMedListCodg(mObj.getMedicalCatalogCode()) + .setDrugGenname(mObj.getDrugGenericName()).setDrugDosform(mObj.getDrugForm()) + .setDrugSpec(mObj.getDrugSpecification()).setMedcBegntime(materialObj.getEffectiveDoseStart()) + .setMedcEndtime(materialObj.getEffectiveDoseEnd()) + .setMedcDays(materialObj.getDispensePerDuration().toString()) + .setDrugDosunt(mObj.getMinPricingUnit()).setDrugCnt(materialObj.getQuantity().toString()) + // todo 医院审批标志,配合目录的限制使用标志使用(目前吉林省不启用),暂时先写死 + .setHospApprFlag("0") + // 院内内部处方号 + .setPrescriptionNo(prescriptionNo) + .setRxItemTypeCode(materialObj.getRxTypeCode().toString()) + .setRxItemTypeName(PrescriptionType.getByValue(materialObj.getRxTypeCode()).getInfo()) + .setMedcWayCodg(materialObj.getMedRoute()) + .setMedcWayDscr(mObj.getDosage()) + .setSinDoscnt(materialObj.getMedDosage().toString()).setSinDosunt(materialObj.getMedDosageUnitCode()) + .setUsedFrquCodg(materialObj.getMedFrequency()) + .setUsedFrquName(YbUsedFrqu.getByValue(materialObj.getMedFrequency()).getDescription()); + + eleDetList.add(eleObj); + } + + return eleDetList; + } + + /** + * 获取就诊信息和诊断信息 + * + * @param medicationRequest 处方信息 + * @param clinicReg 医保挂号保存的信息 + * @param tenantId 租户Id + * @return 处方明细信息 + */ + public PreCheckPrescription getEleVeriVisitAndDiagnosisInfo(ElepMedicationRequest medicationRequest, + ClinicReg clinicReg, Integer tenantId) { + // 电子处方上传预核验信息 + PreCheckPrescription preCheckPrescription = new PreCheckPrescription(); + + // 获取就诊诊断信息 + EncounterDiagnosis encDiagObjs = + encounterDiagnosisService.getOne(new LambdaQueryWrapper() + .eq(EncounterDiagnosis::getEncounterId, medicationRequest.getEncounterId()) + .eq(EncounterDiagnosis::getTenantId, tenantId).eq(EncounterDiagnosis::getTenantId, tenantId).eq(EncounterDiagnosis::getMaindiseFlag, Whether.YES.getValue())); + // 就诊管理 + Encounter encounter = encounterService.getOne(new LambdaQueryWrapper() + .eq(Encounter::getId, medicationRequest.getEncounterId())); + // 患者信息 + Patient patient = patientService.getOne(new LambdaQueryWrapper() + .eq(Patient::getId, encounter.getPatientId()).eq(Patient::getTenantId, tenantId)); + // 医生所属科室 + Organization organization = organizationService.getOne(new LambdaQueryWrapper() + .eq(Organization::getId, medicationRequest.getOrgId()).eq(Organization::getTenantId, tenantId)); + // 就诊诊断所属科室 + Organization orgDis = organizationService.getOne(new LambdaQueryWrapper() + .eq(Organization::getId, encounter.getOrganizationId()).eq(Organization::getTenantId, tenantId)); + // 医生信息 + Practitioner practitioner = practitionerService.getOne(new LambdaQueryWrapper() + .eq(Practitioner::getId, medicationRequest.getPrescribingDrId()).eq(Practitioner::getTenantId, tenantId)); + // 医生详细信息 + Practitioner praRole = practitionerService.getOne(new LambdaQueryWrapper() + .eq(Practitioner::getId, medicationRequest.getPrescribingDrId()) + .eq(Practitioner::getTenantId, tenantId)); + // 医生所属科室信息 + Organization orgDor = organizationService.getOne(new LambdaQueryWrapper() + .eq(Organization::getId, praRole.getOrgId()).eq(Organization::getTenantId, tenantId)); + if (encDiagObjs == null || encounter == null || patient == null || organization == null || orgDis == null + || practitioner == null || praRole == null || orgDor == null) { + return null; + } + // 门诊/住院判断 + String otpIptFlag = ""; + if (encounter.getClassEnum() == EncounterClass.AMB.getValue()) { + otpIptFlag = YbEncounterClass.AMB.getValue(); + } else if (encounter.getClassEnum() == EncounterClass.IMP.getValue()) { + otpIptFlag = YbEncounterClass.IMP.getValue(); + } + + String fixmedinsCode = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.FIXMEDINS_CODE); + String fixmedinsName = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.FIXMEDINS_NAME); + + // 1-输入-就诊信息 + ElepVeriVisitInfo eleInfo = new ElepVeriVisitInfo(); + // 诊断信息 + Condition condition = conditionService.getOne(new LambdaQueryWrapper() + .eq(Condition::getId, encDiagObjs.getConditionId()).eq(Condition::getTenantId, tenantId)); + // 诊断定义 + ConditionDefinition cdObj = conditionDefinitionService.getOne(new LambdaQueryWrapper() + .eq(ConditionDefinition::getId, condition.getDefinitionId()) + .eq(ConditionDefinition::getTenantId, tenantId)); + if (condition == null || cdObj == null) { + return null; + } + // 以挂号时间为截至时间,计算年龄 + BigDecimal age = calculateAge(patient.getBirthDate(), clinicReg.getBegntime()); + eleInfo.setFixmedinsCode(fixmedinsCode).setFixmedinsName(fixmedinsName).setMdtrtId(clinicReg.getMdtrtId()) + .setIptOtpNo(clinicReg.getIptOtpNo()).setOtpIptFlag(otpIptFlag) + .setPsnNo(clinicReg.getPsnNo()).setPatnName(patient.getName()).setCertno(patient.getIdCard()) + // todo 目前默认都是身份证:01 + .setPsnCertType(YbIdDocumentType.RESIDENT_ID_CARD.getValue()).setPatnAge(age.toString()) + .setPrscDeptName(organization.getName()).setPrscDeptCode(organization.getYbNo()) + .setDrCode(practitioner.getYbNo()).setPrscDrName(praRole.getName()) + .setDrProfttlCodg(practitioner.getDrProfttlCode()) + .setDrProfttlName(YbDoctorTitle.getByValue(practitioner.getDrProfttlCode()).getDescription()) + .setDrDeptCode(orgDor.getYbNo()).setDrDeptName(orgDor.getName()).setMdtrtTime(encounter.getReceptionTime()) + // 院内内部处方号 + .setPrescriptionNo(medicationRequest.getPrescriptionNo()); + if (clinicReg.getMedType() == null) { + eleInfo.setMedType("11"); + } else { + + eleInfo.setMedType(clinicReg.getMedType()); + } + + // 性别 + if (patient.getGenderEnum() == AdministrativeGender.FEMALE.getValue()) { + eleInfo.setGend(YbGender.FEMALE.getValue()); + } else if (patient.getGenderEnum() == AdministrativeGender.MALE.getValue()) { + eleInfo.setGend(YbGender.MALE.getValue()); + } else { + eleInfo.setGend(YbGender.UNKNOWN.getValue()); + } + // 特殊病种标志 2025/05/24 该字段不为空是,特殊病种给yes + if (encDiagObjs.getMedTypeCode() != null) { + eleInfo.setSpDiseFlag(Whether.YES.getCode()); + } else { + eleInfo.setSpDiseFlag(Whether.NO.getCode()); + } + // 主诊断标记 + if (encDiagObjs.getMaindiseFlag() == Whether.YES.getValue()) { + eleInfo.setMaindiagCode(cdObj.getYbNo()).setMaindiagName(cdObj.getName()); + } + + // 2-输入-诊断信息 + ElepVeriDiagnosisInfo eleVerDisInfo = new ElepVeriDiagnosisInfo(); + + eleVerDisInfo.setDiagType(cdObj.getTypeCode()).setDiagSrtNo(encDiagObjs.getDiagSrtNo().toString()) + .setDiagCode(cdObj.getYbNo()).setDiagName(cdObj.getName()).setDiagDept(orgDis.getName()) + .setDiagDrNo(practitioner.getYbNo()).setDiagDrName(praRole.getName()) + .setDiagTime(encounter.getReceptionTime()) + // 院内内部处方号 + .setPrescriptionNo(medicationRequest.getPrescriptionNo()); + // 主诊断标记 + if (encDiagObjs.getMaindiseFlag() == Whether.YES.getValue()) { + eleVerDisInfo.setMaindiagFlag(Whether.YES.getValue().toString()); + } else { + eleVerDisInfo.setMaindiagFlag(Whether.NO.getValue().toString()); + } + + preCheckPrescription.setMdtrtinfo(eleInfo).setDiseinfo(eleVerDisInfo); + + return preCheckPrescription; + + } + + /** + * 做成电子处方医保电子签名入参 + * + * @param pcpResult 电子处方上传预核验的相响应参数 + * @param practitionerId 审方药师Id + * @param checkDate 审方时间 + * @param tenantId 租户Id + * @return 处方信息 + */ + public ElepSignatureInput getEleSignatureInput(ElepVeriPrescriptionOutput pcpResult, Long practitionerId, + Date checkDate, Integer tenantId) { + + SimpleDateFormat targetFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String targetDateStr = targetFormat.format(checkDate); + + JSONObject optionJson = SecurityUtils.getLoginUser().getOptionJson(); + String outputPath = optionJson.getString(CommonConstants.Option.OUTPUT_PATH); + String fixmedinsCode = optionJson.getString(CommonConstants.Option.FIXMEDINS_CODE); + String fixmedinsName = optionJson.getString(CommonConstants.Option.FIXMEDINS_NAME); + + // 审方药师信息 + Practitioner practitioner = practitionerService.getOne(new LambdaQueryWrapper() + .eq(Practitioner::getUserId, practitionerId).eq(Practitioner::getTenantId, tenantId)); + // 审方药师所属科室信息 + Organization orgDor = organizationService.getOne(new LambdaQueryWrapper() + .eq(Organization::getId, practitioner.getOrgId()).eq(Organization::getTenantId, tenantId)); + + // 电子处方上传预核验-输入-输入-就诊信息 + ElepVeriVisitInfo eleVerVisInfo = eleVerVisInfoService.getOne(new LambdaQueryWrapper() + .eq(ElepVeriVisitInfo::getPrescriptionNo, pcpResult.getPrescriptionNo())); + + if (practitioner == null || orgDor == null || eleVerVisInfo == null) { + return null; + } + // 原始待签名处方信息 + JSONObject cpdata = new JSONObject(); + // 1 rxTraceCode 处方追溯码 字符型 20 Y + cpdata.put("rxTraceCode", pcpResult.getRxTraceCode()); + // 2 hiRxno 医保处方编号 字符型 30 Y + cpdata.put("hiRxno", pcpResult.getHiRxno()); + // 3 mdtrtId 医保就诊 ID 字符型 30 Y + cpdata.put("mdtrtId", eleVerVisInfo.getMdtrtId()); + // 4 patnName 患者姓名 字符型 40 Y + cpdata.put("patnName", eleVerVisInfo.getPatnName()); + // 5 psnCertType 人员证件类型 字符型 6 Y Y //todo 默认身份证:01 + cpdata.put("psnCertType", YbIdDocumentType.RESIDENT_ID_CARD.getValue()); + // 6 certno 证件号码 字符型 50 Y + cpdata.put("certno", eleVerVisInfo.getCertno()); + // 7 fixmedinsName 定点医疗机构名称 字符型 200 Y + cpdata.put("fixmedinsName", fixmedinsName); + // 8 fixmedinsCode 定点医疗机构编号 字符型 20 Y + cpdata.put("fixmedinsCode", fixmedinsCode); + // 9 drCode 开方医保医师代码 字符型 20 Y + cpdata.put("drCode", eleVerVisInfo.getDrCode()); + // 10 prscDrName 开方医师姓名 字符型 50 Y + cpdata.put("prscDrName", eleVerVisInfo.getPrscDrName()); + // 11 pharDeptName 审方药师科室名称 字符型 50 Y + cpdata.put("pharDeptName", orgDor.getName()); + // 12 pharDeptCode 审方药师科室编号 字符型 30 Y + cpdata.put("pharDeptCode", orgDor.getYbNo()); + // 13 pharProfttlCodg 审方药师职称编码 字符型 20 Y N + cpdata.put("pharProfttlCodg", practitioner.getDrProfttlCode() == null ? "" : practitioner.getDrProfttlCode()); + // 14 pharProfttlName 审方药师职称名称 字符型 20 + cpdata.put("pharProfttlName", practitioner.getDrProfttlCode() == null ? "" + : YbPharmacistTitle.getByValue(practitioner.getDrProfttlCode()).getDescription()); + // 15 pharCode 审方医保药师代码 字符型 20 Y + cpdata.put("pharCode", practitioner.getYbNo()); + // 16 pharCertType 审方药师证件类型 字符型 6 Y N + cpdata.put("pharCertType", ""); + // 17 pharCertno 审方药师证件号码 字符型 50 N + cpdata.put("pharCertno", ""); + // 18 pharName 审方药师姓名 字符型 50 Y + cpdata.put("pharName", practitioner.getName()); + // 19 pharPracCertNo 审方药师执业资格证号 字符型 50 + cpdata.put("pharPracCertNo", ""); + // 20 pharChkTime 医疗机构药师审方时间 日期时间型 Y yyyy-MM-dd HH:mm:ss + cpdata.put("pharChkTime", targetDateStr); + // 使用 TreeMap 对键进行排序 + TreeMap sortedMap = new TreeMap<>(); + for (String key : cpdata.keySet()) { + sortedMap.put(key, cpdata.get(key)); + } + // 重新构建排序后的 JSONObject + JSONObject sortedCpdata = new JSONObject(sortedMap); + + // 将 cpdata 转换为 JSON 字符串 + String jsonString = sortedCpdata.toString(); + + // 将 JSON 字符串编码为 Base64 字符串 + String base64EncodedString = Base64.getEncoder().encodeToString(jsonString.getBytes()); + + // 获取当前日期 + LocalDate currentDate = LocalDate.now(); + // 定义格式(yyyyMMdd) + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); + // 格式化日期 + String formattedDate = currentDate.format(formatter); + + + String folderPath = outputPath + formattedDate + "\\"; // Windows 绝对路径,注意末尾的反斜杠 + String fileName = pcpResult.getPrescriptionNo() + ".pdf"; // 文件名由处方号拼接而成 + // 拼接完整的文件路径 + String filePath = folderPath + fileName; + // 调用方法读取文件内容并获取 Base64 字符值 + String base64Content = fileToBase64(filePath); + + ElepSignatureInput eleSinIn = new ElepSignatureInput(); + eleSinIn.setFixmedinsCode(fixmedinsCode).setOriginalValue(base64EncodedString).setOriginalRxFile(base64Content) + // 医保处方编号 + .setHiRxno(pcpResult.getHiRxno()).setPrescriptionNo(pcpResult.getPrescriptionNo()); + + return eleSinIn; + + } + + /** + * 做成电子处方上传入参 + * + * @param pcpResult 电子处方上传预核验的相响应参数 + * @param esResult 电子处方医保电子签名响应出参 + * @param practitionerId 审方药师Id + * @param checkDate 审方时间 + * @param tenantId 租户Id + * @return 电子处方上传入参 + */ + public ElepUploadInput getEleUploadInput(ElepVeriPrescriptionOutput pcpResult, ElepSignatureOutput esResult, + Long practitionerId, Date checkDate, Integer tenantId) { + SimpleDateFormat targetFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String targetDateStr = targetFormat.format(checkDate); + + // 审方药师信息 + Practitioner practitioner = practitionerService.getOne(new LambdaQueryWrapper() + .eq(Practitioner::getUserId, practitionerId).eq(Practitioner::getTenantId, tenantId)); + // 审方药师所属科室信息 + Organization orgDor = organizationService.getOne(new LambdaQueryWrapper() + .eq(Organization::getId, practitioner.getOrgId()).eq(Organization::getTenantId, tenantId)); + + // 电子处方上传预核验-输入-输入-就诊信息 + ElepVeriVisitInfo eleVerVisInfo = eleVerVisInfoService.getOne(new LambdaQueryWrapper() + .eq(ElepVeriVisitInfo::getPrescriptionNo, pcpResult.getPrescriptionNo())); + + if (practitioner == null || orgDor == null || eleVerVisInfo == null) { + return null; + } + + ElepUploadInput eleUploadInput = new ElepUploadInput(); + eleUploadInput.setRxTraceCode(pcpResult.getRxTraceCode()).setHiRxno(pcpResult.getHiRxno()) + .setMdtrtId(eleVerVisInfo.getMdtrtId()).setPatnName(eleVerVisInfo.getPatnName()) + // todo 默认身份类型是身份证:01 + .setPsnCertType(YbIdDocumentType.RESIDENT_ID_CARD.getValue()).setCertno(eleVerVisInfo.getCertno()).setPatnName(eleVerVisInfo.getPatnName()) + .setFixmedinsCode(eleVerVisInfo.getFixmedinsCode()).setFixmedinsName(eleVerVisInfo.getFixmedinsName()) + .setDrCode(eleVerVisInfo.getDrCode()).setPrscDrName(eleVerVisInfo.getPrscDrName()) + .setPharDeptCode(orgDor.getYbNo()).setPharDeptName(orgDor.getName()).setPharCode(practitioner.getYbNo()) + .setPharName(practitioner.getName()).setPharChkTime(targetDateStr).setRxFile(esResult.getRxFile()) + .setSignDigest(esResult.getSignDigest()).setPharProfttlCodg(practitioner.getDrProfttlCode()).setPharProfttlName(YbPharmacistTitle.getByValue(practitioner.getDrProfttlCode()).getDescription()); + + return eleUploadInput; + + } + + /** + * 做成电子处方撤销入参 + * + * @param pcpResult 电子处方上传预核验的相响应参数 + * @param euResult 电子处方上传响应出参 + * @param practitionerId 撤销药师Id + * @param description 撤销原因 + * @param revokeDate 撤销时间 + * @param tenantId 租户Id + * @return 电子处方撤销入参 + */ + public ElepRevokeInput getElepRevokeInput(ElepVeriPrescriptionOutput pcpResult, ElepUploadOutput euResult, + Long practitionerId, String description, Date revokeDate, Integer tenantId) { + + // 撤销时药师信息 + Practitioner practitioner = practitionerService.getOne(new LambdaQueryWrapper() + .eq(Practitioner::getUserId, practitionerId).eq(Practitioner::getTenantId, tenantId)); + // 撤销时药师所属科室信息 + Organization orgDor = organizationService.getOne(new LambdaQueryWrapper() + .eq(Organization::getId, practitioner.getOrgId()).eq(Organization::getTenantId, tenantId)); + + // 电子处方上传预核验-输入-输入-就诊信息 + ElepVeriVisitInfo eleVerVisInfo = eleVerVisInfoService.getOne(new LambdaQueryWrapper() + .eq(ElepVeriVisitInfo::getPrescriptionNo, pcpResult.getPrescriptionNo())); + + if (practitioner == null || orgDor == null || eleVerVisInfo == null) { + return null; + } + + ElepRevokeInput eleRevokeInput = new ElepRevokeInput(); + eleRevokeInput.setHiRxno(pcpResult.getHiRxno()).setFixmedinsCode(eleVerVisInfo.getFixmedinsCode()) + .setDrCode(practitioner.getYbNo()).setUndoDrName(practitioner.getName()) + // todo 默认身份类型是身份证:01 + .setUndoDrCertno(practitioner.getPharPracCertNo()) + .setUndoDrCertType(YbIdDocumentType.RESIDENT_ID_CARD.getValue()).setUndoRea(description).setUndoTime(revokeDate); + + return eleRevokeInput; + } + + /** + * 做成电子处方信息查询入参 + * + * @param pcpResult 电子处方上传预核验的相响应参数 + * @return 电子处方信息查询入参 + */ + public ElepQuerPrescriptionInput getEleQueryPrescriptionInput(ElepVeriPrescriptionOutput pcpResult) { + + // 电子处方上传预核验-输入-输入-就诊信息 + ElepVeriVisitInfo eleVerVisInfo = eleVerVisInfoService.getOne(new LambdaQueryWrapper() + .eq(ElepVeriVisitInfo::getPrescriptionNo, pcpResult.getPrescriptionNo())); + + if (eleVerVisInfo == null) { + return null; + } + + ElepQuerPrescriptionInput eleQueryPreObj = new ElepQuerPrescriptionInput(); + eleQueryPreObj.setFixmedinsCode(eleVerVisInfo.getFixmedinsCode()).setHiRxno(pcpResult.getHiRxno()) + .setMdtrtId(eleVerVisInfo.getMdtrtId()).setPsnName(eleVerVisInfo.getPatnName()) + // todo 默认身份类型是身份证:01 + .setPsnCertType(YbIdDocumentType.RESIDENT_ID_CARD.getValue()).setCertno(eleVerVisInfo.getCertno()); + + return eleQueryPreObj; + } + + /** + * 做成电子处方信息查询入参 + * + * @param pcpResult 电子处方上传预核验的相响应参数 + * @return 电子处方信息查询入参 + */ + public ElepMedresultInput getEleMedResultInput(ElepVeriPrescriptionOutput pcpResult) { + + // 电子处方上传预核验-输入-输入-就诊信息 + ElepVeriVisitInfo eleVerVisInfo = eleVerVisInfoService.getOne(new LambdaQueryWrapper() + .eq(ElepVeriVisitInfo::getPrescriptionNo, pcpResult.getPrescriptionNo())); + + if (eleVerVisInfo == null) { + return null; + } + + ElepMedresultInput eleQueryPreObj = new ElepMedresultInput(); + eleQueryPreObj.setHiRxno(pcpResult.getHiRxno()).setFixmedinsCode(eleVerVisInfo.getFixmedinsCode()) + .setMdtrtId(eleVerVisInfo.getMdtrtId()).setPsnName(eleVerVisInfo.getPatnName()) + // todo 默认身份类型是身份证:01 + .setPsnCertType(YbIdDocumentType.RESIDENT_ID_CARD.getValue()).setCertno(eleVerVisInfo.getCertno()); + + return eleQueryPreObj; + } + + /** + * 获取BigDecimal类型的年龄 + * + * @param birthDate 出生日期 + * @param beginTime 计算起始日期 + * @return 年龄 + */ + public static BigDecimal calculateAge(Date birthDate, Date beginTime) { + // 验证输入参数是否为空 + if (Objects.isNull(birthDate)) { + System.out.println("出生年月日不能为空!"); + return null; + } + // 验证输入参数是否为空 + if (Objects.isNull(beginTime)) { + beginTime = DateUtils.getNowDate(); + } + + // 将 Date 转换为 LocalDate + LocalDate localBirthDate = birthDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate localBeginTime = beginTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + + // 计算出生日期到起始日期之间的年份差异 + Period period = Period.between(localBirthDate, localBeginTime); + + int years = period.getYears(); + + // 检查是否已经过了生日,如果没有过,则年份减一 + boolean hasBirthdayPassed = !localBirthDate.plusYears(years).isAfter(localBeginTime); + if (!hasBirthdayPassed) { + years--; + } + + return BigDecimal.valueOf(years); + } + + /** + * 读取文件内容并获取其 Base64 字符值 + * + * @param filePath 文件路径 + * @return 文件内容的 Base64 字符值 + */ + public static String fileToBase64(String filePath) { + File file = new File(filePath); + if (!file.exists()) { + System.out.println("文件不存在!"); + return null; + } + + FileInputStream fileInputStream = null; + try { + fileInputStream = new FileInputStream(file); + byte[] fileContent = new byte[(int) file.length()]; + fileInputStream.read(fileContent); + return Base64.getEncoder().encodeToString(fileContent); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (fileInputStream != null) { + try { + fileInputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return null; + } + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Financial3203VO.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Financial3203VO.java new file mode 100644 index 00000000..e4fa81d3 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Financial3203VO.java @@ -0,0 +1,40 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.vo; +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 【3203】后台计算结果 DB映射实体 + * + * @author SunJQ + * @date 2025-04-29 + */ +@Data +public class Financial3203VO { + // 清算人次 + private Long psntime; + // 医保认可费用总额(数值型,16位含2位小数,必填) + private BigDecimal medSumfee; + // 现金支付金额(数值型,16位含2位小数,必填) + private BigDecimal cashPayamt; + // 个人账户支出(数值型,16位含2位小数,必填) + private BigDecimal acctPay; + /** 医疗费用总额 */ + private BigDecimal medFeeSumAmt; + /** 基金支付总额 */ + private BigDecimal fundPaySumAmt; + /** 个人账户支付总额 */ + private BigDecimal acctGjPay; + /** 现金支付总额 */ + private BigDecimal selfPayCash; + /** 微信支付总额 */ + private BigDecimal selfPayVx; + /** 阿里支付总额 */ + private BigDecimal selfPayAli; + /** 银行卡支付总额 */ + private BigDecimal selfPayUnion; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3201DetailVO.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3201DetailVO.java new file mode 100644 index 00000000..9eacbafa --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3201DetailVO.java @@ -0,0 +1,23 @@ +package com.openhis.web.ybmanage.vo; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +public class Settlement3201DetailVO { + + /** 医疗费用总额 */ + private BigDecimal medFeeSumAmt; + /** 基金支付总额 */ + private BigDecimal fundPaySumAmt; + /** 个人账户支付总额 */ + private BigDecimal acctPay; + /** 个人账户支付总额 */ + private BigDecimal acctGjPay; + /** 定点医药机构结算笔数 */ + private Integer fixMedInsSetlCnt; + + private String contractNo; + + private Integer insutype; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3201VO.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3201VO.java new file mode 100644 index 00000000..7f867de1 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3201VO.java @@ -0,0 +1,30 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.vo; + +import java.math.BigDecimal; + +import javax.validation.constraints.NotNull; + +import lombok.Data; + +/** + * 【3201】后台计算结果 DB映射实体 + * + * @author SunJQ + * @date 2025-04-15 + */ +@Data +public class Settlement3201VO { + /** 医疗费用总额 */ + private BigDecimal medFeeSumAmt; + /** 基金支付总额 */ + private BigDecimal fundPaySumAmt; + /** 个人账户支付总额 */ + private BigDecimal acctPay; + /** 个人账户支付总额 */ + private BigDecimal acctGjPay; + /** 定点医药机构结算笔数 */ + private Integer fixMedInsSetlCnt; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3202VO.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3202VO.java new file mode 100644 index 00000000..a075dcfc --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3202VO.java @@ -0,0 +1,47 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.vo; + +import java.math.BigDecimal; + +import javax.validation.constraints.NotNull; + +import lombok.Data; + +/** + * 【3201】后台计算结果 DB映射实体 + * + * @author SunJQ + * @date 2025-04-15 + */ +@Data +public class Settlement3202VO { + /** 医疗费用总额 */ + + private BigDecimal medFeeSumAmt; + /** 基金支付总额 */ + + private BigDecimal fundPaySumAmt; + /** 个人账户支付总额 */ + + private BigDecimal acctPay; + /** 个人账户支付总额 */ + + private BigDecimal acctGjPay; + /** 现金支付总额 */ + + private BigDecimal selfPayCash; + /** 微信支付总额 */ + + private BigDecimal selfPayVx; + /** 阿里支付总额 */ + + private BigDecimal selfPayAli; + /** 银行卡支付总额 */ + + private BigDecimal selfPayUnion; + /** 定点医药机构结算笔数 */ + + private Integer fixMedInsSetlCnt; +} diff --git a/openhis-server/openhis-application/src/main/resources/application-cloud.yml b/openhis-server/openhis-application/src/main/resources/application-cloud.yml new file mode 100644 index 00000000..596c0770 --- /dev/null +++ b/openhis-server/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/openhis-application/src/main/resources/application-local.yml b/openhis-server/openhis-application/src/main/resources/application-local.yml new file mode 100644 index 00000000..9c375796 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/application-local.yml @@ -0,0 +1,87 @@ +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: org.postgresql.Driver + druid: + # 主库数据源 + master: + url: jdbc:postgresql://192.168.30.199: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.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/openhis-application/src/main/resources/application-nd.yml b/openhis-server/openhis-application/src/main/resources/application-nd.yml new file mode 100644 index 00000000..d4075f29 --- /dev/null +++ b/openhis-server/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/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 + # 端口,默认为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/openhis-application/src/main/resources/application-prod.yml b/openhis-server/openhis-application/src/main/resources/application-prod.yml new file mode 100644 index 00000000..a402d23a --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/application-prod.yml @@ -0,0 +1,88 @@ +# 数据源配置 农大 +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 +# url: jdbc:postgresql://localhost:8020/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/openhis-application/src/main/resources/application-test.yml b/openhis-server/openhis-application/src/main/resources/application-test.yml new file mode 100644 index 00000000..d4075f29 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/application-test.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/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 + # 端口,默认为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/openhis-application/src/main/resources/http.yml b/openhis-server/openhis-application/src/main/resources/http.yml new file mode 100644 index 00000000..f49008db --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/http.yml @@ -0,0 +1,6 @@ +#http.yml +http: + appId: "JLNYDX2611325" + key: "e3d214e5b8414b583aefd287fd" + url: "http://clydzp.chinaebill.cn:8001/medical-web" + fixmedinsCode: "H22017200667" \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/LossReportFormMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/LossReportFormMapper.xml new file mode 100644 index 00000000..5a37202b --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/LossReportFormMapper.xml @@ -0,0 +1,169 @@ + + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/ProductDetailsMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/ProductDetailsMapper.xml new file mode 100644 index 00000000..033b8506 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/ProductDetailsMapper.xml @@ -0,0 +1,150 @@ + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/ProductStocktakingMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/ProductStocktakingMapper.xml new file mode 100644 index 00000000..1449ccb9 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/ProductStocktakingMapper.xml @@ -0,0 +1,291 @@ + + + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/PurchaseReturnMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/PurchaseReturnMapper.xml new file mode 100644 index 00000000..015faa90 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/PurchaseReturnMapper.xml @@ -0,0 +1,283 @@ + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/RequisitionIssueMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/RequisitionIssueMapper.xml new file mode 100644 index 00000000..65735c6d --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/RequisitionIssueMapper.xml @@ -0,0 +1,191 @@ + + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/ReturnIssueMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/ReturnIssueMapper.xml new file mode 100644 index 00000000..3a0e5fc6 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/Inventorymanage/ReturnIssueMapper.xml @@ -0,0 +1,191 @@ + + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/catalogmanage/CatalogMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/catalogmanage/CatalogMapper.xml new file mode 100644 index 00000000..6549292a --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/catalogmanage/CatalogMapper.xml @@ -0,0 +1,677 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/resources/mapper/chargemanage/OutpatientPricingAppMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/chargemanage/OutpatientPricingAppMapper.xml new file mode 100644 index 00000000..e7c79bf4 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/chargemanage/OutpatientPricingAppMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/common/CommonAppMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/common/CommonAppMapper.xml new file mode 100644 index 00000000..c0d78f76 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/common/CommonAppMapper.xml @@ -0,0 +1,238 @@ + + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/datadictionary/ItemDefinitionAppMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/datadictionary/ItemDefinitionAppMapper.xml new file mode 100644 index 00000000..faec20e5 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/datadictionary/ItemDefinitionAppMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationChineseMedicalAppMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationChineseMedicalAppMapper.xml new file mode 100644 index 00000000..94593982 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationChineseMedicalAppMapper.xml @@ -0,0 +1,30 @@ + + + + + + + \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationElepPrescriptionMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationElepPrescriptionMapper.xml new file mode 100644 index 00000000..d69a6d54 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationElepPrescriptionMapper.xml @@ -0,0 +1,163 @@ + + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationPtDetailsAppMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationPtDetailsAppMapper.xml new file mode 100644 index 00000000..ffb3b920 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationPtDetailsAppMapper.xml @@ -0,0 +1,106 @@ + + + + + + + \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/resources/mapper/inpatientmanage/AdmissionMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/inpatientmanage/AdmissionMapper.xml new file mode 100644 index 00000000..263c9efb --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/inpatientmanage/AdmissionMapper.xml @@ -0,0 +1,160 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/resources/mapper/inpatientmanage/DepositMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/inpatientmanage/DepositMapper.xml new file mode 100644 index 00000000..51002bab --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/inpatientmanage/DepositMapper.xml @@ -0,0 +1,87 @@ + + + + + + + + \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/resources/mapper/nursestation/NurseStationPendAdmAppMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/nursestation/NurseStationPendAdmAppMapper.xml new file mode 100644 index 00000000..5edefdb1 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/nursestation/NurseStationPendAdmAppMapper.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/resources/mapper/outpatientmanage/OutpatientDisposalMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/outpatientmanage/OutpatientDisposalMapper.xml new file mode 100644 index 00000000..56972d7b --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/outpatientmanage/OutpatientDisposalMapper.xml @@ -0,0 +1,376 @@ + + + + + + + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/outpatientmanage/OutpatientInfusionAppMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/outpatientmanage/OutpatientInfusionAppMapper.xml new file mode 100644 index 00000000..53c86af4 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/outpatientmanage/OutpatientInfusionAppMapper.xml @@ -0,0 +1,318 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/resources/mapper/paymentmanage/ChargeBillMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/paymentmanage/ChargeBillMapper.xml new file mode 100644 index 00000000..2d03789b --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/paymentmanage/ChargeBillMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/resources/mapper/paymentmanage/EleInvoiceMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/paymentmanage/EleInvoiceMapper.xml new file mode 100644 index 00000000..cdf695c5 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/paymentmanage/EleInvoiceMapper.xml @@ -0,0 +1,275 @@ + + + + + + + + + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/paymentmanage/PaymentMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/paymentmanage/PaymentMapper.xml new file mode 100644 index 00000000..b7cee16c --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/paymentmanage/PaymentMapper.xml @@ -0,0 +1,242 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/resources/mapper/personalization/ActivityDeviceAppMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/personalization/ActivityDeviceAppMapper.xml new file mode 100644 index 00000000..e8277c9a --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/personalization/ActivityDeviceAppMapper.xml @@ -0,0 +1,44 @@ + + + + + + \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/resources/mapper/personalization/OrderGroupAppMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/personalization/OrderGroupAppMapper.xml new file mode 100644 index 00000000..7543cc7b --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/personalization/OrderGroupAppMapper.xml @@ -0,0 +1,28 @@ + + + + + + \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/ChineseMedicineDispenseMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/ChineseMedicineDispenseMapper.xml new file mode 100644 index 00000000..4673d65e --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/ChineseMedicineDispenseMapper.xml @@ -0,0 +1,156 @@ + + + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/MedicationDetailsMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/MedicationDetailsMapper.xml new file mode 100644 index 00000000..d9de11df --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/MedicationDetailsMapper.xml @@ -0,0 +1,113 @@ + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/MedicineConsumablesDispenseMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/MedicineConsumablesDispenseMapper.xml new file mode 100644 index 00000000..74f012e5 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/MedicineConsumablesDispenseMapper.xml @@ -0,0 +1,139 @@ + + + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/PendingMedicationDetailsMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/PendingMedicationDetailsMapper.xml new file mode 100644 index 00000000..2c647dd5 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/PendingMedicationDetailsMapper.xml @@ -0,0 +1,57 @@ + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/ReturnMedicineMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/ReturnMedicineMapper.xml new file mode 100644 index 00000000..e731116b --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/pharmacymanage/ReturnMedicineMapper.xml @@ -0,0 +1,339 @@ + + + + + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/ChargeReportMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/ChargeReportMapper.xml new file mode 100644 index 00000000..902ba161 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/ChargeReportMapper.xml @@ -0,0 +1,165 @@ + + + + + + \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/InboundReportMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/InboundReportMapper.xml new file mode 100644 index 00000000..ffbb7e2b --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/InboundReportMapper.xml @@ -0,0 +1,127 @@ + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/InventoryProductReportMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/InventoryProductReportMapper.xml new file mode 100644 index 00000000..748a5175 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/InventoryProductReportMapper.xml @@ -0,0 +1,134 @@ + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/LossReportMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/LossReportMapper.xml new file mode 100644 index 00000000..bb1c735b --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/LossReportMapper.xml @@ -0,0 +1,74 @@ + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/OutboundReportMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/OutboundReportMapper.xml new file mode 100644 index 00000000..67b5088b --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/OutboundReportMapper.xml @@ -0,0 +1,129 @@ + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/PrintReportMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/PrintReportMapper.xml new file mode 100644 index 00000000..299615df --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/PrintReportMapper.xml @@ -0,0 +1,249 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/PurchaseReturnReportMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/PurchaseReturnReportMapper.xml new file mode 100644 index 00000000..8fd03eab --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/PurchaseReturnReportMapper.xml @@ -0,0 +1,129 @@ + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/RegisterReportMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/RegisterReportMapper.xml new file mode 100644 index 00000000..a3f55f22 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/RegisterReportMapper.xml @@ -0,0 +1,101 @@ + + + + + + \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/ReturnIssueReportMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/ReturnIssueReportMapper.xml new file mode 100644 index 00000000..d37c0dda --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/ReturnIssueReportMapper.xml @@ -0,0 +1,129 @@ + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/StocktakingReportMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/StocktakingReportMapper.xml new file mode 100644 index 00000000..9a19ec16 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/StocktakingReportMapper.xml @@ -0,0 +1,90 @@ + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/TransferReportMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/TransferReportMapper.xml new file mode 100644 index 00000000..dad4aaf6 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/reportmanage/TransferReportMapper.xml @@ -0,0 +1,128 @@ + + + + + + diff --git a/openhis-server/openhis-application/src/main/resources/mapper/ybmanage/MedicalInsuranceMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/ybmanage/MedicalInsuranceMapper.xml new file mode 100644 index 00000000..2e074538 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/ybmanage/MedicalInsuranceMapper.xml @@ -0,0 +1,102 @@ + + + + + + + + + + \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/resources/mapper/ybmanage/YbElepMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/ybmanage/YbElepMapper.xml new file mode 100644 index 00000000..587d831a --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/mapper/ybmanage/YbElepMapper.xml @@ -0,0 +1,141 @@ + + + + + + + \ No newline at end of file diff --git a/openhis-server/openhis-application/src/main/resources/properties/yb.properties b/openhis-server/openhis-application/src/main/resources/properties/yb.properties new file mode 100644 index 00000000..d78bf823 --- /dev/null +++ b/openhis-server/openhis-application/src/main/resources/properties/yb.properties @@ -0,0 +1,5 @@ +ybapp.config.url=http://localhost:18079/openhis/yb/yb +ybapp.config.api.key=your_api_key_123 +ybapp.config.timeout=5000 +ybapp.config.fixmedinsCode=H22010200 +ybapp.config.eleUrl=http://localhost:18079/openhis/yb/ybElep \ No newline at end of file diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/constant/YbCommonConstants.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/constant/YbCommonConstants.java new file mode 100644 index 00000000..2f3f2af2 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/constant/YbCommonConstants.java @@ -0,0 +1,135 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.constant; + +/** + * 常量 + * + * @author SunJQ + * @date 2025-04-09 + */ +public class YbCommonConstants { + /** + * 常量 + */ + public interface constants{ + /** + * 医保目录字段 + */ + String END_TIME = "2035-12-01"; + /** + * 医保目录字段 + */ + String YYYY_MM_DD = "yyyy-MM-dd"; + + /** 标识字段 */ + String INFCODE = "infcode"; + + /** 成功 */ + String SUCCESS = "0"; + } + /** + * 字段名常量 + */ + public interface FieldName { + /** + * 医保目录字段 + */ + String SyndromeTypeCode = "syndrome_type_code"; + /** + * 医保目录字段 + */ + String SyndromeTypeName = "syndrome_type_name"; + /** + * 医保目录字段 + */ + String UniqueRecordId = "unique_record_id"; + /** + * 医保目录字段 + */ + String DiseaseCategoryCode = "disease_category_code"; + /** + * 医保目录字段 + */ + String DiseaseCategoryName = "disease_category_name"; + /** + * 医保目录字段 + */ + String CategoryName = "category_name"; + /** + * 医保目录字段 + */ + String SubcategoryName = "subcategory_name"; + /** + * 医保目录字段 + */ + String ItemName = "item_name"; + /** + * 医保目录字段 + */ + String OperationName = "operation_name"; + /** + * 医保目录字段 + */ + String OperationCode = "operation_code"; + /** + * 医保目录字段 + */ + String MedicalCatalogCode = "medical_catalog_code"; + /** + * 医保目录字段 + */ + String ConsumableCategory = "consumable_category"; + /** + * 医保目录字段 + */ + String MaterialType = "material_type"; + /** + * 医保目录字段 + */ + String Specification = "specification"; + /** + * 医保目录字段 + */ + String MedicalServiceName = "medical_service_name"; + /** + * 医保目录字段 + */ + String RegisteredName = "registered_name"; + /** + * 医保目录字段 + */ + String ApprovalNo = "approval_no"; + /** + * 医保目录字段 + */ + String ChapterName = "chapter_name"; + /** + * 医保目录字段 + */ + String SectionName = "section_name"; + /** + * 医保目录字段 + */ + String ConsumableName = "consumable_name"; + /** + * 只保留每组中 版本号 最大的记录 + */ + String RowNumMax = "row_num_max"; + } + + /** + * 门诊状态常量 + */ + public interface ClincStatusConst { + String STATUS_0 = "0"; + String STATUS_1 = "1"; + String STATUS_2 = "2"; + String CANCLE = "-1"; + } + + public interface sqlConst{ + String LIMIT1 = "limit 1"; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/AdmissionMethod.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/AdmissionMethod.java new file mode 100644 index 00000000..1ba8c086 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/AdmissionMethod.java @@ -0,0 +1,37 @@ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 入院方式 + * + * @author liuhr + * @date 2025/4/7 + */ +@Getter +@AllArgsConstructor +public enum AdmissionMethod implements HisEnumInterface { + + OUTPATIENT(1, "outpatient", "门诊入院"), EMERGENCY(2, "emergency", "急诊入院"), TRANSFER_IN(3, "transfer_in", "转入入院"), + TRANSFER_FROM_OTHER(4, "transfer_from_other", "其它医疗机构转入"), OTHER(5, "other", "其它"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static AdmissionMethod getByValue(Integer value) { + if (value == null) { + return null; + } + for (AdmissionMethod val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} \ No newline at end of file diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/AdmissionType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/AdmissionType.java new file mode 100644 index 00000000..eabb4f8e --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/AdmissionType.java @@ -0,0 +1,38 @@ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 入院类型 + * + * @author liuhr + * @date 2025/4/7 + */ +@Getter +@AllArgsConstructor +public enum AdmissionType implements HisEnumInterface { + + ACCIDENT(1, "accident", "事故"), FREE_CHOICE(2, "free_choice", "随意选择的"), URGENT(3, "urgent", "紧急"), + DELIVERY(4, "delivery", "分娩"), NEWBORN(5, "newborn", "新生儿"), NORMAL(6, "normal", "常规"), + CRITICAL(7, "critical", "危重"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static AdmissionType getByValue(Integer value) { + if (value == null) { + return null; + } + for (AdmissionType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} \ No newline at end of file diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/AdviceOpType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/AdviceOpType.java new file mode 100644 index 00000000..7ef67f66 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/AdviceOpType.java @@ -0,0 +1,44 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 医嘱操作类型 + */ +@Getter +@AllArgsConstructor +public enum AdviceOpType implements HisEnumInterface { + + /** + * 保存医嘱 + */ + SAVE_ADVICE(1, "1", "保存医嘱"), + + /** + * 签发医嘱 + */ + SIGN_ADVICE(2, "2", "签发医嘱"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static AdviceOpType getByValue(Integer value) { + if (value == null) { + return null; + } + for (AdviceOpType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/CatalogType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/CatalogType.java new file mode 100644 index 00000000..abfb4d16 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/CatalogType.java @@ -0,0 +1,119 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums; + +import io.swagger.models.auth.In; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * CatalogType (0: MEMBER_FIRST; 1: MEMBER_SECOND;) + * + * @author SunJQ + * @date 2025-04-09 + */ +@Getter +@AllArgsConstructor +public enum CatalogType { + + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1301(1301, "西药中成药目录"), + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1302(1302, "中药饮片目录"), + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1303(1303, "医疗机构制剂目录"), + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1304(1304, "民族药品目录"), + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1305(1305, "医疗服务项目目录"), + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1306(1306, "医用耗材目录"), + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1307(1307, "疾病与诊断目录"), + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1308(1308, "手术操作目录"), + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1309(1309, "门诊慢特病种目录"), + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1310(1310, "按病种付费病种目录"), + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1311(1311, "日间手术治疗病种"), + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1312(1312, "医保目录信息查询"), + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1313(1313, "肿瘤形态学目录"), + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1314(1314, "中医疾病目录"), + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1315(1315, "中医证候目录"), + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1316(1316, "医疗目录与医保目录匹配信息"), + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1317(1317, "医药机构目录匹配信息"), + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1318(1318, "医保目录限价信息"), + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1319(1319, "医保目录先自付比例信息"), + /** + * MEMBER_FIRST + */ + CATALOG_TYPE_1320(1320, "中药配方颗粒目录"), + /** + * MEMBER_SECOND + */ + CATALOG_TYPE_1321(1321, "医疗服务项目(新)目录"); + + private Integer value; + private String description; + + public static CatalogType getByValue(Integer value) { + if (value==null) { + return null; + } + for (CatalogType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ChargeItemGenerateSource.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ChargeItemGenerateSource.java new file mode 100644 index 00000000..0f69a707 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ChargeItemGenerateSource.java @@ -0,0 +1,49 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 账单生成来源 + * + * @author zwh + * @date 2025-03-10 + */ +@Getter +@AllArgsConstructor +public enum ChargeItemGenerateSource implements HisEnumInterface { + + /** + * 医生开立 + */ + DOCTOR_PRESCRIPTION(1, "1", "医生开立"), + + /** + * 护士划价 + */ + NURSE_PRICING(2, "2", "护士划价"), + + /** + * 医嘱绑定 + */ + MEDICAL_ORDER_BINDING(3, "3", "医嘱绑定"); + + private final Integer value; + private final String code; + private final String info; + + public static ChargeItemGenerateSource getByValue(Integer value) { + if (value == null) { + return null; + } + for (ChargeItemGenerateSource val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ContrastTypeEnum.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ContrastTypeEnum.java new file mode 100644 index 00000000..b6a73555 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ContrastTypeEnum.java @@ -0,0 +1,32 @@ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum ContrastTypeEnum implements HisEnumInterface { + + INVOICE_CLINIC(1, "invoice-clinic", "电子发票门诊"), + + INVOICE_CINPATIENT(2, "invoice-inpatient", "电子发票住院"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static ContrastTypeEnum getByValue(Integer value) { + if (value == null) { + return null; + } + for (ContrastTypeEnum val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/Criticality.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/Criticality.java new file mode 100644 index 00000000..fd1d31b1 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/Criticality.java @@ -0,0 +1,28 @@ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonValue; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 危险程度 + * + * @author liuhr + * @date 2025/4/10 + */ +@Getter +@AllArgsConstructor +public enum Criticality implements HisEnumInterface { + + LOW(0, "low", "低"), + HIGH(1, "high", "高"), + UNASSESSABLE(2, "unassessable", "无法评估"); + + @EnumValue + @JsonValue + private final Integer value; + private final String code; + private final String info; +} \ No newline at end of file diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/DbOpType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/DbOpType.java new file mode 100644 index 00000000..a8643000 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/DbOpType.java @@ -0,0 +1,64 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 数据库操作类型 + */ +@Getter +@AllArgsConstructor +public enum DbOpType implements HisEnumInterface { + + /** + * 新增 + */ + INSERT(1, "1", "新增"), + + /** + * 修改 + */ + UPDATE(2, "2", "修改"), + + /** + * 删除 + */ + DELETE(3, "3", "删除"), + + /** + * 查询 + */ + SELECT(4, "4", "查询"), + + /** + * 停用 + */ + STOP(5, "5", "停用"), + + /** + * 启用 + */ + START(6, "6", "启用"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static DbOpType getByValue(Integer value) { + if (value == null) { + return null; + } + for (DbOpType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/DiagnosisCertainty.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/DiagnosisCertainty.java new file mode 100644 index 00000000..a8d8a101 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/DiagnosisCertainty.java @@ -0,0 +1,44 @@ +package com.openhis.common.enums; + + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 特殊病种标志枚举类 + * + * @author liuhr + * @date 2025/4/22 + */ + +@Getter +@AllArgsConstructor +public enum DiagnosisCertainty { + + + PRESENT(1, "1", "有"), + + UNDETERMINED(2, "2", "临床未确定"), + + UNKNOWN(3, "3", "情况不明"), + + ABSENT(4, "4", "无"); + + @EnumValue + private final Integer value; + private final String code; + private final String description; + + public static DiagnosisCertainty getByValue(Integer value) { + if (value == null) { + return null; + } + for (DiagnosisCertainty certainty : values()) { + if (certainty.getValue().equals(value)) { + return certainty; + } + } + return null; + } +} \ No newline at end of file diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/IdentifierStatusEnum.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/IdentifierStatusEnum.java new file mode 100644 index 00000000..1f77489c --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/IdentifierStatusEnum.java @@ -0,0 +1,39 @@ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 身份标识的状态枚举 + * + * @author liuhr + * @date 2025/5/14 + */ +@Getter +@AllArgsConstructor +public enum IdentifierStatusEnum implements HisEnumInterface { + + USUAL(1, "usual", "常规"), + OFFICIAL(2, "official", "官方"), + TEMP(3, "temp", "临时"), + SECONDARY(4, "secondary", "次要"), + OLD(5, "old", "旧"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static IdentifierStatusEnum getByValue(Integer value) { + if (value == null) { + return null; + } + for (IdentifierStatusEnum status : values()) { + if (status.getValue().equals(value)) { + return status; + } + } + return null; + } +} \ No newline at end of file diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/InsuranceLevel.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/InsuranceLevel.java new file mode 100644 index 00000000..fee0f89b --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/InsuranceLevel.java @@ -0,0 +1,27 @@ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonValue; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 医保等级枚举类 + * + * @author liuhr + * @date 2025/4/16 + */ +@Getter +@AllArgsConstructor +public enum InsuranceLevel implements HisEnumInterface { + + CLASS_A(1, "1", "甲类"), CLASS_B(2, "2", "乙类"), SELF_PAY(3, "3", "自费"); + + @EnumValue + @JsonValue + private final Integer value; + private final String code; + private final String info; + +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/InvoiceType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/InvoiceType.java new file mode 100644 index 00000000..36d5418d --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/InvoiceType.java @@ -0,0 +1,44 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums; + +import com.github.pagehelper.util.StringUtil; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * InvoiceType (0: MEMBER_FIRST; 1: MEMBER_SECOND;) + * + * @author SunJQ + * @date 2025-04-28 + */ +@Getter +@AllArgsConstructor +public enum InvoiceType { + + /** + * 开具 + */ + ISSUING_INVOICES("0", "开具"), + /** + * 冲销 + */ + REVERSING_INVOICES("1", "冲销"); + + private String value; + private String description; + + public static InvoiceType getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (InvoiceType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/LocationOperational.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/LocationOperational.java new file mode 100644 index 00000000..e5893343 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/LocationOperational.java @@ -0,0 +1,41 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 操作状态 + * + * @author zwh + * @date 2025-03-31 + */ +@Getter +@AllArgsConstructor +public enum LocationOperational implements HisEnumInterface { + + USE(1, "1", "使用"), + + NOT_USED(2, "2", "未使用"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static LocationOperational getByValue(Integer value) { + if (value == null) { + return null; + } + for (LocationOperational val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/OrderGroupType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/OrderGroupType.java new file mode 100644 index 00000000..b273fa79 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/OrderGroupType.java @@ -0,0 +1,41 @@ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 组套类型 + * + * @author yangmo + * @date 2025-04-11 + */ + +@Getter +@AllArgsConstructor +public enum OrderGroupType implements HisEnumInterface { + + ORDER(1, "1", "医嘱组套"), + + CHINESE(2, "2", "中医协定处方(组套)"), + + CHARGEITEM(3, "3", "划价组套"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static OrderGroupType getByValue(Integer value) { + if (value == null) { + return null; + } + for (OrderGroupType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/PaymentOutcome.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/PaymentOutcome.java new file mode 100644 index 00000000..9e376dda --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/PaymentOutcome.java @@ -0,0 +1,52 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums; + +import com.github.pagehelper.util.StringUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 付款结果 + * + * @author SunJQ + * @date 2025-04-20 + */ +@Getter +@AllArgsConstructor +public enum PaymentOutcome { + + /** + * 排队 + */ + QUEUED("0", 0,"排队"), + /** + * 完整 + */ + COMPLETED("1", 1, "完整"), + /** + * 错误 + */ + ERROR("2", 3,"错误"), + /** + * 部分 + */ + PARTIAL("3", 4, "部分"); + + private String value; + private Integer code; + private String description; + + public static PaymentOutcome getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (PaymentOutcome val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/PrescriptionType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/PrescriptionType.java new file mode 100644 index 00000000..51d03ad9 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/PrescriptionType.java @@ -0,0 +1,60 @@ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.github.pagehelper.util.StringUtil; +import com.openhis.common.enums.ybenums.YbRxItemTypeCode; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 处方类别 + * + * @author liuhr + * @date 2025/4/21 + */ +@Getter +@AllArgsConstructor +public enum PrescriptionType implements HisEnumInterface { + + OUTPATIENT_WESTERN_OR_TRADITIONAL_CHINESE_MEDICINE(1, "1", "门诊西药中成药"), + + OUTPATIENT_CHINESE_MATERIAL_MEDICATED(2, "2", "门诊中药饮片"), + + EMERGENCY_WESTERN_OR_TRADITIONAL_CHINESE_MEDICINE(3, "3", "急诊西药中成药"), + + EMERGENCY_CHINESE_MATERIAL_MEDICATED(4, "4", "急诊中药饮片"), + + PEDIATRIC_WESTERN_OR_TRADITIONAL_CHINESE_MEDICINE(5, "5", "儿科西药中成药"), + + PEDIATRIC_CHINESE_MATERIAL_MEDICATED(6, "6", "儿科中药饮片"), + + NARCOTIC_OR_SPIRIT_FIRST_CLASS(7, "7", "麻、精一"), + + SPIRIT_SECOND_CLASS(8, "8", "精二"), + + CHINESE_MATERIAL_MEDICATED(9, "9", "中药饮片"), + + TRADITIONAL_CHINESE_MEDICINE_PREPARATION(10, "10", "中成药"), + + INPATIENT_WESTERN_OR_TRADITIONAL_CHINESE_MEDICINE(11, "11", "住院西药中成药"), + + OTHER(99, "99", "其它"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static PrescriptionType getByValue(Integer value) { + if (value == null) { + return null; + } + for (PrescriptionType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } + +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/Severity.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/Severity.java new file mode 100644 index 00000000..fc30f6ec --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/Severity.java @@ -0,0 +1,27 @@ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 严重程度 + * + * @author liuhr + * @date 2025/4/10 + */ +@Getter +@AllArgsConstructor +public enum Severity implements HisEnumInterface { + + MILD(0, "mild", "轻微"), + MODERATE(1, "moderate", "中度"), + SEVERE(2, "severe", "严重"); + + @EnumValue + @JsonValue + private final Integer value; + private final String code; + private final String info; +} \ No newline at end of file diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/StatisticsType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/StatisticsType.java new file mode 100644 index 00000000..9d1ce5f3 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/StatisticsType.java @@ -0,0 +1,36 @@ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 活动类型 + */ +@Getter +@AllArgsConstructor +public enum StatisticsType implements HisEnumInterface { + + OUTPATIENT_REVENUE(1, "1", "门诊整体收入明细"), + OUTPATIENT_YB_REVENUE(2, "2", "门诊医保收入明细"), + OUTPATIENT_SELF_REVENUE(3, "3", "门诊自费收入明细"), + //OUTPATIENT_STUDENT_REVENUE(4, "4", "门诊学生费用收入明细"), + OUTPATIENT_REFUND(5, "5", "门诊退费明细"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static StatisticsType getByValue(Integer value) { + if (value == null) { + return null; + } + for (StatisticsType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/SupplyRequestType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/SupplyRequestType.java new file mode 100644 index 00000000..d3d5c1f1 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/SupplyRequestType.java @@ -0,0 +1,30 @@ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum SupplyRequestType implements HisEnumInterface { + + DEPARTMENT(2, "2", "科室"), CABINET(11, "ca", "库房"), PHARMACY(16, "ph", "药房"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static SupplyRequestType getByValue(Integer value) { + if (value == null) { + return null; + } + for (SupplyRequestType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/medCategoryCode.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/medCategoryCode.java new file mode 100644 index 00000000..d008389d --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/medCategoryCode.java @@ -0,0 +1,50 @@ +package com.openhis.common.enums; + +/** + * medCategoryCode + * + * @author Wuser + * @date 2025/4/21 + */ + +import com.github.pagehelper.util.StringUtil; + +import com.openhis.common.enums.ybenums.YbDrugMedWay; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 药品分类枚举 + * + * @author YourName + * @date 2025-04-21 + */ +@Getter +@AllArgsConstructor +public enum medCategoryCode { + + TRADITIONAL_CHINESE_MEDICINE("1", "中成药"), + + WESTERN_MEDICINE("2", "西药"), + + EXTERNAL_PURCHASE_MEDICINE("3", "外购药品"), + + CHINESE_HERBAL_MEDICINE("4", "中草药"), + + OTHER("9", "其他"); + + private String value; + private String description; + + public static medCategoryCode getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (medCategoryCode code : values()) { + if (code.getValue().equals(value)) { + return code; + } + } + return null; + } +} \ No newline at end of file diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbChrgitmLv.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbChrgitmLv.java new file mode 100644 index 00000000..3b29ea19 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbChrgitmLv.java @@ -0,0 +1,48 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.openhis.common.enums.HisEnumInterface; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 医保等级【chrgitm_lv】 + * + * @author SunJQ + * @date 2025-04-16 + */ +@Getter +@AllArgsConstructor +public enum YbChrgitmLv implements HisEnumInterface { + + // 甲类 + CATEGORY_A(1, "1", "甲类"), + + // 乙类 + CATEGORY_B(2, "2", "乙类"), + + // 自费 + SELF_PAY(3, "3", "自费"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static YbChrgitmLv getByValue(Integer value) { + if (value == null) { + return null; + } + for (YbChrgitmLv val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } + +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbClrStas.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbClrStas.java new file mode 100644 index 00000000..5de2e40b --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbClrStas.java @@ -0,0 +1,48 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 清算状态 + * + * @author SunJQ + * @date 2025-04-17 + */ +@Getter +@AllArgsConstructor +public enum YbClrStas { + + /** + * 已申请 + */ + CLR_STAS10("10", "已申请"), + /** + * 已受理 + */ + CLR_STAS20("20", "已受理"), + /** + * 已清算 + */ + CLR_STAS50("50", "已清算"); + + private String value; + private String description; + + public static YbClrStas getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbClrStas val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbClrType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbClrType.java new file mode 100644 index 00000000..84af83e4 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbClrType.java @@ -0,0 +1,52 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 清算类别 + * + * @author SunJQ + * @date 2025-04-15 + */ +@Getter +@AllArgsConstructor +public enum YbClrType { + + /** + * 门诊 + */ + OUTPATIENT_CLINIC("11", "门诊"), + /** + * 药店购药 + */ + PHARMACY_PURCHASE("41", "药店购药"), + /** + * 住院 + */ + INPATIENT_CARE("21", "住院"), + /** + * 其他 + */ + OTHER("99", "其他"); + + private String value; + private String description; + + public static YbClrType getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbClrType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbClrWay.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbClrWay.java new file mode 100644 index 00000000..75c27825 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbClrWay.java @@ -0,0 +1,60 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * YbClrWay (0: MEMBER_FIRST; 1: MEMBER_SECOND;) + * + * @author SunJQ + * @date 2025-04-29 + */ +@Getter +@AllArgsConstructor +public enum YbClrWay { + + /** + * 按项目 + */ + ITEM_BY_PROJECT("01", "按项目"), + /** + * 按人头 + */ + PER_CAPITA("04", "按人头"), + /** + * 单病种 + */ + SINGLE_DISEASE("02", "单病种"), + /** + * DRGs点数法 + */ + DRGS_POINTS("05", "DRGs点数法"), + /** + * 按床日 + */ + BY_BED_DAY("03", "按床日"), + /** + * 其他 + */ + OTHER("99", "其他"); + + private String value; + private String description; + + public static YbClrWay getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbClrWay val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDiagType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDiagType.java new file mode 100644 index 00000000..51ebbddb --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDiagType.java @@ -0,0 +1,47 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 诊断类别 + * + * @author SunJQ + * @date 2025-04-14 + */ +@Getter +@AllArgsConstructor +public enum YbDiagType { + + /** + * 西医诊断 + */ + WESTERN_MEDICINE_DIAGNOSIS(1, "西医诊断"), + /** + * 中医主病诊断 + */ + TCM_MAIN_DISEASE_DIAGNOSIS(2, "中医主病诊断"), + /** + * 中医主证诊断 + */ + TCM_MAIN_SYNDROME_DIAGNOSIS(3, "中医主证诊断"); + + private Integer value; + private String description; + + public static YbDiagType getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbDiagType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDoctorTitle.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDoctorTitle.java new file mode 100644 index 00000000..b1aae1d0 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDoctorTitle.java @@ -0,0 +1,57 @@ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 开单医生职称枚举 + * + * @author YourName + * @date 2025-04-22 + */ +@Getter +@AllArgsConstructor +public enum YbDoctorTitle { + + /** + * 主任医师 + */ + CHIEF_PHYSICIAN("231", "主任医师"), + + /** + * 副主任医师 + */ + DEPUTY_CHIEF_PHYSICIAN("232", "副主任医师"), + + /** + * 主治医师 + */ + ATTENDING_PHYSICIAN("233", "主治医师"), + + /** + * 医师 + */ + PHYSICIAN("234", "医师"), + + /** + * 医士 + */ + MEDICAL_ASSISTANT("235", "医士"); + + private String code; + private String description; + + public static YbDoctorTitle getByValue(String code) { + if (StringUtil.isEmpty(code)) { + return null; + } + for (YbDoctorTitle title : values()) { + if (title.getCode().equals(code)) { + return title; + } + } + return null; + } +} \ No newline at end of file diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDrordBhvr.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDrordBhvr.java new file mode 100644 index 00000000..36d932d5 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDrordBhvr.java @@ -0,0 +1,44 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * YbDrordBhvr (0: MEMBER_FIRST; 1: MEMBER_SECOND;) + * + * @author SunJQ + * @date 2025-04-16 + */ +@Getter +@AllArgsConstructor +public enum YbDrordBhvr { + + /** + * MEMBER_FIRST + */ + OTHER("0", "其他"), + /** + * 出院带药 + */ + DISCHARGE_MEDICATION("1", "出院带药"); + + private String value; + private String description; + + public static YbDrordBhvr getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbDrordBhvr val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDrordType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDrordType.java new file mode 100644 index 00000000..0f22fcdd --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDrordType.java @@ -0,0 +1,43 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 7.43 医嘱类别drord_type + * + * @author SunJQ + * @date 2025-04-16 + */ +@Getter +@AllArgsConstructor +public enum YbDrordType { + + // 临时医嘱 + TEMPORARY_ORDER(1, "临时医嘱"), + + // 长期医嘱 + STANDING_ORDER(2, "长期医嘱"), + + // 备用医嘱 + STANDBY_ORDER(3, "备用医嘱"); + + private Integer value; + private String description; + + public static YbDrordType getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbDrordType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDrugDosform.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDrugDosform.java new file mode 100644 index 00000000..eb7cb396 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDrugDosform.java @@ -0,0 +1,18 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 7.62 药品剂型【drug_dosform】【hilist_dosform】 + * + * @author SunJQ + * @date 2025-04-16 + */ +@Getter +@AllArgsConstructor +public enum YbDrugDosform { +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDrugMedWay.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDrugMedWay.java new file mode 100644 index 00000000..b92b15e3 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDrugMedWay.java @@ -0,0 +1,72 @@ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 药物使用途径代码 + * + * @author liuhr + * @date 2025-04-21 + */ +@Getter +@AllArgsConstructor +public enum YbDrugMedWay { + + ORAL_DRUG("1", "口服"), + + RECTAL_DRUG("2", "直肠给药"), + + SUBLINGUAL_DRUG("3", "舌下给药"), + + INJECTION_DRUG("4", "注射给药"), + + INHALATION_DRUG("5", "吸入给药"), + + TOPICAL_DRUG("6", "局部用药"), + + SPINAL_DRUG("601", "椎管内用药"), + + INTRA_ARTICULAR_DRUG("602", "关节腔内用药"), + + PLEURAL_DRUG("603", "胸膜腔用药"), + + INTRA_PERITONEAL_DRUG("604", "腹腔用药"), + + VAGINAL_DRUG("605", "阴道用药"), + + ENDOTRACHEAL_DRUG("606", "气管内用药"), + + EYE_DROPS("607", "滴眼"), + + NASAL_DROPS("608", "滴鼻"), + + THROAT_SPRAY("609", "喷喉"), + + BUCCAL("610", "含化"), + + WOUND_APPLICATION("611", "敷伤口"), + + TOPICAL_SKIN("612", "擦皮肤"), + + OTHER_TOPICAL_ROUTE("699", "其他局部给药途径"), + + OTHER_ROUTE("9", "其他给药途径"); + + private String value; + private String description; + + public static YbDrugMedWay getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbDrugMedWay code : values()) { + if (code.getValue().equals(value)) { + return code; + } + } + return null; + } +} \ No newline at end of file diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbEncounterClass.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbEncounterClass.java new file mode 100644 index 00000000..21d92827 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbEncounterClass.java @@ -0,0 +1,38 @@ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * YbEncounterClass + * + * @author Wuser + * @date 2025/4/22 + */ +@Getter +@AllArgsConstructor +public enum YbEncounterClass { + + AMB("1", "门诊"), + + IMP("2", "住院"), + + REG("3", "挂号"); + + private String value; + private String description; + + public static YbEncounterClass getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbEncounterClass code : values()) { + if (code.getValue().equals(value)) { + return code; + } + } + return null; + } +} \ No newline at end of file diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbGender.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbGender.java new file mode 100644 index 00000000..f4332c7e --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbGender.java @@ -0,0 +1,51 @@ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 性别枚举 + * + * @author YourName + * @date 2025-04-22 + */ +@Getter +@AllArgsConstructor +public enum YbGender { + + /** + * 未知的性别 + */ + UNKNOWN("0", "未知的性别"), + + /** + * 男 + */ + MALE("1", "男"), + + /** + * 女 + */ + FEMALE("2", "女"), + + /** + * 未说明性别 + */ + UNSTATED("9", "未说明性别"); + + private String value; + private String description; + + public static YbGender getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbGender type : values()) { + if (type.getValue().equals(value)) { + return type; + } + } + return null; + } +} \ No newline at end of file diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbHospApprFlag.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbHospApprFlag.java new file mode 100644 index 00000000..e9130637 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbHospApprFlag.java @@ -0,0 +1,48 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 医院审批标志 + * + * @author SunJQ + * @date 2025-04-14 + */ +@Getter +@AllArgsConstructor +public enum YbHospApprFlag { + + /** + * 无须审批 + */ + NO_APPROVAL_REQUIRED("0", "无须审批"), + /** + * 审批不通过 + */ + APPROVAL_NOT_PASSED("2", "审批不通过"), + /** + * 审批通过 + */ + APPROVAL_PASSED("1", "审批通过"); + + private String value; + private String description; + + public static YbHospApprFlag getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbHospApprFlag val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbIdDocumentType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbIdDocumentType.java new file mode 100644 index 00000000..bc261219 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbIdDocumentType.java @@ -0,0 +1,137 @@ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 证件类型枚举 + * + * @author YourName + * @date 2025-04-22 + */ +@Getter +@AllArgsConstructor +public enum YbIdDocumentType { + + /** + * 居民身份证(户口簿) + */ + RESIDENT_ID_CARD("01", "居民身份证(户口簿)"), + + /** + * 中国人民解放军军官证 + */ + PLA_OFFICER_ID_CARD("02", "中国人民解放军军官证"), + + /** + * 中国人民武装警察警官证 + */ + ARMED_POLICE_OFFICER_ID_CARD("03", "中国人民武装警察警官证"), + + /** + * 香港特区护照/港澳居民来往内地通行证 + */ + HK_PASSPORT_OR_PERMIT("04", "香港特区护照/港澳居民来往内地通行证"), + + /** + * 澳门特区护照/港澳居民来往内地通行证 + */ + MACAO_PASSPORT_OR_PERMIT("05", "澳门特区护照/港澳居民来往内地通行证"), + + /** + * 台湾居民来往大陆通行证 + */ + TAIWAN_PERMIT("06", "台湾居民来往大陆通行证"), + + /** + * 外国人永久居留证 + */ + FOREIGNER_PERMANENT_RESIDENCE_CARD("07", "外国人永久居留证"), + + /** + * 外国人护照 + */ + FOREIGNER_PASSPORT("08", "外国人护照"), + + /** + * 残疾人证 + */ + DISABILITY_CARD("09", "残疾人证"), + + /** + * 军烈属证明 + */ + MARTYRS_FAMILY_CERTIFICATE("10", "军烈属证明"), + + /** + * 外国人就业证 + */ + FOREIGNER_EMPLOYMENT_CERTIFICATE("11", "外国人就业证"), + + /** + * 外国专家证 + */ + FOREIGN_EXPERT_CERTIFICATE("12", "外国专家证"), + + /** + * 外国人常驻记者证 + */ + FOREIGN_JOURNALIST_CERTIFICATE("13", "外国人常驻记者证"), + + /** + * 台港澳人员就业证 + */ + TAIWAN_HONGKONG_MACAO_EMPLOYMENT_CERTIFICATE("14", "台港澳人员就业证"), + + /** + * 回国(来华)定居专家证 + */ + EXPATRIATE_SETTLEMENT_CERTIFICATE("15", "回国(来华)定居专家证"), + + /** + * 中国护照 + */ + CHINESE_PASSPORT("16", "中国护照"), + + /** + * 港澳台居民居住证 + */ + HK_MACAO_TAIWAN_RESIDENCE_PERMIT("17", "港澳台居民居住证"), + + /** + * 社会保障卡 + */ + SOCIAL_SECURITY_CARD("90", "社会保障卡"), + + /** + * 其他身份证件 + */ + OTHER_ID_DOCUMENT("99", "其他身份证件"), + + /** + * 医学出生证明 + */ + MEDICAL_BIRTH_CERTIFICATE("990201", "医学出生证明"), + + /** + * 扶贫人口编码 + */ + POVERTY_POPULATION_CODE("990102", "扶贫人口编码"); + + private String value; + private String description; + + public static YbIdDocumentType getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbIdDocumentType type : values()) { + if (type.getValue().equals(value)) { + return type; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbInOutDiagType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbInOutDiagType.java new file mode 100644 index 00000000..07246bac --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbInOutDiagType.java @@ -0,0 +1,42 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 出入院诊断类别(inout_diag_type) 出入诊断类别 + * + * @author SunJQ + * @date 2025-04-15 + */ +@Getter +@AllArgsConstructor +public enum YbInOutDiagType { + /** + * 入院诊断 + */ + YB_IN_DIAG_TYPE("1", "入院诊断"), + /** + * 出院诊断 + */ + YB_OUT_DIAG_TYPE("2", "出院诊断"); + + private String value; + private String description; + + public static YbInOutDiagType getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbInOutDiagType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbInsuType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbInsuType.java new file mode 100644 index 00000000..d73bee35 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbInsuType.java @@ -0,0 +1,86 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 险种类别 + * + * @author SunJQ + * @date 2025-04-15 + */ +@Getter +@AllArgsConstructor +public enum YbInsuType { + /** + * 长期照护保险 + */ + YB_INSU_TYPE410("410", "长期照护保险"), + /** + * 职工基本医疗保险 + */ + YB_INSU_TYPE310("310", "职工基本医疗保险"), + /** + * 公务员医疗补助 + */ + YB_INSU_TYPE320("320", "公务员医疗补助"), + /** + * 离休人员医疗保障 + */ + YB_INSU_TYPE340("340", "离休人员医疗保障"), + /** + * 一至六级残废军人医疗补助 + */ + YB_INSU_TYPE350("350", "一至六级残废军人医疗补助"), + /** + * 大额医疗费用补助 + */ + YB_INSU_TYPE330("330", "大额医疗费用补助"), + /** + * 老红军医疗保障 + */ + YB_INSU_TYPE360("360", "老红军医疗保障"), + /** + * 企业补充医疗保险 + */ + YB_INSU_TYPE370("370", "企业补充医疗保险"), + /** + * 新型农村合作医疗 + */ + YB_INSU_TYPE380("380", "新型农村合作医疗"), + /** + * 城乡居民基本医疗保险 + */ + YB_INSU_TYPE390("390", "城乡居民基本医疗保险"), + /** + * 城镇居民基本医疗保险 + */ + YB_INSU_TYPE391("391", "城镇居民基本医疗保险"), + /** + * 城乡居民大病医疗保险 + */ + YB_INSU_TYPE392("392", "城乡居民大病医疗保险"), + /** + * 其他特殊人员医疗保障 + */ + YB_INSU_TYPE399("399", "其他特殊人员医疗保障"); + + private String value; + private String description; + + public static YbInsuType getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbInsuType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbInvChgType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbInvChgType.java new file mode 100644 index 00000000..ffa2f559 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbInvChgType.java @@ -0,0 +1,58 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 7.51 库存变更类型(inv_chg_type) + * + * @author SunJQ + * @date 2025-04-17 + */ +@Getter +@AllArgsConstructor +public enum YbInvChgType { + + // 调拨入库 + ALLOCATION_IN("101", "调拨入库"), + // 调拨出库 + ALLOCATION_OUT("102", "调拨出库"), + // 盘盈 + INVENTORY_GAIN("103", "盘盈"), + // 盘损 + INVENTORY_LOSS("104", "盘损"), + // 销毁 + DESTRUCTION("105", "销毁"), + // 其他入库 + OTHER_IN("106", "其他入库"), + // 其他出库 + OTHER_OUT("107", "其他出库"), + // 商品采购入库 + PURCHASE_IN("108", "商品采购入库"), + // 商品退货出库 + RETURN_OUT("109", "商品退货出库"), + // 赠药入库 + DONATION_IN("110", "赠药入库"), + // 赠药退回出库 + DONATION_RETURN_OUT("111", "赠药退回出库"); + + private String value; + private String description; + + public static YbInvChgType getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbInvChgType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbInvDataType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbInvDataType.java new file mode 100644 index 00000000..09580cf9 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbInvDataType.java @@ -0,0 +1,46 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 进销存类型(inv_data_type) + * + * @author SunJQ + * @date 2025-04-19 + */ +@Getter +@AllArgsConstructor +public enum YbInvDataType { + // 1. 盘存信息 + STOCK_TAKING_INFO(1,"1", "盘存信息"), + + // 2. 库存变更信息 + INVENTORY_CHANGE_INFO(2,"2", "库存变更信息"), + + // 3. 采购信息 + PURCHASE_INFO(3,"3", "采购信息"), + + // 4. 销售信息 + SALES_INFO(4,"4", "销售信息"); + + private final int code; + private final String value; + private final String name; + + public static YbInvDataType getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbInvDataType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbIptDiseTypeCode.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbIptDiseTypeCode.java new file mode 100644 index 00000000..18402426 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbIptDiseTypeCode.java @@ -0,0 +1,92 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 住院患者疾病诊断类型 + * + * @author SunJQ + * @date 2025-04-15 + */ +@Getter +@AllArgsConstructor +public enum YbIptDiseTypeCode { + + // 出院诊断 + DISCHARGE_DIAGNOSIS("1", "出院诊断"), + + // 入院诊断 + ADMISSION_DIAGNOSIS("31", "入院诊断"), + + // 并发症诊断 + COMPLICATION_DIAGNOSIS("10", "并发症诊断"), + + // 术前诊断 + PREOPERATIVE_DIAGNOSIS("4", "术前诊断"), + + // 院内感染诊断 + NOSOCOMIAL_INFECTION_DIAGNOSIS("11", "院内感染诊断"), + + // 术后诊断 + POSTOPERATIVE_DIAGNOSIS("5", "术后诊断"), + + // 主要诊断 + PRIMARY_DIAGNOSIS("12", "主要诊断"), + + // 次要诊断 + SECONDARY_DIAGNOSIS("13", "次要诊断"), + + // 中医出院诊断病名 + TCM_DISCHARGE_DIAGNOSIS_DISEASE_NAME("14", "中医出院诊断病名"), + + // 超声诊断 + ULTRASOUND_DIAGNOSIS("8", "超声诊断"), + + // 中医出院主病 + TCM_DISCHARGE_PRIMARY_DISEASE("141", "中医出院主病"), + + // 中医出院主证 + TCM_DISCHARGE_PRIMARY_SYNDROME("142", "中医出院主证"), + + // 损伤、中毒的外部原因 + EXTERNAL_CAUSE_OF_INJURY_OR_POISONING("98", "损伤、中毒的外部原因"), + + // 门诊诊断 + OUTPATIENT_DIAGNOSIS("2", "门诊诊断"), + + // 其他 + OTHER("99", "其他"), + + // 入院初步诊断 + ADMISSION_PRELIMINARY_DIAGNOSIS("3", "入院初步诊断"), + + // 尸检诊断 + AUTOPSY_DIAGNOSIS("6", "尸检诊断"), + + // 放射诊断 + RADIOLOGICAL_DIAGNOSIS("7", "放射诊断"), + + // 病理诊断 + PATHOLOGICAL_DIAGNOSIS("9", "病理诊断"); + + private String value; + private String description; + + public static YbIptDiseTypeCode getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbIptDiseTypeCode val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbListType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbListType.java new file mode 100644 index 00000000..8733444d --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbListType.java @@ -0,0 +1,47 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 7.48 目录类别(list_type) + * + * @author SunJQ + * @date 2025-04-17 + */ +@Getter +@AllArgsConstructor +public enum YbListType { + // 西药中成药 + WESTERN_AND_CHINESE_PATENT_MEDICINE(101, "101","西药中成药"), + // 中药饮片 + IMPORTANT_HERBAL_SLICES(102, "102","中药饮片"), + // 自制剂 + SELF_PREPARED_MEDICATION(103, "103","自制剂"), + // 民族药 + ETHNIC_MEDICINE(104, "104","民族药"), + // 医疗服务项目 + MEDICAL_SERVICE_ITEM(201,"201", "医疗服务项目"), + // 医用耗材 + MEDICAL_CONSUMABLES(301,"301", "医用耗材"); + + private final int code; + private final String value; + private final String name; + + public static YbListType getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbListType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMatnStas.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMatnStas.java new file mode 100644 index 00000000..148f64f8 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMatnStas.java @@ -0,0 +1,49 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 生育状态 + * + * @author SunJQ + * @date 2025-04-15 + */ +@Getter +@AllArgsConstructor +public enum YbMatnStas { + + // 未知 + UNKNOWN("0", "未知"), + + // 非妊娠期或哺乳期 + NON_PREGNANT_OR_LACTATING("1", "非妊娠期或哺乳期"), + + // 近期有生育计划 + PLANNING_TO_CONCEIVE("2", "近期有生育计划"), + + // 妊娠期 + PREGNANT("3", "妊娠期"), + + // 哺乳期 + LACTATING("4", "哺乳期"); + + private String value; + private String description; + + public static YbMatnStas getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbMatnStas val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMdtrtCertType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMdtrtCertType.java new file mode 100644 index 00000000..1e7de88e --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMdtrtCertType.java @@ -0,0 +1,61 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 7.35 就诊凭证类型(mdtrt_cert_type) + * + * @author SunJQ + * @date 2025-04-10 + */ +@Getter +@AllArgsConstructor +public enum YbMdtrtCertType { + + /** + * 医保电子凭证 + */ + MDTRT_CERT_TYPE01("01","1","医保电子凭证"), + /** + * 居民身份证 + */ + MDTRT_CERT_TYPE02("02","2","居民身份证"), + /** + * 社会保障卡 + */ + MDTRT_CERT_TYPE03("03","3","社会保障卡"); + + private String value; + private String code;//2025/05/20,由于account数据库中存的1/2/3,无法与医保码01,02,03直接对照,故此增加code字段比较 + private String description; + + public static YbMdtrtCertType getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbMdtrtCertType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } + + public static YbMdtrtCertType getByCode(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbMdtrtCertType val : values()) { + if (val.getCode().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedChrgItmType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedChrgItmType.java new file mode 100644 index 00000000..efec2b14 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedChrgItmType.java @@ -0,0 +1,99 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.openhis.common.enums.ChargeItemEnum; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 医疗收费项目类别【MED_CHRGITM_TYPE】 【chrg_type】 + * + * @author SunJQ + * @date 2025-04-16 + */ +@Getter +@AllArgsConstructor +public enum YbMedChrgItmType { + /** + * 床位费 + */ + BED_FEE(1, "01","床位费"), + /** + * 诊察费 + */ + DIAGNOSTIC_FEE(2, "02","诊察费"), + /** + * 检查费 + */ + CHECK_FEE(3, "03","检查费"), + /** + * 化验费 + */ + DIAGNOSTIC_TEST_FEE(4, "04","化验费"), + /** + * 治疗费 + */ + MEDICAL_EXPENSE_FEE(5, "05","治疗费"), + /** + * 手术费 + */ + OPERATION_FEE(6, "06","手术费"), + /** + * 护理费 + */ + NURSING_FEE(7, "07","护理费"), + /** + * 卫生材料费 + */ + SANITARY_MATERIALS_FEE(8, "08","卫生材料费"), + /** + * 西药费 + */ + WEST_MEDICINE(9, "09","西药费"), + /** + * 中药饮片费 + */ + CHINESE_MEDICINE_SLICES_FEE(10, "10","中药饮片费"), + /** + * 中成药费 + */ + CHINESE_MEDICINE_FEE(11, "11","中成药费"), + /** + * 一般诊疗费 + */ + GENERAL_CONSULTATION_FEE(12, "12","一般诊疗费"), + /** + * 挂号费 + */ + REGISTRATION_FEE(13, "13","挂号费"), + /** + * 其他费 + */ + OTHER_FEE(14, "14","其他费"); + + private final Integer code; + private final String value; + private final String info; + + public Integer getCode() { + return code; + } + + public String getInfo() { + return info; + } + + public static YbMedChrgItmType getByCode(Integer value) { + if (value == null) { + return null; + } + for (YbMedChrgItmType val : values()) { + if (val.getCode().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedMdtrtType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedMdtrtType.java new file mode 100644 index 00000000..c35cefed --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedMdtrtType.java @@ -0,0 +1,51 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * [3101]就诊类型 + * + * @author SunJQ + * @date 2025-04-15 + */ +@Getter +@AllArgsConstructor +public enum YbMedMdtrtType { + + /** + * 门诊 + */ + OUTPATIENT_CLINIC("1", "门诊"), + /** + * 药店购药 + */ + PHARMACY_PURCHASE("2", "药店购药"), + /** + * 住院 + */ + INPATIENT_CARE("3", "住院"), + /** + * 其他 + */ + OTHER("4", "其他"); + + private String value; + private String description; + + public static YbMedMdtrtType getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbMedMdtrtType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedType.java new file mode 100644 index 00000000..1e2505e7 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedType.java @@ -0,0 +1,91 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 医保医疗类别 + * + * @author SunJQ + * @date 2025-04-14 + */ +@Getter +@AllArgsConstructor +public enum YbMedType { + + // 异地住院 + CROSS_PROVINCIAL_HOSPITALIZATION("25", "异地住院"), + // 单病种住院 + SINGLE_DISEASE_HOSPITALIZATION("26", "单病种住院"), + // 自主就医 + SELF_MEDICATION("27", "自主就医"), + // 意外伤害门诊 + ACCIDENTAL_INJURY_OUTPATIENT("81", "意外伤害门诊"), + // 特药 + SPECIAL_MEDICATION("15", "特药"), + // 日间手术 + DAY_SURGERY("28", "日间手术"), + // 照护保险 + CARE_INSURANCE("61", "照护保险"), + // 普通门诊 + GENERAL_OUTPATIENT("11", "普通门诊"), + // 门诊挂号 + OUTPATIENT_REGISTRATION("12", "门诊挂号"), + // 急诊 + EMERGENCY("13", "急诊"), + // 门诊慢特病 + CHRONIC_SPECIAL_DISEASE_OUTPATIENT("14", "门诊慢特病"), + // 门诊特检特治(限吉林市) + SPECIAL_EXAMINATION_TREATMENT_OUTPATIENT_JILIN("990404", "门诊特检特治(限吉林市)"), + // 普通住院 + GENERAL_HOSPITALIZATION("21", "普通住院"), + // 外伤住院 + TRAUMA_HOSPITALIZATION("22", "外伤住院"), + // 转外诊治住院 + EXTERNAL_TREATMENT_HOSPITALIZATION("23", "转外诊治住院"), + // 急诊转住院 + EMERGENCY_TO_HOSPITALIZATION("24", "急诊转住院"), + // 定点药店购药 + DESIGNATED_PHARMACY_PURCHASE("41", "定点药店购药"), + // 生育门诊 + MATERNITY_OUTPATIENT("51", "生育门诊"), + // 生育住院 + MATERNITY_HOSPITALIZATION("52", "生育住院"), + // 生育新生儿费用 + NEWBORN_MATERNITY_EXPENSES("5212", "生育新生儿费用"), + // 中医特色门诊 + TRADITIONAL_CHINESE_MEDICINE_OUTPATIENT("16", "中医特色门诊"), + // 起付线治疗 + DEDUCTIBLE_TREATMENT("29", "起付线治疗"), + // 体检 + PHYSICAL_EXAMINATION("9107", "体检"), + // 低自付住院 + LOW_COPAY_HOSPITALIZATION("3101", "低自付住院"), + // 低自付门诊 + LOW_COPAY_OUTPATIENT("3102", "低自付门诊"), + // 门诊慢病 + CHRONIC_DISEASE_OUTPATIENT("140104", "门诊慢病"), + // 门诊特病 + SPECIAL_DISEASE_OUTPATIENT("140201", "门诊特病"), + // 舒缓疗护住院 + PALLIATIVE_CARE_HOSPITALIZATION("2114", "舒缓疗护住院"); + + private String value; + private String description; + + public static YbMedType getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbMedType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedinsType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedinsType.java new file mode 100644 index 00000000..f52d7ee8 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedinsType.java @@ -0,0 +1,55 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 7.12 定点医疗服务机构类型 + * + * @author SunJQ + * @date 2025-04-15 + */ +@Getter +@AllArgsConstructor +public enum YbMedinsType { + + /** + * 定点医疗机构 + */ + FIXMEDINS_TYPE1("1", "定点医疗机构"), + /** + * 定点零售药店 + */ + FIXMEDINS_TYPE2("2", "定点零售药店"), + /** + * 工伤定点康复机构 + */ + FIXMEDINS_TYPE3("3", "工伤定点康复机构"), + /** + * 辅助器具配置机构 + */ + FIXMEDINS_TYPE4("4", "辅助器具配置机构"), + /** + * 计划生育服务机构 + */ + FIXMEDINS_TYPE5("5", "计划生育服务机构"); + + private String value; + private String description; + + public static YbMedinsType getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbMedinsType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPayLoc.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPayLoc.java new file mode 100644 index 00000000..9b11114f --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPayLoc.java @@ -0,0 +1,56 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * YbPayLoc 支付地点 PAY_LOC 报销标志 REIM_FLAG + * + * @author SunJQ + * @date 2025-04-15 + */ +@Getter +@AllArgsConstructor +public enum YbPayLoc { + + /** + * 中心 + */ + PAY_LOC1("1", "中心"), + /** + * 医疗机构 + */ + PAY_LOC2("2", "医疗机构"), + /** + * 省内异地 + */ + PAY_LOC3("3", "省内异地"), + /** + * 跨省异地 + */ + PAY_LOC4("4", "跨省异地"), + /** + * 互联网医院 + */ + PAY_LOC5("5", "互联网医院"); + + private String value; + private String description; + + public static YbPayLoc getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbPayLoc val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPayment.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPayment.java new file mode 100644 index 00000000..323b4c43 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPayment.java @@ -0,0 +1,328 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 支付类型 + * + * @author SunJQ + * @date 2025-03-29 + */ +@Getter +@AllArgsConstructor +public enum YbPayment { + + YB_FUND_PAY( 100000 ,1,null,"基金支付总额"), + + SELF_PAY(200000,1,null,"个人负担总金额"), + + OTHER_PAY(300000,1,null,"其他(如医院负担金额)"), + + /** + * 基本医保统筹基金支出 + */ + YB_TC_FUND_AMOUNT(110000,2,YB_FUND_PAY,"基本医保统筹基金支出"), + /** + * 补充医疗保险基金支出 + */ + YB_BC_FUND_AMOUNT(120000,2,YB_FUND_PAY,"补充医疗保险基金支出"), + /** + * 医疗救助基金支出 + */ + YB_JZ_FUND_AMOUNT(130000,2,YB_FUND_PAY,"医疗救助基金支出"), + /** + * 其他支出 + */ + YB_OTHER_AMOUNT(140000,2,YB_FUND_PAY,"其他支出"), + /** + * 职工基本医疗保险 + */ + YB_TC_ZG_FUND_VALUE(110100,3,YB_TC_FUND_AMOUNT,"职工基本医疗保险"), + /** + * 居民基本医疗保险 + */ + YB_TC_JM_FUND_VALUE(110200,3,YB_TC_FUND_AMOUNT,"居民基本医疗保险"), + /** + * 全体参保人的居民大病保险 + */ + YB_BC_JM_DB_VALUE(120100,3,YB_BC_FUND_AMOUNT,"全体参保人的居民大病保险"), + /** + * 大额医疗费用补助 + */ + YB_BC_DE_BZ_VALUE(120200,3,YB_BC_FUND_AMOUNT,"大额医疗费用补助"), + /** + * 企业职工大额医疗费用补助 + */ + YB_BC_ZG_DE_BZ_VALUE(120300,3,YB_BC_FUND_AMOUNT,"企业职工大额医疗费用补助"), + /** + * 公务员医疗补助 + */ + YB_BC_GWY_BZ_VALUE(120400,3,YB_BC_FUND_AMOUNT,"公务员医疗补助"), + /** + * 伤残人员医疗保障基金支出 + */ + YB_OTHER_SC_BZ_FUND_VALUE(130100,3,YB_OTHER_AMOUNT,"伤残人员医疗保障基金支出"), + /** + * + */ + SELF_YB_ZH_PAY(210000,2,SELF_PAY,"个人医保账户支付"), + /** + * + */ + SELF_YB_ZH_GJ_VALUE(210100,3,SELF_YB_ZH_PAY,"账户共济支付金额"), + /** + * + */ + SELF_CASH_PAY(220000,2,SELF_PAY,"个人现金支付金额"), + /** + * + */ + SELF_VX_PAY(230000,2,SELF_PAY,"微信支付金额"), + /** + * + */ + SELF_ALI_PAY(240000,2,SELF_PAY,"阿里支付金额"), + /** + * + */ + SELF_CASH_VALUE(220400,3,SELF_CASH_PAY,"个人现金支付金额(现金)"), + /** + * + */ + SELF_CASH_VX_VALUE(220100,3,SELF_CASH_PAY,"个人现金支付金额(微信)"), + /** + * + */ + SELF_CASH_ALI_VALUE(220200,3,SELF_CASH_PAY,"个人现金支付金额(支付宝)"), + /** + * + */ + SELF_CASH_UNION_VALUE(220300,3,SELF_CASH_PAY,"个人现金支付金额(银联)"), + /** + * 兜底基金支出 + */ + OTHER_PAY_DD_FUND_VALUE(300001,2,OTHER_PAY,"兜底基金支出"), + /** + * 意外伤害基金支出 + */ + OTHER_PAY_YW_SH_FUND_VALUE(300002,2,OTHER_PAY,"意外伤害基金支出"), + /** + * 离休人员医疗保障金支出 + */ + OTHER_PAY_LX_YL_FUND_VALUE(300003,2,OTHER_PAY,"离休人员医疗保障金支出"), + /** + * 离休人员优惠金支出 + */ + OTHER_PAY_LX_YH_FUND_VALUE(300004,2,OTHER_PAY,"离休人员优惠金支出"), + /** + * 财政基金支出 + */ + OTHER_PAY_CZ_FUND_VALUE(300005,2,OTHER_PAY,"财政基金支出"), + /** + * 财政预支支出 + */ + OTHER_PAY_CZ_YZ_FUND_VALUE(300006,2,OTHER_PAY,"财政预支支出"), + /** + * 职工大病基金支出 + */ + OTHER_PAY_ZG_DB_FUND_VALUE(300007,2,OTHER_PAY,"职工大病基金支出"), + /** + * 二乙基金支出 + */ + OTHER_PAY_EY_FUND_VALUE(300008,2,OTHER_PAY,"二乙基金支出"), + /** + * 倾斜救助支出 + */ + OTHER_PAY_QX_JZ_FUND_VALUE(300009,2,OTHER_PAY,"倾斜救助支出"), + /** + * 医疗救助再救助基金 + */ + OTHER_PAY_YL_JZ_FUND_VALUE(300010,2,OTHER_PAY,"医疗救助再救助基金"), + /** + * 医院负担金额 + */ + HOSP_PART_AMT(300011,2,OTHER_PAY,"医院负担金额"), + + + //医保结算返回值记录枚举 + FULAMT_OWNPAY_AMT(1,2,null,"全自费金额"), + //PSN_PART_AMT(2,2,null,"个人负担总金额"), + OVERLMT_SELFPAY(3,2,null,"超限价自费费用"), + PRESELFPAY_AMT(4,2,null,"先行自付金额"), + INSCP_SCP_AMT(5,2,null,"符合政策范围金额"), + ACT_PAY_DEDC(6,2,null,"实际支付起付线"), + POOL_PROP_SELFPAY(7,2,null,"基本医疗保险统筹基金支付比例"), + BALC(8,2,null,"余额"), + + + //基金类型,下述仅作记录 + BIRTH_FUND(510100,2,YB_FUND_PAY, "生育基金"), + RETIREE_MEDICAL(340100,2,YB_FUND_PAY, "离休人员医疗保障基金"), + URBAN_BASIC_MEDICAL(390100,2,YB_FUND_PAY, "城乡居民基本医疗保险基金"), + URBAN_SERIOUS_ILLNESS(390200,2,YB_FUND_PAY, "城乡居民大病医疗保险基金"), + MEDICAL_ASSISTANCE(610100,2,YB_FUND_PAY, "医疗救助基金"), + GOVERNMENT_SUBSIDY(640100,2,YB_FUND_PAY, "政府兜底基金"), + ACCIDENT_INSURANCE(390400,2,YB_FUND_PAY, "意外伤害基金"), + CARE_INSURANCE(620100,2,YB_FUND_PAY, "照护保险基金"), + FINANCIAL_FUND(360100, 2,YB_FUND_PAY,"财政基金"), + HOSPITAL_ADVANCE(999900,2,YB_FUND_PAY, "医院垫付"), + SUPPLEMENTARY_INSURANCE(390300,2,YB_FUND_PAY, "城乡居民大病补充保险基金"), + HEALTHCARE_PREPAYMENT(360300, 2,YB_FUND_PAY,"保健预支基金"); +// +// +// /** +// * 现金支付 +// */ +// CASH(1, 1, "现金支付"), +// +// /** +// * 微信支付 +// */ +// VX_PAY(2, 1, "微信支付"), +// +// /** +// * 支付宝支付 +// */ +// ALI_PAY(3, 1, "支付宝支付"), +// +// /** +// * 银联支付 +// */ +// UNION_PAY(4, 1, "银联支付"), +// +// /** +// * 医保账户支付 +// */ +// YB_ZH_PAY(5, 1, "医保账户支付"), +// +// /** +// * 医保统筹支付合计 +// */ +// YB_TC_SUM_PAY(6, 1, "医保统筹支付合计"), +// +// /** +// * 医保统筹支付 +// */ +// YB_TC_PAY(7, 2, "医保统筹支付"), +// +// /** +// * 医保公务员补助 +// */ +// YB_GWY_PAY(8, 2, "医保公务员补助"), +// +// /** +// * 先行自付金额 +// */ +// XX_SELF_PAY(9, 2, "先行自付金额"), +// +// /** +// * 全自费金额 +// */ +// ALL_SELF_PAY(10, 2, "先行自付金额"), +// +// /** +// * 医疗工伤支付 +// */ +// YL_GS_PAY(11, 2, "医疗工伤支付"), +// +// /** +// * 老红军支付 +// */ +// YB_HJ_PAY(12, 2, "老红军支付"), +// +// /** +// * 离休人员医疗保障基金支付金额 +// */ +// YB_LTX_PAY(13, 2, "离休人员医疗保障基金支付金额"), +// +// /** +// * 居民统筹 +// */ +// YB_JM_TC_PAY(14, 2, "居民统筹"), +// /** +// * 居民大病 +// */ +// YB_JM_DB_PAY(15, 2, "居民大病"), +// /** +// * 补充医疗补助基金支付金额 +// */ +// YB_BC_PAY(16, 2, "补充医疗补助基金支付金额"), +// /** +// * 其他扶贫报销金额 +// */ +// YB_OTHER_FP_PAY(17, 2, "其他扶贫报销金额"), +// /** +// * 健康扶贫医疗基金 +// */ +// YB_JK_FP_PAY(18, 2, "健康扶贫医疗基金"), +// /** +// * 精准脱贫保险金额 +// */ +// YB_JZ_TP_PAY(19, 2, "精准脱贫保险金额"), +// /** +// * 提交医保总额 +// */ +// YB_SUM_FEE(20, 2, "提交医保总额"), +// /** +// * 二乙医疗专项医疗基金支出 +// */ +// YB_EY_PAY(21, 2, "二乙医疗专项医疗基金支出"), +// /** +// * 慢特病支付 +// */ +// YB_TM_PAY(22, 2, "补充医疗补助基金支付金额"), +// /** +// * 定点医疗机构垫支 +// */ +// YB_ORG_PAY(23, 2, "定点医疗机构垫支"), +// /** +// * 起付线公务员返还 +// */ +// YB_RETURN_GWY_PAY(24, 2, "起付线公务员返还"), +// /** +// * 大额理赔金额 +// */ +// YB_DELP_PAY(25, 2, "大额理赔金额"), +// /** +// * 民政救助金额 +// */ +// YB_MZJZ_PAY(26, 2, "民政救助金额"), +// /** +// * 生育基金支付 +// */ +// BIRTH_TC_PAY_AMOUNT(27, 1, "生育基金支付"), +// /** +// * 生育账户支付 +// */ +// BIRTH_ZH_PAY_AMOUNT(28, 1, "生育账户支付"), +// /** +// * 符合范围金额 +// */ +// YB_FHFW_AMOUNT(29, 2, "符合范围金额"), +// /** +// * 财政兜底基金支出 +// */ +// YB_CZDD_AMOUNT(30, 2, "财政兜底基金支出"); + @EnumValue + private Integer value; + private Integer level; + private YbPayment payment; + private String info; + + public static YbPayment getByValue(Integer value) { + if (value == null) { + return null; + } + for (YbPayment val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPharmacistTitle.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPharmacistTitle.java new file mode 100644 index 00000000..d5018346 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPharmacistTitle.java @@ -0,0 +1,67 @@ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 审方药师职称枚举 + * + * @author liuhr + * @date 2025-04-22 + */ +@Getter +@AllArgsConstructor +public enum YbPharmacistTitle { + + /** + * 执业药师 + */ + LICENSED_PHARMACIST("1", "执业药师"), + + /** + * 卫生技术职称 + */ + HEALTH_TECH_TITLE("2", "卫生技术职称"), + + /** + * 主任药师 + */ + CHIEF_PHARMACIST("2.1", "主任药师"), + + /** + * 副主任药师 + */ + DEPUTY_CHIEF_PHARMACIST("2.2", "副主任药师"), + + /** + * 主管药师 + */ + SENIOR_PHARMACIST("2.3", "主管药师"), + + /** + * 药师 + */ + PHARMACIST("2.4", "药师"), + + /** + * 药士 + */ + JUNIOR_PHARMACIST("2.5", "药士"); + + private String value; + private String description; + + public static YbPharmacistTitle getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbPharmacistTitle title : values()) { + if (title.getValue().equals(value)) { + return title; + } + } + return null; + } +} \ No newline at end of file diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPrescriptionItemType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPrescriptionItemType.java new file mode 100644 index 00000000..457a41ce --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPrescriptionItemType.java @@ -0,0 +1,46 @@ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 处方项目分类代码枚举 + * + * @author YourName + * @date 2025-04-21 + */ +@Getter +@AllArgsConstructor +public enum YbPrescriptionItemType { + + /** + * 西药 + */ + WESTERN_MEDICINE("11", "西药"), + + /** + * 中成药 + */ + TRADITIONAL_CHINESE_MEDICINE_PREPARATION("12", "中成药"), + + /** + * 中药饮片 + */ + CHINESE_MATERIAL_MEDICATED("13", "中药饮片"); + + private String value; + private String description; + + public static YbPrescriptionItemType getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbPrescriptionItemType type : values()) { + if (type.getValue().equals(value)) { + return type; + } + } + return null; + } +} \ No newline at end of file diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPrescriptionStatus.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPrescriptionStatus.java new file mode 100644 index 00000000..9080d7b5 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPrescriptionStatus.java @@ -0,0 +1,52 @@ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 医保电子处方状态枚举 + * + * @author liuhr + * @date 2025-04-22 + */ +@Getter +@AllArgsConstructor +public enum YbPrescriptionStatus { + + /** + * 有效 + */ + VALID("1", "有效"), + + /** + * 已失效 + */ + EXPIRED("2", "已失效"), + + /** + * 已撤销 + */ + REVOKED("3", "已撤销"), + + /** + * 已作废 + */ + INVALID("4", "已作废"); + + private String value; + private String description; + + public static YbPrescriptionStatus getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbPrescriptionStatus status : values()) { + if (status.getValue().equals(value)) { + return status; + } + } + return null; + } +} \ No newline at end of file diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPsnCertType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPsnCertType.java new file mode 100644 index 00000000..ecae48e9 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPsnCertType.java @@ -0,0 +1,111 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 7.13 人员证件类型(psn_cert_type) + * + * @author SunJQ + * @date 2025-04-10 + */ +@Getter +@AllArgsConstructor +public enum YbPsnCertType { + + /** + * 中国护照 + */ + PSN_CERT_TYPE16("16", "中国护照"), + /** + * 港澳台居民居住证 + */ + PSN_CERT_TYPE17("17", "港澳台居民居住证"), + /** + * 居民身份证(户口簿) + */ + PSN_CERT_TYPE01("01", "居民身份证(户口簿)"), + /** + * 中国人民解放军军官证 + */ + PSN_CERT_TYPE02("02", "中国人民解放军军官证"), + /** + * 中国人民武装警察警官证 + */ + PSN_CERT_TYPE03("03", "中国人民武装警察警官证"), + /** + * 香港特区护照/港澳居民来往内地通行证 + */ + PSN_CERT_TYPE04("04", "香港特区护照/港澳居民来往内地通行证"), + /** + * 澳门特区护照/港澳居民来往内地通行证 + */ + PSN_CERT_TYPE05("05", "澳门特区护照/港澳居民来往内地通行证"), + /** + * 台湾居民来往大陆通行证 + */ + PSN_CERT_TYPE06("06", "台湾居民来往大陆通行证"), + /** + * 外国人永久居留证 + */ + PSN_CERT_TYPE07("07", "外国人永久居留证"), + /** + * 外国人护照 + */ + PSN_CERT_TYPE08("08", "外国人护照"), + /** + * MEMBER_FIRST + */ + PSN_CERT_TYPE09("09", "残疾人证"), + /** + * 军烈属证明 + */ + PSN_CERT_TYPE10("10", "军烈属证明"), + /** + * 外国人就业证 + */ + PSN_CERT_TYPE11("11", "外国人就业证"), + /** + * 外国专家证 + */ + PSN_CERT_TYPE12("12", "外国专家证"), + /** + * 外国人常驻记者证 + */ + PSN_CERT_TYPE13("13", "外国人常驻记者证"), + /** + * 台港澳人员就业证 + */ + PSN_CERT_TYPE14("14", "台港澳人员就业证"), + /** + * 回国(来华)定居专家证 + */ + PSN_CERT_TYPE15("15", "回国(来华)定居专家证"), + /** + * 社会保障卡 + */ + PSN_CERT_TYPE90("90", "社会保障卡"), + /** + * 其他身份证件 + */ + PSN_CERT_TYPE99("99", "其他身份证件"); + + private String value; + private String description; + + public static YbPsnCertType getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbPsnCertType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPsnSetlWay.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPsnSetlWay.java new file mode 100644 index 00000000..4dddca78 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPsnSetlWay.java @@ -0,0 +1,43 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 医保个人结算方式 + * + * @author SunJQ + * @date 2025-04-14 + */ +@Getter +@AllArgsConstructor +public enum YbPsnSetlWay { + + /** + * 按项目结算 + */ + PSN_SETLWAY01("01", "按项目结算"), + /** + * 按定额结算 + */ + PSN_SETLWAY02("02", "按定额结算"); + + private String value; + private String description; + + public static YbPsnSetlWay getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbPsnSetlWay val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbRxFlag.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbRxFlag.java new file mode 100644 index 00000000..fb6fc20d --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbRxFlag.java @@ -0,0 +1,42 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 处方标记【rx_flag】 + * + * @author SunJQ + * @date 2025-04-17 + */ +@Getter +@AllArgsConstructor +public enum YbRxFlag { + + // 否 + WESTERN_AND_CHINESE_PATENT_MEDICINE(0, "0","否"), + // 是 + IMPORTANT_HERBAL_SLICES(1, "1","是"), + // 双跨 + SELF_PREPARED_MEDICATION(2, "2","双跨"); + + private final int code; + private final String value; + private final String name; + + public static YbRxFlag getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbRxFlag val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbRxItemTypeCode.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbRxItemTypeCode.java new file mode 100644 index 00000000..9a778d3c --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbRxItemTypeCode.java @@ -0,0 +1,109 @@ +package com.openhis.common.enums.ybenums; + +import com.github.pagehelper.util.StringUtil; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 处方项目分类代码 + * + * @author liuhr + * @date 2025-05-13 + */ +@Getter +@AllArgsConstructor +public enum YbRxItemTypeCode { + + /** + * 西药 + */ + WESTERN_MEDICINE("11", "西药"), + /** + * 中成药 + */ + CHINESE_PATENT_MEDICINE("12", "中成药"), + /** + * 中药饮片 + */ + CHINESE_MATERIA_MEDICA_SLICES("13", "中药饮片"), + /** + * 治疗 + */ + TREATMENT("21", "治疗"), + /** + * 检验 + */ + LAB_TEST("22", "检验"), + /** + * 检查 + */ + MEDICAL_IMAGING("23", "检查"), + /** + * 手术 + */ + SURGERY("24", "手术"), + /** + * 麻醉 + */ + ANESTHESIA("25", "麻醉"), + /** + * 护理 + */ + NURSING("26", "护理"), + /** + * 膳食 + */ + DIET("27", "膳食"), + /** + * 输血 + */ + BLOOD_TRANSFUSION("28", "输血"), + /** + * 输氧 + */ + OXYGEN_THERAPY("29", "输氧"), + /** + * 其他 + */ + OTHER("31", "其他"), + /** + * 转科 + */ + REFERRAL3("2", "转科"), + /** + * 术后 + */ + POST_OPERATIVE("33", "术后"), + /** + * 出院 + */ + DISCHARGE("34", "出院"), + /** + * 转院 + */ + TRANSFER("35", "转院"), + /** + * 死亡 + */ + DEATH("36", "死亡"), + /** + * 产后 + */ + POSTPARTUM("37", "产后"); + + private String value; + private String description; + + public static YbRxItemTypeCode getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbRxItemTypeCode val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} \ No newline at end of file diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbUsedFrqu.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbUsedFrqu.java new file mode 100644 index 00000000..d8f1926c --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbUsedFrqu.java @@ -0,0 +1,95 @@ +package com.openhis.common.enums.ybenums; + +/** + * UsedFrquEnum + * + * @author Wuser + * @date 2025/4/21 + */ +import com.github.pagehelper.util.StringUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 使用频次枚举 + * + * @author YourName + * @date 2025-04-21 + */ +@Getter +@AllArgsConstructor +public enum YbUsedFrqu { + + DAILY_ONCE("11", "每天一次 (qd)"), + + DAILY_TWICE("12", "每天二次 (bid)"), + + DAILY_THRICE("13", "每天三次 (tid)"), + + DAILY_FOUR_TIMES("14", "每天四次 (qid)"), + + WEEKLY_ONCE("21", "每周一次 (qw)"), + + WEEKLY_TWICE("22", "每周二次 (biw)"), + + WEEKLY_THRICE("23", "每周三次 (tiw)"), + + EVERY_TWO_WEEKS("24", "每两周一次 (q2w)"), + + EVERY_HOUR("31", "每小时一次 (qh)"), + + EVERY_TWO_HOURS("32", "每2小时一次 (q2h)"), + + EVERY_FOUR_HOURS("33", "每4小时一次 (q4h)"), + + EVERY_FIVE_HOURS("34", "每5小时一次 (q5h)"), + + EVERY_SIX_HOURS("35", "每6小时一次 (q6h)"), + + EVERY_EIGHT_HOURS("36", "每8小时一次 (q8h)"), + + EVERY_TWELVE_HOURS("37", "每12小时一次 (q12h)"), + + EVERY_NIGHT("41", "每晚一次 (qn)"), + + EVERY_OTHER_DAY("42", "隔天一次 (qod)"), + + EVERY_FIVE_DAYS("43", "五天一次 (q5d)"), + + EVERY_TEN_DAYS("44", "十天一次 (q10d)"), + + EVERY_THREE_DAYS("45", "隔三日一次 (q3d)"), + + TWELVE_HOUR_MAINTAIN("51", "12小时维持"), + + TWENTY_FOUR_HOUR_MAINTAIN("52", "24小时维持"), + + IMMEDIATELY("61", "立即 (st)"), + + WHEN_NEEDED("62", "必要时使用 (prn)"), + + ONCE("63", "一次 (once)"), + + MONTHLY_ONCE("71", "每月一次 (qm)"), + + MONTHLY_TWICE("72", "每月两次 (bim)"), + + EVERY_THREE_MONTHS("73", "每三个月一次 (q3m)"), + + EVERY_SIX_MONTHS("74", "每六个月一次 (q6m)"); + + private String value; + private String description; + + public static YbUsedFrqu getByValue(String value) { + if (StringUtil.isEmpty(value)) { + return null; + } + for (YbUsedFrqu frqu : values()) { + if (frqu.getValue().equals(value)) { + return frqu; + } + } + return null; + } +} \ No newline at end of file diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/OrgContrast.java b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/OrgContrast.java new file mode 100644 index 00000000..c5aceea0 --- /dev/null +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/OrgContrast.java @@ -0,0 +1,38 @@ +package com.openhis.administration.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-04-25 + */ +@Data +@TableName("org_contrast") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class OrgContrast extends HisBaseEntity { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + /** 字典编码 */ + private Long dictCode; + + /** 项目代码 */ + private String code; + + /** 类型 */ + private Integer typeEnum; + +} \ No newline at end of file diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/administration/mapper/OrgContrastMapper.java b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/mapper/OrgContrastMapper.java new file mode 100644 index 00000000..c3d54b2e --- /dev/null +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/mapper/OrgContrastMapper.java @@ -0,0 +1,17 @@ +package com.openhis.administration.mapper; + +import com.openhis.administration.domain.OrgContrast; +import org.springframework.stereotype.Repository; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 【对照表】Mapper接口 + * + * @author system + * @date 2025-04-25 + */ +@Repository +public interface OrgContrastMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/IOrgContrastService.java b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/IOrgContrastService.java new file mode 100644 index 00000000..f3bd0b96 --- /dev/null +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/IOrgContrastService.java @@ -0,0 +1,23 @@ +package com.openhis.administration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.openhis.administration.domain.OrgContrast; +import com.openhis.yb.domain.ClinicSettle; + +/** + * 【对照表】Service接口 + * + * @author system + * @date 2025-04-25 + */ +public interface IOrgContrastService extends IService { + + /** + * 通过字典编码查询 + * + * @param dictCode 字典编码 + * @param typeEnum 类型 + * @return + */ + OrgContrast getByDictCode(Long dictCode,Integer typeEnum ); +} \ No newline at end of file diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrgContrastServiceImpl.java b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrgContrastServiceImpl.java new file mode 100644 index 00000000..7556f65e --- /dev/null +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrgContrastServiceImpl.java @@ -0,0 +1,33 @@ +package com.openhis.administration.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.openhis.yb.domain.ClinicSettle; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.openhis.administration.domain.OrgContrast; +import com.openhis.administration.mapper.OrgContrastMapper; +import com.openhis.administration.service.IOrgContrastService; + +/** + * 【对照表】Service业务层处理 + * + * @author system + * @date 2025-04-25 + */ +@Service +public class OrgContrastServiceImpl extends ServiceImpl implements IOrgContrastService { + + /** + * 通过字典编码查询 + * + * @param dictCode 字典编码 + * @param typeEnum 类型 + * @return + */ + @Override + public OrgContrast getByDictCode(Long dictCode,Integer typeEnum){ + + return baseMapper.selectOne(new LambdaQueryWrapper().eq(OrgContrast::getDictCode, dictCode).eq(OrgContrast::getTypeEnum, typeEnum)); + } +} \ No newline at end of file diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PaymentRecDetailDto.java b/openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PaymentRecDetailDto.java new file mode 100644 index 00000000..5c940c8a --- /dev/null +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PaymentRecDetailDto.java @@ -0,0 +1,28 @@ +package com.openhis.financial.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import liquibase.pro.packaged.D; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +@Data +@Accessors(chain = true) +public class PaymentRecDetailDto { + + private Long id; + + /** 账户 */ + private Long accountId; + + /** 支付类型 */ + private Integer payEnum; + + /** 支付类型 */ + private String payEnumText; + + /** 金额 */ + private BigDecimal amount; +} diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PaymentResult.java b/openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PaymentResult.java new file mode 100644 index 00000000..0122eb71 --- /dev/null +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PaymentResult.java @@ -0,0 +1,121 @@ +package com.openhis.financial.model; + +import com.openhis.yb.dto.Clinic2206FundPaymentResult; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +@Data +@Accessors(chain = true) +public class PaymentResult { + // 主键字段 + private String mdtrtId; // 就诊ID + + private String setlId;// 结算id + + private String psnNo; // 人员编号 + + private String psnName; // 人员姓名 + + private String psnCertType; // 人员证件类型 + + private String certno; // 证件号码 + + private String gend; // 性别 + + private String naty; // 民族 + + private Date brdy; // 出生日期 + + private BigDecimal age; // 年龄 + + private String insutype; // 险种类型 + + private String psnType; // 人员类别 + + private String cvlservFlag; // 公务员标志 + + private Date setlTime; // 结算时间 + + private String mdtrtCertType; // 就诊凭证类型 + + private String medType; // 医疗类别 + + private BigDecimal medfeeSumamt; // 医疗费总额 + + private BigDecimal fulamtOwnpayAmt; // 全自费金额 + + private BigDecimal overlmtSelfpay; // 超限价自费费用 + + private BigDecimal preselfpayAmt; // 先行自付金额 + + private BigDecimal inscpScpAmt; // 符合政策范围金额 + + private BigDecimal actPayDedc; // 实际支付起付线 + + private BigDecimal hifpPay; // 基本医疗保险统筹基金支出 + + private BigDecimal poolPropSelfpay; // 基本医疗保险统筹基金支付比例 + + private BigDecimal cvlservPay; // 公务员医疗补助资金支出 + + private BigDecimal hifesPay; // 企业补充医疗保险基金支出 + + private BigDecimal hifmiPay; // 居民大病保险资金支出 + + private BigDecimal hifobPay; // 职工大额医疗费用补助基金支出 + + private BigDecimal mafPay; // 医疗救助基金支出 + + private BigDecimal othPay; // 其他支出 + + private BigDecimal fundPaySumamt; // 基金支付总额 + + private BigDecimal psnPartAmt; // 个人负担总金额 + + private BigDecimal acctPay; // 个人账户支出 + + private BigDecimal psnCashPay; // 个人现金支出 + + private BigDecimal hospPartAmt; // 医院负担金额 + + private BigDecimal balc; // 余额 + + private BigDecimal acctMulaidPay; // 个人账户共济支付金额 + + private String medinsSetlId; // 医药机构结算ID 存放发送方报文ID + + private String clrOptins; // 清算经办机构 + + private String clrWay; // 清算方式 + + private String clrType; // 清算类别 + + private BigDecimal hifdmPay; // 伤残人员医疗保障基金支出 + + private String expContent; // 字段扩展 + + private List setldetail;// 结算详细信息 + + private String chrgBchno; // 收费批次号 + private String paymentNo; // 收费批次号 + + private Long accountId; // 收费批次号 + + public PaymentResult() { + this.setMedfeeSumamt(new BigDecimal("0.0")).setFulamtOwnpayAmt(new BigDecimal("0.0")) + .setOverlmtSelfpay(new BigDecimal("0.0")).setPreselfpayAmt(new BigDecimal("0.0")) + .setInscpScpAmt(new BigDecimal("0.0")).setActPayDedc(new BigDecimal("0.0")) + .setHifpPay(new BigDecimal("0.0")).setPoolPropSelfpay(new BigDecimal("0.0")) + .setCvlservPay(new BigDecimal("0.0")).setHifesPay(new BigDecimal("0.0")).setHifmiPay(new BigDecimal("0.0")) + .setHifobPay(new BigDecimal("0.00")).setMafPay(new BigDecimal("0.0")).setOthPay(new BigDecimal("0.0")) + .setFundPaySumamt(new BigDecimal("0.0")).setPsnPartAmt(new BigDecimal("0.0")) + .setAcctPay(new BigDecimal("0.0")).setPsnCashPay(new BigDecimal("0.0")) + .setHospPartAmt(new BigDecimal("0.0")).setBalc(new BigDecimal("0.0")) + .setAcctMulaidPay(new BigDecimal("0.0")).setHifdmPay(new BigDecimal("0.0")); + } + +} diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PaymentedItemModel.java b/openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PaymentedItemModel.java new file mode 100644 index 00000000..99c3e24a --- /dev/null +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PaymentedItemModel.java @@ -0,0 +1,24 @@ +package com.openhis.financial.model; +import com.openhis.administration.domain.ChargeItem; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class PaymentedItemModel { + /** 就诊id */ + private Long encounterId; + + /** 层级 */ + private String busNo; + + /** 医疗类型 */ + private String medType; + + /** 总价 */ + private BigDecimal totalPrice; + + /** 总价 */ + private Long chargeItemId; + +} diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PrePaymentResult.java b/openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PrePaymentResult.java new file mode 100644 index 00000000..6e55c0f2 --- /dev/null +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PrePaymentResult.java @@ -0,0 +1,85 @@ +package com.openhis.financial.model; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.openhis.yb.dto.Clinic2206FundPaymentResult; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public class PrePaymentResult { + + @JSONField(name = "medfee_sumamt") + private BigDecimal medfeeSumamt; // 医疗费总额 + + @JSONField(name = "fulamt_ownpay_amt") + private BigDecimal fulamtOwnpayAmt; // 全自费金额 + + @JSONField(name = "overlmt_selfpay") + private BigDecimal overlmtSelfpay; // 超限价自费费用 + + @JSONField(name = "preselfpay_amt") + private BigDecimal preselfpayAmt; // 先行自付金额 + + @JSONField(name = "inscp_scp_amt") + private BigDecimal inscpScpAmt; // 符合政策范围金额 + + @JSONField(name = "act_pay_dedc") + private BigDecimal actPayDedc; // 实际支付起付线 + + @JSONField(name = "hifp_pay") + private BigDecimal hifpPay; // 基本医疗保险统筹基金支出 + + @JSONField(name = "pool_prop_selfpay") + private BigDecimal poolPropSelfpay; // 基本医疗保险统筹基金支付比例 + + @JSONField(name = "cvlserv_pay") + private BigDecimal cvlservPay; // 公务员医疗补助资金支出 + + @JSONField(name = "hifes_pay") + private BigDecimal hifesPay; // 企业补充医疗保险基金支出 + + @JSONField(name = "hifmi_pay") + private BigDecimal hifmiPay; // 居民大病保险资金支出 + + @JSONField(name = "hifob_pay") + private BigDecimal hifobPay; // 职工大额医疗费用补助基金支出 + + @JSONField(name = "maf_pay") + private BigDecimal mafPay; // 医疗救助基金支出 + + @JSONField(name = "oth_pay") + private BigDecimal othPay; // 其他支出 + + @JSONField(name = "fund_pay_sumamt") + private BigDecimal fundPaySumamt; // 基金支付总额 + + @JSONField(name = "psn_part_amt") + private BigDecimal psnPartAmt; // 个人负担总金额 + + @JSONField(name = "acct_pay") + private BigDecimal acctPay; // 个人账户支出 + + @JSONField(name = "psn_cash_pay") + private BigDecimal psnCashPay; // 个人现金支出 + + @JSONField(name = "hosp_part_amt") + private BigDecimal hospPartAmt; // 医院负担金额 + + @JSONField(name = "hifdm_pay") + private BigDecimal hifdmPay; + + @JSONField(name = "acct_mulaid_pay") + private BigDecimal acctMulaidPay; // 个人账户共济支付金额 + + private List setldetail;// 结算详细信息 + + private String mdtrtCertNo; // 就诊凭证编号 + + private String chrgBchno; // 收费批次号 + + private String busNo; // 挂号采访码 + + private Long accountId; // 账号ID码 +} diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PrePaymentResultModel.java b/openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PrePaymentResultModel.java new file mode 100644 index 00000000..7e3c2329 --- /dev/null +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/financial/model/PrePaymentResultModel.java @@ -0,0 +1,23 @@ +package com.openhis.financial.model; + +import com.openhis.financial.domain.PaymentRecDetail; +import com.openhis.financial.domain.PaymentReconciliation; +import com.openhis.financial.mapper.PaymentReconciliationMapper; +import com.openhis.yb.dto.Clinic2206FundPaymentResult; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +@Data +@Accessors(chain = true) +public class PrePaymentResultModel { + + private List details; + + private PaymentReconciliation paymentReconciliation; + + private String paymentId; +} diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/sys/domain/OperationRecord.java b/openhis-server/openhis-domain/src/main/java/com/openhis/sys/domain/OperationRecord.java new file mode 100644 index 00000000..7cd90e0d --- /dev/null +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/sys/domain/OperationRecord.java @@ -0,0 +1,37 @@ +package com.openhis.sys.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("sys_operation_record") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class OperationRecord extends HisBaseEntity { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + /** 操作类型|1新增,2修改,3删除 */ + private String dbOpType; + + /** 表名 */ + private String tableName; + + /** 参数json */ + private String paramJson; + +} diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/sys/domain/Option.java b/openhis-server/openhis-domain/src/main/java/com/openhis/sys/domain/Option.java new file mode 100644 index 00000000..3405dc56 --- /dev/null +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/sys/domain/Option.java @@ -0,0 +1,37 @@ +package com.openhis.sys.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("sys_option") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class Option extends HisBaseEntity { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + /** 选项key */ + private String optionKey; + + /** 选项value */ + private String optionValue; + + /** 说明 */ + private String optionDesc; + +} diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/sys/mapper/OperationRecordMapper.java b/openhis-server/openhis-domain/src/main/java/com/openhis/sys/mapper/OperationRecordMapper.java new file mode 100644 index 00000000..287030af --- /dev/null +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/sys/mapper/OperationRecordMapper.java @@ -0,0 +1,17 @@ +package com.openhis.sys.mapper; + +import org.springframework.stereotype.Repository; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.openhis.sys.domain.OperationRecord; + +/** + * 系统操作记录Mapper接口 + * + * @author system + * @date 2025-02-20 + */ +@Repository +public interface OperationRecordMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/sys/mapper/OptionMapper.java b/openhis-server/openhis-domain/src/main/java/com/openhis/sys/mapper/OptionMapper.java new file mode 100644 index 00000000..fd1b6eb7 --- /dev/null +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/sys/mapper/OptionMapper.java @@ -0,0 +1,17 @@ +package com.openhis.sys.mapper; + +import org.springframework.stereotype.Repository; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.openhis.sys.domain.Option; + +/** + * 系统选项配置Mapper接口 + * + * @author system + * @date 2025-02-20 + */ +@Repository +public interface OptionMapper extends BaseMapper