From 11f92ebc42743f80281338abbd95f36a965b29f4 Mon Sep 17 00:00:00 2001 From: chenqi Date: Sun, 21 Jun 2026 04:35:27 +0800 Subject: [PATCH] =?UTF-8?q?feat(pharmacy):=20=E6=B7=BB=E5=8A=A0=E8=8D=AF?= =?UTF-8?q?=E6=88=BF=E9=85=8D=E8=8D=AF=E6=A8=A1=E5=9D=97=E6=A0=B8=E5=BF=83?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增租户配置工具类TenantOptionUtil,支持租户配置项获取及临时兼容方案 - 实现药房共通服务PharmacyDispensaryCommonService,提供初始化、药品查询、分页等功能 - 开发药房发药单服务PharmacyDispensaryDispensingOrderService,支持发药单详情及编辑操作 - 创建药房损益单服务PharmacyDispensaryProfitLossOrderService,处理损益单业务逻辑 - 构建药房请领单服务PharmacyDispensaryRequisitionOrderService,请领流程管理 - 设计药房退库单服务PharmacyDispensaryReturnToWarehouseOrderService,退库业务处理 --- MD/architecture/AI_CAPABILITY_PLAN.md | 121 + MD/architecture/COMPETITOR_COMPARISON.md | 72 + .../DATA_FLOW_AND_UI_OPTIMIZATION_ANALYSIS.md | 281 ++ MD/architecture/DATA_FLOW_DETAILED_DESIGN.md | 281 ++ MD/architecture/DATA_FLOW_OPTIMIZATION.md | 101 + .../DATA_FLOW_OPTIMIZATION_PLAN.md | 711 ++++ MD/architecture/MICROSERVICE_UPGRADE_PLAN.md | 120 + .../core/common/utils/TenantOptionUtil.java | 42 + .../IPharmacyDispensaryCommonService.java | 79 + ...rmacyDispensaryDispensingOrderService.java | 39 + ...rmacyDispensaryProfitLossOrderService.java | 47 + ...rmacyDispensaryReceiptApprovalService.java | 89 + ...macyDispensaryRequisitionOrderService.java | 47 + ...spensaryReturnToWarehouseOrderService.java | 47 + ...PharmacyDispensaryStockInOrderService.java | 47 + ...macyDispensaryStocktakingOrderService.java | 47 + ...rmacyDispensaryTransferInOrderService.java | 47 + ...macyDispensaryTransferOutOrderService.java | 47 + .../PharmacyDispensaryCommonServiceImpl.java | 222 ++ ...yDispensaryDispensingOrderServiceImpl.java | 186 ++ ...yDispensaryProfitLossOrderServiceImpl.java | 175 + ...yDispensaryReceiptApprovalServiceImpl.java | 924 +++++ ...DispensaryRequisitionOrderServiceImpl.java | 163 + ...saryReturnToWarehouseOrderServiceImpl.java | 164 + ...macyDispensaryStockInOrderServiceImpl.java | 170 + ...DispensaryStocktakingOrderServiceImpl.java | 165 + ...yDispensaryTransferInOrderServiceImpl.java | 164 + ...DispensaryTransferOutOrderServiceImpl.java | 162 + ...cyDispensaryDispensingOrderController.java | 78 + ...cyDispensaryProfitLossOrderController.java | 134 + ...yDispensaryRequisitionOrderController.java | 136 + ...nsaryReturnToWarehouseOrderController.java | 134 + ...rmacyDispensaryStockInOrderController.java | 134 + ...yDispensaryStocktakingOrderController.java | 134 + ...cyDispensaryTransferInOrderController.java | 136 + ...yDispensaryTransferOutOrderController.java | 136 + .../dto/PharmacyDispensaryDetailDto.java | 214 ++ .../dispensary/dto/PharmacyDispensaryDto.java | 71 + .../dto/PharmacyDispensaryInitDto.java | 145 + .../PharmacyDispensaryMedicationInfoDto.java | 119 + .../dto/PharmacyDispensarySearchParam.java | 56 + .../PharmacyDispensaryCommonMapper.java | 57 + ...armacyDispensaryDispensingOrderMapper.java | 27 + ...armacyDispensaryProfitLossOrderMapper.java | 14 + ...rmacyDispensaryRequisitionOrderMapper.java | 14 + ...ispensaryReturnToWarehouseOrderMapper.java | 14 + .../PharmacyDispensaryStockInOrderMapper.java | 14 + ...rmacyDispensaryStocktakingOrderMapper.java | 14 + ...armacyDispensaryTransferInOrderMapper.java | 14 + ...rmacyDispensaryTransferOutOrderMapper.java | 14 + .../IInHospitalReturnMedicineAppService.java | 59 + .../IMedicalDeviceDispenseAppService.java | 72 + .../IMedicationDetailsAppService.java | 78 + .../IPendingMedicationDetailsAppService.java | 29 + .../appservice/IReturnMedicineAppService.java | 54 + .../ISummaryDispenseMedicineAppService.java | 54 + .../IWesternMedicineDispenseAppService.java | 72 + ...nHospitalReturnMedicineAppServiceImpl.java | 741 +++++ .../MedicalDeviceDispenseAppServiceImpl.java | 562 ++++ .../impl/MedicationDetailsAppServiceImpl.java | 301 ++ ...endingMedicationDetailsAppServiceImpl.java | 66 + .../impl/ReturnMedicineAppServiceImpl.java | 682 ++++ ...SummaryDispenseMedicineAppServiceImpl.java | 349 ++ ...WesternMedicineDispenseAppServiceImpl.java | 730 ++++ .../InHospitalReturnMedicineController.java | 89 + .../MedicalDeviceDispenseController.java | 106 + .../MedicationDetailsController.java | 137 + .../PendingMedicationDetailsController.java | 50 + .../PharmacyStockAlertController.java | 60 + .../controller/ReturnMedicineController.java | 82 + .../SummaryDispenseMedicineController.java | 87 + .../WesternMedicineDispenseController.java | 106 + .../dispense/dto/DispenseInitDto.java | 111 + .../dispense/dto/DispenseInventoryDto.java | 116 + .../dispense/dto/DispenseItemDto.java | 59 + .../dispense/dto/DispenseStatusOption.java | 23 + .../dispense/dto/EncounterInfoDto.java | 86 + .../dto/EncounterInfoSearchParam.java | 26 + .../dispense/dto/FromSearchParam.java | 12 + .../pharmacy/dispense/dto/FromSummaryDto.java | 36 + .../dispense/dto/FromSummarySearchParam.java | 16 + .../dispense/dto/InventoryDetailDto.java | 58 + .../dispense/dto/ItemDispenseOrderDto.java | 294 ++ .../dispense/dto/JlauDispenseParam.java | 33 + .../dto/MedDetailedAccountPageDto.java | 181 + .../dispense/dto/MedDetailsInitDto.java | 41 + .../dispense/dto/MedDetailsSearchParam.java | 67 + .../dispense/dto/MedicineSummaryDto.java | 147 + .../dispense/dto/MedicineSummaryInitDto.java | 57 + .../dto/MedicineSummarySearchParam.java | 45 + .../dto/PendingMedicationPageDto.java | 49 + .../dto/PendingMedicationSearchParam.java | 34 + .../dispense/dto/ReturnMedicineDto.java | 34 + .../dispense/dto/ReturnMedicineInfoDto.java | 77 + .../dispense/dto/ReturnMedicineInitDto.java | 59 + .../dispense/dto/UnDispenseInventoryDto.java | 73 + .../InHospitalReturnMedicineAppMapper.java | 66 + .../mapper/MedicalDeviceDispenseMapper.java | 64 + .../mapper/MedicationDetailsMapper.java | 52 + .../PendingMedicationDetailsMapper.java | 40 + .../dispense/mapper/ReturnMedicineMapper.java | 77 + .../mapper/SummaryDispenseMedicineMapper.java | 10 + .../mapper/WesternMedicineDispenseMapper.java | 92 + .../DayEndSettlementController.java | 88 + .../IPharmacyWarehouseCommonService.java | 79 + ...acyWarehouseDocumentManagementService.java | 19 + ...armacyWarehouseProfitLossOrderService.java | 47 + ...PharmacyWarehousePurchaseOrderService.java | 47 + ...armacyWarehouseReceiptApprovalService.java | 109 + .../IPharmacyWarehouseReturnOrderService.java | 47 + ...arehouseReturnToWarehouseOrderService.java | 47 + ...IPharmacyWarehouseStockInOrderService.java | 47 + ...PharmacyWarehouseStockOutOrderService.java | 47 + ...rmacyWarehouseStocktakingOrderService.java | 47 + .../PharmacyWarehouseCommonServiceImpl.java | 269 ++ ...arehouseDocumentManagementServiceImpl.java | 169 + ...cyWarehouseProfitLossOrderServiceImpl.java | 170 + ...macyWarehousePurchaseOrderServiceImpl.java | 161 + ...cyWarehouseReceiptApprovalServiceImpl.java | 974 ++++++ ...armacyWarehouseReturnOrderServiceImpl.java | 171 + ...ouseReturnToWarehouseOrderServiceImpl.java | 173 + ...rmacyWarehouseStockInOrderServiceImpl.java | 188 ++ ...macyWarehouseStockOutOrderServiceImpl.java | 178 + ...yWarehouseStocktakingOrderServiceImpl.java | 165 + ...WarehouseDocumentManagementController.java | 62 + ...acyWarehouseProfitLossOrderController.java | 134 + ...rmacyWarehousePurchaseOrderController.java | 158 + ...harmacyWarehouseReturnOrderController.java | 136 + ...houseReturnToWarehouseOrderController.java | 134 + ...armacyWarehouseStockInOrderController.java | 134 + ...rmacyWarehouseStockOutOrderController.java | 134 + ...cyWarehouseStocktakingOrderController.java | 134 + .../dto/PharmacyWarehouseDetailDto.java | 211 ++ .../warehouse/dto/PharmacyWarehouseDto.java | 71 + .../dto/PharmacyWarehouseInitDto.java | 140 + .../PharmacyWarehouseMedicationInfoDto.java | 119 + .../dto/PharmacyWarehouseSearchParam.java | 58 + .../mapper/PharmacyWarehouseCommonMapper.java | 57 + ...macyWarehouseDocumentManagementMapper.java | 14 + ...harmacyWarehouseProfitLossOrderMapper.java | 14 + .../PharmacyWarehousePurchaseOrderMapper.java | 14 + .../PharmacyWarehouseReturnOrderMapper.java | 14 + ...WarehouseReturnToWarehouseOrderMapper.java | 14 + .../PharmacyWarehouseStockInOrderMapper.java | 14 + .../PharmacyWarehouseStockOutOrderMapper.java | 14 + ...armacyWarehouseStocktakingOrderMapper.java | 14 + .../appservice/IInfectiousCardAppService.java | 115 + .../impl/InfectiousCardAppServiceImpl.java | 546 +++ .../reportManagementController.java | 125 + .../dto/AuditInfectiousCardRequest.java | 23 + .../dto/BatchAuditInfectiousCardRequest.java | 25 + .../dto/BatchReturnInfectiousCardRequest.java | 27 + .../reportmanage/dto/InfectiousCardDto.java | 139 + .../reportmanage/dto/InfectiousCardParam.java | 35 + .../dto/ReturnInfectiousCardRequest.java | 26 + .../dto/RevokeAuditInfectiousCardRequest.java | 20 + .../mapper/ReportManageCardMapper.java | 66 + .../his/document/enums/DocDefinitionEnum.java | 33 + .../his/document/enums/DocPermissionEnum.java | 53 + .../DocStatisticsDefinitionTypeEnum.java | 68 + .../his/document/enums/DocStatusEnum.java | 34 + .../his/document/enums/DocTypeEnum.java | 39 + .../his/document/enums/DocUseRangeEnum.java | 38 + .../enums/SurgeryAppStatusEnum.java | 84 + .../enums/SurgeryLevelEnum.java | 30 + .../enums/SurgeryStatusEnum.java | 33 + .../enums/SurgeryTypeEnum.java | 27 + .../healthlink/his/yb/enums/PriorityType.java | 68 + .../healthlink/his/yb/enums/YbChrgitmLv.java | 60 + .../healthlink/his/yb/enums/YbClrStas.java | 47 + .../healthlink/his/yb/enums/YbClrType.java | 51 + .../com/healthlink/his/yb/enums/YbClrWay.java | 59 + .../healthlink/his/yb/enums/YbDiagType.java | 59 + .../his/yb/enums/YbDoctorTitle.java | 56 + .../healthlink/his/yb/enums/YbDrordBhvr.java | 43 + .../healthlink/his/yb/enums/YbDrordType.java | 45 + .../his/yb/enums/YbDrugDosform.java | 18 + .../healthlink/his/yb/enums/YbDrugMedWay.java | 79 + .../healthlink/his/yb/enums/YbDspoWay.java | 39 + .../his/yb/enums/YbEncounterClass.java | 37 + .../his/yb/enums/YbEncounterZyStatus.java | 37 + .../com/healthlink/his/yb/enums/YbGender.java | 51 + .../his/yb/enums/YbHiFeesetlType.java | 47 + .../his/yb/enums/YbHospApprFlag.java | 47 + .../his/yb/enums/YbIdDocumentType.java | 136 + .../his/yb/enums/YbInOutDiagType.java | 42 + .../healthlink/his/yb/enums/YbInsuType.java | 86 + .../healthlink/his/yb/enums/YbInvChgType.java | 57 + .../his/yb/enums/YbInvDataType.java | 46 + .../his/yb/enums/YbIptDiseTypeCode.java | 92 + .../healthlink/his/yb/enums/YbListType.java | 47 + .../healthlink/his/yb/enums/YbMatnStas.java | 49 + .../healthlink/his/yb/enums/YbMdcsType.java | 64 + .../his/yb/enums/YbMdtrtCertType.java | 60 + .../his/yb/enums/YbMedChrgItmType.java | 110 + .../his/yb/enums/YbMedMdtrtType.java | 51 + .../healthlink/his/yb/enums/YbMedType.java | 92 + .../healthlink/his/yb/enums/YbMedinsLv.java | 75 + .../healthlink/his/yb/enums/YbMedinsType.java | 55 + .../com/healthlink/his/yb/enums/YbPayLoc.java | 55 + .../healthlink/his/yb/enums/YbPayment.java | 349 ++ .../his/yb/enums/YbPharmacistTitle.java | 66 + .../his/yb/enums/YbPrescriptionItemType.java | 46 + .../his/yb/enums/YbPrescriptionStatus.java | 51 + .../his/yb/enums/YbPsnCertType.java | 111 + .../healthlink/his/yb/enums/YbPsnSetlWay.java | 43 + .../com/healthlink/his/yb/enums/YbRxFlag.java | 42 + .../his/yb/enums/YbRxItemTypeCode.java | 108 + .../healthlink/his/yb/enums/YbTrigScen.java | 71 + .../healthlink/his/yb/enums/YbUsedFrqu.java | 95 + .../healthlink/his/yb/enums/YbWarnType.java | 39 + .../his/ybelep/ElepMedresultDetail.java | 62 + .../his/ybelep/ElepMedresultInfo.java | 45 + .../his/ybelep/ElepMedresultInput.java | 45 + .../his/ybelep/ElepQuerDiagnosisInfo.java | 69 + .../ybelep/ElepQuerPrescriptionDetail.java | 140 + .../his/ybelep/ElepQuerPrescriptionInfo.java | 118 + .../his/ybelep/ElepQuerPrescriptionInput.java | 45 + .../his/ybelep/ElepQuerVisitInfo.java | 107 + .../his/ybelep/ElepRevokeInput.java | 58 + .../his/ybelep/ElepRevokeOutput.java | 37 + .../his/ybelep/ElepSignatureInput.java | 48 + .../his/ybelep/ElepSignatureOutput.java | 45 + .../his/ybelep/ElepUploadInput.java | 98 + .../his/ybelep/ElepUploadOutput.java | 36 + .../his/ybelep/ElepVeriDiagnosisInfo.java | 84 + .../ybelep/ElepVeriPrescriptionDetail.java | 155 + .../his/ybelep/ElepVeriPrescriptionInfo.java | 124 + .../ybelep/ElepVeriPrescriptionOutput.java | 35 + .../his/ybelep/ElepVeriVisitInfo.java | 180 + .../his/ybelep/InformationInquiry.java | 26 + .../his/ybelep/MedicationResultInquiry.java | 38 + .../his/ybelep/PreCheckPrescription.java | 126 + .../his/ybelep/QueryPrescription.java | 118 + .../healthlink-his-yb/pom.xml | 44 + .../his/yb/domain/ClinicPreSettle.java | 62 + .../healthlink/his/yb/domain/ClinicReg.java | 109 + .../his/yb/domain/ClinicSettle.java | 112 + .../healthlink/his/yb/domain/ClinicUnReg.java | 47 + .../his/yb/domain/ClinicUnSettle.java | 111 + .../DayEndMedicalInsuranceSettlement.java | 118 + .../his/yb/domain/DirectoryCheckRecord.java | 42 + .../com/healthlink/his/yb/domain/File.java | 39 + .../his/yb/domain/FinancialApplyRecord.java | 70 + .../yb/domain/FinancialReconcileRecord.java | 65 + .../healthlink/his/yb/domain/InfoPerson.java | 92 + .../his/yb/domain/InpatientDischarge.java | 180 + .../his/yb/domain/InpatientFeeDetail.java | 226 ++ .../his/yb/domain/InpatientPreSettle.java | 337 ++ .../his/yb/domain/InpatientReg.java | 267 ++ .../domain/InpatientRegInfoUpdateRecorde.java | 241 ++ .../his/yb/domain/InpatientSettle.java | 318 ++ .../his/yb/domain/InpatientUnDischarge.java | 52 + .../his/yb/domain/InpatientUnReg.java | 52 + .../his/yb/domain/InpatientUnSettle.java | 257 ++ .../yb/domain/InpatientcancelFeeDetail.java | 65 + .../his/yb/domain/InventoryChangeRecord.java | 91 + .../his/yb/domain/InventoryCheckRecord.java | 81 + .../his/yb/domain/InventoryDelRecord.java | 42 + .../yb/domain/InventoryPurchaseRecord.java | 121 + .../domain/InventoryPurchaseReturnRecord.java | 109 + .../his/yb/domain/InventorySaleRecord.java | 189 ++ .../yb/domain/InventorySaleReturnRecord.java | 129 + .../com/healthlink/his/yb/domain/Sign.java | 76 + .../com/healthlink/his/yb/dto/BaseInfo.java | 96 + .../com/healthlink/his/yb/dto/BaseParam.java | 13 + .../his/yb/dto/CancelPaymentDto.java | 59 + .../his/yb/dto/CancelRegPaymentDto.java | 50 + .../his/yb/dto/CatalogFileInput.java | 20 + .../his/yb/dto/Catalogue1312Output.java | 117 + .../his/yb/dto/Catalogue1312QueryParam.java | 48 + .../his/yb/dto/ChargeItemDetailVO.java | 13 + .../healthlink/his/yb/dto/ChargeItemDto.java | 22 + .../his/yb/dto/ChargeItemGroupDto.java | 30 + .../his/yb/dto/Clearing3204AParam.java | 29 + .../his/yb/dto/Clearing3205AParma.java | 33 + .../his/yb/dto/Clearing3205AResult.java | 91 + .../his/yb/dto/Clearing3205AWebParma.java | 27 + .../his/yb/dto/Clearing3206AParam.java | 33 + .../his/yb/dto/Clearing3206AResult.java | 33 + .../his/yb/dto/Clinic2203DiseInfoParam.java | 107 + .../his/yb/dto/Clinic2203Medical.java | 80 + .../his/yb/dto/Clinic2203MedicalParam.java | 77 + .../his/yb/dto/Clinic2204FeeDetailParam.java | 239 ++ .../his/yb/dto/Clinic2204FeeDetailResult.java | 62 + .../his/yb/dto/Clinic2204OrderParam.java | 30 + .../his/yb/dto/Clinic2204OrderResult.java | 26 + .../his/yb/dto/Clinic2205OrderParam.java | 39 + .../yb/dto/Clinic2206FundPaymentResult.java | 40 + .../his/yb/dto/Clinic2206OrderOutput.java | 140 + .../his/yb/dto/Clinic2206OrderParam.java | 107 + .../his/yb/dto/Clinic2206OrderResult.java | 161 + .../his/yb/dto/Clinic2206OrderResultDto.java | 90 + .../his/yb/dto/Clinic2206SetldetaiResult.java | 57 + .../his/yb/dto/Clinic2207OrderResult.java | 158 + .../his/yb/dto/Clinic2207OrderResultDto.java | 14 + .../yb/dto/Clinic2207OrderResultInfoDto.java | 74 + .../yb/dto/Clinic2208UnSetlInfoOutput.java | 106 + .../his/yb/dto/Clinic2208UnSetlInfoParam.java | 34 + .../yb/dto/Clinic2208UnSetlInfoResult.java | 137 + .../com/healthlink/his/yb/dto/ClinicReg.java | 113 + .../his/yb/dto/ClinicReg2201Output.java | 66 + .../his/yb/dto/DispenseInventory3505Dto.java | 103 + .../his/yb/dto/EleInvoiceChargeDetailDto.java | 34 + .../his/yb/dto/EleInvoiceListDetailDto.java | 46 + .../his/yb/dto/EleInvoicePatientInfoDto.java | 75 + .../his/yb/dto/EleInvoicePaymentInfoDto.java | 60 + .../his/yb/dto/EleInvoiceResultDto.java | 73 + .../healthlink/his/yb/dto/File9101Param.java | 14 + .../healthlink/his/yb/dto/FileDownload.java | 28 + .../com/healthlink/his/yb/dto/FileResult.java | 46 + .../his/yb/dto/Financial13203Param.java | 53 + .../his/yb/dto/Financial13203Result.java | 58 + .../his/yb/dto/Financial13203WebParam.java | 49 + .../his/yb/dto/Financial3201Output.java | 19 + .../his/yb/dto/Financial3201Param.java | 77 + .../his/yb/dto/Financial3202FileParam.java | 75 + .../his/yb/dto/Financial3202FileResult.java | 56 + .../his/yb/dto/Financial3202OtherParam.java | 17 + .../his/yb/dto/Financial3203AParam.java | 67 + .../his/yb/dto/Financial3203AWebParam.java | 37 + .../his/yb/dto/Financial3203Dto.java | 39 + .../his/yb/dto/Financial3203Param.java | 72 + .../his/yb/dto/Financial3203WebParam.java | 42 + .../his/yb/dto/Financial3204Param.java | 32 + .../dto/FinancialClearing3203AWebParam.java | 17 + .../yb/dto/FinancialSettlement3202Param.java | 66 + .../yb/dto/FinancialSettlement3202Result.java | 36 + .../yb/dto/FinancialSettlement3209AParam.java | 40 + .../dto/FinancialSettlement3209AResult.java | 28 + .../his/yb/dto/FsiConsultation3101Param.java | 45 + .../his/yb/dto/FsiDiagnose3101Param.java | 56 + .../his/yb/dto/FsiEncounter3101Param.java | 167 + .../his/yb/dto/FsiFeedback3103DataParam.java | 27 + .../his/yb/dto/FsiFeedback3103WarnsParam.java | 29 + .../his/yb/dto/FsiOperation3101Param.java | 68 + .../his/yb/dto/FsiOrder3101Param.java | 167 + .../his/yb/dto/FsiPatient3101Param.java | 61 + .../his/yb/dto/FsiViolation3101Result.java | 73 + .../yb/dto/FsiViolationDetail3101Result.java | 44 + .../his/yb/dto/HospAdm2401DiseInfoParam.java | 68 + .../his/yb/dto/HospAdm2401MdtInfoParam.java | 191 ++ .../his/yb/dto/HospAdm2402DiseInfoParam.java | 70 + .../his/yb/dto/HospAdm2402DscgInfoParam.java | 129 + .../his/yb/dto/HospAdm2403AdmInfoParam.java | 180 + .../his/yb/dto/HospAdm2403DiseInfoParam.java | 74 + .../his/yb/dto/HospAdm2404AdmCnlParam.java | 32 + .../his/yb/dto/HospAdm2406SmAttrUpParam.java | 62 + .../yb/dto/HospAdm2407SmAttrSelectParam.java | 77 + .../yb/dto/HospAdm2407SmAttrSelectResult.java | 67 + .../his/yb/dto/HospDept3401AParam.java | 16 + .../his/yb/dto/HospDept3401Param.java | 90 + .../his/yb/dto/HospDept3402Param.java | 90 + .../his/yb/dto/HospDept3403Param.java | 29 + .../his/yb/dto/HospTrf2501ARefmedinParam.java | 107 + .../his/yb/dto/HospTrf2501RefmedinParam.java | 107 + .../his/yb/dto/HospTrfCxl2502Param.java | 30 + .../healthlink/his/yb/dto/Info1101Output.java | 68 + .../his/yb/dto/Info1101PerinfoResult.java | 56 + .../his/yb/dto/Info1101ReadcardParam.java | 43 + .../healthlink/his/yb/dto/Info5301Param.java | 14 + .../dto/Info5301SpecialConditionResult.java | 20 + .../his/yb/dto/InvoiceBaseInfoDto.java | 104 + .../his/yb/dto/MatAllowReg25007Param.java | 56 + .../his/yb/dto/MatAllowReg25007Result.java | 82 + .../his/yb/dto/MatAllowRegSel25008Param.java | 82 + .../his/yb/dto/Medical3503Param.java | 113 + .../his/yb/dto/Medical3505Param.java | 177 + .../his/yb/dto/Medical3505Result.java | 29 + .../his/yb/dto/Medical3506Param.java | 116 + .../his/yb/dto/Medical3507Param.java | 29 + .../his/yb/dto/Medical3508Param.java | 99 + .../his/yb/dto/Medical3508Result.java | 104 + .../yb/dto/MedicalDirectory3301ListParam.java | 16 + .../his/yb/dto/MedicalDirectory3301Param.java | 69 + .../his/yb/dto/MedicalDirectory3302Param.java | 32 + .../his/yb/dto/MedicalInventory3501Param.java | 72 + .../his/yb/dto/MedicalInventory3502Param.java | 79 + .../yb/dto/MedicalInventory3511Output.java | 321 ++ .../his/yb/dto/MedicalInventory3511Param.java | 266 ++ .../yb/dto/MedicalInventory3512Output.java | 74 + .../his/yb/dto/MedicalInventory3512Param.java | 57 + .../yb/dto/MedicalInventory3513Output.java | 158 + .../his/yb/dto/MedicalInventory3513Param.java | 85 + .../his/yb/dto/MedicalPurchase3504Param.java | 95 + .../his/yb/dto/MedicalTraceNoDto.java | 25 + .../healthlink/his/yb/dto/PatientInfoDto.java | 103 + .../yb/dto/PaymentDecDetailUniAccountDto.java | 30 + .../his/yb/dto/PaymentDetailDto.java | 36 + .../com/healthlink/his/yb/dto/PaymentDto.java | 43 + .../his/yb/dto/PaymentInpatientDto.java | 53 + .../his/yb/dto/PaymentSettleDto.java | 19 + .../dto/PersBirthApprovalCnl25004Param.java | 27 + .../dto/PersBirthApprovalSel25005Param.java | 64 + .../his/yb/dto/PersBirthRecord25003Param.java | 124 + .../his/yb/dto/PersChrDis2503Param.java | 83 + .../his/yb/dto/PersChrDisCxl2504Param.java | 29 + .../his/yb/dto/PersDesigPt2505Param.java | 98 + .../his/yb/dto/PersDesigPtCxl2506Param.java | 29 + .../yb/dto/PersMedApprovalCnl25006Param.java | 25 + .../his/yb/dto/PersMedRecord25001Param.java | 84 + .../his/yb/dto/PersMedSelect25002Param.java | 37 + .../his/yb/dto/PersMedSelect25002Result.java | 89 + .../his/yb/dto/PersUnintInj2507Param.java | 167 + .../healthlink/his/yb/dto/PrePaymentDto.java | 55 + .../com/healthlink/his/yb/dto/Result.java | 47 + .../com/healthlink/his/yb/dto/ResultBody.java | 39 + .../his/yb/dto/Settlement3201DetailDto.java | 39 + .../his/yb/dto/Settlement3201Dto.java | 28 + .../his/yb/dto/Settlement3201WebParam.java | 37 + .../his/yb/dto/Settlement3202Dto.java | 45 + .../his/yb/dto/Settlement3202WebParam.java | 32 + .../his/yb/dto/Settlement3209AWebParam.java | 30 + .../java/com/healthlink/his/yb/dto/Sign.java | 58 + .../healthlink/his/yb/dto/Sign1101Param.java | 19 + .../healthlink/his/yb/dto/Sign9001Result.java | 24 + .../his/yb/dto/SupplyItemDetail3503Dto.java | 126 + .../his/yb/dto/ThreePartPayDto.java | 42 + .../yb/dto/VeriPrescriptionDetailInfoDto.java | 101 + .../his/yb/dto/VeriPrescriptionInfoDto.java | 53 + .../his/yb/dto/VeriPrescriptionParam.java | 21 + .../his/yb/dto/Yb2301InputFeeDetail.java | 194 ++ .../his/yb/dto/Yb2301InputFeeDetailModel.java | 29 + .../his/yb/dto/Yb2301OutputResult.java | 124 + .../his/yb/dto/Yb2302InpatientParam.java | 33 + .../his/yb/dto/Yb2302InputInpatient.java | 35 + .../his/yb/dto/Yb2303InputInpatient.java | 123 + .../his/yb/dto/Yb2303OutputSetInfo.java | 291 ++ .../his/yb/dto/Yb2304InputExpContent.java | 31 + .../his/yb/dto/Yb2304InputInpatient.java | 115 + .../his/yb/dto/Yb2304OutputSetlInfo.java | 279 ++ .../his/yb/dto/Yb2305InputInpatient.java | 33 + .../his/yb/dto/Yb2305OutputSetlInfo.java | 223 ++ .../yb/dto/Yb2401InputInpatientDiseInfo.java | 87 + .../yb/dto/Yb2401InputInpatientMdtrtInfo.java | 239 ++ .../dto/Yb2401InputInpatientTrumContent.java | 37 + .../yb/dto/Yb2402InputInpatientDiseInfo.java | 88 + .../yb/dto/Yb2402InputInpatientDscgInfo.java | 165 + .../his/yb/dto/Yb2402InputParam.java | 26 + .../his/yb/dto/Yb2403InputAdmInfo.java | 227 ++ .../his/yb/dto/Yb2403InputDiseInfo.java | 93 + .../yb/dto/Yb2403InputMdtrtGrpContent.java | 20 + .../his/yb/dto/Yb2403InputParam.java | 30 + .../his/yb/dto/Yb2403InputTrumContent.java | 30 + .../his/yb/dto/Yb2404InputInpatient.java | 42 + .../his/yb/dto/Yb2405InputInpatient.java | 38 + .../his/yb/dto/Yb2601InputParam.java | 20 + .../Yb3101AdapterEncounterDiagnoseInfo.java | 52 + .../Yb3101AdapterEncounterPatientInfo.java | 128 + .../his/yb/dto/Yb3101AdapterOrderInfo.java | 118 + .../his/yb/dto/Yb3101InputData.java | 55 + .../his/yb/dto/Yb3101InputFsiDiagnoseDto.java | 78 + .../yb/dto/Yb3101InputFsiEncounterDto.java | 280 ++ .../yb/dto/Yb3101InputFsiOperationDto.java | 91 + .../his/yb/dto/Yb3101InputFsiOrderDto.java | 278 ++ .../his/yb/dto/Yb3101InputPatientDto.java | 85 + .../dto/Yb3101OutputJudgeResultDetailDto.java | 66 + .../his/yb/dto/Yb3101OutputResult.java | 121 + .../his/yb/dto/Yb3103InputData.java | 36 + .../his/yb/dto/Yb3103InputWarn.java | 40 + .../his/yb/dto/Yb4101AAdapterSettleInfo.java | 67 + .../his/yb/dto/Yb4101AInputBldinfo.java | 38 + .../his/yb/dto/Yb4101AInputData.java | 46 + .../his/yb/dto/Yb4101AInputDiseinfo.java | 59 + .../his/yb/dto/Yb4101AInputIcuinfo.java | 51 + .../his/yb/dto/Yb4101AInputIteminfo.java | 60 + .../his/yb/dto/Yb4101AInputOprninfo.java | 102 + .../his/yb/dto/Yb4101AInputOpspdiseinfo.java | 51 + .../his/yb/dto/Yb4101AInputSetlinfo.java | 443 +++ .../his/yb/dto/Yb4101AOutputData.java | 27 + .../his/yb/dto/Yb4101InputData.java | 46 + .../his/yb/dto/Yb4101InputDiseinfo.java | 21 + .../his/yb/dto/Yb4101InputIcuinfo.java | 22 + .../his/yb/dto/Yb4101InputIteminfo.java | 24 + .../his/yb/dto/Yb4101InputOprninfo.java | 37 + .../his/yb/dto/Yb4101InputOpspdiseinfo.java | 22 + .../his/yb/dto/Yb4101InputPayinfo.java | 17 + .../his/yb/dto/Yb4101InputSetlinfo.java | 256 ++ .../his/yb/dto/Yb4102InputStastInfo.java | 23 + .../healthlink/his/yb/dto/Yb4104InputDto.java | 50 + .../his/yb/dto/Yb4401InputBaseInfoDto.java | 695 ++++ .../his/yb/dto/Yb4401InputDiseInfoDto.java | 113 + .../healthlink/his/yb/dto/Yb4401InputDto.java | 27 + .../his/yb/dto/Yb4401InputIcuInfoDto.java | 74 + .../his/yb/dto/Yb4401InputOprnInfoDto.java | 215 ++ .../his/yb/dto/Yb5205InputSpecialDisease.java | 41 + .../yb/dto/Yb5205OutputSpecialDisease.java | 219 ++ .../com/healthlink/his/yb/dto/extData.java | 89 + .../healthlink/his/yb/enums/PriorityType.java | 68 + .../healthlink/his/yb/enums/YbChrgitmLv.java | 60 + .../healthlink/his/yb/enums/YbClrStas.java | 47 + .../healthlink/his/yb/enums/YbClrType.java | 51 + .../com/healthlink/his/yb/enums/YbClrWay.java | 59 + .../healthlink/his/yb/enums/YbDiagType.java | 59 + .../his/yb/enums/YbDoctorTitle.java | 56 + .../healthlink/his/yb/enums/YbDrordBhvr.java | 43 + .../healthlink/his/yb/enums/YbDrordType.java | 45 + .../his/yb/enums/YbDrugDosform.java | 18 + .../healthlink/his/yb/enums/YbDrugMedWay.java | 79 + .../healthlink/his/yb/enums/YbDspoWay.java | 39 + .../his/yb/enums/YbEncounterClass.java | 37 + .../his/yb/enums/YbEncounterZyStatus.java | 37 + .../com/healthlink/his/yb/enums/YbGender.java | 51 + .../his/yb/enums/YbHiFeesetlType.java | 47 + .../his/yb/enums/YbHospApprFlag.java | 47 + .../his/yb/enums/YbIdDocumentType.java | 136 + .../his/yb/enums/YbInOutDiagType.java | 42 + .../healthlink/his/yb/enums/YbInsuType.java | 86 + .../healthlink/his/yb/enums/YbInvChgType.java | 57 + .../his/yb/enums/YbInvDataType.java | 46 + .../his/yb/enums/YbIptDiseTypeCode.java | 92 + .../healthlink/his/yb/enums/YbListType.java | 47 + .../healthlink/his/yb/enums/YbMatnStas.java | 49 + .../healthlink/his/yb/enums/YbMdcsType.java | 64 + .../his/yb/enums/YbMdtrtCertType.java | 60 + .../his/yb/enums/YbMedChrgItmType.java | 110 + .../his/yb/enums/YbMedMdtrtType.java | 51 + .../healthlink/his/yb/enums/YbMedType.java | 92 + .../healthlink/his/yb/enums/YbMedinsLv.java | 75 + .../healthlink/his/yb/enums/YbMedinsType.java | 55 + .../com/healthlink/his/yb/enums/YbPayLoc.java | 55 + .../healthlink/his/yb/enums/YbPayment.java | 349 ++ .../his/yb/enums/YbPharmacistTitle.java | 66 + .../his/yb/enums/YbPrescriptionItemType.java | 46 + .../his/yb/enums/YbPrescriptionStatus.java | 51 + .../his/yb/enums/YbPsnCertType.java | 111 + .../healthlink/his/yb/enums/YbPsnSetlWay.java | 43 + .../com/healthlink/his/yb/enums/YbRxFlag.java | 42 + .../his/yb/enums/YbRxItemTypeCode.java | 108 + .../healthlink/his/yb/enums/YbTrigScen.java | 71 + .../healthlink/his/yb/enums/YbUsedFrqu.java | 95 + .../healthlink/his/yb/enums/YbWarnType.java | 39 + .../his/yb/mapper/ClinicPreSettleMapper.java | 17 + .../his/yb/mapper/ClinicSettleMapper.java | 17 + .../his/yb/mapper/ClinicUnRegMapper.java | 16 + .../his/yb/mapper/ClinicUnSettleMapper.java | 16 + ...ayEndMedicalInsuranceSettlementMapper.java | 18 + .../yb/mapper/DirectoryCheckRecordMapper.java | 16 + .../yb/mapper/FinancialApplyRecordMapper.java | 16 + .../FinancialReconcileRecordMapper.java | 16 + .../yb/mapper/InpatientDischargeMapper.java | 18 + .../yb/mapper/InpatientFeeDetailMapper.java | 9 + .../yb/mapper/InpatientPreSettleMapper.java | 9 + .../InpatientRegInfoUpdateRecordeMapper.java | 18 + .../his/yb/mapper/InpatientRegMapper.java | 21 + .../his/yb/mapper/InpatientSettleMapper.java | 9 + .../mapper/InventoryChangeRecordMapper.java | 16 + .../yb/mapper/InventoryCheckRecordMapper.java | 16 + .../yb/mapper/InventoryDelRecordMapper.java | 16 + .../mapper/InventoryPurchaseRecordMapper.java | 16 + .../InventoryPurchaseReturnRecordMapper.java | 16 + .../yb/mapper/InventorySaleRecordMapper.java | 16 + .../InventorySaleReturnRecordMapper.java | 16 + .../his/yb/mapper/MedicalInsuranceMapper.java | 58 + .../his/yb/mapper/PerinfoMapper.java | 11 + .../healthlink/his/yb/mapper/RegMapper.java | 13 + .../healthlink/his/yb/mapper/SignMapper.java | 12 + .../his/yb/model/CancelRegPaymentModel.java | 53 + .../his/yb/model/Clinic2207OrderModel.java | 126 + .../his/yb/model/Clinic2207OrderParam.java | 87 + .../yb/model/OutpatientRegistrationModel.java | 23 + .../yb/service/IClinicPreSettleService.java | 14 + .../his/yb/service/IClinicSettleService.java | 38 + .../his/yb/service/IClinicUnRegService.java | 14 + .../yb/service/IClinicUnSettleService.java | 23 + ...yEndMedicalInsuranceSettlementService.java | 74 + .../service/IDirectoryCheckRecordService.java | 14 + .../service/IFinancialApplyRecordService.java | 14 + .../IFinancialReconcileRecordService.java | 14 + .../service/IInpatientDischargeService.java | 18 + .../service/IInpatientFeeDetailService.java | 15 + .../service/IInpatientPreSettleService.java | 8 + ...IInpatientRegInfoUpdateRecordeService.java | 18 + .../his/yb/service/IInpatientRegService.java | 38 + .../yb/service/IInpatientSettleService.java | 24 + .../IInventoryChangeRecordService.java | 14 + .../service/IInventoryCheckRecordService.java | 14 + .../service/IInventoryDelRecordService.java | 14 + .../IInventoryPurchaseRecordService.java | 14 + ...IInventoryPurchaseReturnRecordService.java | 14 + .../service/IInventorySaleRecordService.java | 14 + .../IInventorySaleReturnRecordService.java | 14 + .../his/yb/service/IPerinfoService.java | 44 + .../his/yb/service/IRegService.java | 20 + .../his/yb/service/ISignService.java | 11 + .../com/healthlink/his/yb/service/YbDao.java | 2963 +++++++++++++++++ .../his/yb/service/YbHttpUtils.java | 1486 +++++++++ .../healthlink/his/yb/service/YbManager.java | 1056 ++++++ .../impl/ClinicPreSettleServiceImpl.java | 18 + .../service/impl/ClinicSettleServiceImpl.java | 42 + .../service/impl/ClinicUnRegServiceImpl.java | 19 + .../impl/ClinicUnSettleServiceImpl.java | 34 + ...MedicalInsuranceSettlementServiceImpl.java | 128 + .../impl/DirectoryCheckRecordServiceImpl.java | 19 + .../impl/FinancialApplyRecordServiceImpl.java | 18 + .../FinancialReconcileRecordServiceImpl.java | 19 + .../impl/InpatientDischargeServiceImpl.java | 30 + .../impl/InpatientFeeDetailServiceImpl.java | 18 + .../impl/InpatientPreSettleServiceImpl.java | 13 + ...atientRegInfoUpdateRecordeServiceImpl.java | 23 + .../service/impl/InpatientRegServiceImpl.java | 40 + .../impl/InpatientSettleServiceImpl.java | 29 + .../InventoryChangeRecordServiceImpl.java | 18 + .../impl/InventoryCheckRecordServiceImpl.java | 18 + .../impl/InventoryDelRecordServiceImpl.java | 18 + .../InventoryPurchaseRecordServiceImpl.java | 18 + ...entoryPurchaseReturnRecordServiceImpl.java | 18 + .../impl/InventorySaleRecordServiceImpl.java | 18 + .../InventorySaleReturnRecordServiceImpl.java | 18 + .../yb/service/impl/PerinfoServiceImpl.java | 63 + .../his/yb/service/impl/RegServiceImpl.java | 35 + .../his/yb/service/impl/SignServiceImpl.java | 15 + .../his/yb/util/CommonConstant.java | 327 ++ .../his/yb/util/YbParamBuilderUtil.java | 2445 ++++++++++++++ .../his/ybcatalog/domain/CatalogDrugInfo.java | 412 +++ .../domain/CatalogDrugInfoUsual.java | 314 ++ .../domain/CatalogMedicalConsumables.java | 308 ++ .../domain/CatalogMedicalHerbInfo.java | 156 + .../domain/CatalogMedicalService.java | 104 + .../domain/CatalogSpecialDisease.java | 69 + .../CatalogSpecialInsuranceDisease.java | 50 + .../CatalogSurgeryStandardDirectory.java | 120 + .../domain/CatalogWesternDisease.java | 112 + .../domain/CatalogZyDiseaseDiagnosis.java | 72 + .../ybcatalog/domain/CatalogZySettleUp.java | 76 + .../ybcatalog/domain/CatalogZySyndrome.java | 80 + .../mapper/CatalogDrugInfoMapper.java | 16 + .../mapper/CatalogDrugInfoUsualMapper.java | 16 + .../CatalogMedicalConsumablesMapper.java | 16 + .../mapper/CatalogMedicalHerbInfoMapper.java | 16 + .../mapper/CatalogMedicalServiceMapper.java | 16 + .../mapper/CatalogSpecialDiseaseMapper.java | 16 + .../CatalogSpecialInsuranceDiseaseMapper.java | 10 + ...CatalogSurgeryStandardDirectoryMapper.java | 16 + .../mapper/CatalogWesternDiseaseMapper.java | 16 + .../CatalogZyDiseaseDiagnosisMapper.java | 16 + .../mapper/CatalogZySyndromeMapper.java | 16 + .../service/ICatalogDrugInfoService.java | 25 + .../service/ICatalogDrugInfoUsualService.java | 22 + .../ICatalogMedicalConsumablesService.java | 14 + .../ICatalogMedicalHerbInfoService.java | 14 + .../ICatalogMedicalServiceService.java | 14 + .../ICatalogSpecialDiseaseService.java | 14 + ...CatalogSpecialInsuranceDiseaseService.java | 8 + ...atalogSurgeryStandardDirectoryService.java | 14 + .../ICatalogWesternDiseaseService.java | 14 + .../ICatalogZyDiseaseDiagnosisService.java | 14 + .../service/ICatalogZySyndromeService.java | 14 + .../impl/CatalogDrugInfoServiceImpl.java | 33 + .../impl/CatalogDrugInfoUsualServiceImpl.java | 34 + .../CatalogMedicalConsumablesServiceImpl.java | 22 + .../CatalogMedicalHerbInfoServiceImpl.java | 22 + .../CatalogMedicalServiceServiceImpl.java | 22 + .../CatalogSpecialDiseaseServiceImpl.java | 23 + ...logSpecialInsuranceDiseaseServiceImpl.java | 16 + ...ogSurgeryStandardDirectoryServiceImpl.java | 22 + .../CatalogWesternDiseaseServiceImpl.java | 22 + .../CatalogZyDiseaseDiagnosisServiceImpl.java | 22 + .../impl/CatalogZySyndromeServiceImpl.java | 22 + .../ybelep/domain/ElepMedresultDetail.java | 62 + .../his/ybelep/domain/ElepMedresultInfo.java | 45 + .../his/ybelep/domain/ElepMedresultInput.java | 45 + .../ybelep/domain/ElepQuerDiagnosisInfo.java | 69 + .../domain/ElepQuerPrescriptionDetail.java | 140 + .../domain/ElepQuerPrescriptionInfo.java | 118 + .../domain/ElepQuerPrescriptionInput.java | 45 + .../his/ybelep/domain/ElepQuerVisitInfo.java | 107 + .../his/ybelep/domain/ElepRevokeInput.java | 58 + .../his/ybelep/domain/ElepRevokeOutput.java | 37 + .../his/ybelep/domain/ElepSignatureInput.java | 48 + .../ybelep/domain/ElepSignatureOutput.java | 45 + .../his/ybelep/domain/ElepUploadInput.java | 98 + .../his/ybelep/domain/ElepUploadOutput.java | 36 + .../ybelep/domain/ElepVeriDiagnosisInfo.java | 84 + .../domain/ElepVeriPrescriptionDetail.java | 155 + .../domain/ElepVeriPrescriptionInfo.java | 124 + .../domain/ElepVeriPrescriptionOutput.java | 35 + .../his/ybelep/domain/ElepVeriVisitInfo.java | 180 + .../his/ybelep/domain/InformationInquiry.java | 26 + .../domain/MedicationResultInquiry.java | 38 + .../ybelep/domain/PreCheckPrescription.java | 126 + .../his/ybelep/domain/QueryPrescription.java | 118 + .../mapper/ElepMedresultDetailMapper.java | 16 + .../mapper/ElepMedresultInfoMapper.java | 16 + .../mapper/ElepMedresultInputMapper.java | 16 + .../mapper/ElepQuerDiagnosisInfoMapper.java | 16 + .../ElepQuerPrescriptionDetailMapper.java | 16 + .../ElepQuerPrescriptionInfoMapper.java | 16 + .../ElepQuerPrescriptionInputMapper.java | 16 + .../mapper/ElepQuerVisitInfoMapper.java | 16 + .../ybelep/mapper/ElepRevokeInputMapper.java | 16 + .../ybelep/mapper/ElepRevokeOutputMapper.java | 16 + .../mapper/ElepSignatureInputMapper.java | 16 + .../mapper/ElepSignatureOutputMapper.java | 16 + .../ybelep/mapper/ElepUploadInputMapper.java | 16 + .../ybelep/mapper/ElepUploadOutputMapper.java | 16 + .../mapper/ElepVeriDiagnosisInfoMapper.java | 16 + .../ElepVeriPrescriptionDetailMapper.java | 16 + .../ElepVeriPrescriptionInfoMapper.java | 16 + .../ElepVeriPrescriptionOutputMapper.java | 16 + .../mapper/ElepVeriVisitInfoMapper.java | 16 + .../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 | 18 + .../impl/ElepMedresultInfoServiceImpl.java | 18 + .../impl/ElepMedresultInputServiceImpl.java | 18 + .../ElepQuerDiagnosisInfoServiceImpl.java | 18 + ...ElepQuerPrescriptionDetailServiceImpl.java | 18 + .../ElepQuerPrescriptionInfoServiceImpl.java | 18 + .../ElepQuerPrescriptionInputServiceImpl.java | 18 + .../impl/ElepQuerVisitInfoServiceImpl.java | 18 + .../impl/ElepRevokeInputServiceImpl.java | 18 + .../impl/ElepRevokeOutputServiceImpl.java | 18 + .../impl/ElepSignatureInputServiceImpl.java | 18 + .../impl/ElepSignatureOutputServiceImpl.java | 18 + .../impl/ElepUploadInputServiceImpl.java | 18 + .../impl/ElepUploadOutputServiceImpl.java | 18 + .../ElepVeriDiagnosisInfoServiceImpl.java | 18 + ...ElepVeriPrescriptionDetailServiceImpl.java | 18 + .../ElepVeriPrescriptionInfoServiceImpl.java | 18 + ...ElepVeriPrescriptionOutputServiceImpl.java | 18 + .../impl/ElepVeriVisitInfoServiceImpl.java | 18 + 739 files changed, 64512 insertions(+) create mode 100644 MD/architecture/AI_CAPABILITY_PLAN.md create mode 100644 MD/architecture/COMPETITOR_COMPARISON.md create mode 100644 MD/architecture/DATA_FLOW_AND_UI_OPTIMIZATION_ANALYSIS.md create mode 100644 MD/architecture/DATA_FLOW_DETAILED_DESIGN.md create mode 100644 MD/architecture/DATA_FLOW_OPTIMIZATION.md create mode 100644 MD/architecture/DATA_FLOW_OPTIMIZATION_PLAN.md create mode 100644 MD/architecture/MICROSERVICE_UPGRADE_PLAN.md create mode 100644 healthlink-his-server/core-common/src/main/java/com/core/common/utils/TenantOptionUtil.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryCommonService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryDispensingOrderService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryProfitLossOrderService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryReceiptApprovalService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryRequisitionOrderService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryReturnToWarehouseOrderService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryStockInOrderService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryStocktakingOrderService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryTransferInOrderService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryTransferOutOrderService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryCommonServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryDispensingOrderServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryProfitLossOrderServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryReceiptApprovalServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryRequisitionOrderServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryReturnToWarehouseOrderServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryStockInOrderServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryStocktakingOrderServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryTransferInOrderServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryTransferOutOrderServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryDispensingOrderController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryProfitLossOrderController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryRequisitionOrderController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryReturnToWarehouseOrderController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryStockInOrderController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryStocktakingOrderController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryTransferInOrderController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryTransferOutOrderController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/dto/PharmacyDispensaryDetailDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/dto/PharmacyDispensaryDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/dto/PharmacyDispensaryInitDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/dto/PharmacyDispensaryMedicationInfoDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/dto/PharmacyDispensarySearchParam.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/mapper/PharmacyDispensaryCommonMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/mapper/PharmacyDispensaryDispensingOrderMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/mapper/PharmacyDispensaryProfitLossOrderMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/mapper/PharmacyDispensaryRequisitionOrderMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/mapper/PharmacyDispensaryReturnToWarehouseOrderMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/mapper/PharmacyDispensaryStockInOrderMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/mapper/PharmacyDispensaryStocktakingOrderMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/mapper/PharmacyDispensaryTransferInOrderMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/mapper/PharmacyDispensaryTransferOutOrderMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/appservice/IInHospitalReturnMedicineAppService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/appservice/IMedicalDeviceDispenseAppService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/appservice/IMedicationDetailsAppService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/appservice/IPendingMedicationDetailsAppService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/appservice/IReturnMedicineAppService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/appservice/ISummaryDispenseMedicineAppService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/appservice/IWesternMedicineDispenseAppService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/appservice/impl/InHospitalReturnMedicineAppServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/appservice/impl/MedicalDeviceDispenseAppServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/appservice/impl/MedicationDetailsAppServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/appservice/impl/PendingMedicationDetailsAppServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/appservice/impl/ReturnMedicineAppServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/appservice/impl/SummaryDispenseMedicineAppServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/appservice/impl/WesternMedicineDispenseAppServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/controller/InHospitalReturnMedicineController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/controller/MedicalDeviceDispenseController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/controller/MedicationDetailsController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/controller/PendingMedicationDetailsController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/controller/PharmacyStockAlertController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/controller/ReturnMedicineController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/controller/SummaryDispenseMedicineController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/controller/WesternMedicineDispenseController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/DispenseInitDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/DispenseInventoryDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/DispenseItemDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/DispenseStatusOption.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/EncounterInfoDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/EncounterInfoSearchParam.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/FromSearchParam.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/FromSummaryDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/FromSummarySearchParam.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/InventoryDetailDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/ItemDispenseOrderDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/JlauDispenseParam.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/MedDetailedAccountPageDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/MedDetailsInitDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/MedDetailsSearchParam.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/MedicineSummaryDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/MedicineSummaryInitDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/MedicineSummarySearchParam.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/PendingMedicationPageDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/PendingMedicationSearchParam.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/ReturnMedicineDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/ReturnMedicineInfoDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/ReturnMedicineInitDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/dto/UnDispenseInventoryDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/mapper/InHospitalReturnMedicineAppMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/mapper/MedicalDeviceDispenseMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/mapper/MedicationDetailsMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/mapper/PendingMedicationDetailsMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/mapper/ReturnMedicineMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/mapper/SummaryDispenseMedicineMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispense/mapper/WesternMedicineDispenseMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/settlement/controller/DayEndSettlementController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/IPharmacyWarehouseCommonService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/IPharmacyWarehouseDocumentManagementService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/IPharmacyWarehouseProfitLossOrderService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/IPharmacyWarehousePurchaseOrderService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/IPharmacyWarehouseReceiptApprovalService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/IPharmacyWarehouseReturnOrderService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/IPharmacyWarehouseReturnToWarehouseOrderService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/IPharmacyWarehouseStockInOrderService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/IPharmacyWarehouseStockOutOrderService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/IPharmacyWarehouseStocktakingOrderService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/impl/PharmacyWarehouseCommonServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/impl/PharmacyWarehouseDocumentManagementServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/impl/PharmacyWarehouseProfitLossOrderServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/impl/PharmacyWarehousePurchaseOrderServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/impl/PharmacyWarehouseReceiptApprovalServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/impl/PharmacyWarehouseReturnOrderServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/impl/PharmacyWarehouseReturnToWarehouseOrderServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/impl/PharmacyWarehouseStockInOrderServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/impl/PharmacyWarehouseStockOutOrderServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/appservice/impl/PharmacyWarehouseStocktakingOrderServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/controller/PharmacyWarehouseDocumentManagementController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/controller/PharmacyWarehouseProfitLossOrderController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/controller/PharmacyWarehousePurchaseOrderController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/controller/PharmacyWarehouseReturnOrderController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/controller/PharmacyWarehouseReturnToWarehouseOrderController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/controller/PharmacyWarehouseStockInOrderController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/controller/PharmacyWarehouseStockOutOrderController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/controller/PharmacyWarehouseStocktakingOrderController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/dto/PharmacyWarehouseDetailDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/dto/PharmacyWarehouseDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/dto/PharmacyWarehouseInitDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/dto/PharmacyWarehouseMedicationInfoDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/dto/PharmacyWarehouseSearchParam.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/mapper/PharmacyWarehouseCommonMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/mapper/PharmacyWarehouseDocumentManagementMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/mapper/PharmacyWarehouseProfitLossOrderMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/mapper/PharmacyWarehousePurchaseOrderMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/mapper/PharmacyWarehouseReturnOrderMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/mapper/PharmacyWarehouseReturnToWarehouseOrderMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/mapper/PharmacyWarehouseStockInOrderMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/mapper/PharmacyWarehouseStockOutOrderMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/warehouse/mapper/PharmacyWarehouseStocktakingOrderMapper.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/reportmanage/appservice/IInfectiousCardAppService.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/reportmanage/appservice/impl/InfectiousCardAppServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/reportmanage/controller/reportManagementController.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/reportmanage/dto/AuditInfectiousCardRequest.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/reportmanage/dto/BatchAuditInfectiousCardRequest.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/reportmanage/dto/BatchReturnInfectiousCardRequest.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/reportmanage/dto/InfectiousCardDto.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/reportmanage/dto/InfectiousCardParam.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/reportmanage/dto/ReturnInfectiousCardRequest.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/reportmanage/dto/RevokeAuditInfectiousCardRequest.java create mode 100644 healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/reportmanage/mapper/ReportManageCardMapper.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/document/enums/DocDefinitionEnum.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/document/enums/DocPermissionEnum.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/document/enums/DocStatisticsDefinitionTypeEnum.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/document/enums/DocStatusEnum.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/document/enums/DocTypeEnum.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/document/enums/DocUseRangeEnum.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/enums/SurgeryAppStatusEnum.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/enums/SurgeryLevelEnum.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/enums/SurgeryStatusEnum.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/enums/SurgeryTypeEnum.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/PriorityType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbChrgitmLv.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbClrStas.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbClrType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbClrWay.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbDiagType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbDoctorTitle.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbDrordBhvr.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbDrordType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbDrugDosform.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbDrugMedWay.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbDspoWay.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbEncounterClass.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbEncounterZyStatus.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbGender.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbHiFeesetlType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbHospApprFlag.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbIdDocumentType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbInOutDiagType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbInsuType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbInvChgType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbInvDataType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbIptDiseTypeCode.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbListType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbMatnStas.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbMdcsType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbMdtrtCertType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbMedChrgItmType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbMedMdtrtType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbMedType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbMedinsLv.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbMedinsType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbPayLoc.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbPayment.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbPharmacistTitle.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbPrescriptionItemType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbPrescriptionStatus.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbPsnCertType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbPsnSetlWay.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbRxFlag.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbRxItemTypeCode.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbTrigScen.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbUsedFrqu.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/yb/enums/YbWarnType.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/ElepMedresultDetail.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/ElepMedresultInfo.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/ElepMedresultInput.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/ElepQuerDiagnosisInfo.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/ElepQuerPrescriptionDetail.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/ElepQuerPrescriptionInfo.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/ElepQuerPrescriptionInput.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/ElepQuerVisitInfo.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/ElepRevokeInput.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/ElepRevokeOutput.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/ElepSignatureInput.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/ElepSignatureOutput.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/ElepUploadInput.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/ElepUploadOutput.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/ElepVeriDiagnosisInfo.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/ElepVeriPrescriptionDetail.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/ElepVeriPrescriptionInfo.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/ElepVeriPrescriptionOutput.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/ElepVeriVisitInfo.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/InformationInquiry.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/MedicationResultInquiry.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/PreCheckPrescription.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/ybelep/QueryPrescription.java create mode 100644 healthlink-his-server/healthlink-his-yb/pom.xml create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/ClinicPreSettle.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/ClinicReg.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/ClinicSettle.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/ClinicUnReg.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/ClinicUnSettle.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/DayEndMedicalInsuranceSettlement.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/DirectoryCheckRecord.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/File.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/FinancialApplyRecord.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/FinancialReconcileRecord.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/InfoPerson.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/InpatientDischarge.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/InpatientFeeDetail.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/InpatientPreSettle.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/InpatientReg.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/InpatientRegInfoUpdateRecorde.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/InpatientSettle.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/InpatientUnDischarge.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/InpatientUnReg.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/InpatientUnSettle.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/InpatientcancelFeeDetail.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/InventoryChangeRecord.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/InventoryCheckRecord.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/InventoryDelRecord.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/InventoryPurchaseRecord.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/InventoryPurchaseReturnRecord.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/InventorySaleRecord.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/InventorySaleReturnRecord.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/domain/Sign.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/BaseInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/BaseParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/CancelPaymentDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/CancelRegPaymentDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/CatalogFileInput.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Catalogue1312Output.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Catalogue1312QueryParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/ChargeItemDetailVO.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/ChargeItemDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/ChargeItemGroupDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clearing3204AParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clearing3205AParma.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clearing3205AResult.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clearing3205AWebParma.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clearing3206AParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clearing3206AResult.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2203DiseInfoParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2203Medical.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2203MedicalParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2204FeeDetailParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2204FeeDetailResult.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2204OrderParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2204OrderResult.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2205OrderParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2206FundPaymentResult.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2206OrderOutput.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2206OrderParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2206OrderResult.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2206OrderResultDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2206SetldetaiResult.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2207OrderResult.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2207OrderResultDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2207OrderResultInfoDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2208UnSetlInfoOutput.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2208UnSetlInfoParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Clinic2208UnSetlInfoResult.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/ClinicReg.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/ClinicReg2201Output.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/DispenseInventory3505Dto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/EleInvoiceChargeDetailDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/EleInvoiceListDetailDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/EleInvoicePatientInfoDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/EleInvoicePaymentInfoDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/EleInvoiceResultDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/File9101Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/FileDownload.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/FileResult.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Financial13203Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Financial13203Result.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Financial13203WebParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Financial3201Output.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Financial3201Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Financial3202FileParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Financial3202FileResult.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Financial3202OtherParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Financial3203AParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Financial3203AWebParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Financial3203Dto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Financial3203Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Financial3203WebParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Financial3204Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/FinancialClearing3203AWebParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/FinancialSettlement3202Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/FinancialSettlement3202Result.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/FinancialSettlement3209AParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/FinancialSettlement3209AResult.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/FsiConsultation3101Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/FsiDiagnose3101Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/FsiEncounter3101Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/FsiFeedback3103DataParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/FsiFeedback3103WarnsParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/FsiOperation3101Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/FsiOrder3101Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/FsiPatient3101Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/FsiViolation3101Result.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/FsiViolationDetail3101Result.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/HospAdm2401DiseInfoParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/HospAdm2401MdtInfoParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/HospAdm2402DiseInfoParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/HospAdm2402DscgInfoParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/HospAdm2403AdmInfoParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/HospAdm2403DiseInfoParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/HospAdm2404AdmCnlParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/HospAdm2406SmAttrUpParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/HospAdm2407SmAttrSelectParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/HospAdm2407SmAttrSelectResult.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/HospDept3401AParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/HospDept3401Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/HospDept3402Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/HospDept3403Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/HospTrf2501ARefmedinParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/HospTrf2501RefmedinParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/HospTrfCxl2502Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Info1101Output.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Info1101PerinfoResult.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Info1101ReadcardParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Info5301Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Info5301SpecialConditionResult.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/InvoiceBaseInfoDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/MatAllowReg25007Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/MatAllowReg25007Result.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/MatAllowRegSel25008Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Medical3503Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Medical3505Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Medical3505Result.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Medical3506Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Medical3507Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Medical3508Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Medical3508Result.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/MedicalDirectory3301ListParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/MedicalDirectory3301Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/MedicalDirectory3302Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/MedicalInventory3501Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/MedicalInventory3502Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/MedicalInventory3511Output.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/MedicalInventory3511Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/MedicalInventory3512Output.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/MedicalInventory3512Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/MedicalInventory3513Output.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/MedicalInventory3513Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/MedicalPurchase3504Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/MedicalTraceNoDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/PatientInfoDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/PaymentDecDetailUniAccountDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/PaymentDetailDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/PaymentDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/PaymentInpatientDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/PaymentSettleDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/PersBirthApprovalCnl25004Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/PersBirthApprovalSel25005Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/PersBirthRecord25003Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/PersChrDis2503Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/PersChrDisCxl2504Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/PersDesigPt2505Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/PersDesigPtCxl2506Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/PersMedApprovalCnl25006Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/PersMedRecord25001Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/PersMedSelect25002Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/PersMedSelect25002Result.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/PersUnintInj2507Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/PrePaymentDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Result.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/ResultBody.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Settlement3201DetailDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Settlement3201Dto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Settlement3201WebParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Settlement3202Dto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Settlement3202WebParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Settlement3209AWebParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Sign.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Sign1101Param.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Sign9001Result.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/SupplyItemDetail3503Dto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/ThreePartPayDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/VeriPrescriptionDetailInfoDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/VeriPrescriptionInfoDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/VeriPrescriptionParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2301InputFeeDetail.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2301InputFeeDetailModel.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2301OutputResult.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2302InpatientParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2302InputInpatient.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2303InputInpatient.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2303OutputSetInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2304InputExpContent.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2304InputInpatient.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2304OutputSetlInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2305InputInpatient.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2305OutputSetlInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2401InputInpatientDiseInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2401InputInpatientMdtrtInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2401InputInpatientTrumContent.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2402InputInpatientDiseInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2402InputInpatientDscgInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2402InputParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2403InputAdmInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2403InputDiseInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2403InputMdtrtGrpContent.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2403InputParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2403InputTrumContent.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2404InputInpatient.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2405InputInpatient.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb2601InputParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb3101AdapterEncounterDiagnoseInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb3101AdapterEncounterPatientInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb3101AdapterOrderInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb3101InputData.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb3101InputFsiDiagnoseDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb3101InputFsiEncounterDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb3101InputFsiOperationDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb3101InputFsiOrderDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb3101InputPatientDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb3101OutputJudgeResultDetailDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb3101OutputResult.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb3103InputData.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb3103InputWarn.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4101AAdapterSettleInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4101AInputBldinfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4101AInputData.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4101AInputDiseinfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4101AInputIcuinfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4101AInputIteminfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4101AInputOprninfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4101AInputOpspdiseinfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4101AInputSetlinfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4101AOutputData.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4101InputData.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4101InputDiseinfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4101InputIcuinfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4101InputIteminfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4101InputOprninfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4101InputOpspdiseinfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4101InputPayinfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4101InputSetlinfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4102InputStastInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4104InputDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4401InputBaseInfoDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4401InputDiseInfoDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4401InputDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4401InputIcuInfoDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb4401InputOprnInfoDto.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb5205InputSpecialDisease.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/Yb5205OutputSpecialDisease.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/dto/extData.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/PriorityType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbChrgitmLv.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbClrStas.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbClrType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbClrWay.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbDiagType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbDoctorTitle.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbDrordBhvr.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbDrordType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbDrugDosform.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbDrugMedWay.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbDspoWay.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbEncounterClass.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbEncounterZyStatus.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbGender.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbHiFeesetlType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbHospApprFlag.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbIdDocumentType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbInOutDiagType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbInsuType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbInvChgType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbInvDataType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbIptDiseTypeCode.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbListType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbMatnStas.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbMdcsType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbMdtrtCertType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbMedChrgItmType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbMedMdtrtType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbMedType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbMedinsLv.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbMedinsType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbPayLoc.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbPayment.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbPharmacistTitle.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbPrescriptionItemType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbPrescriptionStatus.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbPsnCertType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbPsnSetlWay.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbRxFlag.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbRxItemTypeCode.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbTrigScen.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbUsedFrqu.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/enums/YbWarnType.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/ClinicPreSettleMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/ClinicSettleMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/ClinicUnRegMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/ClinicUnSettleMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/DayEndMedicalInsuranceSettlementMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/DirectoryCheckRecordMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/FinancialApplyRecordMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/FinancialReconcileRecordMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/InpatientDischargeMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/InpatientFeeDetailMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/InpatientPreSettleMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/InpatientRegInfoUpdateRecordeMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/InpatientRegMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/InpatientSettleMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/InventoryChangeRecordMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/InventoryCheckRecordMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/InventoryDelRecordMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/InventoryPurchaseRecordMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/InventoryPurchaseReturnRecordMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/InventorySaleRecordMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/InventorySaleReturnRecordMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/MedicalInsuranceMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/PerinfoMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/RegMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/mapper/SignMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/model/CancelRegPaymentModel.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/model/Clinic2207OrderModel.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/model/Clinic2207OrderParam.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/model/OutpatientRegistrationModel.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IClinicPreSettleService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IClinicSettleService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IClinicUnRegService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IClinicUnSettleService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IDayEndMedicalInsuranceSettlementService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IDirectoryCheckRecordService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IFinancialApplyRecordService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IFinancialReconcileRecordService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IInpatientDischargeService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IInpatientFeeDetailService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IInpatientPreSettleService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IInpatientRegInfoUpdateRecordeService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IInpatientRegService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IInpatientSettleService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IInventoryChangeRecordService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IInventoryCheckRecordService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IInventoryDelRecordService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IInventoryPurchaseRecordService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IInventoryPurchaseReturnRecordService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IInventorySaleRecordService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IInventorySaleReturnRecordService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IPerinfoService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/IRegService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/ISignService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/YbDao.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/YbHttpUtils.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/YbManager.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/ClinicPreSettleServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/ClinicSettleServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/ClinicUnRegServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/ClinicUnSettleServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/DayEndMedicalInsuranceSettlementServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/DirectoryCheckRecordServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/FinancialApplyRecordServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/FinancialReconcileRecordServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/InpatientDischargeServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/InpatientFeeDetailServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/InpatientPreSettleServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/InpatientRegInfoUpdateRecordeServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/InpatientRegServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/InpatientSettleServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/InventoryChangeRecordServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/InventoryCheckRecordServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/InventoryDelRecordServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/InventoryPurchaseRecordServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/InventoryPurchaseReturnRecordServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/InventorySaleRecordServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/InventorySaleReturnRecordServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/PerinfoServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/RegServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/service/impl/SignServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/util/CommonConstant.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/yb/util/YbParamBuilderUtil.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/domain/CatalogDrugInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/domain/CatalogDrugInfoUsual.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/domain/CatalogMedicalConsumables.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/domain/CatalogMedicalHerbInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/domain/CatalogMedicalService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/domain/CatalogSpecialDisease.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/domain/CatalogSpecialInsuranceDisease.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/domain/CatalogSurgeryStandardDirectory.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/domain/CatalogWesternDisease.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/domain/CatalogZyDiseaseDiagnosis.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/domain/CatalogZySettleUp.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/domain/CatalogZySyndrome.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/mapper/CatalogDrugInfoMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/mapper/CatalogDrugInfoUsualMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/mapper/CatalogMedicalConsumablesMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/mapper/CatalogMedicalHerbInfoMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/mapper/CatalogMedicalServiceMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/mapper/CatalogSpecialDiseaseMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/mapper/CatalogSpecialInsuranceDiseaseMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/mapper/CatalogSurgeryStandardDirectoryMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/mapper/CatalogWesternDiseaseMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/mapper/CatalogZyDiseaseDiagnosisMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/mapper/CatalogZySyndromeMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/ICatalogDrugInfoService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/ICatalogDrugInfoUsualService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/ICatalogMedicalConsumablesService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/ICatalogMedicalHerbInfoService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/ICatalogMedicalServiceService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/ICatalogSpecialDiseaseService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/ICatalogSpecialInsuranceDiseaseService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/ICatalogSurgeryStandardDirectoryService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/ICatalogWesternDiseaseService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/ICatalogZyDiseaseDiagnosisService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/ICatalogZySyndromeService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/impl/CatalogDrugInfoServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/impl/CatalogDrugInfoUsualServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/impl/CatalogMedicalConsumablesServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/impl/CatalogMedicalHerbInfoServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/impl/CatalogMedicalServiceServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/impl/CatalogSpecialDiseaseServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/impl/CatalogSpecialInsuranceDiseaseServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/impl/CatalogSurgeryStandardDirectoryServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/impl/CatalogWesternDiseaseServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/impl/CatalogZyDiseaseDiagnosisServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybcatalog/service/impl/CatalogZySyndromeServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/ElepMedresultDetail.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/ElepMedresultInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/ElepMedresultInput.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/ElepQuerDiagnosisInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/ElepQuerPrescriptionDetail.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/ElepQuerPrescriptionInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/ElepQuerPrescriptionInput.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/ElepQuerVisitInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/ElepRevokeInput.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/ElepRevokeOutput.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/ElepSignatureInput.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/ElepSignatureOutput.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/ElepUploadInput.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/ElepUploadOutput.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/ElepVeriDiagnosisInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/ElepVeriPrescriptionDetail.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/ElepVeriPrescriptionInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/ElepVeriPrescriptionOutput.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/ElepVeriVisitInfo.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/InformationInquiry.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/MedicationResultInquiry.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/PreCheckPrescription.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/domain/QueryPrescription.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/mapper/ElepMedresultDetailMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/mapper/ElepMedresultInfoMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/mapper/ElepMedresultInputMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/mapper/ElepQuerDiagnosisInfoMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/mapper/ElepQuerPrescriptionDetailMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/mapper/ElepQuerPrescriptionInfoMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/mapper/ElepQuerPrescriptionInputMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/mapper/ElepQuerVisitInfoMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/mapper/ElepRevokeInputMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/mapper/ElepRevokeOutputMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/mapper/ElepSignatureInputMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/mapper/ElepSignatureOutputMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/mapper/ElepUploadInputMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/mapper/ElepUploadOutputMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/mapper/ElepVeriDiagnosisInfoMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/mapper/ElepVeriPrescriptionDetailMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/mapper/ElepVeriPrescriptionInfoMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/mapper/ElepVeriPrescriptionOutputMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/mapper/ElepVeriVisitInfoMapper.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/IElepMedresultDetailService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/IElepMedresultInfoService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/IElepMedresultInputService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/IElepQuerDiagnosisInfoService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/IElepQuerPrescriptionDetailService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/IElepQuerPrescriptionInfoService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/IElepQuerPrescriptionInputService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/IElepQuerVisitInfoService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/IElepRevokeInputService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/IElepRevokeOutputService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/IElepSignatureInputService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/IElepSignatureOutputService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/IElepUploadInputService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/IElepUploadOutputService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/IElepVeriDiagnosisInfoService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/IElepVeriPrescriptionDetailService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/IElepVeriPrescriptionInfoService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/IElepVeriPrescriptionOutputService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/IElepVeriVisitInfoService.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/impl/ElepMedresultDetailServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/impl/ElepMedresultInfoServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/impl/ElepMedresultInputServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/impl/ElepQuerDiagnosisInfoServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/impl/ElepQuerPrescriptionDetailServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/impl/ElepQuerPrescriptionInfoServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/impl/ElepQuerPrescriptionInputServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/impl/ElepQuerVisitInfoServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/impl/ElepRevokeInputServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/impl/ElepRevokeOutputServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/impl/ElepSignatureInputServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/impl/ElepSignatureOutputServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/impl/ElepUploadInputServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/impl/ElepUploadOutputServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/impl/ElepVeriDiagnosisInfoServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/impl/ElepVeriPrescriptionDetailServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/impl/ElepVeriPrescriptionInfoServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/impl/ElepVeriPrescriptionOutputServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-yb/src/main/java/com/healthlink/his/ybelep/service/impl/ElepVeriVisitInfoServiceImpl.java diff --git a/MD/architecture/AI_CAPABILITY_PLAN.md b/MD/architecture/AI_CAPABILITY_PLAN.md new file mode 100644 index 000000000..6c3c9ccbf --- /dev/null +++ b/MD/architecture/AI_CAPABILITY_PLAN.md @@ -0,0 +1,121 @@ +# HealthLink-HIS AI能力升级计划 + +> **文档类型**: 技术方案 +> **版本**: v1.0 +> **日期**: 2026-06-19 + +--- + +## 一、AI能力矩阵 + +| 能力 | 描述 | 技术方案 | 优先级 | 工时 | +|------|------|---------|:------:|:----:| +| CDSS规则引擎 | 疾病-症状-药物规则推理 | 规则引擎+知识图谱 | P0 | 2周 | +| 医疗知识图谱 | 疾病/症状/药物/检查关系图 | 图数据库+Neo4j | P0 | 3周 | +| NLP病历处理 | 自由文本→结构化数据 | NER模型+规则 | P1 | 3周 | +| 影像AI辅助 | CT/MRI辅助诊断 | 深度学习 | P2 | 6周 | +| 智能推荐 | 诊断/处方/检查推荐 | 协同过滤+ML | P2 | 4周 | +| 语音录入 | 语音转病历 | ASR+NLP | P2 | 2周 | + +--- + +## 二、Phase 1: CDSS+知识图谱(6周) + +### Week 1-2: CDSS规则引擎 +| 任务 | 描述 | 交付物 | +|------|------|--------| +| 1.1 规则数据模型 | 扩展cdss_rule表 | 数据库迁移 | +| 1.2 条件解析器 | AND/OR/比较运算符 | ConditionParser | +| 1.3 规则执行引擎 | 批量评估+告警 | RuleEngine | +| 1.4 规则管理界面 | 规则CRUD+测试 | RuleManagement.vue | + +### Week 3-4: 医疗知识图谱 +| 任务 | 描述 | 交付物 | +|------|------|--------| +| 3.1 实体定义 | 疾病/症状/药物/检查 | Entity设计 | +| 3.2 关系定义 | 导致/治疗/禁忌 | Relation设计 | +| 3.3 数据导入 | ICD-10/药品目录 | ImportService | +| 3.4 图谱查询 | 实体关系查询 | QueryService | + +### Week 5-6: CDSS集成 +| 任务 | 描述 | 交付物 | +|------|------|--------| +| 5.1 诊断推荐 | 基于症状推荐诊断 | DiagnosisSuggest.vue | +| 5.2 用药审查 | 药物相互作用+过敏 | MedicationReview.vue | +| 5.3 检查推荐 | 基于诊断推荐检查 | ExamRecommend.vue | +| 5.4 集成测试 | 全流程验证 | 测试报告 | + +--- + +## 三、Phase 2: NLP+影像AI(9周) + +### Week 7-9: NLP病历处理 +| 任务 | 描述 | 交付物 | +|------|------|--------| +| 7.1 文本预处理 | 分词+去停用词 | TextPreprocessor | +| 7.2 命名实体识别 | 疾病/症状/药物 | NERModel | +| 7.3 关系抽取 | 实体关系提取 | RelationExtractor | +| 7.4 结构化输出 | 文本→结构化 | StructuredOutput | +| 8.1 关键词提取 | 病历关键词 | KeywordExtractor | +| 8.2 病历摘要 | 自动生成摘要 | SummaryGenerator | + +### Week 10-12: 影像AI +| 任务 | 描述 | 交付物 | +|------|------|--------| +| 10.1 数据标注 | CT/MRI标注 | 标注数据集 | +| 10.2 模型训练 | 深度学习 | TrainedModel | +| 10.3 模型优化 | 精度+推理加速 | OptimizedModel | +| 11.1 API服务 | 影像AI推理API | AiApiService | +| 11.2 PACS集成 | AI结果集成 | PACSIntegration | +| 11.3 测试验证 | 全流程测试 | 测试报告 | + +--- + +## 四、Phase 3: 智能推荐+语音(4周) + +### Week 13-14: 智能推荐 +| 任务 | 描述 | 交付物 | +|------|------|--------| +| 13.1 诊断推荐 | 症状+病史→诊断 | DiagnosisRecommend | +| 13.2 处方推荐 | 诊断→用药方案 | PrescriptionRecommend | +| 13.3 检查推荐 | 诊断→检查项目 | ExamRecommend | + +### Week 15-16: 语音录入 +| 任务 | 描述 | 交付物 | +|------|------|--------| +| 15.1 ASR集成 | 语音识别API | AsrService | +| 15.2 语音转病历 | 语音→结构化 | SpeechToEmr | +| 15.3 语音查房 | 语音查询 | SpeechQuery | + +--- + +## 五、技术架构 + +``` +┌─────────────────────────────────────────────────┐ +│ AI服务层 │ +├─────────┬─────────┬─────────┬─────────┬─────────┤ +│ CDSS │ NLP │ 影像AI │ 推荐引擎 │ 语音ASR │ +├─────────┴─────────┴─────────┴─────────┴─────────┤ +│ 知识图谱(Neo4j) │ +├─────────────────────────────────────────────────┤ +│ 数据仓库(ClickHouse) │ +├─────────────────────────────────────────────────┤ +│ HIS核心业务系统 │ +└─────────────────────────────────────────────────┘ +``` + +--- + +## 六、资源需求 + +| 角色 | 人数 | 说明 | +|------|:----:|------| +| AI工程师 | 3 | 模型训练+API开发 | +| 后端开发 | 2 | 系统集成 | +| 前端开发 | 1 | 界面开发 | +| 数据标注 | 2 | 影像数据标注 | + +--- + +> **文档版本**: v1.0 | **最后更新**: 2026-06-19 diff --git a/MD/architecture/COMPETITOR_COMPARISON.md b/MD/architecture/COMPETITOR_COMPARISON.md new file mode 100644 index 000000000..9784488df --- /dev/null +++ b/MD/architecture/COMPETITOR_COMPARISON.md @@ -0,0 +1,72 @@ +# HealthLink-HIS 竞品对比分析 + +> **文档类型**: 竞争分析 +> **版本**: v1.0 +> **日期**: 2026-06-19 + +--- + +## 一、竞品概况 + +| 维度 | 卫宁健康 | 东软集团 | 创业慧康 | 东华医为 | 为医软件 | +|------|---------|---------|---------|---------|---------| +| 成立 | 1994年 | 1991年 | 2001年 | 2001年 | 2015年 | +| 上市 | 300253 | 600718 | 300451 | 未上市 | 未上市 | +| 三级医院 | 400+ | 300+ | 200+ | 100+ | 50+ | +| 年营收 | ~30亿 | ~20亿 | ~15亿 | ~8亿 | ~3亿 | + +--- + +## 二、技术对比 + +| 维度 | 头部厂商 | HealthLink-HIS | 差距 | +|------|---------|---------------|:----:| +| 微服务 | ✅ Spring Cloud | ⚠️ 单体 | 需升级 | +| 云原生 | ✅ K8s+Docker | ❌ 传统 | 需升级 | +| AI能力 | ✅ CDSS+影像AI+NLP | ⚠️ 基础CDSS | 需增强 | +| 大数据 | ✅ 数据中台+BI | ⚠️ 基础报表 | 需增强 | +| 移动化 | ✅ APP+小程序 | ⚠️ H5版本 | 需增强 | + +--- + +## 三、功能对比 + +| 模块 | 头部厂商 | HealthLink-HIS | 差距 | +|------|---------|---------------|:----:| +| 门诊全流程 | ✅ | ✅ | 持平 | +| 住院全流程 | ✅ | ✅ | 持平 | +| 电子病历 | ✅ AI增强 | ✅ 结构化 | 缺AI | +| LIS/PACS | ✅ 独立产品 | ✅ 已实现 | 持平 | +| 手术麻醉 | ✅ AIMS | ✅ 基础 | 需深化 | +| 护理系统 | ✅ 移动护理 | ⚠️ PC端为主 | 缺移动端 | +| CDSS | ✅ 成熟产品 | ⚠️ 基础规则 | 需深化 | +| 互联网医院 | ✅ 完整产品 | ❌ 缺失 | 需新建 | +| 科研平台 | ✅ 临床科研 | ❌ 缺失 | 需新建 | +| BI决策 | ✅ 数据中台 | ⚠️ 基础报表 | 需增强 | + +--- + +## 四、SWOT分析 + +| 维度 | 内容 | +|------|------| +| **优势(S)** | 技术栈先进、架构灵活、成本低、迭代快 | +| **劣势(W)** | 品牌知名度低、客户案例少、团队规模小、LIS/PACS不成熟 | +| **机会(O)** | 基层医院市场大、信创替代、DRG/DIP改革、AI医疗爆发 | +| **威胁(T)** | 头部厂商价格战、开源HIS竞争、政策变化 | + +--- + +## 五、差异化竞争策略 + +| 策略 | 具体措施 | 预期效果 | +|------|---------|---------| +| **技术领先** | Spring Boot 4+JDK25+微服务 | 差异化技术优势 | +| **成本优势** | 开源+按需付费 | 降低采购门槛 | +| **快速迭代** | 敏捷开发+持续交付 | 快速响应需求 | +| **本地化** | 广西地方特色 | 区域竞争优势 | +| **生态开放** | 开放API+插件机制 | 构建生态壁垒 | + +--- + +> **文档版本**: v1.0 | **最后更新**: 2026-06-19 diff --git a/MD/architecture/DATA_FLOW_AND_UI_OPTIMIZATION_ANALYSIS.md b/MD/architecture/DATA_FLOW_AND_UI_OPTIMIZATION_ANALYSIS.md new file mode 100644 index 000000000..9c6443991 --- /dev/null +++ b/MD/architecture/DATA_FLOW_AND_UI_OPTIMIZATION_ANALYSIS.md @@ -0,0 +1,281 @@ +# 数据流与前端UI优化分析报告 + +> **文档类型**: 分析报告 +> **版本**: v1.0 +> **日期**: 2026-06-20 + +--- + +## 一、三甲医院业务数据流 vs 项目实现对比 + +### 1.1 十大核心流程对比 + +| 业务流程 | 三甲要求 | 项目实现 | 差距 | 优先级 | +|---------|---------|---------|------|--------| +| **门诊流程** | 挂号→候诊→就诊→检查检验→处方→收费→取药→随访 | ✅ 挂号/候诊/就诊/检查/检验/处方/收费/发药 | 随访已实现前端 | ✅ | +| **住院流程** | 入院→医嘱→护理→检查检验→手术→用药→出院→结算→病案 | ✅ 全流程实现 | 数据流已打通 | ✅ | +| **急诊流程** | 急诊挂号→分诊→抢救→留观→会诊→住院/出院 | ⚠️ 基础急诊 | 缺分诊分级/绿色通道 | 🟡 P1 | +| **手术流程** | 术前讨论→手术申请→麻醉评估→手术→术后恢复→病理 | ✅ 术前/申请/麻醉/手术/术后 | 病理送检待完善 | 🟡 P1 | +| **护理流程** | 入院评估→护理计划→医嘱执行→体征→护理记录→交接班 | ✅ 全流程实现 | 数据流已打通 | ✅ | +| **药品流程** | 采购→验收→入库→处方→调配→发药→退药→库存→盘点 | ✅ 全流程实现 | 效期管理待完善 | 🟡 P1 | +| **检验流程** | 申请→采集→送检→检验→审核→报告→危急值→随访 | ✅ 全流程实现 | 危急值链路已打通 | ✅ | +| **检查流程** | 申请→预约→排队→检查→报告→审核→3D重建→图文报告 | ✅ 全流程实现 | 报告反馈链路已新增 | ✅ | +| **病案流程** | 归档→质控→借阅→封存→统计→DRG→上报 | ✅ 全流程实现 | DRG入组已补全 | ✅ | +| **院感流程** | 监测→预警→上报→抗菌药物→消毒供应→统计 | ✅ 全流程实现 | 基本完整 | ✅ | + +### 1.2 数据流链路实现状态 + +| 链路 | 业务场景 | Event | Handler | 状态 | 说明 | +|------|---------|-------|---------|------|------| +| 1 | 门诊→住院诊断同步 | AdmissionSavedEvent | DiagnosisSyncHandler | ✅ | 入院时自动复制门诊诊断 | +| 2 | 医嘱→执行反馈 | OrderExecutedEvent | OrderExecutionFeedbackHandler | ✅ | 执行后记录到EMR | +| 3 | 药品→自动计费 | MedicationDispensedEvent | AutoBillingHandler | ✅ | 发药后自动创建收费项 | +| 4 | 检验→危急值推送 | LabReportPublishedEvent | CriticalValueHandler | ✅ | 危急值自动保存+联动停嘱 | +| 5 | 病案→DRG入组 | DischargeEvent | DrgGroupingHandler | ✅ | 出院后自动DRG分组 | +| 6 | 护理→质控检查 | NursingRecordSavedEvent | NursingQualityHandler | ✅ | 记录后自动质控评分 | +| 7 | 统计→实时推送 | StatisticsPushEvent | StatisticsPushHandler | ✅ | WebSocket推送仪表盘 | +| 8 | 手术→术后恢复 | SurgeryCompletedEvent | PostSurgeryRecoveryHandler | ✅ | 手术后生成护理计划 | +| 9 | 检查→报告→医嘱 | ExamReportPublishedEvent | ExamReportFeedbackHandler | ✅ | 报告后关联医嘱状态 | +| 10 | 入院评估→护理计划 | AdmissionAssessmentCompletedEvent | NursingPlanAutoGenerateHandler | ✅ | 评估后生成护理计划 | + +### 1.3 缺失的业务链路 + +| # | 链路 | 业务价值 | 三甲依据 | 优先级 | +|---|------|---------|---------|--------| +| 1 | **手术→病理送检** | 手术后标本自动送检,病理闭环 | 手术闭环/肿瘤诊疗 | 🔴 P0 | +| 2 | **检验→临床决策** | 检验结果联动用药调整 | 合理用药评审 | 🟡 P1 | +| 3 | **药品→库存→预警** | 库存不足时联动处方拦截 | 药品管理规范 | 🟡 P1 | +| 4 | **护理→交接班** | 交接班完成率统计 | 护理质量指标 | 🟡 P1 | +| 5 | **会诊→时限监控** | 会诊超时预警 | 会诊制度 | 🟡 P1 | + +--- + +## 二、前端数据展示与操作界面分析 + +### 2.1 现有页面状态 + +| 模块 | 前端路径 | 状态 | 优化点 | +|------|---------|------|--------| +| **危急值管理** | `criticalvalue/pending/` | ✅ | 缺实时推送通知 | +| **护理质量** | `nursingquality/` | ✅ | 缺图表展示 | +| **仪表盘** | `dashboard/` | ✅ | 缺实时数据推送 | +| **随访管理** | `followup/` | ✅ | 已有plan/task/record/survey/complaint | +| **DRG分析** | `drganalysis/` | ✅ | 缺费用预警 | +| **护理评估** | `nursing/` | ✅ | 已实现5种量表 | + +### 2.2 前端优化建议 + +#### 2.2.1 危急值管理页面优化 + +**当前状态:** 基础表格展示+手动操作 + +**优化方向:** +1. **实时推送通知** — 接收WebSocket推送,新危急值自动弹窗提醒 +2. **声音提醒** — 危急值到达时播放提示音 +3. **快捷处理** — 一键确认+预设处理模板 +4. **超时倒计时** — 可视化显示超时剩余时间 + +```vue + + +``` + +#### 2.2.2 仪表盘实时数据优化 + +**当前状态:** 静态数据展示 + +**优化方向:** +1. **WebSocket实时推送** — 关键指标实时更新 +2. **数据趋势图** — 添加折线图/柱状图展示趋势 +3. **预警卡片** — 高亮显示异常指标 +4. **快捷入口** — 根据用户角色显示常用功能 + +```vue + + +``` + +#### 2.2.3 护理质量图表展示 + +**当前状态:** 表格数据展示 + +**优化方向:** +1. **达标率趋势图** — 折线图展示月度达标率变化 +2. **科室对比图** — 柱状图展示各科室达标情况 +3. **指标分布图** — 饼图展示各类指标占比 +4. **预警提示** — 未达标指标高亮提醒 + +#### 2.2.4 DRG分析页面优化 + +**当前状态:** 基础分析 + +**优化方向:** +1. **费用预警** — 超支病例自动标记 +2. **入组成功率** — 展示DRG入组成功率趋势 +3. **科室DRG绩效** — 科室维度DRG绩效排名 +4. **时间效率** — 平均住院日 vs DRG标准对比 + +--- + +## 三、数据流驱动的UI优化方案 + +### 3.1 基于Chain 7(统计推送)的实时仪表盘 + +```javascript +// 前端WebSocket连接管理 +class DashboardWebSocket { + constructor() { + this.ws = null + this.handlers = new Map() + } + + connect() { + this.ws = new WebSocket('ws://localhost:18082/ws/dashboard') + this.ws.onmessage = (event) => { + const data = JSON.parse(event.data) + const handler = this.handlers.get(data.type) + if (handler) handler(data) + } + } + + subscribe(type, handler) { + this.handlers.set(type, handler) + } +} + +// 订阅统计推送 +const ws = new DashboardWebSocket() +ws.connect() +ws.subscribe('STATISTICS', (data) => { + // 实时更新仪表盘数据 + updateDashboardStats(data) +}) +ws.subscribe('CRITICAL_VALUE', (data) => { + // 弹窗提醒危急值 + showCriticalValueAlert(data) +}) +``` + +### 3.2 基于Chain 4(危急值)的实时通知 + +```javascript +// 危急值通知组件 +const CriticalValueNotify = { + setup() { + const pendingCount = ref(0) + const showNotification = ref(false) + + // WebSocket监听危急值推送 + onMounted(() => { + ws.subscribe('CRITICAL_VALUE', (data) => { + pendingCount.value++ + showNotification.value = true + // 播放提示音 + playAlertSound() + // 浏览器通知 + if (Notification.permission === 'granted') { + new Notification('危急值提醒', { + body: `${data.patientName} - ${data.itemName}: ${data.resultValue}` + }) + } + }) + }) + + return { pendingCount, showNotification } + } +} +``` + +### 3.3 基于Chain 10(护理计划)的智能推荐 + +```javascript +// 护理计划智能推荐 +const NursingPlanRecommend = { + methods: { + async generatePlan(assessment) { + // 根据入院评估结果推荐护理计划 + const riskLevel = assessment.riskLevel + const plans = await fetchNursingPlanTemplates(riskLevel) + + return { + highRisk: plans.filter(p => p.riskLevel === 'HIGH'), + mediumRisk: plans.filter(p => p.riskLevel === 'MEDIUM'), + lowRisk: plans.filter(p => p.riskLevel === 'LOW') + } + } + } +} +``` + +--- + +## 四、实施优先级 + +### Phase 1: 实时通知 (1周) +1. 危急值WebSocket推送+弹窗提醒 +2. 仪表盘实时数据更新 +3. 浏览器通知集成 + +### Phase 2: 图表展示 (1周) +1. 护理质量趋势图 +2. DRG分析图表 +3. 科室对比图 + +### Phase 3: 智能推荐 (1周) +1. 护理计划智能推荐 +2. DRG费用预警 +3. 库存预警联动 + +--- + +## 五、验证清单 + +| 验证项 | 命令 | 预期结果 | +|--------|------|---------| +| 前端编译 | `npm run build:dev` | BUILD SUCCESS | +| WebSocket连接 | 浏览器控制台 | 连接成功 | +| 实时推送 | 触发危急值 | 弹窗提醒 | +| 图表展示 | 访问护理质量页 | 图表正常渲染 | + +--- + +> **文档版本**: v1.0 | **最后更新**: 2026-06-20 diff --git a/MD/architecture/DATA_FLOW_DETAILED_DESIGN.md b/MD/architecture/DATA_FLOW_DETAILED_DESIGN.md new file mode 100644 index 000000000..666a9a244 --- /dev/null +++ b/MD/architecture/DATA_FLOW_DETAILED_DESIGN.md @@ -0,0 +1,281 @@ +# HealthLink-HIS 数据流优化详细设计 + +> **文档类型**: 详细设计 +> **版本**: v1.0 +> **日期**: 2026-06-19 + +--- + +## 一、数据流架构总览 + +``` +┌─────────────────────────────────────────────────────────────────────┐ +│ 数据流架构全景 │ +├─────────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────────────────────────────────────────────────┐ │ +│ │ 事件驱动层 (Event Bus) │ │ +│ │ RabbitMQ + Spring Event + WebSocket │ │ +│ └─────────────────────────────────────────────────────────────┘ │ +│ ↓ │ +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ +│ │ 诊断同步 │ │ 执行反馈 │ │ 计费触发 │ │ 危急推送 │ │ +│ │ 事件 │ │ 事件 │ │ 事件 │ │ 事件 │ │ +│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ +│ │ │ │ │ │ +│ ┌────▼─────────────▼─────────────▼─────────────▼────────────┐ │ +│ │ 业务处理层 │ │ +│ │ 门诊 → 住院 → 护理 → 药品 → 检验 → 病案 → 统计 │ │ +│ └──────────────────────────────────────────────────────────┘ │ +│ ↓ │ +│ ┌─────────────────────────────────────────────────────────────┐ │ +│ │ 数据存储层 │ │ +│ │ PostgreSQL (OLTP) + ClickHouse (OLAP) │ │ +│ └─────────────────────────────────────────────────────────────┘ │ +└─────────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 二、7条关键链路详细设计 + +### 链路1: 门诊→住院诊断同步 + +#### 业务流程 +``` +门诊诊断 → 入院申请 → 入院登记 → 自动复制诊断 → 住院病历 +``` + +#### 技术实现 +| 组件 | 实现 | +|------|------| +| 触发时机 | 入院登记保存后 | +| 事件 | `InpatientAdmissionEvent` | +| 处理器 | `DiagnosisSyncHandler` | +| 数据流 | adm_encounter_diagnosis → 复制到住院encounter | + +#### 代码位置 +- 事件发布: `InpatientManageAppServiceImpl.saveAdmission()` +- 事件处理: `DiagnosisSyncHandler.handleAdmissionEvent()` +- 数据复制: `EncounterDiagnosisService.copyFromOutpatient()` + +--- + +### 链路2: 医嘱→护理执行反馈 + +#### 业务流程 +``` +医嘱开立 → 护士执行 → 执行结果 → 通知医生 +``` + +#### 技术实现 +| 组件 | 实现 | +|------|------| +| 触发时机 | 护士执行医嘱后 | +| 事件 | `OrderExecutionEvent` | +| 处理器 | `OrderExecutionFeedbackHandler` | +| 通知方式 | WebSocket + 消息推送 | + +#### 代码位置 +- 事件发布: `NursingExecutionController.executeOrder()` +- 事件处理: `OrderExecutionFeedbackHandler.handleExecutionEvent()` +- 通知推送: `MessageService.pushToDoctor()` + +--- + +### 链路3: 药品→发药自动计费 + +#### 业务流程 +``` +处方开具 → 药品审核 → 发药确认 → 自动计费 → 库存更新 +``` + +#### 技术实现 +| 组件 | 实现 | +|------|------| +| 触发时机 | 发药确认后 | +| 事件 | `MedicationDispensedEvent` | +| 处理器 | `AutoBillingHandler` | +| 计费逻辑 | 根据药品单价×数量生成费用记录 | + +#### 代码位置 +- 事件发布: `PharmacyDispensaryService.dispense()` +- 事件处理: `AutoBillingHandler.handleDispensedEvent()` +- 计费生成: `ChargeService.createMedicationCharge()` + +--- + +### 链路4: 检验→危急值推送 + +#### 业务流程 +``` +检验报告 → 危急值识别 → 推送通知 → 医生确认 +``` + +#### 技术实现 +| 组件 | 实现 | +|------|------| +| 触发时机 | 检验报告发布时 | +| 事件 | `LabReportPublishedEvent` | +| 处理器 | `CriticalValueHandler` | +| 推送方式 | WebSocket + APP推送 | + +#### 代码位置 +- 事件发布: `LabReportService.publishReport()` +- 事件处理: `CriticalValueHandler.handleReportEvent()` +- 推送: `MessageService.pushCriticalValue()` + +--- + +### 链路5: 病案→DRG自动入组 + +#### 业务流程 +``` +出院小结 → 首页生成 → DRG入组 → 医保上传 +``` + +#### 技术实现 +| 组件 | 实现 | +|------|------| +| 触发时机 | 出院结算后 | +| 事件 | `DischargeCompletedEvent` | +| 处理器 | `DrgGroupingHandler` | +| 入组逻辑 | 主诊断+主手术→DRG分组 | + +#### 代码位置 +- 事件发布: `InpatientChargeService.discharge()` +- 事件处理: `DrgGroupingHandler.handleDischargeEvent()` +- DRG入组: `DrgGroupingService.group()` + +--- + +### 链路6: 护理→质控自动触发 + +#### 业务流程 +``` +护理记录 → 质控规则匹配 → 质控评分 → 指标汇总 +``` + +#### 技术实现 +| 组件 | 实现 | +|------|------| +| 触发时机 | 护理记录保存后 | +| 事件 | `NursingRecordSavedEvent` | +| 处理器 | `NursingQualityHandler` | +| 质控规则 | 基于护理文书规范的检查规则 | + +#### 代码位置 +- 事件发布: `NursingRecordService.saveRecord()` +- 事件处理: `NursingQualityHandler.handleRecordEvent()` +- 指标汇总: `NursingQualityIndicatorService.aggDaily()` + +--- + +### 链路7: 统计→实时推送 + +#### 业务流程 +``` +数据更新 → 统计计算 → WebSocket推送 → 前端刷新 +``` + +#### 技术实现 +| 组件 | 实现 | +|------|------| +| 触发时机 | 关键业务操作后 | +| 事件 | 多种业务事件 | +| 处理器 | `StatisticsPushHandler` | +| 推送方式 | WebSocket | + +#### 代码位置 +- 事件监听: `StatisticsPushHandler`监听多种事件 +- 统计计算: `StatisticsService.calculateRealtime()` +- 推送: `WebSocketService.pushToDashboard()` + +--- + +## 三、事件驱动架构设计 + +### 3.1 事件定义 + +```java +// 业务事件基类 +public abstract class BusinessEvent { + private String eventId; + private Date eventTime; + private String eventType; + private Long tenantId; +} + +// 具体事件 +public class InpatientAdmissionEvent extends BusinessEvent { ... } +public class OrderExecutionEvent extends BusinessEvent { ... } +public class MedicationDispensedEvent extends BusinessEvent { ... } +public class LabReportPublishedEvent extends BusinessEvent { ... } +public class DischargeCompletedEvent extends BusinessEvent { ... } +public class NursingRecordSavedEvent extends BusinessEvent { ... } +``` + +### 3.2 事件发布 + +```java +// 在业务Service中发布事件 +@Service +public class InpatientManageAppServiceImpl { + @Autowired + private ApplicationEventPublisher eventPublisher; + + public void saveAdmission(InpatientAdmission admission) { + // 保存入院记录 + admissionService.save(admission); + // 发布事件 + eventPublisher.publishEvent(new InpatientAdmissionEvent(admission)); + } +} +``` + +### 3.3 事件处理 + +```java +// 事件处理器 +@Component +public class DiagnosisSyncHandler { + @EventListener + public void handleAdmissionEvent(InpatientAdmissionEvent event) { + // 复制门诊诊断到住院 + diagnosisService.copyFromOutpatient(event.getEncounterId()); + } +} +``` + +--- + +## 四、实施计划 + +| 阶段 | 时间 | 链路 | 工时 | +|------|------|------|:----:| +| Phase 1 | Week 1 | 门诊→住院诊断同步 | 2天 | +| Phase 1 | Week 1 | 医嘱→护理执行反馈 | 2天 | +| Phase 1 | Week 2 | 药品→发药自动计费 | 2天 | +| Phase 1 | Week 2 | 检验→危急值推送 | 2天 | +| Phase 2 | Week 3 | 病案→DRG自动入组 | 3天 | +| Phase 2 | Week 3 | 护理→质控自动触发 | 2天 | +| Phase 2 | Week 4 | 统计→实时推送 | 3天 | +| **合计** | **4周** | **7条链路** | **14天** | + +--- + +## 五、验证标准 + +| 链路 | 验证方式 | 通过标准 | +|------|---------|---------| +| 门诊→住院 | 创建住院→检查诊断 | 诊断自动复制 | +| 医嘱→护理 | 执行医嘱→检查通知 | 通知自动发送 | +| 药品→计费 | 发药→检查费用 | 费用自动记录 | +| 检验→危急值 | 发布报告→检查推送 | 推送自动发送 | +| 病案→DRG | 出院→检查入组 | DRG自动入组 | +| 护理→质控 | 保存记录→检查评分 | 评分自动计算 | +| 统计→推送 | 业务操作→检查推送 | 数据实时推送 | + +--- + +> **文档版本**: v1.0 | **最后更新**: 2026-06-19 diff --git a/MD/architecture/DATA_FLOW_OPTIMIZATION.md b/MD/architecture/DATA_FLOW_OPTIMIZATION.md new file mode 100644 index 000000000..68c28f58d --- /dev/null +++ b/MD/architecture/DATA_FLOW_OPTIMIZATION.md @@ -0,0 +1,101 @@ +# HealthLink-HIS 数据流打通优化方案 + +> **文档类型**: 技术方案 +> **版本**: v1.0 +> **日期**: 2026-06-19 + +--- + +## 一、7条关键数据链路 + +### 链路1: 门诊→住院(转科转院) + +| 环节 | 当前 | 优化 | +|------|------|------| +| 门诊诊断 | ✅ | - | +| 入院登记 | ✅ | - | +| **诊断同步** | ❌ | 入院时自动复制门诊诊断 | +| **病历同步** | ❌ | 建立病历关联关系 | + +### 链路2: 医嘱→护理→执行 + +| 环节 | 当前 | 优化 | +|------|------|------| +| 医嘱开立 | ✅ | - | +| **执行反馈** | ⚠️ | 执行后自动通知医生 | +| **执行统计** | ❌ | 添加执行率统计 | +| **医嘱停止** | ⚠️ | 停止后通知护士 | + +### 链路3: 药品→发药→计费 + +| 环节 | 当前 | 优化 | +|------|------|------| +| 处方开具 | ✅ | - | +| **发药计费** | ⚠️ | 发药后自动计费 | +| **退药退费** | ⚠️ | 退药后自动退费 | +| **库存同步** | ⚠️ | 实时库存更新 | + +### 链路4: 检验→报告→医嘱 + +| 环节 | 当前 | 优化 | +|------|------|------| +| 检验申请 | ✅ | - | +| **结果回传** | ⚠️ | 结果自动关联医嘱 | +| **危急值推送** | ⚠️ | 自动推送通知 | + +### 链路5: 病案→DRG→医保 + +| 环节 | 当前 | 优化 | +|------|------|------| +| 出院小结 | ✅ | - | +| **首页生成** | ⚠️ | 出院自动生成首页 | +| **DRG入组** | ⚠️ | 出院时自动入组 | +| **医保上传** | ⚠️ | 入组后自动上传 | + +### 链路6: 护理→质控→统计 + +| 环节 | 当前 | 优化 | +|------|------|------| +| 护理记录 | ✅ | - | +| **质控触发** | ⚠️ | 记录时自动质控 | +| **指标采集** | ⚠️ | 每日自动汇总 | + +### 链路7: 统计→决策→管理 + +| 环节 | 当前 | 优化 | +|------|------|------| +| 数据采集 | ⚠️ | 扩展采集维度 | +| **实时推送** | ❌ | WebSocket推送 | + +--- + +## 二、实施计划 + +### Phase 1: 核心链路(2周) + +| 任务 | 工时 | +|------|:----:| +| 门诊→住院诊断同步 | 2天 | +| 医嘱→护理执行反馈 | 2天 | +| 药品→发药自动计费 | 2天 | +| 检验→危急值推送 | 2天 | + +### Phase 2: 业务闭环(2周) + +| 任务 | 工时 | +|------|:----:| +| 病案→DRG自动入组 | 3天 | +| 护理→质控自动触发 | 2天 | +| 统计→实时推送 | 3天 | + +### Phase 3: 数据分析(2周) + +| 任务 | 工时 | +|------|:----:| +| 多维分析 | 3天 | +| 报表模板 | 2天 | +| 数据导出 | 2天 | + +--- + +> **文档版本**: v1.0 | **最后更新**: 2026-06-19 diff --git a/MD/architecture/DATA_FLOW_OPTIMIZATION_PLAN.md b/MD/architecture/DATA_FLOW_OPTIMIZATION_PLAN.md new file mode 100644 index 000000000..57459c96b --- /dev/null +++ b/MD/architecture/DATA_FLOW_OPTIMIZATION_PLAN.md @@ -0,0 +1,711 @@ +# 数据流优化实施计划 + +> **For agentic workers:** REQUIRED SUB-SKILL: Use compose:subagent (recommended) or compose:execute to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** 完善现有7条链路的TODO实现、新增业务链路、提升可靠性、添加链路间联动 + +**Architecture:** 基于Spring Event机制,补齐Handler中的TODO逻辑,新增手术→术后恢复等链路,为所有Handler添加重试和监控,实现链路间事件级联 + +**Tech Stack:** Spring Boot 4.0.6 + Spring Event + MyBatis-Plus + PostgreSQL + +--- + +## Task 1: 补全Chain 5 — DRG入组引擎调用 + +**Files:** +- Modify: `healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/handler/DrgGroupingHandler.java` +- Create: `healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/service/DrgGroupingService.java` +- Create: `healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/service/impl/DrgGroupingServiceImpl.java` + +- [ ] **Step 1: 创建DRG分组Service接口** + +```java +package com.healthlink.his.web.dataflow.service; + +import java.util.Map; + +public interface DrgGroupingService { + Map group(Long encounterId, Long patientId); +} +``` + +- [ ] **Step 2: 创建DRG分组Service实现** + +```java +package com.healthlink.his.web.dataflow.service.impl; + +import com.healthlink.his.web.dataflow.service.DrgGroupingService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class DrgGroupingServiceImpl implements DrgGroupingService { + + @Override + public Map group(Long encounterId, Long patientId) { + log.info("DRG grouping: encounterId={}, patientId={}", encounterId, patientId); + + Map result = new HashMap<>(); + result.put("encounterId", encounterId); + result.put("patientId", patientId); + result.put("drgCode", "AA1"); // 默认分组 + result.put("drgName", "内科疾病及合并症"); + result.put("weight", 1.2); + result.put("status", "PENDING_REVIEW"); + result.put("message", "DRG入组完成,待质控审核"); + + // TODO: 接入实际DRG分组引擎(如CN-DRG/C-DRG) + log.info("DRG grouping result: encounterId={}, drgCode={}", encounterId, result.get("drgCode")); + return result; + } +} +``` + +- [ ] **Step 3: 修改DrgGroupingHandler注入Service** + +```java +package com.healthlink.his.web.dataflow.handler; + +import com.healthlink.his.web.dataflow.event.DischargeEvent; +import com.healthlink.his.web.dataflow.service.DrgGroupingService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Slf4j +@Component +@RequiredArgsConstructor +public class DrgGroupingHandler { + + private final DrgGroupingService drgGroupingService; + + @Async + @EventListener + public void onDischarge(DischargeEvent event) { + log.info("Chain5 DrgGrouping: encounterId={}, patientId={}", event.getEncounterId(), event.getPatientId()); + try { + Map groupingResult = drgGroupingService.group(event.getEncounterId(), event.getPatientId()); + log.info("Chain5 DrgGrouping: completed, result={}", groupingResult); + } catch (Exception e) { + log.error("Chain5 DrgGrouping failed: encounterId={}", event.getEncounterId(), e); + } + } +} +``` + +- [ ] **Step 4: 编译验证** + +Run: `mvn clean compile -DskipTests -pl healthlink-his-application` +Expected: BUILD SUCCESS + +- [ ] **Step 5: Commit** + +```bash +git add healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/handler/DrgGroupingHandler.java +git add healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/service/DrgGroupingService.java +git add healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/service/impl/DrgGroupingServiceImpl.java +git commit -m "feat(dataflow): 补全Chain5 DRG入组引擎调用" +``` + +--- + +## Task 2: 补全Chain 6 — 护理质控规则检查 + +**Files:** +- Modify: `healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/handler/NursingQualityHandler.java` +- Create: `healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/service/NursingQualityCheckService.java` +- Create: `healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/service/impl/NursingQualityCheckServiceImpl.java` + +- [ ] **Step 1: 创建护理质控Service接口** + +```java +package com.healthlink.his.web.dataflow.service; + +import java.util.Map; + +public interface NursingQualityCheckService { + Map check(Long encounterId, Long patientId, Long recordId); +} +``` + +- [ ] **Step 2: 创建护理质控Service实现** + +```java +package com.healthlink.his.web.dataflow.service.impl; + +import com.healthlink.his.web.dataflow.service.NursingQualityCheckService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class NursingQualityCheckServiceImpl implements NursingQualityCheckService { + + @Override + public Map check(Long encounterId, Long patientId, Long recordId) { + log.info("Nursing quality check: encounterId={}, recordId={}", encounterId, recordId); + + Map result = new HashMap<>(); + result.put("encounterId", encounterId); + result.put("patientId", patientId); + result.put("recordId", recordId); + result.put("score", 95); + result.put("passed", true); + result.put("issues", java.util.Collections.emptyList()); + result.put("status", "PASSED"); + + // TODO: 接入实际质控规则引擎(护理文书规范检查) + log.info("Nursing quality check result: recordId={}, score={}", recordId, result.get("score")); + return result; + } +} +``` + +- [ ] **Step 3: 修改NursingQualityHandler注入Service** + +```java +package com.healthlink.his.web.dataflow.handler; + +import com.healthlink.his.web.dataflow.event.NursingRecordSavedEvent; +import com.healthlink.his.web.dataflow.service.NursingQualityCheckService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Slf4j +@Component +@RequiredArgsConstructor +public class NursingQualityHandler { + + private final NursingQualityCheckService nursingQualityCheckService; + + @Async + @EventListener + public void onNursingRecordSaved(NursingRecordSavedEvent event) { + log.info("Chain6 NursingQuality: encounterId={}, patientId={}, recordId={}", + event.getEncounterId(), event.getPatientId(), event.getRecordId()); + try { + Map qualityResult = nursingQualityCheckService.check( + event.getEncounterId(), event.getPatientId(), event.getRecordId()); + log.info("Chain6 NursingQuality: completed, result={}", qualityResult); + } catch (Exception e) { + log.error("Chain6 NursingQuality failed: recordId={}", event.getRecordId(), e); + } + } +} +``` + +- [ ] **Step 4: 编译验证** + +Run: `mvn clean compile -DskipTests -pl healthlink-his-application` +Expected: BUILD SUCCESS + +- [ ] **Step 5: Commit** + +```bash +git add healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/handler/NursingQualityHandler.java +git add healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/service/NursingQualityCheckService.java +git add healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/service/impl/NursingQualityCheckServiceImpl.java +git commit -m "feat(dataflow): 补全Chain6 护理质控规则检查" +``` + +--- + +## Task 3: 新增Chain 8 — 手术→术后恢复链路 + +**Files:** +- Create: `healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/event/SurgeryCompletedEvent.java` +- Create: `healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/handler/PostSurgeryRecoveryHandler.java` +- Modify: 手术完成保存处发布事件 + +- [ ] **Step 1: 创建手术完成事件** + +```java +package com.healthlink.his.web.dataflow.event; + +import org.springframework.context.ApplicationEvent; +import lombok.Getter; + +@Getter +public class SurgeryCompletedEvent extends ApplicationEvent { + private final Long encounterId; + private final Long patientId; + private final Long surgeryId; + private final String surgeryType; + + public SurgeryCompletedEvent(Object source, Long encounterId, Long patientId, Long surgeryId, String surgeryType) { + super(source); + this.encounterId = encounterId; + this.patientId = patientId; + this.surgeryId = surgeryId; + this.surgeryType = surgeryType; + } +} +``` + +- [ ] **Step 2: 创建术后恢复Handler** + +```java +package com.healthlink.his.web.dataflow.handler; + +import com.healthlink.his.web.dataflow.event.SurgeryCompletedEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Component +public class PostSurgeryRecoveryHandler { + + @Async + @EventListener + public void onSurgeryCompleted(SurgeryCompletedEvent event) { + log.info("Chain8 PostSurgery: encounterId={}, surgeryId={}, type={}", + event.getEncounterId(), event.getSurgeryId(), event.getSurgeryType()); + try { + // 1. 创建术后护理计划 + Map recoveryPlan = new HashMap<>(); + recoveryPlan.put("encounterId", event.getEncounterId()); + recoveryPlan.put("surgeryId", event.getSurgeryId()); + recoveryPlan.put("planType", "POST_SURGERY"); + recoveryPlan.put("status", "ACTIVE"); + + // TODO: 保存术后护理计划到数据库 + + // 2. 生成术后医嘱模板 + // TODO: 根据手术类型生成术后医嘱 + + log.info("Chain8 PostSurgery: recovery plan created for encounterId={}", event.getEncounterId()); + } catch (Exception e) { + log.error("Chain8 PostSurgery failed: surgeryId={}", event.getSurgeryId(), e); + } + } +} +``` + +- [ ] **Step 3: 在手术完成保存处发布事件** + +找到手术保存的AppService,在保存成功后添加事件发布: + +```java +@Autowired +private ApplicationEventPublisher eventPublisher; + +// 在手术保存成功后 +eventPublisher.publishEvent(new SurgeryCompletedEvent(this, encounterId, patientId, surgeryId, surgeryType)); +``` + +- [ ] **Step 4: 编译验证** + +Run: `mvn clean compile -DskipTests -pl healthlink-his-application` +Expected: BUILD SUCCESS + +- [ ] **Step 5: Commit** + +```bash +git add healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/event/SurgeryCompletedEvent.java +git add healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/handler/PostSurgeryRecoveryHandler.java +git commit -m "feat(dataflow): 新增Chain8 手术→术后恢复链路" +``` + +--- + +## Task 4: 新增Chain 9 — 检查→报告→医嘱联动 + +**Files:** +- Create: `healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/event/ExamReportPublishedEvent.java` +- Create: `healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/handler/ExamReportFeedbackHandler.java` + +- [ ] **Step 1: 创建检查报告发布事件** + +```java +package com.healthlink.his.web.dataflow.event; + +import org.springframework.context.ApplicationEvent; +import lombok.Getter; + +@Getter +public class ExamReportPublishedEvent extends ApplicationEvent { + private final Long encounterId; + private final Long patientId; + private final Long reportId; + private final String examType; + private final String findingSummary; + + public ExamReportPublishedEvent(Object source, Long encounterId, Long patientId, Long reportId, String examType, String findingSummary) { + super(source); + this.encounterId = encounterId; + this.patientId = patientId; + this.reportId = reportId; + this.examType = examType; + this.findingSummary = findingSummary; + } +} +``` + +- [ ] **Step 2: 创建检查报告反馈Handler** + +```java +package com.healthlink.his.web.dataflow.handler; + +import com.healthlink.his.web.dataflow.event.ExamReportPublishedEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +public class ExamReportFeedbackHandler { + + @Async + @EventListener + public void onExamReportPublished(ExamReportPublishedEvent event) { + log.info("Chain9 ExamFeedback: encounterId={}, examType={}, reportId={}", + event.getEncounterId(), event.getExamType(), event.getReportId()); + try { + // 1. 将检查结果关联到医嘱 + // TODO: 更新医嘱执行状态 + + // 2. 推送通知给开单医生 + // TODO: WebSocket推送 + + log.info("Chain9 ExamFeedback: feedback recorded for reportId={}", event.getReportId()); + } catch (Exception e) { + log.error("Chain9 ExamFeedback failed: reportId={}", event.getReportId(), e); + } + } +} +``` + +- [ ] **Step 3: 在检查报告保存处发布事件** + +找到检查报告保存的Service,在保存成功后添加事件发布。 + +- [ ] **Step 4: 编译验证** + +Run: `mvn clean compile -DskipTests -pl healthlink-his-application` +Expected: BUILD SUCCESS + +- [ ] **Step 5: Commit** + +```bash +git add healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/event/ExamReportPublishedEvent.java +git add healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/handler/ExamReportFeedbackHandler.java +git commit -m "feat(dataflow): 新增Chain9 检查→报告→医嘱联动" +``` + +--- + +## Task 5: 新增Chain 10 — 入院评估→护理计划自动生成 + +**Files:** +- Create: `healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/event/AdmissionAssessmentCompletedEvent.java` +- Create: `healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/handler/NursingPlanAutoGenerateHandler.java` + +- [ ] **Step 1: 创建入院评估完成事件** + +```java +package com.healthlink.his.web.dataflow.event; + +import org.springframework.context.ApplicationEvent; +import lombok.Getter; + +@Getter +public class AdmissionAssessmentCompletedEvent extends ApplicationEvent { + private final Long encounterId; + private final Long patientId; + private final Long assessmentId; + private final String riskLevel; + + public AdmissionAssessmentCompletedEvent(Object source, Long encounterId, Long patientId, Long assessmentId, String riskLevel) { + super(source); + this.encounterId = encounterId; + this.patientId = patientId; + this.assessmentId = assessmentId; + this.riskLevel = riskLevel; + } +} +``` + +- [ ] **Step 2: 创建护理计划自动生成Handler** + +```java +package com.healthlink.his.web.dataflow.handler; + +import com.healthlink.his.web.dataflow.event.AdmissionAssessmentCompletedEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Component +public class NursingPlanAutoGenerateHandler { + + @Async + @EventListener + public void onAssessmentCompleted(AdmissionAssessmentCompletedEvent event) { + log.info("Chain10 NursingPlan: encounterId={}, riskLevel={}", + event.getEncounterId(), event.getRiskLevel()); + try { + // 根据风险等级生成护理计划 + Map nursingPlan = new HashMap<>(); + nursingPlan.put("encounterId", event.getEncounterId()); + nursingPlan.put("patientId", event.getPatientId()); + nursingPlan.put("assessmentId", event.getAssessmentId()); + nursingPlan.put("riskLevel", event.getRiskLevel()); + nursingPlan.put("status", "ACTIVE"); + + // TODO: 根据风险等级生成具体护理措施 + + log.info("Chain10 NursingPlan: plan generated for encounterId={}", event.getEncounterId()); + } catch (Exception e) { + log.error("Chain10 NursingPlan failed: encounterId={}", event.getEncounterId(), e); + } + } +} +``` + +- [ ] **Step 3: 在入院评估保存处发布事件** + +- [ ] **Step 4: 编译验证** + +Run: `mvn clean compile -DskipTests -pl healthlink-his-application` +Expected: BUILD SUCCESS + +- [ ] **Step 5: Commit** + +```bash +git add healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/event/AdmissionAssessmentCompletedEvent.java +git add healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/handler/NursingPlanAutoGenerateHandler.java +git commit -m "feat(dataflow): 新增Chain10 入院评估→护理计划自动生成" +``` + +--- + +## Task 6: 为所有Handler添加重试机制 + +**Files:** +- Create: `healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/config/EventRetryConfig.java` +- Modify: 所有7个Handler添加重试逻辑 + +- [ ] **Step 1: 创建重试配置类** + +```java +package com.healthlink.his.web.dataflow.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import java.util.concurrent.Executor; + +@Configuration +public class EventRetryConfig { + + @Bean("eventRetryExecutor") + public Executor eventRetryExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(4); + executor.setMaxPoolSize(8); + executor.setQueueCapacity(100); + executor.setThreadNamePrefix("event-retry-"); + executor.initialize(); + return executor; + } +} +``` + +- [ ] **Step 2: 创建重试工具类** + +```java +package com.healthlink.his.web.dataflow.util; + +import lombok.extern.slf4j.Slf4j; +import java.util.function.Supplier; + +@Slf4j +public class EventRetryUtil { + + public static T executeWithRetry(String chainName, Supplier action, int maxRetries) { + Exception lastException = null; + for (int i = 0; i <= maxRetries; i++) { + try { + return action.get(); + } catch (Exception e) { + lastException = e; + log.warn("Chain{} attempt {} failed: {}", chainName, i + 1, e.getMessage()); + if (i < maxRetries) { + try { + Thread.sleep(1000L * (i + 1)); // 指数退避 + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + throw new RuntimeException(ie); + } + } + } + } + throw new RuntimeException("Chain" + chainName + " failed after " + maxRetries + " retries", lastException); + } + + public static void executeVoidWithRetry(String chainName, Runnable action, int maxRetries) { + executeWithRetry(chainName, () -> { action.run(); return null; }, maxRetries); + } +} +``` + +- [ ] **Step 3: 修改DiagnosisSyncHandler添加重试** + +在onAdmissionSaved方法中使用重试工具: + +```java +EventRetryUtil.executeVoidWithRetry("1-DiagnosisSync", () -> { + // 原有逻辑 +}, 3); +``` + +- [ ] **Step 4: 对其他6个Handler做相同修改** + +- [ ] **Step 5: 编译验证** + +Run: `mvn clean compile -DskipTests -pl healthlink-his-application` +Expected: BUILD SUCCESS + +- [ ] **Step 6: Commit** + +```bash +git add healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/config/EventRetryConfig.java +git add healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/util/EventRetryUtil.java +git commit -m "feat(dataflow): 为所有Handler添加重试机制" +``` + +--- + +## Task 7: 添加链路间联动 — 危急值→医嘱停止 + +**Files:** +- Modify: `healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/handler/CriticalValueHandler.java` +- Create: `healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/event/OrderStopRequestEvent.java` + +- [ ] **Step 1: 创建医嘱停止请求事件** + +```java +package com.healthlink.his.web.dataflow.event; + +import org.springframework.context.ApplicationEvent; +import lombok.Getter; + +@Getter +public class OrderStopRequestEvent extends ApplicationEvent { + private final Long encounterId; + private final Long orderId; + private final String reason; + private final String triggerChain; + + public OrderStopRequestEvent(Object source, Long encounterId, Long orderId, String reason, String triggerChain) { + super(source); + this.encounterId = encounterId; + this.orderId = orderId; + this.reason = reason; + this.triggerChain = triggerChain; + } +} +``` + +- [ ] **Step 2: 修改CriticalValueHandler在危急值时触发医嘱停止** + +```java +@Autowired +private ApplicationEventPublisher eventPublisher; + +// 在onLabReportPublished方法中,危急值确认后 +if (criticalValue.isSevere()) { + // 查找相关医嘱并请求停止 + List relatedOrderIds = findRelatedOrders(event.getEncounterId(), event.getTestItem()); + for (Long orderId : relatedOrderIds) { + eventPublisher.publishEvent(new OrderStopRequestEvent( + this, event.getEncounterId(), orderId, + "危急值触发自动停嘱: " + event.getTestItem(), "Chain4-Chain2")); + } +} +``` + +- [ ] **Step 3: 编译验证** + +Run: `mvn clean compile -DskipTests -pl healthlink-his-application` +Expected: BUILD SUCCESS + +- [ ] **Step 4: Commit** + +```bash +git add healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/event/OrderStopRequestEvent.java +git add healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/dataflow/handler/CriticalValueHandler.java +git commit -m "feat(dataflow): 添加链路联动 危急值→医嘱停止" +``` + +--- + +## Task 8: 最终编译验证 + +- [ ] **Step 1: 全量编译** + +Run: `mvn clean compile -DskipTests` +Expected: BUILD SUCCESS + +- [ ] **Step 2: 检查所有Event和Handler** + +确认10条链路的Event和Handler都存在: + +| 链路 | Event | Handler | +|------|-------|---------| +| 1 | AdmissionSavedEvent | DiagnosisSyncHandler | +| 2 | OrderExecutedEvent | OrderExecutionFeedbackHandler | +| 3 | MedicationDispensedEvent | AutoBillingHandler | +| 4 | LabReportPublishedEvent | CriticalValueHandler | +| 5 | DischargeEvent | DrgGroupingHandler | +| 6 | NursingRecordSavedEvent | NursingQualityHandler | +| 7 | StatisticsPushEvent | StatisticsPushHandler | +| 8 | SurgeryCompletedEvent | PostSurgeryRecoveryHandler | +| 9 | ExamReportPublishedEvent | ExamReportFeedbackHandler | +| 10 | AdmissionAssessmentCompletedEvent | NursingPlanAutoGenerateHandler | + +- [ ] **Step 3: Commit** + +```bash +git add -A +git commit -m "feat(dataflow): 数据流优化完成 - 10条链路+重试机制+链路联动" +``` + +--- + +## 验证清单 + +| 验证项 | 命令 | 预期结果 | +|--------|------|---------| +| 后端编译 | `mvn clean compile -DskipTests` | BUILD SUCCESS | +| Event类数量 | `ls *Event.java` | 10个 | +| Handler类数量 | `ls *Handler.java` | 10个 | +| 重试工具 | `EventRetryUtil.java` | 存在 | +| 链路联动 | `OrderStopRequestEvent.java` | 存在 | diff --git a/MD/architecture/MICROSERVICE_UPGRADE_PLAN.md b/MD/architecture/MICROSERVICE_UPGRADE_PLAN.md new file mode 100644 index 000000000..e396eea7f --- /dev/null +++ b/MD/architecture/MICROSERVICE_UPGRADE_PLAN.md @@ -0,0 +1,120 @@ +# HealthLink-HIS 微服务升级技术方案 + +> **文档类型**: 架构设计+实施计划 +> **版本**: v1.0 +> **日期**: 2026-06-19 + +--- + +## 一、系统架构 + +### 当前 → 目标 + +| 维度 | 当前 | 目标 | +|------|------|------| +| 架构 | 单体Spring Boot | 微服务Spring Cloud | +| 部署 | 单机 | K8s集群 | +| 数据库 | 单库PostgreSQL | 分库+读写分离 | +| 缓存 | 本地缓存 | Redis Cluster | +| 消息 | 同步调用 | RabbitMQ异步 | +| 网关 | 无 | Spring Cloud Gateway | +| 服务发现 | 无 | Nacos | + +### 微服务划分(21个服务) + +| 服务 | 职责 | 优先级 | +|------|------|:------:| +| gateway-service | API网关+路由+限流+鉴权 | P0 | +| auth-service | 认证授权+SSO+OAuth2 | P0 | +| user-service | 用户管理+角色权限 | P0 | +| patient-service | 患者主索引+EMPI | P0 | +| registration-service | 挂号预约+分诊叫号 | P0 | +| doctor-service | 门诊医生站+医嘱处方 | P0 | +| nurse-service | 护士站+护理评估 | P0 | +| inpatient-service | 住院管理+入出转 | P0 | +| pharmacy-service | 药品管理+药房 | P0 | +| lab-service | LIS检验管理 | P1 | +| pacs-service | PACS影像管理 | P1 | +| surgery-service | 手术麻醉 | P1 | +| emr-service | 电子病历+质控 | P0 | +| mr-service | 病案管理+DRG | P1 | +| finance-service | 收费结算+医保 | P0 | +| report-service | 统计报表+BI | P1 | +| cdss-service | 临床决策支持 | P1 | +| knowledge-service | 医疗知识图谱 | P2 | +| message-service | 消息通知 | P0 | +| file-service | 文件存储 | P0 | +| audit-service | 操作审计 | P1 | + +--- + +## 二、开发环境 + +| 组件 | 配置 | +|------|------| +| JDK | OpenJDK 25 | +| IDE | IntelliJ IDEA 2025+ | +| Maven | 3.9+ | +| Node.js | 20+ LTS | +| Docker Desktop | 最新版 | +| PostgreSQL | 15+ | +| Redis | 7+ | +| Nacos | 2.3+ | +| RabbitMQ | 3.12+ | + +--- + +## 三、测试环境 + +| 组件 | 配置 | +|------|------| +| 服务器 | 4核8G × 3台 | +| 数据库 | PostgreSQL 15 (主从) | +| 缓存 | Redis Cluster 3节点 | +| 消息 | RabbitMQ 3节点 | +| 监控 | Prometheus+Grafana | +| 日志 | ELK Stack | +| 链路 | SkyWalking | + +--- + +## 四、生产环境 + +| 组件 | 配置 | +|------|------| +| 服务器 | 8核16G × 6台 | +| 数据库 | PostgreSQL 15 (主+2从) | +| 缓存 | Redis Cluster 6节点 | +| 消息 | RabbitMQ 6节点 | +| 负载均衡 | Nginx/HAProxy | +| CDN | 阿里云/腾讯云 | +| WAF | 云WAF | + +--- + +## 五、开发计划 + +| 阶段 | 时间 | 内容 | +|------|------|------| +| Phase 1 | 1-4周 | 基础设施(网关+认证+用户+患者) | +| Phase 2 | 5-8周 | 业务服务(LIS+PACS+MR+Report+CDSS) | +| Phase 3 | 9-12周 | 云原生(Docker+K8s+监控) | +| Phase 4 | 13-16周 | SaaS化(多租户+开放API) | + +--- + +## 六、资源需求 + +| 角色 | 人数 | 年薪(万) | +|------|:----:|:-------:| +| 架构师 | 1 | 40 | +| 后端开发 | 6 | 150 | +| 前端开发 | 2 | 40 | +| DevOps | 2 | 60 | +| 测试 | 2 | 36 | +| DBA | 1 | 25 | +| **合计** | **14人** | **310万** | + +--- + +> **文档版本**: v1.0 | **最后更新**: 2026-06-19 diff --git a/healthlink-his-server/core-common/src/main/java/com/core/common/utils/TenantOptionUtil.java b/healthlink-his-server/core-common/src/main/java/com/core/common/utils/TenantOptionUtil.java new file mode 100644 index 000000000..d9a9878b5 --- /dev/null +++ b/healthlink-his-server/core-common/src/main/java/com/core/common/utils/TenantOptionUtil.java @@ -0,0 +1,42 @@ +package com.core.common.utils; + +import com.core.common.core.domain.model.LoginUser; +import com.core.common.enums.TenantOptionDict; +import com.core.common.utils.SecurityUtils; +import com.core.common.utils.StringUtils; + +/** + * 租户配置工具类 + * + * @author system + */ +public class TenantOptionUtil { + + /** + * 获取租户配置项内容 + * + * @param optionDict 租户配置项字典 + * @return 租户配置项内容 + */ + public static String getOptionContent(TenantOptionDict optionDict) { + LoginUser loginUser; + try { + loginUser = SecurityUtils.getLoginUser(); + } catch (Exception e) { + return null; + } + if (loginUser == null) { + return null; + } + if (loginUser.getOptionMap() == null || loginUser.getOptionMap().isEmpty()) { + return null; + } + // return loginUser.getOptionMap().get(optionDict.getCode()); + + // TODO:2025/10/17 李永兴提出的sys_option切换TenantOption临时防止报错方案,最晚2025年11月底删除 + String newValue = loginUser.getOptionMap().get(optionDict.getCode()); + String oldValue = loginUser.getOptionJsonValue(optionDict.getCode()); + return StringUtils.isEmpty(newValue) ? oldValue : newValue; + } + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryCommonService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryCommonService.java new file mode 100644 index 000000000..6fceafb1d --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryCommonService.java @@ -0,0 +1,79 @@ +package com.healthlink.his.web.pharmacy.dispensary.appservice; + +import com.core.common.core.domain.R; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryInitDto; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensarySearchParam; + +import jakarta.servlet.http.HttpServletRequest; + +/** + * 药房共通方法 + * + * @author yuxj + * @date 2025-07-22 + */ +public interface IPharmacyDispensaryCommonService { + /** + * 单据初始化 + * + * @return 初始化信息 + */ + PharmacyDispensaryInitDto init(); + + /** + * 获取药品 + * + * @param purchaseOrderSearchParam 查询条件 + * @return 药品信息 + */ + R getMedicationInfo(PharmacyDispensarySearchParam purchaseOrderSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request); + + /** + * 单据列表 + * + * @param purchaseOrderSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @param locationFlg 仓库flg + * @param supplyType 单据类型 + * @return 订货单据分页列表 + */ + R getPage(PharmacyDispensarySearchParam purchaseOrderSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request,String locationFlg,Integer supplyType); + + /** + * 删除单据 + * + * @param busNo 单据号 + * @return 操作结果 + */ + R deleteOrder(String busNo); + +// /** +// * 提交审批 +// * +// * @param busNo 单据号 +// * @return 操作结果 +// */ +// R submitApproval(String busNo); + +// /** +// * 同意审批 +// * +// * @param busNo 单据号 +// * @return 操作结果 +// */ +// R agreeApproval(String busNo); + +// /** +// * 撤回审批 +// * +// * @param busNo 单据号 +// * @return 操作结果 +// */ +// R withdrawApproval(String busNo); + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryDispensingOrderService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryDispensingOrderService.java new file mode 100644 index 000000000..23d4cf8f0 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryDispensingOrderService.java @@ -0,0 +1,39 @@ +package com.healthlink.his.web.pharmacy.dispensary.appservice; + +import com.core.common.core.domain.R; + +import java.util.List; + +/** + * 药房发药单 + * + * @author yuxj + * @date 2025-07-22 + */ +public interface IPharmacyDispensaryDispensingOrderService { + /** + * 单据初始化 + * + * @return 初始化信息 + */ + R init(); + + /** + * 发药单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 发药单单据详情 + */ + R getDetailPage(String busNo, Integer pageNo, Integer pageSize); + + /** + * 添加/编辑发药单 + * + * @param dispenseIdList 药品发放id + * @return 操作结果 + */ + boolean addOrEditDispensingOrder(List dispenseIdList); + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryProfitLossOrderService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryProfitLossOrderService.java new file mode 100644 index 000000000..4048ab81d --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryProfitLossOrderService.java @@ -0,0 +1,47 @@ +package com.healthlink.his.web.pharmacy.dispensary.appservice; + +import com.core.common.core.domain.R; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; + +import java.util.List; + +/** + * 药房损益单 + * + * @author yuxj + * @date 2025-07-22 + */ +public interface IPharmacyDispensaryProfitLossOrderService { + /** + * 单据初始化 + * + * @return 初始化信息 + */ + R init(); + + /** + * 损益单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 损益单单据详情 + */ + R getDetailPage(String busNo, Integer pageNo, Integer pageSize); + + /** + * 获取单据号 + * + * @return 初始化信息 + */ + R getBusNo(); + + /** + * 添加/编辑损益单 + * + * @param profitLossOrderDtoList 损益信息 + * @return 操作结果 + */ + R addOrEditProfitLossOrder(List profitLossOrderDtoList); + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryReceiptApprovalService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryReceiptApprovalService.java new file mode 100644 index 000000000..19cbc54be --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryReceiptApprovalService.java @@ -0,0 +1,89 @@ +package com.healthlink.his.web.pharmacy.dispensary.appservice; + +import com.core.common.core.domain.R; +import com.healthlink.his.web.inventorymanage.dto.SupplyItemDetailDto; + +import java.util.List; + +/** + * 药房审批方法 + * + * @author yuxj + * @date 2025-07-22 + */ +public interface IPharmacyDispensaryReceiptApprovalService { + + /** + * 请领单同意审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + R requisitionOrderAgreeApproval(String busNo); + + /** + * 药房入库单据审批通过 + * + * @param busNo 单据号 + * @return 操作结果 + */ + R stockInOrderAgreeApproved(String busNo); + + /** + * 药库退库审批通过 + * + * @param busNo 单据号 + * @return 操作结果 + */ + R returnToWarehouseAgreeApproved(String busNo); + + +// /** +// * 药房发药审批通过 +// * +// * @param busNo 单据号 +// * @return 操作结果 +// */ +// R dispensingAgreeApproved(String busNo); + + /** + * 药房损益单审批通过 + * + * @param busNo 单据号 + * @return 操作结果 + */ + R profitLossAgreeApproved(String busNo); + + /** + * 药房盘点单审批通过 + * + * @param busNo 单据号 + * @return 操作结果 + */ + R stocktakingAgreepproved(String busNo); + /** + * 药房调入单审批通过 + * + * @param busNo 单据号 + * @return 操作结果 + */ + R transferInAgreeApproved(String busNo); + + /** + * 药房调出单审批通过 + * + * @param busNo 单据号 + * @return 操作结果 + */ + R transferOutAgreeApproved(String busNo); + + /** + * 根据单据号获取供应单据及供应项相关详细信息 + * + * @param busNo 单据号 + * @return 供应单据及供应项相关详细信息 + */ + List getSupplyItemDetail(String busNo); + + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryRequisitionOrderService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryRequisitionOrderService.java new file mode 100644 index 000000000..5d17cc530 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryRequisitionOrderService.java @@ -0,0 +1,47 @@ +package com.healthlink.his.web.pharmacy.dispensary.appservice; + +import com.core.common.core.domain.R; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; + +import java.util.List; + +/** + * 药房请领单 + * + * @author yuxj + * @date 2025-07-22 + */ +public interface IPharmacyDispensaryRequisitionOrderService { + /** + * 单据初始化 + * + * @return 初始化信息 + */ + R init(); + + /** + * 请领单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 请领单单据详情 + */ + R getDetailPage(String busNo, Integer pageNo, Integer pageSize); + + /** + * 获取单据号 + * + * @return 初始化信息 + */ + R getBusNo(); + + /** + * 添加/编辑采购单 + * + * @param requisitionOrderDtoList 采购信息 + * @return 操作结果 + */ + R addOrEditRequisitionOrder(List requisitionOrderDtoList); + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryReturnToWarehouseOrderService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryReturnToWarehouseOrderService.java new file mode 100644 index 000000000..0e06fb479 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryReturnToWarehouseOrderService.java @@ -0,0 +1,47 @@ +package com.healthlink.his.web.pharmacy.dispensary.appservice; + +import com.core.common.core.domain.R; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; + +import java.util.List; + +/** + * 药房退库单 + * + * @author yuxj + * @date 2025-07-22 + */ +public interface IPharmacyDispensaryReturnToWarehouseOrderService { + /** + * 单据初始化 + * + * @return 初始化信息 + */ + R init(); + + /** + * 退库单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 退库单单据详情 + */ + R getDetailPage(String busNo, Integer pageNo, Integer pageSize); + + /** + * 获取单据号 + * + * @return 初始化信息 + */ + R getBusNo(); + + /** + * 添加/编辑退库单 + * + * @param returnToDispensaryOrderDtoList 退库信息 + * @return 操作结果 + */ + R addOrEditReturnToWarehouseOrder(List returnToDispensaryOrderDtoList); + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryStockInOrderService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryStockInOrderService.java new file mode 100644 index 000000000..041d82360 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryStockInOrderService.java @@ -0,0 +1,47 @@ +package com.healthlink.his.web.pharmacy.dispensary.appservice; + +import com.core.common.core.domain.R; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; + +import java.util.List; + +/** + * 药房入库单 + * + * @author yuxj + * @date 2025-07-22 + */ +public interface IPharmacyDispensaryStockInOrderService { + /** + * 单据初始化 + * + * @return 初始化信息 + */ + R init(); + + /** + * 入库单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 入库单单据详情 + */ + R getDetailPage(String busNo, Integer pageNo, Integer pageSize); + + /** + * 获取单据号 + * + * @return 初始化信息 + */ + R getBusNo(); + + /** + * 添加/编辑入库单 + * + * @param stockInOrderDtoList 入库信息 + * @return 操作结果 + */ + R addOrEditStockInOrder(List stockInOrderDtoList); + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryStocktakingOrderService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryStocktakingOrderService.java new file mode 100644 index 000000000..aab712403 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryStocktakingOrderService.java @@ -0,0 +1,47 @@ +package com.healthlink.his.web.pharmacy.dispensary.appservice; + +import com.core.common.core.domain.R; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; + +import java.util.List; + +/** + * 药房盘点单 + * + * @author yuxj + * @date 2025-07-22 + */ +public interface IPharmacyDispensaryStocktakingOrderService { + /** + * 单据初始化 + * + * @return 初始化信息 + */ + R init(); + + /** + * 盘点单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 盘点单单据详情 + */ + R getDetailPage(String busNo, Integer pageNo, Integer pageSize); + + /** + * 获取单据号 + * + * @return 初始化信息 + */ + R getBusNo(); + + /** + * 添加/编辑盘点单 + * + * @param stocktakingOrderDtoList 盘点信息 + * @return 操作结果 + */ + R addOrEditStocktakingOrder(List stocktakingOrderDtoList); + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryTransferInOrderService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryTransferInOrderService.java new file mode 100644 index 000000000..d3d034d71 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryTransferInOrderService.java @@ -0,0 +1,47 @@ +package com.healthlink.his.web.pharmacy.dispensary.appservice; + +import com.core.common.core.domain.R; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; + +import java.util.List; + +/** + * 药房调入单 + * + * @author yuxj + * @date 2025-07-22 + */ +public interface IPharmacyDispensaryTransferInOrderService { + /** + * 单据初始化 + * + * @return 初始化信息 + */ + R init(); + + /** + * 调入单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 调入单单据详情 + */ + R getDetailPage(String busNo, Integer pageNo, Integer pageSize); + + /** + * 获取单据号 + * + * @return 初始化信息 + */ + R getBusNo(); + + /** + * 添加/编辑采购单 + * + * @param transferInOrderDtoList 采购信息 + * @return 操作结果 + */ + R addOrEditTransferInOrder(List transferInOrderDtoList); + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryTransferOutOrderService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryTransferOutOrderService.java new file mode 100644 index 000000000..960470ceb --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/IPharmacyDispensaryTransferOutOrderService.java @@ -0,0 +1,47 @@ +package com.healthlink.his.web.pharmacy.dispensary.appservice; + +import com.core.common.core.domain.R; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; + +import java.util.List; + +/** + * 药房调出单 + * + * @author yuxj + * @date 2025-07-22 + */ +public interface IPharmacyDispensaryTransferOutOrderService { + /** + * 单据初始化 + * + * @return 初始化信息 + */ + R init(); + + /** + * 调出单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 调出单单据详情 + */ + R getDetailPage(String busNo, Integer pageNo, Integer pageSize); + + /** + * 获取单据号 + * + * @return 初始化信息 + */ + R getBusNo(); + + /** + * 添加/编辑采购单 + * + * @param transferOutOrderDtoList 采购信息 + * @return 操作结果 + */ + R addOrEditTransferOutOrder(List transferOutOrderDtoList); + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryCommonServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryCommonServiceImpl.java new file mode 100644 index 000000000..ec639b196 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryCommonServiceImpl.java @@ -0,0 +1,222 @@ +package com.healthlink.his.web.pharmacy.dispensary.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.healthlink.his.administration.domain.Practitioner; +import com.healthlink.his.administration.domain.Supplier; +import com.healthlink.his.administration.service.IPractitionerService; +import com.healthlink.his.administration.service.ISupplierService; +import com.healthlink.his.common.constant.CommonConstants; +import com.healthlink.his.common.constant.PromptMsgConstant; +import com.healthlink.his.common.enums.AcceptanceResult; +import com.healthlink.his.common.enums.PackagingCondition; +import com.healthlink.his.common.enums.SupplyStatus; +import com.healthlink.his.common.enums.SupplyType; +import com.healthlink.his.common.utils.EnumUtils; +import com.healthlink.his.common.utils.HisQueryUtils; +import com.healthlink.his.web.common.appservice.ICommonService; +import com.healthlink.his.web.common.dto.LocationDto; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryCommonService; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDto; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryInitDto; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryMedicationInfoDto; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensarySearchParam; +import com.healthlink.his.web.pharmacy.dispensary.mapper.PharmacyDispensaryCommonMapper; +import com.healthlink.his.workflow.domain.SupplyRequest; +import com.healthlink.his.workflow.service.ISupplyRequestService; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +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; + +/** + * 药房共通 + * + * @author yuxj + * @date 2025-07-22 + */ +@Service +public class PharmacyDispensaryCommonServiceImpl implements IPharmacyDispensaryCommonService { + + @Resource + private ISupplierService supplierService; + + @Resource + private IPractitionerService practitionerService; + + @Resource + private ISupplyRequestService supplyRequestService; + + @Resource + private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper; + @Resource + private ICommonService commonServiceImpl; + + /** + * 初始化 + * + * @return 初始化信息 + */ + @Override + public PharmacyDispensaryInitDto init() { + PharmacyDispensaryInitDto orderInitDto = new PharmacyDispensaryInitDto(); + + // 查询供应商列表 + List supplierList = supplierService.getList(); + // 查询经手人列表 + List practitionerList = practitionerService.getList(); + // 经手人信息 + List practitionerListOption = practitionerList.stream() + .map(practitioner -> new PharmacyDispensaryInitDto.LongOption(practitioner.getId(), practitioner.getName())) + .collect(Collectors.toList()); + // 供应商信息 + List supplierListOption = supplierList.stream() + .map(supplier -> new PharmacyDispensaryInitDto.SupplierOption(supplier.getId(), supplier.getName() ,supplier.getPhone())) + .collect(Collectors.toList()); + // 审批状态 + List supplyStatusOption = Stream.of(SupplyStatus.values()).map( + supplyStatus -> new PharmacyDispensaryInitDto.IntegerOption(supplyStatus.getValue(), supplyStatus.getInfo())) + .collect(Collectors.toList()); + + // 包装情况 + List packagingConditionOption = Stream.of(PackagingCondition.values()) + .map(packagingCondition -> new PharmacyDispensaryInitDto.IntegerOption(packagingCondition.getValue(), + packagingCondition.getInfo())) + .collect(Collectors.toList()); + + // 验收结果 + List acceptanceResultOption = Stream.of(AcceptanceResult.values()) + .map(acceptanceResult -> new PharmacyDispensaryInitDto.IntegerOption(acceptanceResult.getValue(), + acceptanceResult.getInfo())) + .collect(Collectors.toList()); + + // 仓库列表 + List cabinetList = commonServiceImpl.getCabinetList(); + + // 药房列表 + List pharmacyList = commonServiceImpl.getPharmacyList(); + + orderInitDto.setCabinetListOptions(cabinetList).setPharmacyListOptions(pharmacyList).setSupplierOption(supplierListOption) + .setPractitionerOption(practitionerListOption).setSupplyStatusOptions(supplyStatusOption) + .setPackagingConditionOptions(packagingConditionOption) + .setAcceptanceResultoryOptions(acceptanceResultOption); + + return orderInitDto; + } + + /** + * 获取药品 + * + * @param purchaseOrderSearchParam 查询条件 + * @return 药品信息 + */ + @Override + public R getMedicationInfo(PharmacyDispensarySearchParam purchaseOrderSearchParam, Integer pageNo, + Integer pageSize, String searchKey, HttpServletRequest request) { + + Long locationId = purchaseOrderSearchParam.getLocationId(); + purchaseOrderSearchParam.setLocationId(null); + Long supplierId = purchaseOrderSearchParam.getSupplierId(); + purchaseOrderSearchParam.setSupplierId(null); + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(purchaseOrderSearchParam, searchKey, + new HashSet<>(Arrays.asList(CommonConstants.FieldName.Name, CommonConstants.FieldName.PyStr)), request); + // 设置排序 + queryWrapper.orderByDesc(CommonConstants.FieldName.Name); + + Page medicationInfoDto = pharmacyDispensaryCommonMapper + .getMedicationInfo(new Page<>(pageNo, pageSize), queryWrapper, locationId, supplierId); + + for (PharmacyDispensaryMedicationInfoDto item : medicationInfoDto.getRecords()) { + List unitList = new ArrayList<>(); + unitList + .add(new PharmacyDispensaryMedicationInfoDto.Option(item.getUnitCode(), item.getUnitCode_dictText())); + unitList.add( + new PharmacyDispensaryMedicationInfoDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText())); + + item.setUnitList(unitList); + } + + return R.ok(medicationInfoDto); + } + + /** + * 单据列表 + * + * @param purchaseOrderSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @param locationFlg 仓库flg + * @param supplyType 单据类型 + * @return 订货单据分页列表 + */ + @Override + public R getPage(PharmacyDispensarySearchParam purchaseOrderSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request, String locationFlg,Integer supplyType) { + //判断哪个画面使用 + if (supplyType != null) { + purchaseOrderSearchParam.setTypeEnum(supplyType); + } +// if (locationForm != null) { +// purchaseOrderSearchParam.setLocationTypeEnum(locationForm); +// } + String originalBusNoFlg = purchaseOrderSearchParam.getOriginalBusNoFlg(); + purchaseOrderSearchParam.setOriginalBusNoFlg(null); + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(purchaseOrderSearchParam, searchKey, + new HashSet<>( + Arrays.asList(CommonConstants.FieldName.SupplyBusNo, CommonConstants.FieldName.ApplicantName)), + request); + // 设置排序 + queryWrapper.orderByDesc(CommonConstants.FieldName.SupplyBusNo); + // 查询订货单分页列表 + Page purchaseOrderDtoPage = + pharmacyDispensaryCommonMapper.getPage(new Page<>(pageNo, pageSize), queryWrapper,originalBusNoFlg, locationFlg); + + purchaseOrderDtoPage.getRecords().forEach(e -> { + // 单据状态 + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum())); + // 单据类型 + e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum())); + }); + + return R.ok(purchaseOrderDtoPage); + } + + /** + * 删除单据 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @Override + public R deleteOrder(String busNo) { + // 根据原始单据号查询信息 + List supplyRequest = supplyRequestService.getSupplyByOriginalBusNo(busNo); + if (!supplyRequest.isEmpty()) { + // 将原始单据号信息的原始单据号删除 + boolean flg = supplyRequestService.updateByBusNo(supplyRequest.get(0).getBusNo()); + if (!flg) { + R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + + // 删除单据 + boolean result = supplyRequestService.removeByBusNo(busNo); + return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryDispensingOrderServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryDispensingOrderServiceImpl.java new file mode 100644 index 000000000..3925a7139 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryDispensingOrderServiceImpl.java @@ -0,0 +1,186 @@ +package com.healthlink.his.web.pharmacy.dispensary.appservice.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.core.common.core.domain.R; +import com.core.common.utils.AssignSeqUtil; +import com.healthlink.his.common.constant.CommonConstants; +import com.healthlink.his.common.enums.*; +import com.healthlink.his.common.utils.EnumUtils; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryCommonService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryDispensingOrderService; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryInitDto; +import com.healthlink.his.web.pharmacy.dispensary.mapper.PharmacyDispensaryCommonMapper; +import com.healthlink.his.web.pharmacy.dispensary.mapper.PharmacyDispensaryDispensingOrderMapper; +import com.healthlink.his.workflow.domain.SupplyDelivery; +import com.healthlink.his.workflow.domain.SupplyRequest; +import com.healthlink.his.workflow.service.ISupplyDeliveryService; +import com.healthlink.his.workflow.service.ISupplyRequestService; +import com.healthlink.his.web.dataflow.event.MedicationDispensedEvent; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +/** + * 药房发药单 + * + * @author yuxj + * @date 2025-07-22 + */ +@Service +public class PharmacyDispensaryDispensingOrderServiceImpl implements IPharmacyDispensaryDispensingOrderService { + + @Resource + private AssignSeqUtil assignSeqUtil; + @Resource + private ISupplyRequestService supplyRequestService; + @Resource + private ISupplyDeliveryService supplyDeliveryService; + + @Autowired + private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService; + @Autowired + private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper; + @Autowired + private PharmacyDispensaryDispensingOrderMapper pharmacyDispensaryDispensingOrderMapper; + @Autowired + private ApplicationEventPublisher eventPublisher; + + /** + * 初始化 + * + * @return 初始化信息 + */ + @Override + public R init() { + + PharmacyDispensaryInitDto purchaseOrderInitDto = pharmacyDispensaryCommonService.init(); + + // 单据分类 + List supplyCategoryOption = new ArrayList<>(); + // supplyCategoryOption + // .add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.OUTPATIENT_PATIENT_DISPENSING.getValue(), + // SupplyCategory.OUTPATIENT_PATIENT_DISPENSING.getInfo())); + // supplyCategoryOption + // .add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.INPATIENT_PATIENT_DISPENSING.getValue(), + // SupplyCategory.INPATIENT_PATIENT_DISPENSING.getInfo())); + // supplyCategoryOption.add( + // new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.INPATIENT_PATIENT_SUMMARY_DISPENSING.getValue(), + // SupplyCategory.INPATIENT_PATIENT_SUMMARY_DISPENSING.getInfo())); + + purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); + + return R.ok(purchaseOrderInitDto); + } + + /** + * 发药单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 发药单单据详情 + */ + @Override + public R getDetailPage(String busNo, Integer pageNo, Integer pageSize) { + + Page dispensingOrderDtoDetailPage = + pharmacyDispensaryCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo); + + dispensingOrderDtoDetailPage.getRecords().forEach(e -> { + // 单据分类 + e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum())); + // 单据状态 + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum())); + // 单据类型 + e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum())); + + }); + + return R.ok(dispensingOrderDtoDetailPage); + } + + /** + * 获取单据号 + * + * @return 单据号 + */ + public String getBusNo() { + return assignSeqUtil.getSeqByDay(AssignSeqEnum.DISPENSING_ORDER.getPrefix(), 4); + } + + /** + * 添加/编辑发药单 + * + * @param dispenseIdList 药品发放id + * @return 操作结果 + */ + + @Override + public boolean addOrEditDispensingOrder(List dispenseIdList) { + + // 获取单据号 + String busNo = this.getBusNo(); + // 获取更表所需信息 + List detailDto = + pharmacyDispensaryDispensingOrderMapper.getInfo(dispenseIdList, DispenseStatus.COMPLETED.getValue()); + + List supplyRequestList = new ArrayList<>(); + SupplyRequest supplyRequest; + List supplyDeliveryList = new ArrayList<>(); + SupplyDelivery supplyDelivery; + for (PharmacyDispensaryDetailDto item : detailDto) { + // 供应申请 + supplyRequest = new SupplyRequest().setBusNo(busNo).setTypeEnum(SupplyType.DISPENSING_ORDER.getValue()) + .setStatusEnum(SupplyStatus.AGREE.getValue()).setCategoryEnum(item.getCategoryEnum()) + .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId()) + .setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()) + .setLotNumber(item.getLotNumber()).setSourceTypeEnum(LocationForm.PHARMACY.getValue()) + .setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.DEPARTMENT.getValue()) + .setPurposeLocationId(item.getPurposeLocationId()).setApplicantId(item.getApplicantId()) + .setApplyTime(item.getApplyTime()).setApproverId(item.getApproverId()) + .setApprovalTime(item.getApprovalTime()); + supplyRequestList.add(supplyRequest); + // 供应发放 + supplyDelivery = new SupplyDelivery().setRequestId(supplyRequest.getId()) + .setStatusEnum(DispenseStatus.COMPLETED.getValue()).setTypeEnum(supplyRequest.getTypeEnum()) + .setItemTable(supplyRequest.getItemTable()).setItemId(supplyRequest.getItemId()) + .setBasedOnTable(CommonConstants.TableName.MED_MEDICATION_DISPENSE).setBasedOnIds(item.getDispenseIds()) + .setUnitCode(supplyRequest.getUnitCode()).setQuantity(supplyRequest.getItemQuantity()) + .setLotNumber(supplyRequest.getLotNumber()).setPractitionerId(supplyRequest.getApplicantId()) + .setOccurrenceTime(supplyRequest.getApprovalTime()).setReceiverId(supplyRequest.getPurposeLocationId()) + .setReceiveTime(supplyRequest.getApprovalTime()); + + supplyDeliveryList.add(supplyDelivery); + } + + // 更新供应请求表 + boolean requestFlg = supplyRequestService.saveBatch(supplyRequestList); + if (!requestFlg) { + return false; + } + // 更新供应发放表 + boolean deliveryFlg = supplyDeliveryService.saveBatch(supplyDeliveryList); + if (!deliveryFlg) { + return false; + } + + // Chain3: 发布药品发放事件 → 自动计费 + for (PharmacyDispensaryDetailDto item : detailDto) { + eventPublisher.publishEvent(new MedicationDispensedEvent(this, + item.getPurposeLocationId(), + item.getId() != null ? item.getId() : 0L, + item.getItemId(), + item.getItemQuantity(), + item.getPrice() != null ? item.getPrice() : BigDecimal.ZERO)); + } + + return true; + } + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryProfitLossOrderServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryProfitLossOrderServiceImpl.java new file mode 100644 index 000000000..5ce2a9762 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryProfitLossOrderServiceImpl.java @@ -0,0 +1,175 @@ +package com.healthlink.his.web.pharmacy.dispensary.appservice.impl; + +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.healthlink.his.common.constant.CommonConstants; +import com.healthlink.his.common.constant.PromptMsgConstant; +import com.healthlink.his.common.enums.*; +import com.healthlink.his.common.utils.EnumUtils; +import com.healthlink.his.web.inventorymanage.dto.ProductStocktakingInitDto; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryCommonService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryProfitLossOrderService; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryInitDto; +import com.healthlink.his.web.pharmacy.dispensary.mapper.PharmacyDispensaryCommonMapper; +import com.healthlink.his.workflow.domain.SupplyRequest; +import com.healthlink.his.workflow.service.ISupplyRequestService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 药房损益单 + * + * @author yuxj + * @date 2025-07-22 + */ +@Service +public class PharmacyDispensaryProfitLossOrderServiceImpl implements IPharmacyDispensaryProfitLossOrderService { + + @Resource + private AssignSeqUtil assignSeqUtil; + @Resource + private ISupplyRequestService supplyRequestService; + + @Autowired + private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService; + @Autowired + private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper; + + /** + * 初始化 + * + * @return 初始化信息 + */ + @Override + public R init() { + + PharmacyDispensaryInitDto purchaseOrderInitDto = pharmacyDispensaryCommonService.init(); + + // 单据分类 + List supplyCategoryOption = new ArrayList<>(); + // supplyCategoryOption.add(new + // PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.GENERAL_PROFIT_AND_LOSS.getValue(), + // SupplyCategory.GENERAL_PROFIT_AND_LOSS.getInfo())); + // supplyCategoryOption.add(new + // PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getValue(), + // SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getInfo())); + // supplyCategoryOption.add(new + // PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.STANDBY_RESCUE_MEDICINES.getValue(), + // SupplyCategory.STANDBY_RESCUE_MEDICINES.getInfo())); + // supplyCategoryOption.add(new + // PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.DAMAGED_EXPIRED_MEDICINES.getValue(), + // SupplyCategory.DAMAGED_EXPIRED_MEDICINES.getInfo())); + // supplyCategoryOption.add(new + // PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.DONATED_MEDICINES.getValue(), + // SupplyCategory.DONATED_MEDICINES.getInfo())); + + purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); + + return R.ok(purchaseOrderInitDto); + } + + /** + * 损益单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 损益单单据详情 + */ + @Override + public R getDetailPage(String busNo, Integer pageNo, Integer pageSize) { + + Page profitLossOrderDtoDetailPage = + pharmacyDispensaryCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo); + + profitLossOrderDtoDetailPage.getRecords().forEach(e -> { + // 单据分类 + e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum())); + // 单据状态 + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum())); + // 单据类型 + e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum())); + }); + + List unitList; + for (PharmacyDispensaryDetailDto item : profitLossOrderDtoDetailPage.getRecords()) { + unitList = new ArrayList<>(); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText())); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText())); + + item.setUnitList(unitList); + } + return R.ok(profitLossOrderDtoDetailPage); + } + + /** + * 获取单据号 + * + * @return 初始化信息 + */ + @Override + public R getBusNo() { + + ProductStocktakingInitDto initDto = new ProductStocktakingInitDto(); + // 单据号 + initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.PURCHASE_PRPFITLOSS.getPrefix(), 4)); + + return R.ok(initDto); + } + + /** + * 添加/编辑损益单 + * + * @param profitLossOrderDtoList 损益信息 + * @return 操作结果 + */ + + @Override + public R addOrEditProfitLossOrder(List profitLossOrderDtoList) { + // 请求数据取得 + List requestList = + supplyRequestService.getSupplyByBusNo(profitLossOrderDtoList.get(0).getBusNo()); + if (!requestList.isEmpty()) { + // 请求id取得 + List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); + // 单据信息删除 + supplyRequestService.removeByIds(requestIdList); + } + + List supplyRequestList = new ArrayList<>(); + Date applyTime = DateUtils.getNowDate(); + for (PharmacyDispensaryDetailDto item : profitLossOrderDtoList) { + SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo()) + .setTypeEnum(SupplyType.PURCHASE_PRPFITLOSS.getValue()) + .setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum()) + .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId()) + .setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()).setPrice(item.getPrice()) + .setTotalPrice(item.getTotalPrice()).setRetailPrice(item.getRetailPrice()) + .setTotalRetailPrice(item.getTotalRetailPrice()).setBatchInventory(item.getBatchInventory()) + .setSpecificationInventory(item.getSpecificationInventory()).setStartTime(item.getStartTime()) + .setEndTime(item.getEndTime()).setLotNumber(item.getLotNumber()).setTraceNo(item.getTraceNo()) + .setTraceNoUnitCode(item.getTraceNoUnitCode()).setReason(item.getReason()) + .setPurposeTypeEnum(LocationForm.PHARMACY.getValue()).setPurposeLocationId(item.getPurposeLocationId()) + .setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake()); + supplyRequestList.add(supplyRequest); + } + // 更新请求表 + boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null)); + } + + return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryReceiptApprovalServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryReceiptApprovalServiceImpl.java new file mode 100644 index 000000000..985732b4a --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryReceiptApprovalServiceImpl.java @@ -0,0 +1,924 @@ +package com.healthlink.his.web.pharmacy.dispensary.appservice.impl; + +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +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.healthlink.his.common.constant.CommonConstants; +import com.healthlink.his.common.constant.PromptMsgConstant; +import com.healthlink.his.common.enums.DispenseStatus; +import com.healthlink.his.common.enums.SupplyType; +import com.healthlink.his.common.enums.TraceNoStatus; +import com.healthlink.his.common.enums.Whether; +import com.healthlink.his.yb.enums.YbInvChgType; +import com.healthlink.his.yb.enums.YbRxFlag; +import com.healthlink.his.medication.domain.MedicationDispense; +import com.healthlink.his.medication.service.IMedicationDispenseService; +import com.healthlink.his.web.inventorymanage.appservice.IReceiptApprovalAppService; +import com.healthlink.his.web.inventorymanage.appservice.ITraceNoAppService; +import com.healthlink.his.web.inventorymanage.assembler.InventoryManageAssembler; +import com.healthlink.his.web.inventorymanage.dto.ItemChargeDetailDto; +import com.healthlink.his.web.inventorymanage.dto.SupplyItemDetailDto; +import com.healthlink.his.web.inventorymanage.mapper.ReceiptApprovalMapper; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryReceiptApprovalService; +import com.healthlink.his.workflow.domain.DeviceDispense; +import com.healthlink.his.workflow.domain.InventoryItem; +import com.healthlink.his.workflow.domain.SupplyDelivery; +import com.healthlink.his.workflow.domain.SupplyRequest; +import com.healthlink.his.workflow.service.IDeviceDispenseService; +import com.healthlink.his.workflow.service.IInventoryItemService; +import com.healthlink.his.workflow.service.ISupplyDeliveryService; +import com.healthlink.his.workflow.service.ISupplyRequestService; +import com.healthlink.his.yb.dto.Medical3503Param; +import com.healthlink.his.yb.dto.MedicalInventory3501Param; +import com.healthlink.his.yb.dto.MedicalInventory3502Param; +import com.healthlink.his.yb.dto.MedicalPurchase3504Param; +import com.healthlink.his.yb.service.IYbManager; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 药房审批 + * + * @author yuxj + * @date 2025-07-22 + */ +@Service +public class PharmacyDispensaryReceiptApprovalServiceImpl implements IPharmacyDispensaryReceiptApprovalService { + @Autowired + private ITraceNoAppService traceNoAppService; + @Resource + private ISupplyRequestService supplyRequestService; + + @Autowired + private ISupplyDeliveryService supplyDeliveryService; + @Autowired + private IInventoryItemService inventoryItemService; + @Autowired + private ReceiptApprovalMapper receiptApprovalMapper; + @Autowired + private IYbManager ybService; + @Autowired + private IMedicationDispenseService medicationDispenseService; + @Autowired + private IDeviceDispenseService deviceDispenseService; + @Autowired + private IReceiptApprovalAppService receiptApprovalAppService; + + /** + * 请领单同意审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @Override + public R requisitionOrderAgreeApproval(String busNo) { + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 审批单据并返回单据详情 + List agreedList = supplyRequestService.agreeRequest(busNo, now); + if (agreedList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // // 获取审批通过后的供应请求id列表 + // List supplyReqIdList = agreedList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); + // + // // 校验(已经审批通过的单号(发放状态是已完成),不能再重复审批通过) + // boolean validation = supplyDeliveryService.supplyDeliveryValidation(supplyReqIdList); + // if (validation) { + // throw new ServiceException("请勿重复审批"); + // } + // // 根据单据,生成供应发放单 + // List deliveredList = supplyDeliveryService.createCompletedSupplyDelivery(agreedList, now); + // if (deliveredList.isEmpty()) { + // return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + // } + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + + /** + * 药房入库单据审批通过 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @Override + public R stockInOrderAgreeApproved(String busNo) { + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 审批单据并返回单据详情 + List agreedList = supplyRequestService.agreeRequest(busNo, now); + if (agreedList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + // 根据单据,发放物品 + List deliveredList = supplyDeliveryService.createCompletedSupplyDelivery(agreedList, now); + if (deliveredList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + // 查询供应项目的详细信息 + List supplyItemDetailList = this.getSupplyItemDetail(busNo); + // 返回信息 + String returnMsg = null; + if (!supplyItemDetailList.isEmpty()) { + InventoryItem inventoryItemPurpose = null; + // 新增库存信息 + List supplyList = new ArrayList<>(); + + for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) { + // 根据项目id,产品批号,仓库id 查询仓库库存表信息 + List inventoryItemList = inventoryItemService.selectInventoryByItemId( + supplyItemDetailDto.getItemId(), supplyItemDetailDto.getLotNumber(), + supplyItemDetailDto.getPurposeLocationId(), SecurityUtils.getLoginUser().getTenantId()); + + if (!inventoryItemList.isEmpty()) { + inventoryItemPurpose = inventoryItemList.get(0); + } + + if (inventoryItemPurpose == null) { + // 新增库存信息 + supplyList.add(supplyItemDetailDto); + } else { + // 最小数量(最小单位库存数量) + BigDecimal minQuantity = inventoryItemPurpose.getQuantity(); + + // 计算盘点后库存数量,结果取小单位 + // 供应申请的物品计量单位与包装单位相同 + if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getUnitCode())) { + // 源仓库库存+(调拨数量*拆零比) + minQuantity = minQuantity + .add(supplyItemDetailDto.getPartPercent().multiply(supplyItemDetailDto.getItemQuantity())); + + } else if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getMinUnitCode())) { + // 供应申请的物品计量单位与最小单位相同 + // 源仓库库存+调拨数量 + minQuantity = minQuantity.add(supplyItemDetailDto.getItemQuantity()); + } + // 更新源仓库库存数量 + Boolean aBoolean = + inventoryItemService.updateInventoryQuantity(inventoryItemPurpose.getId(), minQuantity, now); + + if (!aBoolean) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + } + + if (!supplyList.isEmpty()) { + // 将供应项目的详细信息装配为库存项目 + List inventoryItemList = InventoryManageAssembler.assembleInventoryItem(supplyList); + // 入库 + inventoryItemService.stockIn(inventoryItemList); + } + + // 追加追溯码信息 + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), + SupplyType.PURCHASE_STOCKIN.getValue()); + + // 调用医保商品采购接口 todo 药房相关医保接口未对应 + String ybSwitch = SecurityUtils.getLoginUser().getOptionJsonValue(CommonConstants.Option.YB_SWITCH); // 医保开关 + if (Whether.YES.getCode().equals(ybSwitch)) { + List uploadFailedNoList = + this.ybInventoryIntegrated(supplyItemDetailList, YbInvChgType.PURCHASE_IN, false, true, false, now); + if (!uploadFailedNoList.isEmpty()) { + returnMsg = "3503商品采购上传错误,错误项目编码" + uploadFailedNoList; + } else { + returnMsg = "3503商品采购上传成功"; + } + } + } + return R.ok(returnMsg, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + + /** + * 药库退库审批通过 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @Override + public R returnToWarehouseAgreeApproved(String busNo) { + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 审批单据并返回单据详情 + List agreedList = supplyRequestService.agreeRequest(busNo, now); + if (agreedList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + // 根据单据,发放物品 + List deliveredList = supplyDeliveryService.createCompletedSupplyDelivery(agreedList, now); + if (deliveredList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + // 查询供应项目的详细信息 + List supplyItemDetailList = this.getSupplyItemDetail(busNo); + // 返回信息 + String returnMsg = null; + if (!supplyItemDetailList.isEmpty()) { + for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) { + // 根据项目id,产品批号,目的仓库id 查询仓库库存表信息 + List inventoryItemList = inventoryItemService.selectInventoryByItemId( + supplyItemDetailDto.getItemId(), supplyItemDetailDto.getLotNumber(), + supplyItemDetailDto.getSourceLocationId(), SecurityUtils.getLoginUser().getTenantId()); + InventoryItem inventoryItemSource; + if (!inventoryItemList.isEmpty()) { + inventoryItemSource = inventoryItemList.get(0); + // 最小数量(最小单位库存数量) + BigDecimal minQuantity = inventoryItemSource.getQuantity(); + + // 计算退货后库存数量,结果取小单位 + // 供应申请的物品计量单位与包装单位相同 + if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getUnitCode())) { + if (minQuantity.compareTo(supplyItemDetailDto.getItemQuantity()) < 0) { + // 库存数量不足 + return R.fail(MessageUtils.createMessage("操作失败,库存数量不足", null)); + } else { + // 仓库库存-(退货数量*拆零比) + minQuantity = minQuantity.subtract( + supplyItemDetailDto.getPartPercent().multiply(supplyItemDetailDto.getItemQuantity())); + } + } else if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getMinUnitCode())) { + if (minQuantity.compareTo(supplyItemDetailDto.getItemQuantity()) < 0) { + // 库存数量不足 + return R.fail(MessageUtils.createMessage("操作失败,库存数量不足", null)); + } else { + // 供应申请的物品计量单位与最小单位相同 + // 仓库库存-退货数量 + minQuantity = minQuantity.subtract(supplyItemDetailDto.getItemQuantity()); + } + } + // 更新仓库库存数量 + Boolean aBoolean = + inventoryItemService.updateInventoryQuantity(inventoryItemSource.getId(), minQuantity, now); + + if (!aBoolean) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + } + // 追加追溯码信息 + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), + SupplyType.PURCHASE_RETURN.getValue()); + + // 调用医保采购退货接口 + String ybSwitch = SecurityUtils.getLoginUser().getOptionJsonValue(CommonConstants.Option.YB_SWITCH); // 医保开关 + if (Whether.YES.getCode().equals(ybSwitch)) { + List uploadFailedNoList = + this.ybInventoryIntegrated(supplyItemDetailList, YbInvChgType.RETURN_OUT, false, false, true, now); + if (!uploadFailedNoList.isEmpty()) { + returnMsg = "3504采购退货上传错误,错误项目编码" + uploadFailedNoList; + } + } + } + return R.ok(returnMsg, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + // + // /** + // * 药房发药审批通过 todo 发药只查询,没有审批 + // * + // * @param busNo 单据号 + // * @return 操作结果 + // */ + // @Override + // public R dispensingAgreeApproved(String busNo) { + // // 获取当前时间 + // Date now = DateUtils.getNowDate(); + // // 审批单据并返回单据详情 + // List agreedList = supplyRequestService.agreeRequest(busNo, now); + // if (agreedList.isEmpty()) { + // return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + // } + // // 根据单据,发放物品 + // List deliveredList = supplyDeliveryService.createCompletedSupplyDelivery(agreedList, now); + // if (deliveredList.isEmpty()) { + // return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + // } + // + // // 查询供应项目的详细信息 + // List supplyItemDetailList = this.getSupplyItemDetail(busNo); + // + // if (!supplyItemDetailList.isEmpty()) { + // + // for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) { + // // 根据项目id,产品批号,源仓库id 查询源仓库库存表信息 + // List inventoryItemSourceList = inventoryItemService.selectInventoryByItemId( + // supplyItemDetailDto.getItemId(), supplyItemDetailDto.getLotNumber(), + // supplyItemDetailDto.getSourceLocationId(), SecurityUtils.getLoginUser().getTenantId()); + // InventoryItem inventoryItemSource = new InventoryItem(); + // if (!inventoryItemSourceList.isEmpty()) { + // inventoryItemSource = inventoryItemSourceList.get(0); + // + // // 包装数量(常规单位库存数量) 更新库存数量方法中没用到 + // BigDecimal baseQuantitySource = inventoryItemSource.getQuantity(); + // // 最小数量(最小单位库存数量) + // BigDecimal minQuantitySource = inventoryItemSource.getQuantity(); + // + // // 供应申请的物品计量单位与包装单位相同 + // if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getUnitCode())) { + // if (minQuantitySource.compareTo(supplyItemDetailDto.getItemQuantity()) < 0) { + // // 库存数量不足 + // return R.fail(MessageUtils.createMessage("操作失败,库存数量不足", null)); + // } else { + // // 源仓库库存-(领用数量*拆零比) + // minQuantitySource = minQuantitySource.subtract( + // supplyItemDetailDto.getPartPercent().multiply(supplyItemDetailDto.getItemQuantity())); + // } + // } else if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getMinUnitCode())) { + // if (minQuantitySource.compareTo(supplyItemDetailDto.getItemQuantity()) < 0) { + // // 库存数量不足 + // return R.fail(MessageUtils.createMessage("操作失败,库存数量不足", null)); + // } else { + // // 供应申请的物品计量单位与最小单位相同 + // // 源仓库库存-领用数量 + // minQuantitySource = minQuantitySource.subtract(supplyItemDetailDto.getItemQuantity()); + // } + // } + // // 更新源仓库库存数量 + // Boolean aBooleanSource = inventoryItemService.updateInventoryQuantity(inventoryItemSource.getId(), + // baseQuantitySource, minQuantitySource, now, supplyItemDetailDto.getTraceNo()); + // + // if (!aBooleanSource) { + // return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + // } + // } + // } + // + // } + // return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + // } + + /** + * 药房损益单审批通过 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @Override + public R profitLossAgreeApproved(String busNo) { + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 审批单据并返回单据详情 + List agreedList = supplyRequestService.agreeRequest(busNo, now); + if (agreedList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 根据单据,生成供应发放单 + List deliveredList = supplyDeliveryService.createCompletedSupplyDelivery(agreedList, now); + if (deliveredList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 返回信息 + String returnMsg = null; + // 查询供应项目的详细信息 + List supplyItemDetailList = this.getSupplyItemDetail(busNo); + if (!supplyItemDetailList.isEmpty()) { + + for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) { + // 根据id,产品批号,仓库 查询库存表信息 + List inventoryItemList = inventoryItemService.selectInventoryByItemId( + supplyItemDetailDto.getItemId(), supplyItemDetailDto.getLotNumber(), + supplyItemDetailDto.getPurposeLocationId(), SecurityUtils.getLoginUser().getTenantId()); + InventoryItem inventoryItem = new InventoryItem(); + if (!inventoryItemList.isEmpty()) { + inventoryItem = inventoryItemList.get(0); + // 最小数量(最小单位库存数量) + BigDecimal minQuantity = null; + + // 计算报损后库存数量,结果取小单位 + // 供应申请的物品计量单位与包装单位相同 + if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getUnitCode())) { + // 数量*拆零比 + minQuantity = + supplyItemDetailDto.getPartPercent().multiply(supplyItemDetailDto.getItemQuantity()); + } else if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getMinUnitCode())) { + // 供应申请的物品计量单位与最小单位相同 + // 数量 + minQuantity = supplyItemDetailDto.getItemQuantity(); + } + // 更新库存数量 + Boolean aBoolean = + inventoryItemService.updateInventoryQuantity(inventoryItem.getId(), minQuantity, now); + if (!aBoolean) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + } + + // 追加追溯码信息 + boolean flg = + traceNoAppService.updateTraceNoList(supplyItemDetailList, SupplyType.PURCHASE_PRPFITLOSS.getValue()); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + // 调用医保库存变更接口 + String ybSwitch = SecurityUtils.getLoginUser().getOptionJsonValue(CommonConstants.Option.YB_SWITCH); // 医保开关 + if (Whether.YES.getCode().equals(ybSwitch)) { + List uploadFailedNoList = this.ybInventoryIntegrated(supplyItemDetailList, + YbInvChgType.DESTRUCTION, false, false, false, now); + if (!uploadFailedNoList.isEmpty()) { + returnMsg = "3502库存变更上传错误,错误项目编码" + uploadFailedNoList; + } + } + } + return R.ok(returnMsg, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + + /** + * 药房盘点单审批通过 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @Override + public R stocktakingAgreepproved(String busNo) { + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 审批单据并返回单据详情 + List agreedList = supplyRequestService.agreeRequest(busNo, now); + if (agreedList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 根据单据,生成供应发放单 + List deliveredList = supplyDeliveryService.createCompletedSupplyDelivery(agreedList, now); + if (deliveredList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + // 查询供应项目的详细信息 + List supplyItemDetailList = this.getSupplyItemDetail(busNo); + // 首次盘存列表 + List firstSupplyItemDetailList = new ArrayList<>(); + // 药品/耗材发放列表 + List medicationDispenses = null; + List deviceDispenses = null; + // 返回信息 + String stocktakingReturnMsg = null; + String changeReturnMsg = null; + if (!supplyItemDetailList.isEmpty()) { + // 获取盘盈列表(itemQuantity > 0) + List positiveList = supplyItemDetailList.stream() + .filter(item -> item.getItemQuantity() != null && item.getItemQuantity().compareTo(BigDecimal.ZERO) > 0) + .collect(Collectors.toList()); + // 获取盘亏列表(itemQuantity < 0) + List negativeList = supplyItemDetailList.stream() + .filter(item -> item.getItemQuantity() != null && item.getItemQuantity().compareTo(BigDecimal.ZERO) < 0) + .collect(Collectors.toList()); + + for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) { + // 根据id,产品批号,仓库 查询库存表信息 + List inventoryItemList = inventoryItemService.selectInventoryByItemId( + supplyItemDetailDto.getItemId(), supplyItemDetailDto.getLotNumber(), + supplyItemDetailDto.getPurposeLocationId(), SecurityUtils.getLoginUser().getTenantId()); + // 查看该批号的药品/耗材是否发放过(用于证明是否首次盘存) + if (CommonConstants.TableName.MED_MEDICATION_DEFINITION.equals(supplyItemDetailDto.getItemTable())) { + medicationDispenses = medicationDispenseService.list(new LambdaQueryWrapper() + .eq(MedicationDispense::getLotNumber, supplyItemDetailDto.getLotNumber())); + if (medicationDispenses.isEmpty()) { + firstSupplyItemDetailList.add(supplyItemDetailDto); + } + } else if (CommonConstants.TableName.ADM_DEVICE_DEFINITION.equals(supplyItemDetailDto.getItemTable())) { + deviceDispenses = deviceDispenseService.list(new LambdaQueryWrapper() + .in(DeviceDispense::getLotNumber, supplyItemDetailDto.getLotNumber())); + if (deviceDispenses.isEmpty()) { + firstSupplyItemDetailList.add(supplyItemDetailDto); + } + } + if (!inventoryItemList.isEmpty()) { + InventoryItem inventoryItem = inventoryItemList.get(0); + // 包装数量(常规单位库存数量) 更新库存数量方法中没用到 + BigDecimal baseQuantity = inventoryItem.getQuantity(); + // 最小数量(最小单位库存数量) + BigDecimal minQuantity = null; + + // 计算盘点后库存数量,结果取小单位 + // 供应申请的物品计量单位与包装单位相同 + if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getUnitCode())) { + minQuantity = + supplyItemDetailDto.getPartPercent().multiply(supplyItemDetailDto.getTotalQuantity()); + // 供应申请的物品计量单位与最小单位相同 + } else if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getMinUnitCode())) { + minQuantity = supplyItemDetailDto.getTotalQuantity(); + } + // 更新库存数量 + Boolean aBoolean = + inventoryItemService.updateInventoryQuantity(inventoryItem.getId(), minQuantity, now); + if (!aBoolean) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + + String ybSwitch = + SecurityUtils.getLoginUser().getOptionJsonValue(CommonConstants.Option.YB_SWITCH); // 医保开关 + if (Whether.YES.getCode().equals(ybSwitch)) { + // 如果首次盘点信息不为空 + if (!firstSupplyItemDetailList.isEmpty()) { + // 调用医保盘存接口,盘盈 + List uploadFailedNoList = this.ybInventoryIntegrated(firstSupplyItemDetailList, + YbInvChgType.INVENTORY_GAIN, true, false, false, now); + if (!uploadFailedNoList.isEmpty()) { + stocktakingReturnMsg = "3501盘存上传错误,错误项目编码" + uploadFailedNoList; + } + } + List uploadFailedGainList = null; + List uploadFailedLossList = null; + if (!positiveList.isEmpty()) { + // 调用医保库存变更接口,盘盈 + uploadFailedGainList = this.ybInventoryIntegrated(positiveList, YbInvChgType.INVENTORY_GAIN, + false, false, false, now); + } + if (!negativeList.isEmpty()) { + // 调用医保库存变更接口,盘亏 + uploadFailedLossList = this.ybInventoryIntegrated(negativeList, YbInvChgType.INVENTORY_LOSS, + false, false, false, now); + } + if (uploadFailedGainList != null || uploadFailedLossList != null) { + changeReturnMsg = "3502库存变更上传错误,错误项目编码" + uploadFailedGainList + uploadFailedLossList; + } + } + } + // 追加追溯码信息 + boolean flg = + traceNoAppService.updateTraceNoList(supplyItemDetailList, SupplyType.PURCHASE_STOCKTAKING.getValue()); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + return R.ok(stocktakingReturnMsg + changeReturnMsg, + MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + + /** + * 药房调入单审批通过 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @Override + public R transferInAgreeApproved(String busNo) { + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 审批单据并返回单据详情 + List agreedList = supplyRequestService.agreeRequest(busNo, now); + if (agreedList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 根据单据,发放物品 + List deliveredList = supplyDeliveryService.createCompletedSupplyDelivery(agreedList, now); + if (deliveredList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + // 查询供应项目的详细信息 + List supplyItemDetailList = this.getSupplyItemDetail(busNo); + + if (!supplyItemDetailList.isEmpty()) { + + // 新增库存信息 + List supplylList = new ArrayList<>(); + + for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) { + // 根据项目id,产品批号,目的仓库id 查询目的仓库库存表信息 + List inventoryItemPurposeList = inventoryItemService.selectInventoryByItemId( + supplyItemDetailDto.getItemId(), supplyItemDetailDto.getLotNumber(), + supplyItemDetailDto.getPurposeLocationId(), SecurityUtils.getLoginUser().getTenantId()); + InventoryItem inventoryItemPurpose = null; + if (!inventoryItemPurposeList.isEmpty()) { + inventoryItemPurpose = inventoryItemPurposeList.get(0); + } + + if (inventoryItemPurpose == null) { + // 新增库存信息 + supplylList.add(supplyItemDetailDto); + } else { + // 包装数量(常规单位库存数量) 更新库存数量方法中没用到 + BigDecimal baseQuantity = inventoryItemPurpose.getQuantity(); + // 最小数量(最小单位库存数量) + BigDecimal minQuantity = inventoryItemPurpose.getQuantity(); + + // 计算盘点后库存数量,结果取小单位 + // 供应申请的物品计量单位与包装单位相同 + if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getUnitCode())) { + // 源仓库库存+(退库数量*拆零比) + minQuantity = minQuantity + .add(supplyItemDetailDto.getPartPercent().multiply(supplyItemDetailDto.getItemQuantity())); + } else if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getMinUnitCode())) { + // 供应申请的物品计量单位与最小单位相同 + // 源仓库库存+退库数量 + minQuantity = minQuantity.add(supplyItemDetailDto.getItemQuantity()); + } + // 更新目的仓库库存数量 + Boolean bBooleanPurpose = + inventoryItemService.updateInventoryQuantity(inventoryItemPurpose.getId(), minQuantity, now); + if (!bBooleanPurpose) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + } + if (!supplylList.isEmpty()) { + // 将供应项目的详细信息装配为库存项目 + List inventoryItemList = InventoryManageAssembler.assembleInventoryItem(supplylList); + // 入库 + inventoryItemService.stockIn(inventoryItemList); + } + // 追加追溯码信息 + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(), + SupplyType.PURCHASE_TRANSFERIN.getValue()); + + } + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + + } + + /** + * 药房调出单审批通过 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @Override + public R transferOutAgreeApproved(String busNo) { + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 审批单据并返回单据详情 + List agreedList = supplyRequestService.agreeRequest(busNo, now); + if (agreedList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 根据单据,发放物品 + List deliveredList = supplyDeliveryService.createCompletedSupplyDelivery(agreedList, now); + if (deliveredList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + // 查询供应项目的详细信息 + List supplyItemDetailList = this.getSupplyItemDetail(busNo); + + if (!supplyItemDetailList.isEmpty()) { + for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) { + // 根据项目id,产品批号,目的仓库id 查询目的仓库库存表信息 + List inventoryItemSourceList = inventoryItemService.selectInventoryByItemId( + supplyItemDetailDto.getItemId(), supplyItemDetailDto.getLotNumber(), + supplyItemDetailDto.getSourceLocationId(), SecurityUtils.getLoginUser().getTenantId()); + InventoryItem inventoryItemSource = null; + if (!inventoryItemSourceList.isEmpty()) { + inventoryItemSource = inventoryItemSourceList.get(0); + + // 包装数量(常规单位库存数量) 更新库存数量方法中没用到 + BigDecimal baseQuantity = inventoryItemSource.getQuantity(); + // 最小数量(最小单位库存数量) + BigDecimal minQuantity = inventoryItemSource.getQuantity(); + + // 计算盘点后库存数量,结果取小单位 + // 供应申请的物品计量单位与包装单位相同 + if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getUnitCode())) { + if (minQuantity.compareTo(supplyItemDetailDto.getItemQuantity()) < 0) { + // 库存数量不足 + return R.fail(MessageUtils.createMessage("操作失败,库存数量不足", null)); + } else { + // 源仓库库存-(退库数量*拆零比) + minQuantity = minQuantity.subtract( + supplyItemDetailDto.getPartPercent().multiply(supplyItemDetailDto.getItemQuantity())); + } + } else if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getMinUnitCode())) { + if (minQuantity.compareTo(supplyItemDetailDto.getItemQuantity()) < 0) { + // 库存数量不足 + return R.fail(MessageUtils.createMessage("操作失败,库存数量不足", null)); + } else { + // 供应申请的物品计量单位与最小单位相同 + // 源仓库库存-退库数量 + minQuantity = minQuantity.subtract(supplyItemDetailDto.getItemQuantity()); + } + } + // 更新目的仓库库存数量 + Boolean bBooleanSource = + inventoryItemService.updateInventoryQuantity(inventoryItemSource.getId(), minQuantity, now); + if (!bBooleanSource) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + } + // 追加追溯码信息 + traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(), + SupplyType.PURCHASE_TRANSFEROUT.getValue()); + + } + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + + } + + /** + * 根据单据号获取供应单据及供应项相关详细信息 + * + * @param busNo 单据号 + * @return 供应单据及供应项相关详细信息 + */ + @Override + public List getSupplyItemDetail(String busNo) { + return receiptApprovalMapper.selectSupplyDetail(busNo, DispenseStatus.COMPLETED.getValue()); + } + + /** + * 医保库存相关进销存接口 + * + * @param supplyItemDetailList 供应申请项目详细信息 + * @param ybInvChgType 库存变更类型 + * @param firstFlag 首次盘存标识 + * @param now 库存变更时间 + * @return 上传失败的id集合 + */ + private List ybInventoryIntegrated(List supplyItemDetailList, + YbInvChgType ybInvChgType, Boolean firstFlag, Boolean purchaseFlag, Boolean returnFlag, Date now) { + List uploadFailedNoList = new ArrayList<>(); + R result; + R firstResult = R.ok(); + R returnResult = R.ok(); + R purchaseResult = R.ok(); + for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) { + if (supplyItemDetailDto.getYbNo() == null) { + continue; + } + switch (ybInvChgType) { + case ALLOCATION_IN: + case ALLOCATION_OUT: + case INVENTORY_GAIN: + case INVENTORY_LOSS: + case DESTRUCTION: + case OTHER_IN: + case OTHER_OUT: + case DONATION_IN: + case DONATION_RETURN_OUT: + case PURCHASE_IN: + case RETURN_OUT: + if (firstFlag) { + firstResult = + ybService.uploadInventoryCount(getMedicalInventory3501Param(supplyItemDetailDto, now), now); + if (firstResult.getCode() != 200) { + uploadFailedNoList.add(supplyItemDetailDto.getItemBusNo()); + } + } + if (returnFlag) { + returnResult = + ybService.cancelProcurement(getMedicalPurchase3504Param(supplyItemDetailDto, now)); + if (returnResult.getCode() != 200) { + uploadFailedNoList.add(supplyItemDetailDto.getItemBusNo()); + } + } + if (purchaseFlag) { + purchaseResult = ybService.procurement(getMedical3503Param(supplyItemDetailDto, now)); + if (purchaseResult.getCode() != 200) { + uploadFailedNoList.add(supplyItemDetailDto.getItemBusNo()); + } + } + result = ybService.updateInventoryCount( + getMedicalInventory3502Param(supplyItemDetailDto, now, ybInvChgType.getValue())); + if (result.getCode() != 200) { + uploadFailedNoList.add(supplyItemDetailDto.getItemBusNo()); + } + break; + default: + throw new IllegalArgumentException("未知的库存变更类型: " + ybInvChgType); + } + } + return uploadFailedNoList; + } + + private MedicalPurchase3504Param getMedicalPurchase3504Param(SupplyItemDetailDto supplyItemDetailDto, Date now) { + MedicalPurchase3504Param medicalPurchase3504Param = new MedicalPurchase3504Param(); + medicalPurchase3504Param.setMedListCodg(supplyItemDetailDto.getYbNo()) + .setFixmedinsBchno(supplyItemDetailDto.getLotNumber()) + .setFixmedinsHilistId(supplyItemDetailDto.getItemBusNo()) + .setFixmedinsHilistName(supplyItemDetailDto.getItemTable()) + .setSplerName(supplyItemDetailDto.getSupplierName()).setPurcInvoNo(supplyItemDetailDto.getInvoiceNo()) + .setManuDate(supplyItemDetailDto.getStartTime()).setExpyEnd(supplyItemDetailDto.getEndTime()) + .setPurcRetnCnt(supplyItemDetailDto.getItemQuantity()).setPurcRetnStoinTime(now) + .setPurcRetnOpterName(supplyItemDetailDto.getPractitionerName()); + if (YbRxFlag.IMPORTANT_HERBAL_SLICES.getCode() == supplyItemDetailDto.getRxFlag()) { + medicalPurchase3504Param.setRxFlag(YbRxFlag.IMPORTANT_HERBAL_SLICES.getName()); + } else if (YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getCode() == supplyItemDetailDto.getRxFlag()) { + medicalPurchase3504Param.setRxFlag(YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getName()); + } else if (YbRxFlag.SELF_PREPARED_MEDICATION.getCode() == supplyItemDetailDto.getRxFlag()) { + medicalPurchase3504Param.setRxFlag(YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getName()); + } + return medicalPurchase3504Param; + } + + private Medical3503Param getMedical3503Param(SupplyItemDetailDto supplyItemDetailDto, Date now) { + Medical3503Param medical3503Param = new Medical3503Param(); + medical3503Param.setMedListCodg(supplyItemDetailDto.getYbNo()) + .setFixmedinsBchno(supplyItemDetailDto.getLotNumber()) + .setFixmedinsHilistId(supplyItemDetailDto.getItemBusNo()) + .setFixmedinsHilistName(supplyItemDetailDto.getItemTable()) + .setSplerName(supplyItemDetailDto.getSupplierName()).setManuLotnum(supplyItemDetailDto.getLotNumber()) + .setProdentpName(supplyItemDetailDto.getManufacturerText()) + .setAprvno(supplyItemDetailDto.getApprovalNumber()).setManuDate(supplyItemDetailDto.getStartTime()) + .setExpyEnd(supplyItemDetailDto.getEndTime()).setPurcRetnCnt(supplyItemDetailDto.getItemQuantity()) + .setPurcRetnStoinTime(now).setPurcRetnOpterName(supplyItemDetailDto.getPractitionerName()); + if (YbRxFlag.IMPORTANT_HERBAL_SLICES.getCode() == supplyItemDetailDto.getRxFlag()) { + medical3503Param.setRxFlag(YbRxFlag.IMPORTANT_HERBAL_SLICES.getName()); + } else if (YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getCode() == supplyItemDetailDto.getRxFlag()) { + medical3503Param.setRxFlag(YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getName()); + } else if (YbRxFlag.SELF_PREPARED_MEDICATION.getCode() == supplyItemDetailDto.getRxFlag()) { + medical3503Param.setRxFlag(YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getName()); + } + + return medical3503Param; + } + + private MedicalInventory3502Param getMedicalInventory3502Param(SupplyItemDetailDto supplyItemDetailDto, Date now, + String ybInvChgType) { + MedicalInventory3502Param medicalInventory3502Param = new MedicalInventory3502Param(); + // 查库存信息 + List inventoryItemList = + inventoryItemService.selectInventoryByItemId(supplyItemDetailDto.getItemId(), + supplyItemDetailDto.getLotNumber(), null, SecurityUtils.getLoginUser().getTenantId()); + // 查询商品价格信息 + List itemChargeDetailList = + receiptApprovalAppService.getItemChargeDetail(List.of(supplyItemDetailDto.getItemId())); + if (!inventoryItemList.isEmpty() && !itemChargeDetailList.isEmpty()) { + // 获取该项目所有的数量(最小单位) + BigDecimal totalQuantity = inventoryItemList.stream() + .map(item -> item.getQuantity() != null ? item.getQuantity() : BigDecimal.ZERO) + .reduce(BigDecimal.ZERO, BigDecimal::add); + // 最小单位售卖价格 + BigDecimal minPrice = BigDecimal.ZERO; + Optional price = itemChargeDetailList.stream() + .filter(x -> x.getConditionValue().equals(supplyItemDetailDto.getLotNumber())) + .map(ItemChargeDetailDto::getSellPrice).findFirst(); + if (price.isPresent()) { + if (supplyItemDetailDto.getPartPercent().compareTo(BigDecimal.ZERO) > 0) { + minPrice = price.get().divide(supplyItemDetailDto.getPartPercent(), RoundingMode.HALF_UP); + } + } + // 转换为JSON + ArrayNode medicalTraceNo = new tools.jackson.databind.ObjectMapper().createArrayNode(); + // 获取追溯码信息 + if (supplyItemDetailDto.getTraceNo() != null) { + List traceNoList = + Arrays.stream(supplyItemDetailDto.getTraceNo().split(CommonConstants.Common.COMMA)) + .map(String::trim).filter(s -> !s.isEmpty()).collect(Collectors.toList()); + for (String traceNo : traceNoList) { + ObjectNode traceNoMap = new tools.jackson.databind.ObjectMapper().createObjectNode(); + traceNoMap.put("drug_trac_codg", traceNo); + medicalTraceNo.add(traceNoMap); + } + } + medicalInventory3502Param.setMedListCodg(supplyItemDetailDto.getYbNo()).setInvChgType(ybInvChgType) + .setFixmedinsHilistId(supplyItemDetailDto.getItemBusNo()) + .setFixmedinsHilistName(supplyItemDetailDto.getItemTable()) + .setFixmedinsBchno(supplyItemDetailDto.getLotNumber()).setPric(minPrice).setCnt(totalQuantity) + .setInvChgTime(now).setDrugtracinfo(medicalTraceNo); + if (YbRxFlag.IMPORTANT_HERBAL_SLICES.getCode() == supplyItemDetailDto.getRxFlag()) { + medicalInventory3502Param.setRxFlag(YbRxFlag.IMPORTANT_HERBAL_SLICES.getName()); + } else if (YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getCode() == supplyItemDetailDto.getRxFlag()) { + medicalInventory3502Param.setRxFlag(YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getName()); + } else if (YbRxFlag.SELF_PREPARED_MEDICATION.getCode() == supplyItemDetailDto.getRxFlag()) { + medicalInventory3502Param.setRxFlag(YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getName()); + } + } + return medicalInventory3502Param; + } + + private MedicalInventory3501Param getMedicalInventory3501Param(SupplyItemDetailDto supplyItemDetailDto, Date date) { + MedicalInventory3501Param medicalInventory3501Param = new MedicalInventory3501Param(); + // 查库存信息 + List inventoryItemList = + inventoryItemService.selectInventoryByItemId(supplyItemDetailDto.getItemId(), + supplyItemDetailDto.getLotNumber(), null, SecurityUtils.getLoginUser().getTenantId()); + if (!inventoryItemList.isEmpty()) { + // 获取该项目所有的数量(最小单位) + BigDecimal totalQuantity = inventoryItemList.stream() + .map(item -> item.getQuantity() != null ? item.getQuantity() : BigDecimal.ZERO) + .reduce(BigDecimal.ZERO, BigDecimal::add); + medicalInventory3501Param.setMedListCodg(supplyItemDetailDto.getYbNo()) + .setFixmedinsHilistId(supplyItemDetailDto.getItemBusNo()) + .setFixmedinsHilistName(supplyItemDetailDto.getItemTable()).setInvdate(date).setInvCnt(totalQuantity) + .setFixmedinsBchno(supplyItemDetailDto.getLotNumber()).setManuDate(supplyItemDetailDto.getStartTime()) + .setExpyEnd(supplyItemDetailDto.getEndTime()); + if (YbRxFlag.IMPORTANT_HERBAL_SLICES.getCode() == supplyItemDetailDto.getRxFlag()) { + medicalInventory3501Param.setRxFlag(YbRxFlag.IMPORTANT_HERBAL_SLICES.getName()); + } else if (YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getCode() == supplyItemDetailDto.getRxFlag()) { + medicalInventory3501Param.setRxFlag(YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getName()); + } else if (YbRxFlag.SELF_PREPARED_MEDICATION.getCode() == supplyItemDetailDto.getRxFlag()) { + medicalInventory3501Param.setRxFlag(YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getName()); + } + } + return medicalInventory3501Param; + } + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryRequisitionOrderServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryRequisitionOrderServiceImpl.java new file mode 100644 index 000000000..0846fce6a --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryRequisitionOrderServiceImpl.java @@ -0,0 +1,163 @@ +package com.healthlink.his.web.pharmacy.dispensary.appservice.impl; + +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.healthlink.his.common.constant.CommonConstants; +import com.healthlink.his.common.constant.PromptMsgConstant; +import com.healthlink.his.common.enums.*; +import com.healthlink.his.common.utils.EnumUtils; +import com.healthlink.his.web.inventorymanage.dto.ProductStocktakingInitDto; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryCommonService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryRequisitionOrderService; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryInitDto; +import com.healthlink.his.web.pharmacy.dispensary.mapper.PharmacyDispensaryCommonMapper; +import com.healthlink.his.workflow.domain.SupplyRequest; +import com.healthlink.his.workflow.service.ISupplyRequestService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 药房请领单 + * + * @author yuxj + * @date 2025-07-22 + */ +@Service +public class PharmacyDispensaryRequisitionOrderServiceImpl implements IPharmacyDispensaryRequisitionOrderService { + + @Resource + private AssignSeqUtil assignSeqUtil; + + @Resource + private ISupplyRequestService supplyRequestService; + + @Autowired + private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService; + + @Autowired + private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper; + + /** + * 初始化 + * + * @return 初始化信息 + */ + @Override + public R init() { + + PharmacyDispensaryInitDto requisitionOrderInitDto = pharmacyDispensaryCommonService.init(); + + // 单据分类 + List supplyCategoryOption = new ArrayList<>(); + // supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), + // SupplyCategory.NORMAL.getInfo())); + // supplyCategoryOption.add(new + // PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.PURCHASE_APPLICATION.getValue(), + // SupplyCategory.PURCHASE_APPLICATION.getInfo())); + + requisitionOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); + + return R.ok(requisitionOrderInitDto); + } + + /** + * 请领单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 请领单单据详情 + */ + @Override + public R getDetailPage(String busNo, Integer pageNo, Integer pageSize) { + + Page requisitionOrderDtoDetailPage = + pharmacyDispensaryCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo); + + requisitionOrderDtoDetailPage.getRecords().forEach(e -> { + // 单据分类 + e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum())); + // 单据状态 + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum())); + // 单据类型 + e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum())); + }); + + List unitList; + for (PharmacyDispensaryDetailDto item : requisitionOrderDtoDetailPage.getRecords()) { + unitList = new ArrayList<>(); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText())); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText())); + + item.setUnitList(unitList); + } + + return R.ok(requisitionOrderDtoDetailPage); + } + + /** + * 获取单据号 + * + * @return 初始化信息 + */ + @Override + public R getBusNo() { + + ProductStocktakingInitDto initDto = new ProductStocktakingInitDto(); + // 单据号 + initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.PURCHASE_REQUISITION.getPrefix(), 4)); + + return R.ok(initDto); + } + + /** + * 添加/编辑请领单 + * + * @param requisitionOrderDtoList 请领信息 + * @return 操作结果 + */ + + @Override + public R addOrEditRequisitionOrder(List requisitionOrderDtoList) { + // 请求数据取得 + List requestList = + supplyRequestService.getSupplyByBusNo(requisitionOrderDtoList.get(0).getBusNo()); + if (!requestList.isEmpty()) { + // 请求id取得 + List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); + // 单据信息删除 + supplyRequestService.removeByIds(requestIdList); + } + + List supplyRequestList = new ArrayList<>(); + for (PharmacyDispensaryDetailDto item : requisitionOrderDtoList) { + SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo()) + .setTypeEnum(SupplyType.PURCHASE_REQUISITION.getValue()) + .setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum()) + .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId()) + .setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()) + .setRetailPrice(item.getRetailPrice()).setTotalRetailPrice(item.getTotalRetailPrice()) + .setSpecificationInventory(item.getSpecificationInventory()).setSupplierId(item.getSupplierId()) + .setReason(item.getReason()).setSourceTypeEnum(LocationForm.CABINET.getValue()) + .setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.PHARMACY.getValue()) + .setPurposeLocationId(item.getPurposeLocationId()).setApplicantId(item.getApplicantId()) + .setApplyTime(item.getApplyTime()).setRemake(item.getRemake()); + supplyRequestList.add(supplyRequest); + } + // 更新请求表 + boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null)); + } + + return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryReturnToWarehouseOrderServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryReturnToWarehouseOrderServiceImpl.java new file mode 100644 index 000000000..8a650dddb --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryReturnToWarehouseOrderServiceImpl.java @@ -0,0 +1,164 @@ +package com.healthlink.his.web.pharmacy.dispensary.appservice.impl; + +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.healthlink.his.common.constant.CommonConstants; +import com.healthlink.his.common.constant.PromptMsgConstant; +import com.healthlink.his.common.enums.*; +import com.healthlink.his.common.utils.EnumUtils; +import com.healthlink.his.web.inventorymanage.dto.ProductStocktakingInitDto; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryCommonService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryReturnToWarehouseOrderService; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryInitDto; +import com.healthlink.his.web.pharmacy.dispensary.mapper.PharmacyDispensaryCommonMapper; +import com.healthlink.his.workflow.domain.SupplyRequest; +import com.healthlink.his.workflow.service.ISupplyRequestService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 药房退库单 + * + * @author yuxj + * @date 2025-07-22 + */ +@Service +public class PharmacyDispensaryReturnToWarehouseOrderServiceImpl + implements IPharmacyDispensaryReturnToWarehouseOrderService { + + @Resource + private AssignSeqUtil assignSeqUtil; + + @Resource + private ISupplyRequestService supplyRequestService; + + @Autowired + private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService; + @Autowired + private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper; + + /** + * 初始化 + * + * @return 初始化信息 + */ + @Override + public R init() { + + PharmacyDispensaryInitDto purchaseOrderInitDto = pharmacyDispensaryCommonService.init(); + + // 单据分类 + List supplyCategoryOption = new ArrayList<>(); + // supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), + // SupplyCategory.NORMAL.getInfo())); + + purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); + + return R.ok(purchaseOrderInitDto); + } + + /** + * 退库单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 退库单单据详情 + */ + @Override + public R getDetailPage(String busNo, Integer pageNo, Integer pageSize) { + + Page returnToDispensaryOrderDtoDetailPage = + pharmacyDispensaryCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo); + + returnToDispensaryOrderDtoDetailPage.getRecords().forEach(e -> { + // 单据分类 + e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum())); + // 单据状态 + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum())); + // 单据类型 + e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum())); + }); + + List unitList; + for (PharmacyDispensaryDetailDto item : returnToDispensaryOrderDtoDetailPage.getRecords()) { + unitList = new ArrayList<>(); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText())); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText())); + + item.setUnitList(unitList); + } + return R.ok(returnToDispensaryOrderDtoDetailPage); + } + + /** + * 获取单据号 + * + * @return 初始化信息 + */ + @Override + public R getBusNo() { + + ProductStocktakingInitDto initDto = new ProductStocktakingInitDto(); + // 单据号 + initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.PURCHASE_RETURN.getPrefix(), 4)); + + return R.ok(initDto); + } + + /** + * 添加/编辑退库单 + * + * @param returnToDispensaryOrderDtoList 退库信息 + * @return 操作结果 + */ + + @Override + public R addOrEditReturnToWarehouseOrder(List returnToDispensaryOrderDtoList) { + // 请求数据取得 + List requestList = + supplyRequestService.getSupplyByBusNo(returnToDispensaryOrderDtoList.get(0).getBusNo()); + if (!requestList.isEmpty()) { + // 请求id取得 + List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); + // 单据信息删除 + supplyRequestService.removeByIds(requestIdList); + } + + List supplyRequestList = new ArrayList<>(); + Date applyTime = DateUtils.getNowDate(); + for (PharmacyDispensaryDetailDto item : returnToDispensaryOrderDtoList) { + SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo()) + .setTypeEnum(SupplyType.PURCHASE_RETURN.getValue()) + .setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum()) + .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId()) + .setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()) + .setRetailPrice(item.getRetailPrice()).setTotalRetailPrice(item.getTotalRetailPrice()) + .setStartTime(item.getStartTime()).setEndTime(item.getEndTime()).setLotNumber(item.getLotNumber()) + .setTraceNo(item.getTraceNo()).setTraceNoUnitCode(item.getTraceNoUnitCode()) + .setSupplierId(item.getSupplierId()).setReason(item.getReason()) + .setSourceTypeEnum(LocationForm.PHARMACY.getValue()).setSourceLocationId(item.getSourceLocationId()) + .setPurposeTypeEnum(LocationForm.CABINET.getValue()).setPurposeLocationId(item.getPurposeLocationId()) + .setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake()); + supplyRequestList.add(supplyRequest); + } + // 更新请求表 + boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null)); + } + + return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryStockInOrderServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryStockInOrderServiceImpl.java new file mode 100644 index 000000000..e78ed4521 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryStockInOrderServiceImpl.java @@ -0,0 +1,170 @@ +package com.healthlink.his.web.pharmacy.dispensary.appservice.impl; + +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.healthlink.his.common.constant.CommonConstants; +import com.healthlink.his.common.constant.PromptMsgConstant; +import com.healthlink.his.common.enums.*; +import com.healthlink.his.common.utils.EnumUtils; +import com.healthlink.his.web.inventorymanage.dto.ProductStocktakingInitDto; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryCommonService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryStockInOrderService; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryInitDto; +import com.healthlink.his.web.pharmacy.dispensary.mapper.PharmacyDispensaryCommonMapper; +import com.healthlink.his.workflow.domain.SupplyRequest; +import com.healthlink.his.workflow.service.ISupplyRequestService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 药房入库单 + * + * @author yuxj + * @date 2025-07-22 + */ +@Service +public class PharmacyDispensaryStockInOrderServiceImpl implements IPharmacyDispensaryStockInOrderService { + + @Resource + private AssignSeqUtil assignSeqUtil; + + @Resource + private ISupplyRequestService supplyRequestService; + + @Autowired + private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService; + @Autowired + private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper; + + /** + * 初始化 + * + * @return 初始化信息 + */ + @Override + public R init() { + + PharmacyDispensaryInitDto purchaseOrderInitDto = pharmacyDispensaryCommonService.init(); + + // 单据分类 + List supplyCategoryOption = new ArrayList<>(); +// supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), +// SupplyCategory.NORMAL.getInfo())); + + purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); + + return R.ok(purchaseOrderInitDto); + } + + /** + * 入库单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 入库单单据详情 + */ + @Override + public R getDetailPage(String busNo, Integer pageNo, Integer pageSize) { + + Page stockInOrderDtoDetailPage = + pharmacyDispensaryCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo); + + stockInOrderDtoDetailPage.getRecords().forEach(e -> { + // 单据分类 + e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum())); + // 单据状态 + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum())); + // 单据类型 + e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum())); + }); + + List unitList; + for (PharmacyDispensaryDetailDto item : stockInOrderDtoDetailPage.getRecords()) { + unitList = new ArrayList<>(); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText())); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText())); + + item.setUnitList(unitList); + } + return R.ok(stockInOrderDtoDetailPage); + } + + /** + * 获取单据号 + * + * @return 初始化信息 + */ + @Override + public R getBusNo() { + + ProductStocktakingInitDto initDto = new ProductStocktakingInitDto(); + // 单据号 + initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.PURCHASE_STOCKIN.getPrefix(), 4)); + + return R.ok(initDto); + } + + /** + * 添加/编辑入库单 + * + * @param stockInOrderDtoList 入库信息 + * @return 操作结果 + */ + + @Override + public R addOrEditStockInOrder(List stockInOrderDtoList) { + // 请求数据取得 + List requestList = supplyRequestService.getSupplyByBusNo(stockInOrderDtoList.get(0).getBusNo()); + if (!requestList.isEmpty()) { + // 请求id取得 + List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); + // 单据信息删除 + supplyRequestService.removeByIds(requestIdList); + } + //添加原始单据号 + if(stockInOrderDtoList.get(0).getOriginalBusNo()!=null){ + // 审批单据并返回单据详情 + List agreedList = supplyRequestService.addOriginalBusNo(stockInOrderDtoList.get(0).getOriginalBusNo(), stockInOrderDtoList.get(0).getBusNo()); + if (agreedList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + + List supplyRequestList = new ArrayList<>(); + Date applyTime = DateUtils.getNowDate(); + for (PharmacyDispensaryDetailDto item : stockInOrderDtoList) { + SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo()) + .setTypeEnum(SupplyType.PURCHASE_STOCKIN.getValue()) + .setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum()) + .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId()) + .setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()) + .setRetailPrice(item.getRetailPrice()).setTotalRetailPrice(item.getTotalRetailPrice()) + .setStartTime(item.getStartTime()).setEndTime(item.getEndTime()).setLotNumber(item.getLotNumber()) + .setTraceNo(item.getTraceNo()).setTraceNoUnitCode(item.getTraceNoUnitCode()) + .setSupplierId(item.getSupplierId()).setReason(item.getReason()) + .setSourceTypeEnum(LocationForm.CABINET.getValue()).setSourceLocationId(item.getSourceLocationId()) + .setPurposeTypeEnum(LocationForm.PHARMACY.getValue()).setPurposeLocationId(item.getPurposeLocationId()) + .setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake()); + supplyRequestList.add(supplyRequest); + } + // 更新请求表 + boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null)); + } + + return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryStocktakingOrderServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryStocktakingOrderServiceImpl.java new file mode 100644 index 000000000..82e2e41e0 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryStocktakingOrderServiceImpl.java @@ -0,0 +1,165 @@ +package com.healthlink.his.web.pharmacy.dispensary.appservice.impl; + +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.healthlink.his.common.constant.CommonConstants; +import com.healthlink.his.common.constant.PromptMsgConstant; +import com.healthlink.his.common.enums.*; +import com.healthlink.his.common.utils.EnumUtils; +import com.healthlink.his.web.inventorymanage.dto.ProductStocktakingInitDto; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryCommonService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryStocktakingOrderService; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryInitDto; +import com.healthlink.his.web.pharmacy.dispensary.mapper.PharmacyDispensaryCommonMapper; +import com.healthlink.his.workflow.domain.SupplyRequest; +import com.healthlink.his.workflow.service.ISupplyRequestService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 药房盘点单 + * + * @author yuxj + * @date 2025-07-22 + */ +@Service +public class PharmacyDispensaryStocktakingOrderServiceImpl implements IPharmacyDispensaryStocktakingOrderService { + + @Resource + private AssignSeqUtil assignSeqUtil; + + @Resource + private ISupplyRequestService supplyRequestService; + + @Autowired + private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService; + @Autowired + private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper; + + /** + * 初始化 + * + * @return 初始化信息 + */ + @Override + public R init() { + + PharmacyDispensaryInitDto purchaseOrderInitDto = pharmacyDispensaryCommonService.init(); + + // 单据分类 + List supplyCategoryOption = new ArrayList<>(); +// supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption( +// SupplyCategory.GENERAL_STOCKTAKING.getValue(), SupplyCategory.GENERAL_STOCKTAKING.getInfo())); +// supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption( +// SupplyCategory.MONTHLY_STOCKTAKING.getValue(), SupplyCategory.MONTHLY_STOCKTAKING.getInfo())); + + purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); + + return R.ok(purchaseOrderInitDto); + } + + /** + * 盘点单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 盘点单单据详情 + */ + @Override + public R getDetailPage(String busNo, Integer pageNo, Integer pageSize) { + + Page stocktakingOrderDtoDetailPage = + pharmacyDispensaryCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo); + + stocktakingOrderDtoDetailPage.getRecords().forEach(e -> { + // 单据分类 + e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum())); + // 单据状态 + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum())); + // 单据类型 + e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum())); + }); + + List unitList; + for (PharmacyDispensaryDetailDto item : stocktakingOrderDtoDetailPage.getRecords()) { + unitList = new ArrayList<>(); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText())); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText())); + + item.setUnitList(unitList); + } + return R.ok(stocktakingOrderDtoDetailPage); + } + + /** + * 获取单据号 + * + * @return 初始化信息 + */ + @Override + public R getBusNo() { + + ProductStocktakingInitDto initDto = new ProductStocktakingInitDto(); + // 单据号 + initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.PURCHASE_STOCKTAKING.getPrefix(), 4)); + + return R.ok(initDto); + } + + /** + * 添加/编辑盘点单 + * + * @param stocktakingOrderDtoList 盘点信息 + * @return 操作结果 + */ + + @Override + public R addOrEditStocktakingOrder(List stocktakingOrderDtoList) { + // 请求数据取得 + List requestList = + supplyRequestService.getSupplyByBusNo(stocktakingOrderDtoList.get(0).getBusNo()); + if (!requestList.isEmpty()) { + // 请求id取得 + List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); + // 单据信息删除 + supplyRequestService.removeByIds(requestIdList); + } + + List supplyRequestList = new ArrayList<>(); + Date applyTime = DateUtils.getNowDate(); + for (PharmacyDispensaryDetailDto item : stocktakingOrderDtoList) { + SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo()) + .setTypeEnum(SupplyType.PURCHASE_STOCKTAKING.getValue()) + .setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum()) + .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId()) + .setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()) + .setTotalQuantity(item.getTotalQuantity()).setPrice(item.getPrice()).setTotalPrice(item.getTotalPrice()) + .setRetailPrice(item.getRetailPrice()).setTotalRetailPrice(item.getTotalRetailPrice()) + .setBatchInventory(item.getBatchInventory()).setLotNumber(item.getLotNumber()) + .setTraceNo(item.getTraceNo()).setTraceNoUnitCode(item.getTraceNoUnitCode()) + .setReasonCode(item.getReasonCode()).setReason(item.getReason()) + .setPurposeTypeEnum(LocationForm.PHARMACY.getValue()).setPurposeLocationId(item.getPurposeLocationId()) + .setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake()); + supplyRequestList.add(supplyRequest); + } + // 更新请求表 + boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null)); + } + + return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryTransferInOrderServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryTransferInOrderServiceImpl.java new file mode 100644 index 000000000..622771087 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryTransferInOrderServiceImpl.java @@ -0,0 +1,164 @@ +package com.healthlink.his.web.pharmacy.dispensary.appservice.impl; + +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.healthlink.his.common.constant.CommonConstants; +import com.healthlink.his.common.constant.PromptMsgConstant; +import com.healthlink.his.common.enums.*; +import com.healthlink.his.common.utils.EnumUtils; +import com.healthlink.his.web.inventorymanage.dto.ProductStocktakingInitDto; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryCommonService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryTransferInOrderService; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryInitDto; +import com.healthlink.his.web.pharmacy.dispensary.mapper.PharmacyDispensaryCommonMapper; +import com.healthlink.his.workflow.domain.SupplyRequest; +import com.healthlink.his.workflow.service.ISupplyRequestService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 药房调入单 + * + * @author yuxj + * @date 2025-07-22 + */ +@Service +public class PharmacyDispensaryTransferInOrderServiceImpl implements IPharmacyDispensaryTransferInOrderService { + + @Resource + private AssignSeqUtil assignSeqUtil; + + @Resource + private ISupplyRequestService supplyRequestService; + @Autowired + private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService; + @Autowired + private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper; + + /** + * 初始化 + * + * @return 初始化信息 + */ + @Override + public R init() { + + PharmacyDispensaryInitDto purchaseOrderInitDto = pharmacyDispensaryCommonService.init(); + + // 单据分类 + List supplyCategoryOption = new ArrayList<>(); + // supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), + // SupplyCategory.NORMAL.getInfo())); + + purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); + + return R.ok(purchaseOrderInitDto); + } + + /** + * 调入单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 调入单单据详情 + */ + @Override + public R getDetailPage(String busNo, Integer pageNo, Integer pageSize) { + + Page transferInOrderDtoDetailPage = + pharmacyDispensaryCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo); + + transferInOrderDtoDetailPage.getRecords().forEach(e -> { + // 单据分类 + e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum())); + // 单据状态 + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum())); + // 单据类型 + e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum())); + }); + + List unitList; + for (PharmacyDispensaryDetailDto item : transferInOrderDtoDetailPage.getRecords()) { + unitList = new ArrayList<>(); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText())); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText())); + + item.setUnitList(unitList); + } + + return R.ok(transferInOrderDtoDetailPage); + } + + /** + * 获取单据号 + * + * @return 初始化信息 + */ + @Override + public R getBusNo() { + + ProductStocktakingInitDto initDto = new ProductStocktakingInitDto(); + // 单据号 + initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.PURCHASE_TRANSFERIN.getPrefix(), 4)); + + return R.ok(initDto); + } + + /** + * 添加/编辑采购单 + * + * @param transferInOrderDtoList 采购信息 + * @return 操作结果 + */ + + @Override + public R addOrEditTransferInOrder(List transferInOrderDtoList) { + // 请求数据取得 + List requestList = + supplyRequestService.getSupplyByBusNo(transferInOrderDtoList.get(0).getBusNo()); + if (!requestList.isEmpty()) { + // 请求id取得 + List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); + // 单据信息删除 + supplyRequestService.removeByIds(requestIdList); + } + + List supplyRequestList = new ArrayList<>(); + Date applyTime = DateUtils.getNowDate(); + for (PharmacyDispensaryDetailDto item : transferInOrderDtoList) { + SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo()) + .setTypeEnum(SupplyType.PURCHASE_TRANSFERIN.getValue()) + .setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()) + .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId()) + .setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()).setRetailPrice(item.getPrice()) + .setTotalRetailPrice(item.getTotalPrice()).setBatchInventory(item.getBatchInventory()) + .setSpecificationInventory(item.getSpecificationInventory()).setEndTime(item.getEndTime()) + .setLotNumber(item.getLotNumber()).setTraceNo(item.getTraceNo()) + .setTraceNoUnitCode(item.getTraceNoUnitCode()).setSupplierId(item.getSupplierId()) + .setReason(item.getReason()).setSourceTypeEnum(LocationForm.PHARMACY.getValue()) + .setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.PHARMACY.getValue()) + .setPurposeLocationId(item.getPurposeLocationId()).setApplicantId(item.getApplicantId()) + .setApplyTime(applyTime).setRemake(item.getRemake()); + supplyRequestList.add(supplyRequest); + } + // 更新请求表 + boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null)); + } + + return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryTransferOutOrderServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryTransferOutOrderServiceImpl.java new file mode 100644 index 000000000..2190379a0 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/appservice/impl/PharmacyDispensaryTransferOutOrderServiceImpl.java @@ -0,0 +1,162 @@ +package com.healthlink.his.web.pharmacy.dispensary.appservice.impl; + +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.healthlink.his.common.constant.CommonConstants; +import com.healthlink.his.common.constant.PromptMsgConstant; +import com.healthlink.his.common.enums.*; +import com.healthlink.his.common.utils.EnumUtils; +import com.healthlink.his.web.inventorymanage.dto.ProductStocktakingInitDto; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryCommonService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryTransferOutOrderService; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryInitDto; +import com.healthlink.his.web.pharmacy.dispensary.mapper.PharmacyDispensaryCommonMapper; +import com.healthlink.his.workflow.domain.SupplyRequest; +import com.healthlink.his.workflow.service.ISupplyRequestService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 药房调出单 + * + * @author yuxj + * @date 2025-07-22 + */ +@Service +public class PharmacyDispensaryTransferOutOrderServiceImpl implements IPharmacyDispensaryTransferOutOrderService { + + @Resource + private AssignSeqUtil assignSeqUtil; + @Resource + private ISupplyRequestService supplyRequestService; + @Autowired + private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService; + @Autowired + private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper; + + /** + * 初始化 + * + * @return 初始化信息 + */ + @Override + public R init() { + + PharmacyDispensaryInitDto purchaseOrderInitDto = pharmacyDispensaryCommonService.init(); + + // 单据分类 + List supplyCategoryOption = new ArrayList<>(); +// supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), +// SupplyCategory.NORMAL.getInfo())); + + purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); + + return R.ok(purchaseOrderInitDto); + } + + /** + * 调出单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 调出单单据详情 + */ + @Override + public R getDetailPage(String busNo, Integer pageNo, Integer pageSize) { + + Page transferOutOrderDtoDetailPage = + pharmacyDispensaryCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo); + + transferOutOrderDtoDetailPage.getRecords().forEach(e -> { + // 单据分类 + e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum())); + // 单据状态 + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum())); + // 单据类型 + e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum())); + }); + + List unitList; + for (PharmacyDispensaryDetailDto item : transferOutOrderDtoDetailPage.getRecords()) { + unitList = new ArrayList<>(); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText())); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText())); + + item.setUnitList(unitList); + } + + return R.ok(transferOutOrderDtoDetailPage); + } + + /** + * 获取单据号 + * + * @return 初始化信息 + */ + @Override + public R getBusNo() { + + ProductStocktakingInitDto initDto = new ProductStocktakingInitDto(); + // 单据号 + initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.PURCHASE_TRANSFEROUT.getPrefix(), 4)); + + return R.ok(initDto); + } + + /** + * 添加/编辑采购单 + * + * @param transferOutOrderDtoList 采购信息 + * @return 操作结果 + */ + + @Override + public R addOrEditTransferOutOrder(List transferOutOrderDtoList) { + // 请求数据取得 + List requestList = supplyRequestService.getSupplyByBusNo(transferOutOrderDtoList.get(0).getBusNo()); + if (!requestList.isEmpty()) { + // 请求id取得 + List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); + // 单据信息删除 + supplyRequestService.removeByIds(requestIdList); + } + + List supplyRequestList = new ArrayList<>(); + Date applyTime = DateUtils.getNowDate(); + for (PharmacyDispensaryDetailDto item : transferOutOrderDtoList) { + SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo()) + .setTypeEnum(SupplyType.PURCHASE_TRANSFEROUT.getValue()) + .setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()) + .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId()) + .setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()).setRetailPrice(item.getPrice()) + .setTotalRetailPrice(item.getTotalPrice()).setBatchInventory(item.getBatchInventory()) + .setSpecificationInventory(item.getSpecificationInventory()).setEndTime(item.getEndTime()) + .setLotNumber(item.getLotNumber()).setTraceNo(item.getTraceNo()) + .setTraceNoUnitCode(item.getTraceNoUnitCode()).setSupplierId(item.getSupplierId()) + .setReason(item.getReason()).setSourceTypeEnum(LocationForm.PHARMACY.getValue()) + .setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.PHARMACY.getValue()) + .setPurposeLocationId(item.getPurposeLocationId()) + .setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake()); + supplyRequestList.add(supplyRequest); + } + // 更新请求表 + boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null)); + } + + return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryDispensingOrderController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryDispensingOrderController.java new file mode 100644 index 000000000..863419b83 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryDispensingOrderController.java @@ -0,0 +1,78 @@ +package com.healthlink.his.web.pharmacy.dispensary.controller; + +import com.core.common.core.domain.R; +import com.healthlink.his.common.enums.SupplyType; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryCommonService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryDispensingOrderService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryReceiptApprovalService; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensarySearchParam; +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 jakarta.servlet.http.HttpServletRequest; + +/** + * 药房发药单 + * + * @author yuxj + * @date 2025-07-22 + */ +@RestController +@RequestMapping("/pharmacy-dispensary/dispensing-order") +@Slf4j +public class PharmacyDispensaryDispensingOrderController { + + @Autowired + private IPharmacyDispensaryDispensingOrderService pharmacyDispensaryDispensingOrderService; + + @Autowired + private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService; + @Autowired + private IPharmacyDispensaryReceiptApprovalService pharmacyDispensaryReceiptApprovalService; + /** + * 发药单初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R init() { + return pharmacyDispensaryDispensingOrderService.init(); + } + + /** + * 发药单单据列表 + * + * @param dispensingOrderSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 发药单据分页列表 + */ + @GetMapping(value = "/dispensing-order-page") + public R getPage(PharmacyDispensarySearchParam dispensingOrderSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return pharmacyDispensaryCommonService.getPage(dispensingOrderSearchParam, pageNo, pageSize, searchKey, request, + "1", SupplyType.DISPENSING_ORDER.getValue()); + } + /** + * 发药单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 发药单单据详情 + */ + @GetMapping(value = "/dispensing-order-detail-page") + public R getDetail(@RequestParam String busNo, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return pharmacyDispensaryDispensingOrderService.getDetailPage(busNo, pageNo, pageSize); + } +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryProfitLossOrderController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryProfitLossOrderController.java new file mode 100644 index 000000000..f13b3316e --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryProfitLossOrderController.java @@ -0,0 +1,134 @@ +package com.healthlink.his.web.pharmacy.dispensary.controller; + +import com.core.common.core.domain.R; +import com.healthlink.his.common.enums.SupplyType; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryCommonService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryProfitLossOrderService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryReceiptApprovalService; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensarySearchParam; +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 jakarta.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * 药房损益单 + * + * @author yuxj + * @date 2025-07-22 + */ +@RestController +@RequestMapping("/pharmacy-dispensary/profitLoss-order") +@Slf4j +public class PharmacyDispensaryProfitLossOrderController { + + @Autowired + private IPharmacyDispensaryProfitLossOrderService pharmacyDispensaryProfitLossOrderService; + + @Autowired + private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService; + @Autowired + private IPharmacyDispensaryReceiptApprovalService pharmacyDispensaryReceiptApprovalService; + /** + * 损益单初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R init() { + return pharmacyDispensaryProfitLossOrderService.init(); + } + + /** + * 获取药品 + * + * @param purchaseOrderSearchParam 查询条件 + * @return 药品信息 + */ + @GetMapping(value = "/medication-info") + public R getMedicationInfo(PharmacyDispensarySearchParam purchaseOrderSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return pharmacyDispensaryCommonService.getMedicationInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request); + } + + /** + * 损益单单据列表 + * + * @param profitLossOrderSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 损益单据分页列表 + */ + @GetMapping(value = "/profitLoss-order-page") + public R getPage(PharmacyDispensarySearchParam profitLossOrderSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return pharmacyDispensaryCommonService.getPage(profitLossOrderSearchParam, pageNo, pageSize, searchKey, request, + null, SupplyType.PURCHASE_PRPFITLOSS.getValue()); + } + /** + * 损益单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 损益单单据详情 + */ + @GetMapping(value = "/profitLoss-order-detail-page") + public R getDetail(@RequestParam String busNo, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return pharmacyDispensaryProfitLossOrderService.getDetailPage(busNo, pageNo, pageSize); + } + /** + * 获取单据号 + * + * @return 初始化信息 + */ + @GetMapping(value = "/busNo-init") + public R getBusNo() { + return pharmacyDispensaryProfitLossOrderService.getBusNo(); + } + + /** + * 添加/编辑损益单 + * + * @param profitLossOrderDtoList 损益信息 + * @return 操作结果 + */ + @PutMapping("/addOrEdit-profitLossOrder") + public R addOrEditProfitLossOrder(@Validated @RequestBody List profitLossOrderDtoList) { + return pharmacyDispensaryProfitLossOrderService.addOrEditProfitLossOrder(profitLossOrderDtoList); + } + + /** + * 删除单据 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @DeleteMapping("/delete-profitLossOrder") + public R deleteProfitLossOrder(@RequestParam String busNo) { + return pharmacyDispensaryCommonService.deleteOrder(busNo); + } + /** + * 同意审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @PutMapping("/agree-approval") + public R agreeApproval(@RequestParam String busNo) { + return pharmacyDispensaryReceiptApprovalService.profitLossAgreeApproved(busNo); + } + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryRequisitionOrderController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryRequisitionOrderController.java new file mode 100644 index 000000000..b78dae3d7 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryRequisitionOrderController.java @@ -0,0 +1,136 @@ +package com.healthlink.his.web.pharmacy.dispensary.controller; + +import com.core.common.core.domain.R; +import com.healthlink.his.common.enums.SupplyType; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryCommonService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryReceiptApprovalService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryRequisitionOrderService; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensarySearchParam; +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 jakarta.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * 药房请领单 + * + * @author yuxj + * @date 2025-07-22 + */ +@RestController +@RequestMapping("/pharmacy-dispensary/requisition-order") +@Slf4j +public class PharmacyDispensaryRequisitionOrderController { + + @Autowired + private IPharmacyDispensaryRequisitionOrderService pharmacyDispensaryRequisitionOrderService; + + @Autowired + private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService; + + @Autowired + private IPharmacyDispensaryReceiptApprovalService pharmacyDispensaryReceiptApprovalService; + /** + * 请领单初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R init() { + return pharmacyDispensaryRequisitionOrderService.init(); + } + + /** + * 获取药品 + * + * @param requisitionOrderSearchParam 查询条件 + * @return 药品信息 + */ + @GetMapping(value = "/medication-info") + public R getMedicationInfo(PharmacyDispensarySearchParam requisitionOrderSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return pharmacyDispensaryCommonService.getMedicationInfo(requisitionOrderSearchParam, pageNo, pageSize, searchKey, request); + } + + /** + * 请领单单据列表 + * + * @param requisitionOrderSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 请领单据分页列表 + */ + @GetMapping(value = "/requisition-order-page") + public R getPage(PharmacyDispensarySearchParam requisitionOrderSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return pharmacyDispensaryCommonService.getPage(requisitionOrderSearchParam, pageNo, pageSize, searchKey, request, + null, SupplyType.PURCHASE_REQUISITION.getValue()); + } + /** + * 请领单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 请领单单据详情 + */ + @GetMapping(value = "/requisition-order-detail-page") + public R getDetail(@RequestParam String busNo, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return pharmacyDispensaryRequisitionOrderService.getDetailPage(busNo, pageNo, pageSize); + } + /** + * 获取单据号 + * + * @return 初始化信息 + */ + @GetMapping(value = "/busNo-init") + public R getBusNo() { + return pharmacyDispensaryRequisitionOrderService.getBusNo(); + } + + /** + * 添加/编辑采购单 + * + * @param requisitionOrderDtoList 采购信息 + * @return 操作结果 + */ + @PutMapping("/addOrEdit-requisitionOrder") + public R addOrEditRequisitionOrder(@Validated @RequestBody List requisitionOrderDtoList) { + return pharmacyDispensaryRequisitionOrderService.addOrEditRequisitionOrder(requisitionOrderDtoList); + } + + /** + * 删除单据 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @DeleteMapping("/delete-requisitionOrder") + public R deleteRequisitionOrder(@RequestParam String busNo) { + return pharmacyDispensaryCommonService.deleteOrder(busNo); + } + + /** + * 同意审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @PutMapping("/agree-approval") + public R agreeApproval(@RequestParam String busNo) { + return pharmacyDispensaryReceiptApprovalService.requisitionOrderAgreeApproval(busNo); + } + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryReturnToWarehouseOrderController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryReturnToWarehouseOrderController.java new file mode 100644 index 000000000..7abef5e57 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryReturnToWarehouseOrderController.java @@ -0,0 +1,134 @@ +package com.healthlink.his.web.pharmacy.dispensary.controller; + +import com.core.common.core.domain.R; +import com.healthlink.his.common.enums.SupplyType; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryCommonService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryReceiptApprovalService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryReturnToWarehouseOrderService; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensarySearchParam; +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 jakarta.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * 药房退库单 + * + * @author yuxj + * @date 2025-07-22 + */ +@RestController +@RequestMapping("/pharmacy-dispensary/returnToWarehouse-order") +@Slf4j +public class PharmacyDispensaryReturnToWarehouseOrderController { + + @Autowired + private IPharmacyDispensaryReturnToWarehouseOrderService pharmacyDispensaryReturnToWarehouseOrderService; + + @Autowired + private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService; + @Autowired + private IPharmacyDispensaryReceiptApprovalService pharmacyDispensaryReceiptApprovalService; + /** + * 退库单初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R init() { + return pharmacyDispensaryReturnToWarehouseOrderService.init(); + } + + /** + * 获取药品 + * + * @param purchaseOrderSearchParam 查询条件 + * @return 药品信息 + */ + @GetMapping(value = "/medication-info") + public R getMedicationInfo(PharmacyDispensarySearchParam purchaseOrderSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return pharmacyDispensaryCommonService.getMedicationInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request); + } + + /** + * 退库单单据列表 + * + * @param returnToDispensaryOrderSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 退库单据分页列表 + */ + @GetMapping(value = "/returnToDispensary-order-page") + public R getPage(PharmacyDispensarySearchParam returnToDispensaryOrderSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return pharmacyDispensaryCommonService.getPage(returnToDispensaryOrderSearchParam, pageNo, pageSize, searchKey, request, + "1", SupplyType.PURCHASE_RETURN.getValue()); + } + /** + * 退库单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 退库单单据详情 + */ + @GetMapping(value = "/returnToDispensary-order-detail-page") + public R getDetail(@RequestParam String busNo, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return pharmacyDispensaryReturnToWarehouseOrderService.getDetailPage(busNo, pageNo, pageSize); + } + /** + * 获取单据号 + * + * @return 初始化信息 + */ + @GetMapping(value = "/busNo-init") + public R getBusNo() { + return pharmacyDispensaryReturnToWarehouseOrderService.getBusNo(); + } + + /** + * 添加/编辑退库单 + * + * @param returnToDispensaryOrderDtoList 退库信息 + * @return 操作结果 + */ + @PutMapping("/addOrEdit-returnToDispensaryOrder") + public R addOrEditReturnToDispensaryOrder(@Validated @RequestBody List returnToDispensaryOrderDtoList) { + return pharmacyDispensaryReturnToWarehouseOrderService.addOrEditReturnToWarehouseOrder(returnToDispensaryOrderDtoList); + } + + /** + * 删除单据 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @DeleteMapping("/delete-returnToDispensaryOrder") + public R deleteReturnToDispensaryOrder(@RequestParam String busNo) { + return pharmacyDispensaryCommonService.deleteOrder(busNo); + } + /** + * 同意审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @PutMapping("/agree-approval") + public R agreeApproval(@RequestParam String busNo) { + return pharmacyDispensaryReceiptApprovalService.returnToWarehouseAgreeApproved(busNo); + } + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryStockInOrderController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryStockInOrderController.java new file mode 100644 index 000000000..892327094 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryStockInOrderController.java @@ -0,0 +1,134 @@ +package com.healthlink.his.web.pharmacy.dispensary.controller; + +import com.core.common.core.domain.R; +import com.healthlink.his.common.enums.SupplyType; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryCommonService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryReceiptApprovalService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryStockInOrderService; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensarySearchParam; +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 jakarta.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * 药房入库单 + * + * @author yuxj + * @date 2025-07-22 + */ +@RestController +@RequestMapping("/pharmacy-dispensary/stockIn-order") +@Slf4j +public class PharmacyDispensaryStockInOrderController { + + @Autowired + private IPharmacyDispensaryStockInOrderService pharmacyDispensaryStockInOrderService; + + @Autowired + private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService; + @Autowired + private IPharmacyDispensaryReceiptApprovalService pharmacyDispensaryReceiptApprovalService; + /** + * 入库单初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R init() { + return pharmacyDispensaryStockInOrderService.init(); + } + + /** + * 获取药品 + * + * @param purchaseOrderSearchParam 查询条件 + * @return 药品信息 + */ + @GetMapping(value = "/medication-info") + public R getMedicationInfo(PharmacyDispensarySearchParam purchaseOrderSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return pharmacyDispensaryCommonService.getMedicationInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request); + } + + /** + * 入库单单据列表 + * + * @param stockInOrderSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 入库单据分页列表 + */ + @GetMapping(value = "/stockIn-order-page") + public R getPage(PharmacyDispensarySearchParam stockInOrderSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return pharmacyDispensaryCommonService.getPage(stockInOrderSearchParam, pageNo, pageSize, searchKey, request, + null, SupplyType.PURCHASE_STOCKIN.getValue()); + } + /** + * 入库单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 入库单单据详情 + */ + @GetMapping(value = "/stockIn-order-detail-page") + public R getDetail(@RequestParam String busNo, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return pharmacyDispensaryStockInOrderService.getDetailPage(busNo, pageNo, pageSize); + } + /** + * 获取单据号 + * + * @return 初始化信息 + */ + @GetMapping(value = "/busNo-init") + public R getBusNo() { + return pharmacyDispensaryStockInOrderService.getBusNo(); + } + + /** + * 添加/编辑入库单 + * + * @param stockInOrderDtoList 入库信息 + * @return 操作结果 + */ + @PutMapping("/addOrEdit-stockInOrder") + public R addOrEditStockInOrder(@Validated @RequestBody List stockInOrderDtoList) { + return pharmacyDispensaryStockInOrderService.addOrEditStockInOrder(stockInOrderDtoList); + } + + /** + * 删除单据 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @DeleteMapping("/delete-stockInOrder") + public R deleteStockInOrder(@RequestParam String busNo) { + return pharmacyDispensaryCommonService.deleteOrder(busNo); + } + /** + * 同意审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @PutMapping("/agree-approval") + public R agreeApproval(@RequestParam String busNo) { + return pharmacyDispensaryReceiptApprovalService.stockInOrderAgreeApproved(busNo); + } + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryStocktakingOrderController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryStocktakingOrderController.java new file mode 100644 index 000000000..db32442da --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryStocktakingOrderController.java @@ -0,0 +1,134 @@ +package com.healthlink.his.web.pharmacy.dispensary.controller; + +import com.core.common.core.domain.R; +import com.healthlink.his.common.enums.SupplyType; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryCommonService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryReceiptApprovalService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryStocktakingOrderService; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensarySearchParam; +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 jakarta.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * 药房盘点单 + * + * @author yuxj + * @date 2025-07-22 + */ +@RestController +@RequestMapping("/pharmacy-dispensary/stocktaking-order") +@Slf4j +public class PharmacyDispensaryStocktakingOrderController { + + @Autowired + private IPharmacyDispensaryStocktakingOrderService pharmacyDispensaryStocktakingOrderService; + + @Autowired + private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService; + @Autowired + private IPharmacyDispensaryReceiptApprovalService pharmacyDispensaryReceiptApprovalService; + /** + * 盘点单初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R init() { + return pharmacyDispensaryStocktakingOrderService.init(); + } + + /** + * 获取药品 + * + * @param purchaseOrderSearchParam 查询条件 + * @return 药品信息 + */ + @GetMapping(value = "/medication-info") + public R getMedicationInfo(PharmacyDispensarySearchParam purchaseOrderSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return pharmacyDispensaryCommonService.getMedicationInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request); + } + + /** + * 盘点单单据列表 + * + * @param stocktakingOrderSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 盘点单据分页列表 + */ + @GetMapping(value = "/stocktaking-order-page") + public R getPage(PharmacyDispensarySearchParam stocktakingOrderSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return pharmacyDispensaryCommonService.getPage(stocktakingOrderSearchParam, pageNo, pageSize, searchKey, request, + null, SupplyType.PURCHASE_STOCKTAKING.getValue()); + } + /** + * 盘点单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 盘点单单据详情 + */ + @GetMapping(value = "/stocktaking-order-detail-page") + public R getDetail(@RequestParam String busNo, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return pharmacyDispensaryStocktakingOrderService.getDetailPage(busNo, pageNo, pageSize); + } + /** + * 获取单据号 + * + * @return 初始化信息 + */ + @GetMapping(value = "/busNo-init") + public R getBusNo() { + return pharmacyDispensaryStocktakingOrderService.getBusNo(); + } + + /** + * 添加/编辑盘点单 + * + * @param stocktakingOrderDtoList 盘点信息 + * @return 操作结果 + */ + @PutMapping("/addOrEdit-stocktakingOrder") + public R addOrEditStocktakingOrder(@Validated @RequestBody List stocktakingOrderDtoList) { + return pharmacyDispensaryStocktakingOrderService.addOrEditStocktakingOrder(stocktakingOrderDtoList); + } + + /** + * 删除单据 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @DeleteMapping("/delete-stocktakingOrder") + public R deleteStocktakingOrder(@RequestParam String busNo) { + return pharmacyDispensaryCommonService.deleteOrder(busNo); + } + /** + * 同意审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @PutMapping("/agree-approval") + public R agreeApproval(@RequestParam String busNo) { + return pharmacyDispensaryReceiptApprovalService.stocktakingAgreepproved(busNo); + } + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryTransferInOrderController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryTransferInOrderController.java new file mode 100644 index 000000000..f7331a862 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryTransferInOrderController.java @@ -0,0 +1,136 @@ +package com.healthlink.his.web.pharmacy.dispensary.controller; + +import com.core.common.core.domain.R; +import com.healthlink.his.common.enums.SupplyType; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryCommonService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryReceiptApprovalService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryTransferInOrderService; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensarySearchParam; +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 jakarta.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * 药房调入单 + * + * @author yuxj + * @date 2025-07-22 + */ +@RestController +@RequestMapping("/pharmacy-dispensary/transferIn-order") +@Slf4j +public class PharmacyDispensaryTransferInOrderController { + + @Autowired + private IPharmacyDispensaryTransferInOrderService pharmacyDispensaryTransferInOrderService; + + @Autowired + private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService; + + @Autowired + private IPharmacyDispensaryReceiptApprovalService pharmacyDispensaryReceiptApprovalService; + + /** + * 调入单初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R init() { + return pharmacyDispensaryTransferInOrderService.init(); + } + + /** + * 获取药品 + * + * @param purchaseOrderSearchParam 查询条件 + * @return 药品信息 + */ + @GetMapping(value = "/medication-info") + public R getMedicationInfo(PharmacyDispensarySearchParam purchaseOrderSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return pharmacyDispensaryCommonService.getMedicationInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request); + } + /** + * 调入单单据列表 + * + * @param transferInOrderSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 调入单据分页列表 + */ + @GetMapping(value = "/transferIn-order-page") + public R getPage(PharmacyDispensarySearchParam transferInOrderSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return pharmacyDispensaryCommonService.getPage(transferInOrderSearchParam, pageNo, pageSize, searchKey, request, + null, SupplyType.PURCHASE_TRANSFERIN.getValue()); + } + + /** + * 调入单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 调入单单据详情 + */ + @GetMapping(value = "/transferIn-order-detail-page") + public R getDetail(@RequestParam String busNo, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return pharmacyDispensaryTransferInOrderService.getDetailPage(busNo, pageNo, pageSize); + } + /** + * 获取单据号 + * + * @return 初始化信息 + */ + @GetMapping(value = "/busNo-init") + public R getBusNo() { + return pharmacyDispensaryTransferInOrderService.getBusNo(); + } + + /** + * 添加/编辑采购单 + * + * @param transferInOrderDtoList 采购信息 + * @return 操作结果 + */ + @PutMapping("/addOrEdit-transferInOrder") + public R addOrEditTransferInOrder(@Validated @RequestBody List transferInOrderDtoList) { + return pharmacyDispensaryTransferInOrderService.addOrEditTransferInOrder(transferInOrderDtoList); + } + + /** + * 删除单据 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @DeleteMapping("/delete-transferInOrder") + public R deleteTransferInOrder(@RequestParam String busNo) { + return pharmacyDispensaryCommonService.deleteOrder(busNo); + } + + /** + * 同意审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @PutMapping("/agree-approval") + public R agreeApproval(@RequestParam String busNo) { + return pharmacyDispensaryReceiptApprovalService.transferInAgreeApproved(busNo); + } +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryTransferOutOrderController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryTransferOutOrderController.java new file mode 100644 index 000000000..c7707494f --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/controller/PharmacyDispensaryTransferOutOrderController.java @@ -0,0 +1,136 @@ +package com.healthlink.his.web.pharmacy.dispensary.controller; + +import com.core.common.core.domain.R; +import com.healthlink.his.common.enums.SupplyType; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryCommonService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryReceiptApprovalService; +import com.healthlink.his.web.pharmacy.dispensary.appservice.IPharmacyDispensaryTransferOutOrderService; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensaryDetailDto; +import com.healthlink.his.web.pharmacy.dispensary.dto.PharmacyDispensarySearchParam; +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 jakarta.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * 药房调出单 + * + * @author yuxj + * @date 2025-07-22 + */ +@RestController +@RequestMapping("/pharmacy-dispensary/transferOut-order") +@Slf4j +public class PharmacyDispensaryTransferOutOrderController { + + @Autowired + private IPharmacyDispensaryTransferOutOrderService pharmacyDispensaryTransferOutOrderService; + + @Autowired + private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService; + + @Autowired + private IPharmacyDispensaryReceiptApprovalService pharmacyDispensaryReceiptApprovalService; + + /** + * 调出单初始化 + * + * @return 初始化信息 + */ + @GetMapping(value = "/init") + public R init() { + return pharmacyDispensaryTransferOutOrderService.init(); + } + + /** + * 获取药品 + * + * @param purchaseOrderSearchParam 查询条件 + * @return 药品信息 + */ + @GetMapping(value = "/medication-info") + public R getMedicationInfo(PharmacyDispensarySearchParam purchaseOrderSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return pharmacyDispensaryCommonService.getMedicationInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request); + } + /** + * 调出单单据列表 + * + * @param transferOutOrderSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 调出单据分页列表 + */ + @GetMapping(value = "/transferOut-order-page") + public R getPage(PharmacyDispensarySearchParam transferOutOrderSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return pharmacyDispensaryCommonService.getPage(transferOutOrderSearchParam, pageNo, pageSize, searchKey, request, + "1", SupplyType.PURCHASE_TRANSFEROUT.getValue()); + } + + /** + * 调出单单据详情 + * + * @param busNo 单据号 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 调出单单据详情 + */ + @GetMapping(value = "/transferOut-order-detail-page") + public R getDetail(@RequestParam String busNo, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return pharmacyDispensaryTransferOutOrderService.getDetailPage(busNo, pageNo, pageSize); + } + /** + * 获取单据号 + * + * @return 初始化信息 + */ + @GetMapping(value = "/busNo-init") + public R getBusNo() { + return pharmacyDispensaryTransferOutOrderService.getBusNo(); + } + + /** + * 添加/编辑采购单 + * + * @param transferOutOrderDtoList 采购信息 + * @return 操作结果 + */ + @PutMapping("/addOrEdit-transferOutOrder") + public R addOrEditTransferOutOrder(@Validated @RequestBody List transferOutOrderDtoList) { + return pharmacyDispensaryTransferOutOrderService.addOrEditTransferOutOrder(transferOutOrderDtoList); + } + + /** + * 删除单据 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @DeleteMapping("/delete-transferOutOrder") + public R deleteTransferOutOrder(@RequestParam String busNo) { + return pharmacyDispensaryCommonService.deleteOrder(busNo); + } + + /** + * 同意审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @PutMapping("/agree-approval") + public R agreeApproval(@RequestParam String busNo) { + return pharmacyDispensaryReceiptApprovalService.transferOutAgreeApproved(busNo); + } +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/dto/PharmacyDispensaryDetailDto.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/dto/PharmacyDispensaryDetailDto.java new file mode 100644 index 000000000..b57a595b7 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacy/dispensary/dto/PharmacyDispensaryDetailDto.java @@ -0,0 +1,214 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.healthlink.his.web.pharmacy.dispensary.dto; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import tools.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.ser.std.ToStringSerializer; +import com.healthlink.his.common.annotation.Dict; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 订购单信息 + * + * @author yuxj + * @date 2025-07-22 + */ +@Data +@Accessors(chain = true) +public class PharmacyDispensaryDetailDto implements Serializable { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 单据号 */ + private String busNo; + /** 再生成单据号 */ + private String originalBusNo; + + /** 药品编码 */ + private String itemBusNo; + + /** 物品id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long itemId; + + /** 物品名称 */ + private String itemName; + + /** 规格 */ + private String totalVolume; + + /** 选择单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 常规单位 */ + @Dict(dictCode = "unit_code") + private String maxUnitCode; + private String maxUnitCode_dictText; + + /** 最小单位 */ + @Dict(dictCode = "unit_code") + private String minUnitCode; + private String minUnitCode_dictText; + + /** 拆零比 */ + private String partPercent; + + /** 数量 */ + private BigDecimal itemQuantity; + + /** 合计数量 */ + private BigDecimal totalQuantity; + + /** 单价 */ + private BigDecimal price; + + /** 总价 */ + private BigDecimal totalPrice; + + /** 零售价 */ + private BigDecimal retailPrice; + + /** 零价金额 */ + private BigDecimal totalRetailPrice; + + /** 厂家/产地 */ + private String manufacturerText; + + /** 批准文号 */ + private String approvalNumber; + + /** 批次库存 */ + private BigDecimal batchInventory; + /** 规格库存 */ + private BigDecimal specificationInventory; + + /** 备注 */ + private String remake; + + /** 理由类型 */ + private String reasonCode; + + /** 摘要(理由) */ + private String reason; + + /** 供应商 */ + @JsonSerialize(using = ToStringSerializer.class) + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_supplier") + private Long supplierId; + private String supplierId_dictText; + + /** 源仓库类型 */ + private Integer sourceTypeEnum; + /** 源仓库 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long sourceLocationId; + + /** 目的仓库类型 */ + private Integer purposeTypeEnum; + /** 目的仓库 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long purposeLocationId; + + /** 采购员 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long applicantId; + + /** 审批人 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long approverId; + /** 审批时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date approvalTime; + + /** 申请时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date applyTime; + + /** 状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + + /** 类型 */ + private Integer typeEnum; + private String typeEnum_enumText; + + /** 单据分类 */ + private Integer categoryEnum; + private String categoryEnum_enumText; + + /** 供应商联系人 */ + private String phone; + + /** 仓库员 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long practitionerId; + + /** 发票号 */ + private String invoiceNo; + + /** 产品批号 */ + private String lotNumber; + + /** 生产日期 */ + private Date startTime; + + /** 失效日期 */ + private Date endTime; + + /** 追溯码*/ + private String traceNo; + + /** 追溯码单位 */ + @Dict(dictCode = "unit_code") + private String traceNoUnitCode; + private String traceNoUnitCode_dictText; + + /** 包装情况 */ + private Integer packagingConditionEnum; + private String packagingConditionEnum_enumText; + + /** 验收结果 */ + private Integer acceptanceResultEnum; + private String acceptanceResultEnum_enumText; + + /** 禁用日期 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date occurrenceTime; + + /** 药品发放id */ + private String dispenseIds; + + /** + * 单位列表 + */ + private List