From c4628af5a276455bcd8a8c3503a60bf75c424518 Mon Sep 17 00:00:00 2001
From: b2894lxlx <517289602@qq.com>
Date: Mon, 29 Dec 2025 10:37:03 +0800
Subject: [PATCH] 20251229
---
.idea/AugmentWebviewStateStore.xml | 10 +
.idea/inspectionProfiles/Project_Default.xml | 8 +
.idea/xiangan-shop.iml | 9 +
pom.xml | 28 +-
.../com/gxwebsoft/WebSoftApplication.java | 2 +
.../ClinicAppointmentController.java | 122 +
.../controller/ClinicCaseController.java | 116 +
.../ClinicDoctorApplyController.java | 128 +
.../ClinicDoctorUserController.java | 129 +
.../controller/ClinicListController.java | 121 +
.../controller/ClinicMedicineController.java | 118 +
.../ClinicMedicineInoutController.java | 127 +
.../ClinicMedicineStockController.java | 127 +
.../ClinicPatientUserController.java | 158 +
.../ClinicPrescriptionController.java | 192 +
.../ClinicPrescriptionItemController.java | 121 +
.../PrescriptionOrderController.java | 233 +
.../PrescriptionOrderItemController.java | 110 +
.../clinic/dto/PrescriptionOrderRequest.java | 24 +
.../clinic/entity/ClinicAppointment.java | 81 +
.../gxwebsoft/clinic/entity/ClinicCase.java | 73 +
.../clinic/entity/ClinicDoctorApply.java | 125 +
.../clinic/entity/ClinicDoctorUser.java | 102 +
.../gxwebsoft/clinic/entity/ClinicList.java | 91 +
.../clinic/entity/ClinicMedicine.java | 74 +
.../clinic/entity/ClinicMedicineInout.java | 99 +
.../clinic/entity/ClinicMedicineStock.java | 59 +
.../clinic/entity/ClinicPatientUser.java | 94 +
.../clinic/entity/ClinicPrescription.java | 143 +
.../clinic/entity/ClinicPrescriptionItem.java | 99 +
.../clinic/entity/PrescriptionOrder.java | 148 +
.../clinic/entity/PrescriptionOrderItem.java | 77 +
.../mapper/ClinicAppointmentMapper.java | 37 +
.../clinic/mapper/ClinicCaseMapper.java | 37 +
.../mapper/ClinicDoctorApplyMapper.java | 37 +
.../clinic/mapper/ClinicDoctorUserMapper.java | 37 +
.../clinic/mapper/ClinicListMapper.java | 37 +
.../mapper/ClinicMedicineInoutMapper.java | 37 +
.../clinic/mapper/ClinicMedicineMapper.java | 37 +
.../mapper/ClinicMedicineStockMapper.java | 37 +
.../mapper/ClinicPatientUserMapper.java | 37 +
.../mapper/ClinicPrescriptionItemMapper.java | 38 +
.../mapper/ClinicPrescriptionMapper.java | 38 +
.../mapper/PrescriptionOrderItemMapper.java | 38 +
.../mapper/PrescriptionOrderMapper.java | 38 +
.../mapper/xml/ClinicAppointmentMapper.xml | 62 +
.../clinic/mapper/xml/ClinicCaseMapper.xml | 75 +
.../mapper/xml/ClinicDoctorApplyMapper.xml | 114 +
.../mapper/xml/ClinicDoctorUserMapper.xml | 88 +
.../clinic/mapper/xml/ClinicListMapper.xml | 87 +
.../mapper/xml/ClinicMedicineInoutMapper.xml | 93 +
.../mapper/xml/ClinicMedicineMapper.xml | 69 +
.../mapper/xml/ClinicMedicineStockMapper.xml | 54 +
.../mapper/xml/ClinicPatientUserMapper.xml | 73 +
.../xml/ClinicPrescriptionItemMapper.xml | 73 +
.../mapper/xml/ClinicPrescriptionMapper.xml | 139 +
.../xml/PrescriptionOrderItemMapper.xml | 72 +
.../mapper/xml/PrescriptionOrderMapper.xml | 96 +
.../clinic/param/ClinicAppointmentParam.java | 58 +
.../clinic/param/ClinicCaseParam.java | 69 +
.../clinic/param/ClinicDoctorApplyParam.java | 114 +
.../clinic/param/ClinicDoctorUserParam.java | 89 +
.../clinic/param/ClinicListParam.java | 83 +
.../param/ClinicMedicineInoutParam.java | 102 +
.../clinic/param/ClinicMedicineParam.java | 66 +
.../param/ClinicMedicineStockParam.java | 50 +
.../clinic/param/ClinicPatientUserParam.java | 70 +
.../param/ClinicPrescriptionItemParam.java | 81 +
.../clinic/param/ClinicPrescriptionParam.java | 109 +
.../param/PrescriptionOrderItemParam.java | 75 +
.../clinic/param/PrescriptionOrderParam.java | 102 +
.../service/ClinicAppointmentService.java | 42 +
.../clinic/service/ClinicCaseService.java | 42 +
.../service/ClinicDoctorApplyService.java | 42 +
.../service/ClinicDoctorUserService.java | 43 +
.../clinic/service/ClinicListService.java | 43 +
.../service/ClinicMedicineInoutService.java | 42 +
.../clinic/service/ClinicMedicineService.java | 42 +
.../service/ClinicMedicineStockService.java | 42 +
.../service/ClinicPatientUserService.java | 45 +
.../ClinicPrescriptionItemService.java | 43 +
.../service/ClinicPrescriptionService.java | 49 +
.../service/PrescriptionOrderItemService.java | 45 +
.../service/PrescriptionOrderService.java | 44 +
.../impl/ClinicAppointmentServiceImpl.java | 47 +
.../service/impl/ClinicCaseServiceImpl.java | 47 +
.../impl/ClinicDoctorApplyServiceImpl.java | 47 +
.../impl/ClinicDoctorUserServiceImpl.java | 57 +
.../service/impl/ClinicListServiceImpl.java | 73 +
.../impl/ClinicMedicineInoutServiceImpl.java | 47 +
.../impl/ClinicMedicineServiceImpl.java | 47 +
.../impl/ClinicMedicineStockServiceImpl.java | 47 +
.../impl/ClinicPatientUserServiceImpl.java | 67 +
.../ClinicPrescriptionItemServiceImpl.java | 48 +
.../impl/ClinicPrescriptionServiceImpl.java | 134 +
.../PrescriptionOrderItemServiceImpl.java | 57 +
.../impl/PrescriptionOrderServiceImpl.java | 64 +
.../controller/ArticleCheckController.java | 2 +-
.../cms/controller/ArticleController.java | 2 +-
.../cms/controller/MpController.java | 20 +-
.../cms/controller/MpFieldController.java | 6 +
.../cms/controller/MpMenuController.java | 12 -
.../cms/controller/MpPagesController.java | 1 -
.../cms/controller/WebsiteController.java | 2 +-
.../java/com/gxwebsoft/cms/entity/MpMenu.java | 1 +
.../core/config/CertificateProperties.java | 217 +
.../common/core/config/MybatisPlusConfig.java | 2 +-
.../common/core/config/SwaggerConfig.java | 4 +-
.../security/JwtAuthenticationFilter.java | 2 +-
.../common/core/security/SecurityConfig.java | 11 +-
.../service/CertificateHealthService.java | 253 +
.../core/service/CertificateService.java | 281 +
.../EnvironmentAwarePaymentService.java | 143 +
.../core/service/PaymentCacheService.java | 174 +
.../common/core/utils/CertificateLoader.java | 228 +
.../common/core/utils/RequestUtil.java | 74 +-
.../common/core/utils/SignCheckUtil.java | 2 +-
.../utils/WechatPayCertificateDiagnostic.java | 314 +
.../core/utils/WechatPayCertificateFixer.java | 312 +
.../core/utils/WechatPayConfigChecker.java | 243 +
.../core/utils/WechatPayConfigValidator.java | 223 +
.../core/utils/WechatPayDiagnostic.java | 222 +
.../common/core/utils/WechatPayUtils.java | 111 +
.../common/core/utils/WxOfficialUtil.java | 2 +-
.../core/websocket/WebSocketConfig.java | 19 +
.../core/websocket/WebSocketServer.java | 86 +
.../system/controller/AliOssController.java | 19 +-
.../system/controller/AreaController.java | 2 +-
.../system/controller/UserController.java | 20 +-
.../common/system/entity/Payment.java | 62 +-
.../gxwebsoft/common/system/entity/User.java | 9 +-
.../common/system/mapper/PaymentMapper.java | 40 +
.../system/mapper/xml/PaymentMapper.xml | 90 +
.../common/system/param/PaymentParam.java | 80 +
.../common/system/service/AreaService.java | 2 +
.../common/system/service/PaymentService.java | 43 +
.../common/system/service/UserService.java | 7 +
.../system/service/impl/AreaServiceImpl.java | 9 +
.../service/impl/PaymentServiceImpl.java | 52 +
.../system/service/impl/UserServiceImpl.java | 20 +-
.../oa/controller/AppController.java | 2 +-
.../oa/controller/TaskController.java | 99 +-
.../oa/service/impl/AppUserServiceImpl.java | 2 +-
.../service/impl/CompanyUserServiceImpl.java | 2 +-
.../oa/service/impl/TaskCountServiceImpl.java | 4 +-
.../service/impl/TaskRecordServiceImpl.java | 2 +-
.../gxwebsoft/open/mp/SubscribeHandler.java | 2 +-
.../open/service/OfficeMpServiceImpl.java | 2 +
.../service/impl/OfficeMpServiceImpl.java | 18 +
.../gxwebsoft/shop/consts/BalanceScene.java | 2 +
.../shop/controller/CouponController.java | 115 +
.../shop/controller/DealerUserController.java | 55 +-
.../controller/DealerWithdrawController.java | 144 +-
.../controller/GoodsCategoryController.java | 16 +-
.../shop/controller/GoodsController.java | 204 +-
.../controller/MerchantApplyController.java | 23 +-
.../controller/MerchantCollectController.java | 119 +
.../shop/controller/MerchantController.java | 116 +-
.../MerchantOfflinePayController.java | 289 +
.../MerchantVoiceDeviceController.java | 115 +
.../shop/controller/OrderController.java | 243 +-
.../controller/OrderDeliveryController.java | 56 +-
.../controller/OrderRefundController.java | 227 +
.../shop/controller/SelfTakeController.java | 115 +
.../controller/SelfTakeUserController.java | 119 +
.../ShopChatConversationController.java | 156 +
.../controller/ShopChatMessageController.java | 133 +
.../shop/controller/SpecController.java | 7 -
.../controller/UserAddressController.java | 8 +
.../shop/controller/UserCouponController.java | 128 +
.../shop/controller/WeChatController.java | 8 +-
.../controller/WxPayNotifyNbgController.java | 259 +-
.../java/com/gxwebsoft/shop/entity/Cart.java | 2 +
.../com/gxwebsoft/shop/entity/Coupon.java | 73 +
.../gxwebsoft/shop/entity/DealerWithdraw.java | 6 +
.../java/com/gxwebsoft/shop/entity/Goods.java | 13 +-
.../com/gxwebsoft/shop/entity/GoodsSku.java | 3 +
.../com/gxwebsoft/shop/entity/Merchant.java | 7 +
.../shop/entity/MerchantCollect.java | 50 +
.../shop/entity/MerchantOfflinePay.java | 66 +
.../shop/entity/MerchantVoiceDevice.java | 51 +
.../java/com/gxwebsoft/shop/entity/Order.java | 16 +
.../com/gxwebsoft/shop/entity/OrderGoods.java | 3 +
.../gxwebsoft/shop/entity/OrderRefund.java | 72 +
.../com/gxwebsoft/shop/entity/SelfTake.java | 58 +
.../gxwebsoft/shop/entity/SelfTakeUser.java | 52 +
.../shop/entity/ShopChatConversation.java | 63 +
.../shop/entity/ShopChatMessage.java | 116 +
.../shop/entity/TransferBillResponse.java | 15 +
.../shop/entity/UnifiedOrderBody.java | 141 +
.../gxwebsoft/shop/entity/UnionGoodsItem.java | 56 +
.../shop/entity/UnionSubOrderItem.java | 40 +
.../com/gxwebsoft/shop/entity/UserCoupon.java | 68 +
.../gxwebsoft/shop/mapper/CouponMapper.java | 37 +
.../shop/mapper/MerchantCollectMapper.java | 37 +
.../shop/mapper/MerchantOfflinePayMapper.java | 37 +
.../mapper/MerchantVoiceDeviceMapper.java | 37 +
.../shop/mapper/OrderRefundMapper.java | 37 +
.../gxwebsoft/shop/mapper/SelfTakeMapper.java | 37 +
.../shop/mapper/SelfTakeUserMapper.java | 37 +
.../mapper/ShopChatConversationMapper.java | 37 +
.../shop/mapper/ShopChatMessageMapper.java | 37 +
.../shop/mapper/UserCouponMapper.java | 37 +
.../shop/mapper/xml/CouponMapper.xml | 72 +
.../shop/mapper/xml/MerchantCollectMapper.xml | 54 +
.../mapper/xml/MerchantOfflinePayMapper.xml | 50 +
.../mapper/xml/MerchantVoiceDeviceMapper.xml | 51 +
.../shop/mapper/xml/OrderRefundMapper.xml | 66 +
.../shop/mapper/xml/SelfTakeMapper.xml | 57 +
.../shop/mapper/xml/SelfTakeUserMapper.xml | 51 +
.../mapper/xml/ShopChatConversationMapper.xml | 60 +
.../shop/mapper/xml/ShopChatMessageMapper.xml | 78 +
.../shop/mapper/xml/UserCouponMapper.xml | 60 +
.../com/gxwebsoft/shop/param/CouponParam.java | 70 +
.../com/gxwebsoft/shop/param/GoodsParam.java | 2 +-
.../shop/param/MerchantCollectParam.java | 47 +
.../shop/param/MerchantOfflinePayParam.java | 44 +
.../gxwebsoft/shop/param/MerchantParam.java | 4 +
.../shop/param/MerchantVoiceDeviceParam.java | 40 +
.../shop/param/OrderRefundParam.java | 61 +
.../gxwebsoft/shop/param/SelfTakeParam.java | 50 +
.../shop/param/SelfTakeUserParam.java | 45 +
.../shop/param/ShopChatConversationParam.java | 55 +
.../shop/param/ShopChatMessageParam.java | 75 +
.../gxwebsoft/shop/param/UserCouponParam.java | 53 +
.../gxwebsoft/shop/service/CouponService.java | 42 +
.../shop/service/DealerWithdrawService.java | 1 +
.../shop/service/GoodsSkuService.java | 2 +
.../com/gxwebsoft/shop/service/KuaiDi100.java | 2 +-
.../shop/service/MerchantCollectService.java | 43 +
.../service/MerchantOfflinePayService.java | 49 +
.../service/MerchantVoiceDeviceService.java | 43 +
.../shop/service/OrderDeliveryService.java | 4 +
.../shop/service/OrderGoodsService.java | 2 +
.../shop/service/OrderRefundService.java | 43 +
.../gxwebsoft/shop/service/OrderService.java | 14 +
.../shop/service/SelfTakeService.java | 42 +
.../shop/service/SelfTakeUserService.java | 42 +
.../service/ShopChatConversationService.java | 45 +
.../shop/service/ShopChatMessageService.java | 42 +
.../shop/service/UserCouponService.java | 42 +
.../shop/service/WechatConfigService.java | 11 +
.../shop/service/impl/CartServiceImpl.java | 30 +-
.../shop/service/impl/CouponServiceImpl.java | 47 +
.../impl/DealerWithdrawServiceImpl.java | 10 +
.../impl/ExpressTemplateServiceImpl.java | 2 +-
.../shop/service/impl/GoodsServiceImpl.java | 10 +-
.../service/impl/GoodsSkuServiceImpl.java | 8 +
.../impl/GoodsStockInMerchantServiceImpl.java | 1 +
.../shop/service/impl/KuaiDi100Impl.java | 3 +-
.../impl/MerchantCollectServiceImpl.java | 57 +
.../impl/MerchantOfflinePayServiceImpl.java | 94 +
.../service/impl/MerchantServiceImpl.java | 33 +-
.../impl/MerchantVoiceDeviceServiceImpl.java | 56 +
.../impl/OrderDeliveryServiceImpl.java | 147 +-
.../service/impl/OrderGoodsServiceImpl.java | 13 +
.../service/impl/OrderRefundServiceImpl.java | 54 +
.../shop/service/impl/OrderServiceImpl.java | 403 +-
.../service/impl/SelfTakeServiceImpl.java | 47 +
.../service/impl/SelfTakeUserServiceImpl.java | 47 +
.../impl/ShopChatConversationServiceImpl.java | 84 +
.../impl/ShopChatMessageServiceImpl.java | 47 +
.../service/impl/UserCouponServiceImpl.java | 54 +
.../service/impl/WechatConfigServiceImpl.java | 70 +
src/main/resources/application-dev.yml | 30 +-
src/main/resources/application-prod.yml | 31 +-
src/main/resources/application.yml | 18 +-
...ingGenerator.java => ClinicGenerator.java} | 44 +-
.../gxwebsoft/generator/ShopGenerator.java | 65 +-
.../generator/templates/controller.java.btl | 12 +-
websoft-modules.log | 1479 +-
...-modules.log.2024-11-18.09450946160958.tmp | 30695 ++++++++++++++++
websoft-modules.log.2024-12-24.0.gz | Bin 0 -> 6503 bytes
websoft-modules.log.2025-06-12.0.gz | Bin 0 -> 2312 bytes
274 files changed, 47756 insertions(+), 2246 deletions(-)
create mode 100644 .idea/AugmentWebviewStateStore.xml
create mode 100644 .idea/inspectionProfiles/Project_Default.xml
create mode 100644 .idea/xiangan-shop.iml
create mode 100644 src/main/java/com/gxwebsoft/clinic/controller/ClinicAppointmentController.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/controller/ClinicCaseController.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/controller/ClinicDoctorApplyController.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/controller/ClinicDoctorUserController.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/controller/ClinicListController.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/controller/ClinicMedicineController.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/controller/ClinicMedicineInoutController.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/controller/ClinicMedicineStockController.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/controller/ClinicPatientUserController.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/controller/ClinicPrescriptionController.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/controller/ClinicPrescriptionItemController.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/controller/PrescriptionOrderController.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/controller/PrescriptionOrderItemController.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/dto/PrescriptionOrderRequest.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/entity/ClinicAppointment.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/entity/ClinicCase.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/entity/ClinicDoctorApply.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/entity/ClinicDoctorUser.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/entity/ClinicList.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/entity/ClinicMedicine.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/entity/ClinicMedicineInout.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/entity/ClinicMedicineStock.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/entity/ClinicPatientUser.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/entity/ClinicPrescription.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/entity/ClinicPrescriptionItem.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/entity/PrescriptionOrder.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/entity/PrescriptionOrderItem.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/ClinicAppointmentMapper.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/ClinicCaseMapper.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/ClinicDoctorApplyMapper.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/ClinicDoctorUserMapper.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/ClinicListMapper.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/ClinicMedicineInoutMapper.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/ClinicMedicineMapper.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/ClinicMedicineStockMapper.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/ClinicPatientUserMapper.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/ClinicPrescriptionItemMapper.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/ClinicPrescriptionMapper.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/PrescriptionOrderItemMapper.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/PrescriptionOrderMapper.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicAppointmentMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicCaseMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicDoctorApplyMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicDoctorUserMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicListMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicMedicineInoutMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicMedicineMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicMedicineStockMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicPatientUserMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicPrescriptionItemMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicPrescriptionMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/xml/PrescriptionOrderItemMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/clinic/mapper/xml/PrescriptionOrderMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/clinic/param/ClinicAppointmentParam.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/param/ClinicCaseParam.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/param/ClinicDoctorApplyParam.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/param/ClinicDoctorUserParam.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/param/ClinicListParam.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/param/ClinicMedicineInoutParam.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/param/ClinicMedicineParam.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/param/ClinicMedicineStockParam.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/param/ClinicPatientUserParam.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/param/ClinicPrescriptionItemParam.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/param/ClinicPrescriptionParam.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/param/PrescriptionOrderItemParam.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/param/PrescriptionOrderParam.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/ClinicAppointmentService.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/ClinicCaseService.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/ClinicDoctorApplyService.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/ClinicDoctorUserService.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/ClinicListService.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/ClinicMedicineInoutService.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/ClinicMedicineService.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/ClinicMedicineStockService.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/ClinicPatientUserService.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/ClinicPrescriptionItemService.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/ClinicPrescriptionService.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/PrescriptionOrderItemService.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/PrescriptionOrderService.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/impl/ClinicAppointmentServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/impl/ClinicCaseServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/impl/ClinicDoctorApplyServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/impl/ClinicDoctorUserServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/impl/ClinicListServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/impl/ClinicMedicineInoutServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/impl/ClinicMedicineServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/impl/ClinicMedicineStockServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/impl/ClinicPatientUserServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/impl/ClinicPrescriptionItemServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/impl/ClinicPrescriptionServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/impl/PrescriptionOrderItemServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/clinic/service/impl/PrescriptionOrderServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/common/core/config/CertificateProperties.java
create mode 100644 src/main/java/com/gxwebsoft/common/core/service/CertificateHealthService.java
create mode 100644 src/main/java/com/gxwebsoft/common/core/service/CertificateService.java
create mode 100644 src/main/java/com/gxwebsoft/common/core/service/EnvironmentAwarePaymentService.java
create mode 100644 src/main/java/com/gxwebsoft/common/core/service/PaymentCacheService.java
create mode 100644 src/main/java/com/gxwebsoft/common/core/utils/CertificateLoader.java
create mode 100644 src/main/java/com/gxwebsoft/common/core/utils/WechatPayCertificateDiagnostic.java
create mode 100644 src/main/java/com/gxwebsoft/common/core/utils/WechatPayCertificateFixer.java
create mode 100644 src/main/java/com/gxwebsoft/common/core/utils/WechatPayConfigChecker.java
create mode 100644 src/main/java/com/gxwebsoft/common/core/utils/WechatPayConfigValidator.java
create mode 100644 src/main/java/com/gxwebsoft/common/core/utils/WechatPayDiagnostic.java
create mode 100644 src/main/java/com/gxwebsoft/common/core/utils/WechatPayUtils.java
create mode 100644 src/main/java/com/gxwebsoft/common/core/websocket/WebSocketConfig.java
create mode 100644 src/main/java/com/gxwebsoft/common/core/websocket/WebSocketServer.java
create mode 100644 src/main/java/com/gxwebsoft/common/system/mapper/PaymentMapper.java
create mode 100644 src/main/java/com/gxwebsoft/common/system/mapper/xml/PaymentMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/common/system/param/PaymentParam.java
create mode 100644 src/main/java/com/gxwebsoft/common/system/service/PaymentService.java
create mode 100644 src/main/java/com/gxwebsoft/common/system/service/impl/PaymentServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/shop/controller/CouponController.java
create mode 100644 src/main/java/com/gxwebsoft/shop/controller/MerchantCollectController.java
create mode 100644 src/main/java/com/gxwebsoft/shop/controller/MerchantOfflinePayController.java
create mode 100644 src/main/java/com/gxwebsoft/shop/controller/MerchantVoiceDeviceController.java
create mode 100644 src/main/java/com/gxwebsoft/shop/controller/OrderRefundController.java
create mode 100644 src/main/java/com/gxwebsoft/shop/controller/SelfTakeController.java
create mode 100644 src/main/java/com/gxwebsoft/shop/controller/SelfTakeUserController.java
create mode 100644 src/main/java/com/gxwebsoft/shop/controller/ShopChatConversationController.java
create mode 100644 src/main/java/com/gxwebsoft/shop/controller/ShopChatMessageController.java
create mode 100644 src/main/java/com/gxwebsoft/shop/controller/UserCouponController.java
create mode 100644 src/main/java/com/gxwebsoft/shop/entity/Coupon.java
create mode 100644 src/main/java/com/gxwebsoft/shop/entity/MerchantCollect.java
create mode 100644 src/main/java/com/gxwebsoft/shop/entity/MerchantOfflinePay.java
create mode 100644 src/main/java/com/gxwebsoft/shop/entity/MerchantVoiceDevice.java
create mode 100644 src/main/java/com/gxwebsoft/shop/entity/OrderRefund.java
create mode 100644 src/main/java/com/gxwebsoft/shop/entity/SelfTake.java
create mode 100644 src/main/java/com/gxwebsoft/shop/entity/SelfTakeUser.java
create mode 100644 src/main/java/com/gxwebsoft/shop/entity/ShopChatConversation.java
create mode 100644 src/main/java/com/gxwebsoft/shop/entity/ShopChatMessage.java
create mode 100644 src/main/java/com/gxwebsoft/shop/entity/TransferBillResponse.java
create mode 100644 src/main/java/com/gxwebsoft/shop/entity/UnifiedOrderBody.java
create mode 100644 src/main/java/com/gxwebsoft/shop/entity/UnionGoodsItem.java
create mode 100644 src/main/java/com/gxwebsoft/shop/entity/UnionSubOrderItem.java
create mode 100644 src/main/java/com/gxwebsoft/shop/entity/UserCoupon.java
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/CouponMapper.java
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/MerchantCollectMapper.java
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/MerchantOfflinePayMapper.java
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/MerchantVoiceDeviceMapper.java
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/OrderRefundMapper.java
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/SelfTakeMapper.java
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/SelfTakeUserMapper.java
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/ShopChatConversationMapper.java
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/ShopChatMessageMapper.java
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/UserCouponMapper.java
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/xml/CouponMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/xml/MerchantCollectMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/xml/MerchantOfflinePayMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/xml/MerchantVoiceDeviceMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/xml/OrderRefundMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/xml/SelfTakeMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/xml/SelfTakeUserMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/xml/ShopChatConversationMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/xml/ShopChatMessageMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/shop/mapper/xml/UserCouponMapper.xml
create mode 100644 src/main/java/com/gxwebsoft/shop/param/CouponParam.java
create mode 100644 src/main/java/com/gxwebsoft/shop/param/MerchantCollectParam.java
create mode 100644 src/main/java/com/gxwebsoft/shop/param/MerchantOfflinePayParam.java
create mode 100644 src/main/java/com/gxwebsoft/shop/param/MerchantVoiceDeviceParam.java
create mode 100644 src/main/java/com/gxwebsoft/shop/param/OrderRefundParam.java
create mode 100644 src/main/java/com/gxwebsoft/shop/param/SelfTakeParam.java
create mode 100644 src/main/java/com/gxwebsoft/shop/param/SelfTakeUserParam.java
create mode 100644 src/main/java/com/gxwebsoft/shop/param/ShopChatConversationParam.java
create mode 100644 src/main/java/com/gxwebsoft/shop/param/ShopChatMessageParam.java
create mode 100644 src/main/java/com/gxwebsoft/shop/param/UserCouponParam.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/CouponService.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/MerchantCollectService.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/MerchantOfflinePayService.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/MerchantVoiceDeviceService.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/OrderRefundService.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/SelfTakeService.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/SelfTakeUserService.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/ShopChatConversationService.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/ShopChatMessageService.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/UserCouponService.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/WechatConfigService.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/impl/CouponServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/impl/MerchantCollectServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/impl/MerchantOfflinePayServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/impl/MerchantVoiceDeviceServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/impl/OrderRefundServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/impl/SelfTakeServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/impl/SelfTakeUserServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/impl/ShopChatConversationServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/impl/ShopChatMessageServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/impl/UserCouponServiceImpl.java
create mode 100644 src/main/java/com/gxwebsoft/shop/service/impl/WechatConfigServiceImpl.java
rename src/test/java/com/gxwebsoft/generator/{BookingGenerator.java => ClinicGenerator.java} (87%)
create mode 100644 websoft-modules.log.2024-11-18.09450946160958.tmp
create mode 100644 websoft-modules.log.2024-12-24.0.gz
create mode 100644 websoft-modules.log.2025-06-12.0.gz
diff --git a/.idea/AugmentWebviewStateStore.xml b/.idea/AugmentWebviewStateStore.xml
new file mode 100644
index 0000000..ddc59ea
--- /dev/null
+++ b/.idea/AugmentWebviewStateStore.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..8c350a4
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/xiangan-shop.iml b/.idea/xiangan-shop.iml
new file mode 100644
index 0000000..d6ebd48
--- /dev/null
+++ b/.idea/xiangan-shop.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 50b70af..230e4f4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -99,6 +99,11 @@
mybatis-plus-generator
3.4.1
+
+ com.baomidou
+ dynamic-datasource-spring-boot-starter
+ 3.4.1
+
@@ -256,21 +261,20 @@
com.github.wechatpay-apiv3
wechatpay-java
- 0.2.9
+ 0.2.17
com.github.binarywang
weixin-java-miniapp
- 4.6.0
+ 4.7.0
com.github.binarywang
wx-java-mp-spring-boot-starter
- 4.6.0
+ 4.7.0
-
com.aliyun.oss
@@ -326,7 +330,23 @@
2.5.1
+
+ com.freewayso
+ image-combiner
+ 2.6.9
+
+
+ net.sf.json-lib
+ json-lib
+ 2.4
+ jdk15
+
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/src/main/java/com/gxwebsoft/WebSoftApplication.java b/src/main/java/com/gxwebsoft/WebSoftApplication.java
index 80c9a42..8f9c4ea 100644
--- a/src/main/java/com/gxwebsoft/WebSoftApplication.java
+++ b/src/main/java/com/gxwebsoft/WebSoftApplication.java
@@ -8,6 +8,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
+import org.springframework.web.socket.config.annotation.EnableWebSocket;
/**
* 启动类
@@ -19,6 +20,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableConfigurationProperties(ConfigProperties.class)
@SpringBootApplication
@EnableScheduling
+@EnableWebSocket
public class WebSoftApplication {
public static void main(String[] args) {
diff --git a/src/main/java/com/gxwebsoft/clinic/controller/ClinicAppointmentController.java b/src/main/java/com/gxwebsoft/clinic/controller/ClinicAppointmentController.java
new file mode 100644
index 0000000..b632020
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/controller/ClinicAppointmentController.java
@@ -0,0 +1,122 @@
+package com.gxwebsoft.clinic.controller;
+
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.clinic.service.ClinicAppointmentService;
+import com.gxwebsoft.clinic.entity.ClinicAppointment;
+import com.gxwebsoft.clinic.param.ClinicAppointmentParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 挂号控制器
+ *
+ * @author 科技小王子
+ * @since 2025-10-19 09:27:04
+ */
+@Tag(name = "挂号管理")
+@RestController
+@RequestMapping("/api/clinic/clinic-appointment")
+public class ClinicAppointmentController extends BaseController {
+ @Resource
+ private ClinicAppointmentService clinicAppointmentService;
+
+ @Operation(summary = "分页查询挂号")
+ @GetMapping("/page")
+ public ApiResult> page(ClinicAppointmentParam param) {
+ // 使用关联查询
+ return success(clinicAppointmentService.pageRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicAppointment:list')")
+ @Operation(summary = "查询全部挂号")
+ @GetMapping()
+ public ApiResult> list(ClinicAppointmentParam param) {
+ // 使用关联查询
+ return success(clinicAppointmentService.listRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicAppointment:list')")
+ @Operation(summary = "根据id查询挂号")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(clinicAppointmentService.getByIdRel(id));
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicAppointment:save')")
+
+ @Operation(summary = "添加挂号")
+ @PostMapping()
+ public ApiResult> save(@RequestBody ClinicAppointment clinicAppointment) {
+ if (clinicAppointmentService.save(clinicAppointment)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicAppointment:update')")
+
+ @Operation(summary = "修改挂号")
+ @PutMapping()
+ public ApiResult> update(@RequestBody ClinicAppointment clinicAppointment) {
+ if (clinicAppointmentService.updateById(clinicAppointment)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicAppointment:remove')")
+
+ @Operation(summary = "删除挂号")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (clinicAppointmentService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicAppointment:save')")
+
+ @Operation(summary = "批量添加挂号")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (clinicAppointmentService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicAppointment:update')")
+
+ @Operation(summary = "批量修改挂号")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(clinicAppointmentService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicAppointment:remove')")
+
+ @Operation(summary = "批量删除挂号")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (clinicAppointmentService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/controller/ClinicCaseController.java b/src/main/java/com/gxwebsoft/clinic/controller/ClinicCaseController.java
new file mode 100644
index 0000000..98d78fc
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/controller/ClinicCaseController.java
@@ -0,0 +1,116 @@
+package com.gxwebsoft.clinic.controller;
+
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.clinic.service.ClinicCaseService;
+import com.gxwebsoft.clinic.entity.ClinicCase;
+import com.gxwebsoft.clinic.param.ClinicCaseParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import com.gxwebsoft.common.system.entity.User;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 病例列表控制器
+ *
+ * @author LX
+ * @since 2025-12-25 17:24:55
+ */
+@Api(tags = "病例列表管理")
+@RestController
+@RequestMapping("/api/clinic/clinic-case")
+public class ClinicCaseController extends BaseController {
+ @Resource
+ private ClinicCaseService clinicCaseService;
+
+ @ApiOperation("分页查询病例列表")
+ @GetMapping("/page")
+ public ApiResult> page(ClinicCaseParam param) {
+ // 使用关联查询
+ return success(clinicCaseService.pageRel(param));
+ }
+
+ @ApiOperation("查询全部病例列表")
+ @GetMapping()
+ public ApiResult> list(ClinicCaseParam param) {
+ // 使用关联查询
+ return success(clinicCaseService.listRel(param));
+ }
+
+ @ApiOperation("根据id查询病例列表")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(clinicCaseService.getByIdRel(id));
+ }
+
+ @ApiOperation("添加病例列表")
+ @PostMapping()
+ public ApiResult> save(@RequestBody ClinicCase clinicCase) {
+ // 记录当前登录用户id
+ if (clinicCase.getUserId() != null) {
+ User loginUser = getLoginUser();
+ if (loginUser != null) {
+ clinicCase.setUserId(loginUser.getUserId());
+ }
+ }
+ if (clinicCaseService.save(clinicCase)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("修改病例列表")
+ @PutMapping()
+ public ApiResult> update(@RequestBody ClinicCase clinicCase) {
+ if (clinicCaseService.updateById(clinicCase)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("删除病例列表")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (clinicCaseService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @ApiOperation("批量添加病例列表")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (clinicCaseService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("批量修改病例列表")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(clinicCaseService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("批量删除病例列表")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (clinicCaseService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/controller/ClinicDoctorApplyController.java b/src/main/java/com/gxwebsoft/clinic/controller/ClinicDoctorApplyController.java
new file mode 100644
index 0000000..7b5e6ce
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/controller/ClinicDoctorApplyController.java
@@ -0,0 +1,128 @@
+package com.gxwebsoft.clinic.controller;
+
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.clinic.service.ClinicDoctorApplyService;
+import com.gxwebsoft.clinic.entity.ClinicDoctorApply;
+import com.gxwebsoft.clinic.param.ClinicDoctorApplyParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 医生入驻申请控制器
+ *
+ * @author 科技小王子
+ * @since 2025-10-19 09:27:04
+ */
+@Tag(name = "医生入驻申请管理")
+@RestController
+@RequestMapping("/api/clinic/clinic-doctor-apply")
+public class ClinicDoctorApplyController extends BaseController {
+ @Resource
+ private ClinicDoctorApplyService clinicDoctorApplyService;
+
+ @PreAuthorize("hasAuthority('clinic:clinicDoctorApply:list')")
+ @Operation(summary = "分页查询医生入驻申请")
+ @GetMapping("/page")
+ public ApiResult> page(ClinicDoctorApplyParam param) {
+ // 使用关联查询
+ return success(clinicDoctorApplyService.pageRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicDoctorApply:list')")
+ @Operation(summary = "查询全部医生入驻申请")
+ @GetMapping()
+ public ApiResult> list(ClinicDoctorApplyParam param) {
+ // 使用关联查询
+ return success(clinicDoctorApplyService.listRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicDoctorApply:list')")
+ @Operation(summary = "根据id查询医生入驻申请")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(clinicDoctorApplyService.getByIdRel(id));
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicDoctorApply:save')")
+
+ @Operation(summary = "添加医生入驻申请")
+ @PostMapping()
+ public ApiResult> save(@RequestBody ClinicDoctorApply clinicDoctorApply) {
+ // 记录当前登录用户id
+ // User loginUser = getLoginUser();
+ // if (loginUser != null) {
+ // clinicDoctorApply.setUserId(loginUser.getUserId());
+ // }
+ if (clinicDoctorApplyService.save(clinicDoctorApply)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicDoctorApply:update')")
+
+ @Operation(summary = "修改医生入驻申请")
+ @PutMapping()
+ public ApiResult> update(@RequestBody ClinicDoctorApply clinicDoctorApply) {
+ if (clinicDoctorApplyService.updateById(clinicDoctorApply)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicDoctorApply:remove')")
+
+ @Operation(summary = "删除医生入驻申请")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (clinicDoctorApplyService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicDoctorApply:save')")
+
+ @Operation(summary = "批量添加医生入驻申请")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (clinicDoctorApplyService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicDoctorApply:update')")
+
+ @Operation(summary = "批量修改医生入驻申请")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(clinicDoctorApplyService, "apply_id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicDoctorApply:remove')")
+
+ @Operation(summary = "批量删除医生入驻申请")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (clinicDoctorApplyService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/controller/ClinicDoctorUserController.java b/src/main/java/com/gxwebsoft/clinic/controller/ClinicDoctorUserController.java
new file mode 100644
index 0000000..ae3a0f9
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/controller/ClinicDoctorUserController.java
@@ -0,0 +1,129 @@
+package com.gxwebsoft.clinic.controller;
+
+import com.gxwebsoft.clinic.entity.ClinicDoctorUser;
+import com.gxwebsoft.clinic.param.ClinicDoctorUserParam;
+import com.gxwebsoft.clinic.service.ClinicDoctorUserService;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import com.gxwebsoft.common.core.utils.RequestUtil;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.system.entity.User;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 分销商用户记录表控制器
+ *
+ * @author 科技小王子
+ * @since 2025-10-23 15:58:21
+ */
+@Tag(name = "分销商用户记录表管理")
+@RestController
+@RequestMapping("/api/clinic/clinic-doctor-user")
+public class ClinicDoctorUserController extends BaseController {
+ @Resource
+ private ClinicDoctorUserService clinicDoctorUserService;
+
+ @Operation(summary = "分页查询分销商用户记录表")
+ @GetMapping("/page")
+ public ApiResult> page(ClinicDoctorUserParam param) {
+ // 使用关联查询
+ return success(clinicDoctorUserService.pageRel(param));
+ }
+
+ @Operation(summary = "查询全部分销商用户记录表")
+ @GetMapping()
+ public ApiResult> list(ClinicDoctorUserParam param) {
+ // 使用关联查询
+ return success(clinicDoctorUserService.listRel(param));
+ }
+
+ @Operation(summary = "根据id查询分销商用户记录表")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(clinicDoctorUserService.getByIdRel(id));
+ }
+
+ @Operation(summary = "根据id查询分销商用户记录表")
+ @GetMapping("/getByUserId/{doctorUserId}")
+ public ApiResult getByUserId(@PathVariable("doctorUserId") Integer id) {
+ // 使用关联查询
+ return success(clinicDoctorUserService.getByUserId(id));
+ }
+
+
+ @Operation(summary = "添加分销商用户记录表")
+ @PostMapping()
+ public ApiResult> save(@RequestBody ClinicDoctorUser clinicDoctorUser) {
+ RequestUtil requestUtil = new RequestUtil();
+ requestUtil.setTenantId(getTenantId().toString());
+ User user = requestUtil.getUserByPhone(clinicDoctorUser.getPhone());
+ if (user == null) {
+ return fail("该手机号无法查询到用户");
+ }
+ clinicDoctorUser.setUserId(user.getUserId());
+ if (clinicDoctorUserService.save(clinicDoctorUser)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+
+ @Operation(summary = "修改分销商用户记录表")
+ @PutMapping()
+ public ApiResult> update(@RequestBody ClinicDoctorUser clinicDoctorUser) {
+ if (clinicDoctorUserService.updateById(clinicDoctorUser)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+
+ @Operation(summary = "删除分销商用户记录表")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (clinicDoctorUserService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+
+ @Operation(summary = "批量添加分销商用户记录表")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (clinicDoctorUserService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+
+ @Operation(summary = "批量修改分销商用户记录表")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(clinicDoctorUserService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+
+ @Operation(summary = "批量删除分销商用户记录表")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (clinicDoctorUserService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/controller/ClinicListController.java b/src/main/java/com/gxwebsoft/clinic/controller/ClinicListController.java
new file mode 100644
index 0000000..fadc110
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/controller/ClinicListController.java
@@ -0,0 +1,121 @@
+package com.gxwebsoft.clinic.controller;
+
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.clinic.service.ClinicListService;
+import com.gxwebsoft.clinic.entity.ClinicList;
+import com.gxwebsoft.clinic.param.ClinicListParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import com.gxwebsoft.common.system.entity.User;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 诊所列表控制器
+ *
+ * @author LX
+ * @since 2025-12-09 17:29:44
+ */
+@Api(tags = "诊所列表管理")
+@RestController
+@RequestMapping("/api/clinic/clinic-list")
+public class ClinicListController extends BaseController {
+ @Resource
+ private ClinicListService clinicListService;
+
+ @GetMapping("/getUserItem")
+ public ApiResult getUserItem() {
+ // 使用关联查询
+ return success(clinicListService.getByUserId(getLoginUserId()));
+ }
+
+ @ApiOperation("分页查询诊所列表")
+ @GetMapping("/page")
+ public ApiResult> page(ClinicListParam param) {
+ // 使用关联查询
+ return success(clinicListService.pageRel(param));
+ }
+
+ @ApiOperation("查询全部诊所列表")
+ @GetMapping()
+ public ApiResult> list(ClinicListParam param) {
+ // 使用关联查询
+ return success(clinicListService.listRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicList:list')")
+ @ApiOperation("根据id查询诊所列表")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(clinicListService.getByIdRel(id));
+ }
+
+ @ApiOperation("添加诊所列表")
+ @PostMapping()
+ public ApiResult> save(@RequestBody ClinicList clinicList) {
+ // 记录当前登录用户id
+ User loginUser = getLoginUser();
+ if (loginUser != null) {
+ clinicList.setUserId(loginUser.getUserId());
+ }
+ if (clinicListService.save(clinicList)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("修改诊所列表")
+ @PutMapping()
+ public ApiResult> update(@RequestBody ClinicList clinicList) {
+ if (clinicListService.updateById(clinicList)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("删除诊所列表")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (clinicListService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @ApiOperation("批量添加诊所列表")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (clinicListService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("批量修改诊所列表")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(clinicListService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("批量删除诊所列表")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (clinicListService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/controller/ClinicMedicineController.java b/src/main/java/com/gxwebsoft/clinic/controller/ClinicMedicineController.java
new file mode 100644
index 0000000..6d118a3
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/controller/ClinicMedicineController.java
@@ -0,0 +1,118 @@
+package com.gxwebsoft.clinic.controller;
+
+import com.gxwebsoft.clinic.entity.ClinicMedicine;
+import com.gxwebsoft.clinic.param.ClinicMedicineParam;
+import com.gxwebsoft.clinic.service.ClinicMedicineService;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.web.PageResult;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 药品库控制器
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:06:32
+ */
+@Tag(name = "药品库管理")
+@RestController
+@RequestMapping("/api/clinic/clinic-medicine")
+public class ClinicMedicineController extends BaseController {
+ @Resource
+ private ClinicMedicineService clinicMedicineService;
+
+ @Operation(summary = "分页查询药品库")
+ @GetMapping("/page")
+ public ApiResult> page(ClinicMedicineParam param) {
+ // 使用关联查询
+ return success(clinicMedicineService.pageRel(param));
+ }
+
+ @Operation(summary = "查询全部药品库")
+ @GetMapping()
+ public ApiResult> list(ClinicMedicineParam param) {
+ // 使用关联查询
+ return success(clinicMedicineService.listRel(param));
+ }
+
+ @Operation(summary = "根据id查询药品库")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(clinicMedicineService.getByIdRel(id));
+ }
+
+
+ @Operation(summary = "添加药品库")
+ @PostMapping()
+ public ApiResult> save(@RequestBody ClinicMedicine clinicMedicine) {
+ // 记录当前登录用户id
+ // User loginUser = getLoginUser();
+ // if (loginUser != null) {
+ // clinicMedicine.setUserId(loginUser.getUserId());
+ // }
+ if (clinicMedicineService.save(clinicMedicine)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+
+ @Operation(summary = "修改药品库")
+ @PutMapping()
+ public ApiResult> update(@RequestBody ClinicMedicine clinicMedicine) {
+ if (clinicMedicineService.updateById(clinicMedicine)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+
+ @Operation(summary = "删除药品库")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (clinicMedicineService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+
+ @Operation(summary = "批量添加药品库")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (clinicMedicineService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+
+ @Operation(summary = "批量修改药品库")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(clinicMedicineService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+
+ @Operation(summary = "批量删除药品库")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (clinicMedicineService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/controller/ClinicMedicineInoutController.java b/src/main/java/com/gxwebsoft/clinic/controller/ClinicMedicineInoutController.java
new file mode 100644
index 0000000..abe25c0
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/controller/ClinicMedicineInoutController.java
@@ -0,0 +1,127 @@
+package com.gxwebsoft.clinic.controller;
+
+import com.gxwebsoft.clinic.entity.ClinicMedicineInout;
+import com.gxwebsoft.clinic.param.ClinicMedicineInoutParam;
+import com.gxwebsoft.clinic.service.ClinicMedicineInoutService;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.web.PageResult;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 出入库控制器
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:06:32
+ */
+@Tag(name = "出入库管理")
+@RestController
+@RequestMapping("/api/clinic/clinic-medicine-inout")
+public class ClinicMedicineInoutController extends BaseController {
+ @Resource
+ private ClinicMedicineInoutService clinicMedicineInoutService;
+
+ @PreAuthorize("hasAuthority('clinic:clinicMedicineInout:list')")
+ @Operation(summary = "分页查询出入库")
+ @GetMapping("/page")
+ public ApiResult> page(ClinicMedicineInoutParam param) {
+ // 使用关联查询
+ return success(clinicMedicineInoutService.pageRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicMedicineInout:list')")
+ @Operation(summary = "查询全部出入库")
+ @GetMapping()
+ public ApiResult> list(ClinicMedicineInoutParam param) {
+ // 使用关联查询
+ return success(clinicMedicineInoutService.listRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicMedicineInout:list')")
+ @Operation(summary = "根据id查询出入库")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(clinicMedicineInoutService.getByIdRel(id));
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicMedicineInout:save')")
+
+ @Operation(summary = "添加出入库")
+ @PostMapping()
+ public ApiResult> save(@RequestBody ClinicMedicineInout clinicMedicineInout) {
+ // 记录当前登录用户id
+ // User loginUser = getLoginUser();
+ // if (loginUser != null) {
+ // clinicMedicineInout.setUserId(loginUser.getUserId());
+ // }
+ if (clinicMedicineInoutService.save(clinicMedicineInout)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicMedicineInout:update')")
+
+ @Operation(summary = "修改出入库")
+ @PutMapping()
+ public ApiResult> update(@RequestBody ClinicMedicineInout clinicMedicineInout) {
+ if (clinicMedicineInoutService.updateById(clinicMedicineInout)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicMedicineInout:remove')")
+
+ @Operation(summary = "删除出入库")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (clinicMedicineInoutService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicMedicineInout:save')")
+
+ @Operation(summary = "批量添加出入库")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (clinicMedicineInoutService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicMedicineInout:update')")
+
+ @Operation(summary = "批量修改出入库")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(clinicMedicineInoutService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicMedicineInout:remove')")
+
+ @Operation(summary = "批量删除出入库")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (clinicMedicineInoutService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/controller/ClinicMedicineStockController.java b/src/main/java/com/gxwebsoft/clinic/controller/ClinicMedicineStockController.java
new file mode 100644
index 0000000..18a1995
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/controller/ClinicMedicineStockController.java
@@ -0,0 +1,127 @@
+package com.gxwebsoft.clinic.controller;
+
+import com.gxwebsoft.clinic.entity.ClinicMedicineStock;
+import com.gxwebsoft.clinic.param.ClinicMedicineStockParam;
+import com.gxwebsoft.clinic.service.ClinicMedicineStockService;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.web.PageResult;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 药品库存控制器
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:06:32
+ */
+@Tag(name = "药品库存管理")
+@RestController
+@RequestMapping("/api/clinic/clinic-medicine-stock")
+public class ClinicMedicineStockController extends BaseController {
+ @Resource
+ private ClinicMedicineStockService clinicMedicineStockService;
+
+ @PreAuthorize("hasAuthority('clinic:clinicMedicineStock:list')")
+ @Operation(summary = "分页查询药品库存")
+ @GetMapping("/page")
+ public ApiResult> page(ClinicMedicineStockParam param) {
+ // 使用关联查询
+ return success(clinicMedicineStockService.pageRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicMedicineStock:list')")
+ @Operation(summary = "查询全部药品库存")
+ @GetMapping()
+ public ApiResult> list(ClinicMedicineStockParam param) {
+ // 使用关联查询
+ return success(clinicMedicineStockService.listRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicMedicineStock:list')")
+ @Operation(summary = "根据id查询药品库存")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(clinicMedicineStockService.getByIdRel(id));
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicMedicineStock:save')")
+
+ @Operation(summary = "添加药品库存")
+ @PostMapping()
+ public ApiResult> save(@RequestBody ClinicMedicineStock clinicMedicineStock) {
+ // 记录当前登录用户id
+ // User loginUser = getLoginUser();
+ // if (loginUser != null) {
+ // clinicMedicineStock.setUserId(loginUser.getUserId());
+ // }
+ if (clinicMedicineStockService.save(clinicMedicineStock)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicMedicineStock:update')")
+
+ @Operation(summary = "修改药品库存")
+ @PutMapping()
+ public ApiResult> update(@RequestBody ClinicMedicineStock clinicMedicineStock) {
+ if (clinicMedicineStockService.updateById(clinicMedicineStock)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicMedicineStock:remove')")
+
+ @Operation(summary = "删除药品库存")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (clinicMedicineStockService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicMedicineStock:save')")
+
+ @Operation(summary = "批量添加药品库存")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (clinicMedicineStockService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicMedicineStock:update')")
+
+ @Operation(summary = "批量修改药品库存")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(clinicMedicineStockService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicMedicineStock:remove')")
+
+ @Operation(summary = "批量删除药品库存")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (clinicMedicineStockService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/controller/ClinicPatientUserController.java b/src/main/java/com/gxwebsoft/clinic/controller/ClinicPatientUserController.java
new file mode 100644
index 0000000..3cf88c6
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/controller/ClinicPatientUserController.java
@@ -0,0 +1,158 @@
+package com.gxwebsoft.clinic.controller;
+
+import com.gxwebsoft.common.core.security.JwtUtil;
+import com.gxwebsoft.common.core.utils.RequestUtil;
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.clinic.service.ClinicPatientUserService;
+import com.gxwebsoft.clinic.entity.ClinicPatientUser;
+import com.gxwebsoft.clinic.param.ClinicPatientUserParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import com.gxwebsoft.common.system.entity.User;
+import com.gxwebsoft.common.system.service.UserService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 患者控制器
+ *
+ * @author 科技小王子
+ * @since 2025-10-19 09:27:04
+ */
+@Tag(name = "患者管理")
+@RestController
+@RequestMapping("/api/clinic/clinic-patient-user")
+public class ClinicPatientUserController extends BaseController {
+ @Resource
+ private ClinicPatientUserService clinicPatientUserService;
+ @Resource
+ private UserService userService;
+
+ @Operation(summary = "分页查询患者")
+ @GetMapping("/page")
+ public ApiResult> page(ClinicPatientUserParam param) {
+ // 使用关联查询
+ return success(clinicPatientUserService.pageRel(param));
+ }
+
+ @Operation(summary = "分页查询患者")
+ @GetMapping("/userPage")
+ public ApiResult> userPage(ClinicPatientUserParam param) {
+ // 使用关联查询
+ param.setUserId(getLoginUserId());
+ return success(clinicPatientUserService.pageRel(param));
+ }
+
+ @Operation(summary = "查询全部患者")
+ @GetMapping()
+ public ApiResult> list(ClinicPatientUserParam param, HttpServletRequest request) {
+ List list = clinicPatientUserService.listRel(param);
+// RequestUtil requestUtil = new RequestUtil();
+// requestUtil.setTenantId(getTenantId().toString());
+// String access_token = JwtUtil.getAccessToken(request);
+// requestUtil.setAccessToken(access_token);
+ List uidList = new ArrayList<>();
+ if (!list.isEmpty()) {
+ uidList = list.stream().map(ClinicPatientUser::getPatientUserId).toList();
+// List userList = requestUtil.getUserList(String.join(",", uidList));
+ List userList = userService.getByUserIdListInner(uidList);
+ for (ClinicPatientUser clinicPatientUser : list) {
+ User user = userList.stream().filter(u -> u.getUserId().equals(clinicPatientUser.getPatientUserId())).findFirst().orElse(null);
+ clinicPatientUser.setPatientUser(user);
+ }
+ }
+ return success(list);
+ }
+
+ @GetMapping("/getByPatientUserId/{patientUserId}")
+ public ApiResult getByPatientUserId(@PathVariable("patientUserId") Integer patientUserId) {
+ // 使用关联查询
+ return success(clinicPatientUserService.getByPatientUserId(patientUserId));
+ }
+
+ @Operation(summary = "根据id查询患者")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(clinicPatientUserService.getByIdRel(id));
+ }
+
+
+ @Operation(summary = "添加患者")
+ @PostMapping()
+ public ApiResult> save(@RequestBody ClinicPatientUser clinicPatientUser) {
+ // 记录当前登录用户id
+ User loginUser = getLoginUser();
+ if (loginUser != null) {
+ clinicPatientUser.setUserId(loginUser.getUserId());
+ }
+ User patientUser = userService.getByPhoneInner(clinicPatientUser.getPhone());
+ if (patientUser != null) clinicPatientUser.setPatientUserId(patientUser.getUserId());
+ else return fail("患者用户不存在");
+ if (clinicPatientUserService.save(clinicPatientUser)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+
+ @Operation(summary = "修改患者")
+ @PutMapping()
+ public ApiResult> update(@RequestBody ClinicPatientUser clinicPatientUser) {
+ if (clinicPatientUserService.updateById(clinicPatientUser)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+
+ @Operation(summary = "删除患者")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (clinicPatientUserService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+
+ @Operation(summary = "批量添加患者")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (clinicPatientUserService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+
+ @Operation(summary = "批量修改患者")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(clinicPatientUserService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+
+ @Operation(summary = "批量删除患者")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (clinicPatientUserService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/controller/ClinicPrescriptionController.java b/src/main/java/com/gxwebsoft/clinic/controller/ClinicPrescriptionController.java
new file mode 100644
index 0000000..f1e9f05
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/controller/ClinicPrescriptionController.java
@@ -0,0 +1,192 @@
+package com.gxwebsoft.clinic.controller;
+
+import cn.hutool.core.util.IdUtil;
+import com.gxwebsoft.clinic.dto.PrescriptionOrderRequest;
+import com.gxwebsoft.clinic.entity.ClinicPrescription;
+import com.gxwebsoft.clinic.entity.ClinicPrescriptionItem;
+import com.gxwebsoft.clinic.param.ClinicPrescriptionParam;
+import com.gxwebsoft.clinic.service.ClinicPrescriptionItemService;
+import com.gxwebsoft.clinic.service.ClinicPrescriptionService;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.system.entity.User;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 处方主表
+ * 控制器
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:01:13
+ */
+@Tag(name = "处方主表管理")
+@RestController
+@RequestMapping("/api/clinic/clinic-prescription")
+public class ClinicPrescriptionController extends BaseController {
+ @Resource
+ private ClinicPrescriptionService clinicPrescriptionService;
+ @Resource
+ private ClinicPrescriptionItemService clinicPrescriptionItemService;
+
+ @Operation(summary = "分页查询处方主表")
+ @GetMapping("/page")
+ public ApiResult> page(ClinicPrescriptionParam param) {
+ param.setLoginUserId(getLoginUserId());
+ return success(clinicPrescriptionService.pageRel(param));
+ }
+
+ @Operation(summary = "查询全部处方主表")
+ @GetMapping()
+ public ApiResult> list(ClinicPrescriptionParam param) {
+ // 使用关联查询
+ return success(clinicPrescriptionService.listRel(param));
+ }
+
+ @Operation(summary = "根据id查询处方主表")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(clinicPrescriptionService.getByIdRel(id));
+ }
+
+
+ @Operation(summary = "添加处方主表")
+ @PostMapping()
+ public ApiResult> save(@RequestBody ClinicPrescription clinicPrescription) {
+ // 记录当前登录用户id
+// clinicPrescription.setDoctorId(getLoginUserId());
+ // 生成订单号
+ String orderNo = Long.toString(IdUtil.getSnowflakeNextId());
+ clinicPrescription.setOrderNo(orderNo);
+ if (clinicPrescriptionService.save(clinicPrescription)) {
+ if (clinicPrescription.getItems() != null && !clinicPrescription.getItems().isEmpty()) {
+ for (ClinicPrescriptionItem item : clinicPrescription.getItems()) {
+ item.setPrescriptionId(clinicPrescription.getId());
+ item.setPrescriptionNo(orderNo);
+ }
+ clinicPrescriptionItemService.saveBatch(clinicPrescription.getItems());
+ }
+ // 返回处方数据,包含处方ID
+ return success("添加成功", clinicPrescriptionService.getByLastId(clinicPrescription));
+ }
+ return fail("添加失败");
+ }
+
+
+ @Operation(summary = "修改处方主表")
+ @PutMapping()
+ public ApiResult> update(@RequestBody ClinicPrescription clinicPrescription) {
+ if (clinicPrescriptionService.updateById(clinicPrescription)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+
+ @Operation(summary = "删除处方主表")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (clinicPrescriptionService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+
+ @Operation(summary = "批量添加处方主表")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (clinicPrescriptionService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+
+ @Operation(summary = "批量修改处方主表")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(clinicPrescriptionService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+
+ @Operation(summary = "批量删除处方主表")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (clinicPrescriptionService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @Operation(summary = "创建处方订单")
+ @PostMapping("/order")
+ public ApiResult> createOrder(@RequestBody PrescriptionOrderRequest request) {
+ try {
+ // 1. 参数校验
+ if (request.getPrescriptionId() == null) {
+ return fail("处方ID不能为空");
+ }
+ if (request.getPayType() == null) {
+ return fail("支付方式不能为空");
+ }
+
+ // 2. 查询处方信息
+ ClinicPrescription prescription = clinicPrescriptionService.getById(request.getPrescriptionId());
+ if (prescription == null) {
+ return fail("处方不存在");
+ }
+
+ // 3. 检查处方状态
+ if (prescription.getStatus() != null && prescription.getStatus() == 2) {
+ return fail("该处方已支付,无需重复支付");
+ }
+ if (prescription.getStatus() != null && prescription.getStatus() == 3) {
+ return fail("该处方已取消,无法支付");
+ }
+
+ // 4. 更新处方订单信息
+ ClinicPrescription updatePrescription = new ClinicPrescription();
+ updatePrescription.setId(request.getPrescriptionId());
+
+ // 根据支付类型更新状态
+ if (request.getPayType() == 1) {
+ // 微信支付,状态保持为正常,等待支付回调
+ updatePrescription.setStatus(0);
+ } else if (request.getPayType() == 4 || request.getPayType() == 5) {
+ // 现金支付或POS机支付,直接标记为已支付
+ updatePrescription.setStatus(2);
+ updatePrescription.setIsSettled(1);
+ updatePrescription.setSettleTime(LocalDateTime.now());
+ } else if (request.getPayType() == 6) {
+ // 免费,直接标记为已完成
+ updatePrescription.setStatus(1);
+ updatePrescription.setIsSettled(1);
+ updatePrescription.setSettleTime(LocalDateTime.now());
+ }
+
+ if (clinicPrescriptionService.updateById(updatePrescription)) {
+ return success("订单创建成功", prescription);
+ }
+ return fail("订单创建失败");
+
+ } catch (Exception e) {
+ return fail("订单创建失败:" + e.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/controller/ClinicPrescriptionItemController.java b/src/main/java/com/gxwebsoft/clinic/controller/ClinicPrescriptionItemController.java
new file mode 100644
index 0000000..1e6070b
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/controller/ClinicPrescriptionItemController.java
@@ -0,0 +1,121 @@
+package com.gxwebsoft.clinic.controller;
+
+import com.gxwebsoft.clinic.entity.ClinicPrescriptionItem;
+import com.gxwebsoft.clinic.param.ClinicPrescriptionItemParam;
+import com.gxwebsoft.clinic.service.ClinicPrescriptionItemService;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.web.PageResult;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 处方明细表
+控制器
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:01:13
+ */
+@Tag(name = "处方明细表管理")
+@RestController
+@RequestMapping("/api/clinic/clinic-prescription-item")
+public class ClinicPrescriptionItemController extends BaseController {
+ @Resource
+ private ClinicPrescriptionItemService clinicPrescriptionItemService;
+
+ @Operation(summary = "分页查询处方明细表")
+ @GetMapping("/page")
+ public ApiResult> page(ClinicPrescriptionItemParam param) {
+ // 使用关联查询
+ return success(clinicPrescriptionItemService.pageRel(param));
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicPrescription:list')")
+ @Operation(summary = "查询全部处方明细表")
+ @GetMapping()
+ public ApiResult> list(ClinicPrescriptionItemParam param) {
+ // 使用关联查询
+ return success(clinicPrescriptionItemService.listRel(param));
+ }
+
+ @Operation(summary = "根据id查询处方明细表")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(clinicPrescriptionItemService.getByIdRel(id));
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicPrescription:save')")
+
+ @Operation(summary = "添加处方明细表")
+ @PostMapping()
+ public ApiResult> save(@RequestBody ClinicPrescriptionItem clinicPrescriptionItem) {
+ if (clinicPrescriptionItemService.save(clinicPrescriptionItem)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicPrescription:update')")
+
+ @Operation(summary = "修改处方明细表")
+ @PutMapping()
+ public ApiResult> update(@RequestBody ClinicPrescriptionItem clinicPrescriptionItem) {
+ if (clinicPrescriptionItemService.updateById(clinicPrescriptionItem)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicPrescription:remove')")
+
+ @Operation(summary = "删除处方明细表")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (clinicPrescriptionItemService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicPrescription:save')")
+
+ @Operation(summary = "批量添加处方明细表")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (clinicPrescriptionItemService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicPrescription:update')")
+
+ @Operation(summary = "批量修改处方明细表")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(clinicPrescriptionItemService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @PreAuthorize("hasAuthority('clinic:clinicPrescription:remove')")
+
+ @Operation(summary = "批量删除处方明细表")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (clinicPrescriptionItemService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/controller/PrescriptionOrderController.java b/src/main/java/com/gxwebsoft/clinic/controller/PrescriptionOrderController.java
new file mode 100644
index 0000000..02782fd
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/controller/PrescriptionOrderController.java
@@ -0,0 +1,233 @@
+package com.gxwebsoft.clinic.controller;
+
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.gxwebsoft.clinic.entity.ClinicPrescription;
+import com.gxwebsoft.clinic.entity.ClinicPrescriptionItem;
+import com.gxwebsoft.clinic.entity.PrescriptionOrderItem;
+import com.gxwebsoft.clinic.service.PrescriptionOrderItemService;
+import com.gxwebsoft.common.core.config.CertificateProperties;
+import com.gxwebsoft.common.core.config.ConfigProperties;
+import com.gxwebsoft.common.core.utils.CertificateLoader;
+import com.gxwebsoft.common.core.utils.RedisUtil;
+import com.gxwebsoft.common.core.utils.WechatPayConfigValidator;
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.clinic.service.PrescriptionOrderService;
+import com.gxwebsoft.clinic.entity.PrescriptionOrder;
+import com.gxwebsoft.clinic.param.PrescriptionOrderParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import com.gxwebsoft.common.system.entity.Payment;
+import com.gxwebsoft.common.system.entity.User;
+import com.gxwebsoft.shop.entity.Order;
+import com.gxwebsoft.shop.service.OrderService;
+import com.wechat.pay.java.core.RSAAutoCertificateConfig;
+import com.wechat.pay.java.core.notification.NotificationConfig;
+import com.wechat.pay.java.core.notification.NotificationParser;
+import com.wechat.pay.java.core.notification.RequestParam;
+import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 处方主表
+ * 控制器
+ *
+ * @author LX
+ * @since 2025-12-10 11:28:03
+ */
+@Api(tags = "处方主表")
+@RestController
+@RequestMapping("/api/clinic/prescription-order")
+public class PrescriptionOrderController extends BaseController {
+ @Resource
+ private PrescriptionOrderService prescriptionOrderService;
+ @Resource
+ private PrescriptionOrderItemService prescriptionOrderItemService;
+ @Resource
+ private OrderService orderService;
+ @Resource
+ private RedisUtil redisUtil;
+ @Resource
+ private WechatPayConfigValidator wechatPayConfigValidator;
+ @Resource
+ private CertificateProperties certConfig;
+ @Resource
+ private ConfigProperties config;
+
+ @ApiOperation("分页查询处方主表")
+ @GetMapping("/page")
+ public ApiResult> page(PrescriptionOrderParam param) {
+ // 使用关联查询
+ return success(prescriptionOrderService.pageRel(param));
+ }
+
+ @ApiOperation("查询全部处方主表")
+ @GetMapping()
+ public ApiResult> list(PrescriptionOrderParam param) {
+ // 使用关联查询
+ return success(prescriptionOrderService.listRel(param));
+ }
+
+ @ApiOperation("根据id查询处方主表")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(prescriptionOrderService.getByIdRel(id));
+ }
+
+ @ApiOperation("添加处方主表")
+ @PostMapping()
+ public ApiResult> save(@RequestBody PrescriptionOrder prescriptionOrder) {
+ prescriptionOrder.setDoctorId(getLoginUserId());
+ // 生成订单号
+ String orderNo = Long.toString(IdUtil.getSnowflakeNextId());
+ prescriptionOrder.setOrderNo(orderNo);
+ BigDecimal payPrice = prescriptionOrder.getOrderPrice();
+ if (prescriptionOrder.getDecoctionAmount() != null)
+ payPrice = payPrice.add(prescriptionOrder.getDecoctionAmount());
+ if (prescriptionOrder.getExpressAmount() != null)
+ payPrice = payPrice.add(prescriptionOrder.getExpressAmount());
+ prescriptionOrder.setPayPrice(payPrice);
+ if (prescriptionOrderService.save(prescriptionOrder)) {
+ if (prescriptionOrder.getItems() != null && !prescriptionOrder.getItems().isEmpty()) {
+ for (PrescriptionOrderItem item : prescriptionOrder.getItems()) {
+ item.setPrescriptionId(prescriptionOrder.getId());
+ item.setPrescriptionNo(orderNo);
+ }
+ prescriptionOrderItemService.saveBatch(prescriptionOrder.getItems());
+ }
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("修改处方主表")
+ @PutMapping()
+ public ApiResult> update(@RequestBody PrescriptionOrder prescriptionOrder) {
+ if (prescriptionOrderService.updateById(prescriptionOrder)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("删除处方主表")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (prescriptionOrderService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @ApiOperation("批量添加处方主表")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (prescriptionOrderService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("批量修改处方主表")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(prescriptionOrderService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("批量删除处方主表")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (prescriptionOrderService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @PostMapping("/pay")
+ public ApiResult> pay(@RequestBody PrescriptionOrder prescriptionOrderData) {
+ PrescriptionOrder prescriptionOrder = prescriptionOrderService.getById(prescriptionOrderData.getId());
+ Order order = new Order();
+ order.setTenantId(getTenantId());
+ order.setTotalPrice(prescriptionOrder.getPayPrice());
+ order.setComments(prescriptionOrder.getOrderNo());
+ order.setOrderNo(prescriptionOrder.getOrderNo());
+ order.setOpenid(getLoginUser().getOpenid());
+ order.setNotifyUrl("https://clinic-api.websoft.top/api/clinic/prescription-order/notify");
+ return success("调起成功", orderService.createWxOrder(order));
+ }
+
+ @Schema(description = "异步通知")
+ @PostMapping("/notify")
+ public String wxNotify(@RequestHeader Map header, @RequestBody String body) {
+ System.out.println("异步通知*************** =");
+
+ String key = "Payment:1:10559";
+ final String uploadPath = config.getUploadPath();
+ final com.gxwebsoft.common.system.entity.Payment payment = redisUtil.get(key, Payment.class);
+ String privateKeyPath = uploadPath.concat("/file").concat(payment.getApiclientKey());
+ String apiclientCert = uploadPath.concat("/file").concat(payment.getApiclientCert());
+
+ com.wechat.pay.java.core.notification.RequestParam requestParam = new com.wechat.pay.java.core.notification.RequestParam.Builder()
+ .serialNumber(header.get("wechatpay-serial"))
+ .nonce(header.get("wechatpay-nonce"))
+ .signature(header.get("wechatpay-signature"))
+ .timestamp(header.get("wechatpay-timestamp"))
+ .body(body)
+ .build();
+
+ // 如果已经初始化了 RSAAutoCertificateConfig,可直接使用
+ // 没有的话,则构造一个
+ NotificationConfig config = new RSAAutoCertificateConfig.Builder()
+ .merchantId(payment.getMchId())
+ .privateKeyFromPath(privateKeyPath)
+ .merchantSerialNumber(payment.getMerchantSerialNumber())
+ .apiV3Key(payment.getApiKey())
+ .build();
+
+ // 初始化 NotificationParser
+ NotificationParser parser = new NotificationParser(config);
+
+ // 以支付通知回调为例,验签、解密并转换成 Transaction
+ Transaction transaction = parser.parse(requestParam, Transaction.class);
+ System.out.println("transaction = " + transaction);
+
+ if (StrUtil.equals("支付成功", transaction.getTradeStateDesc())) {
+ final String outTradeNo = transaction.getOutTradeNo();
+ final String transactionId = transaction.getTransactionId();
+ final Integer total = transaction.getAmount().getTotal();
+ final String tradeStateDesc = transaction.getTradeStateDesc();
+ final Transaction.TradeStateEnum tradeState = transaction.getTradeState();
+ final Transaction.TradeTypeEnum tradeType = transaction.getTradeType();
+
+ PrescriptionOrder prescriptionOrder = prescriptionOrderService.getByOrderNo(outTradeNo);
+ System.out.println("outTradeNo = " + outTradeNo);
+ System.out.println("clinicPrescription = " + prescriptionOrder);
+ if (prescriptionOrder != null) {
+ prescriptionOrder.setStatus(1);
+ prescriptionOrderService.updateById(prescriptionOrder);
+ }
+ return "SUCCESS";
+ }
+
+ return "fail";
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/controller/PrescriptionOrderItemController.java b/src/main/java/com/gxwebsoft/clinic/controller/PrescriptionOrderItemController.java
new file mode 100644
index 0000000..f34697d
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/controller/PrescriptionOrderItemController.java
@@ -0,0 +1,110 @@
+package com.gxwebsoft.clinic.controller;
+
+import com.gxwebsoft.common.core.web.BaseController;
+import com.gxwebsoft.clinic.service.PrescriptionOrderItemService;
+import com.gxwebsoft.clinic.entity.PrescriptionOrderItem;
+import com.gxwebsoft.clinic.param.PrescriptionOrderItemParam;
+import com.gxwebsoft.common.core.web.ApiResult;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.BatchParam;
+import com.gxwebsoft.common.core.annotation.OperationLog;
+import com.gxwebsoft.common.system.entity.User;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 处方明细表
+控制器
+ *
+ * @author LX
+ * @since 2025-12-10 11:28:03
+ */
+@Api(tags = "处方明细表管理")
+@RestController
+@RequestMapping("/api/clinic/prescription-order-item")
+public class PrescriptionOrderItemController extends BaseController {
+ @Resource
+ private PrescriptionOrderItemService prescriptionOrderItemService;
+
+ @ApiOperation("分页查询处方明细表")
+ @GetMapping("/page")
+ public ApiResult> page(PrescriptionOrderItemParam param) {
+ // 使用关联查询
+ return success(prescriptionOrderItemService.pageRel(param));
+ }
+
+ @ApiOperation("查询全部处方明细表")
+ @GetMapping()
+ public ApiResult> list(PrescriptionOrderItemParam param) {
+ // 使用关联查询
+ return success(prescriptionOrderItemService.listRel(param));
+ }
+
+ @ApiOperation("根据id查询处方明细表")
+ @GetMapping("/{id}")
+ public ApiResult get(@PathVariable("id") Integer id) {
+ // 使用关联查询
+ return success(prescriptionOrderItemService.getByIdRel(id));
+ }
+
+ @ApiOperation("添加处方明细表")
+ @PostMapping()
+ public ApiResult> save(@RequestBody PrescriptionOrderItem prescriptionOrderItem) {
+ if (prescriptionOrderItemService.save(prescriptionOrderItem)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("修改处方明细表")
+ @PutMapping()
+ public ApiResult> update(@RequestBody PrescriptionOrderItem prescriptionOrderItem) {
+ if (prescriptionOrderItemService.updateById(prescriptionOrderItem)) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("删除处方明细表")
+ @DeleteMapping("/{id}")
+ public ApiResult> remove(@PathVariable("id") Integer id) {
+ if (prescriptionOrderItemService.removeById(id)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+ @ApiOperation("批量添加处方明细表")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List list) {
+ if (prescriptionOrderItemService.saveBatch(list)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
+ @ApiOperation("批量修改处方明细表")
+ @PutMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody BatchParam batchParam) {
+ if (batchParam.update(prescriptionOrderItemService, "id")) {
+ return success("修改成功");
+ }
+ return fail("修改失败");
+ }
+
+ @ApiOperation("批量删除处方明细表")
+ @DeleteMapping("/batch")
+ public ApiResult> removeBatch(@RequestBody List ids) {
+ if (prescriptionOrderItemService.removeByIds(ids)) {
+ return success("删除成功");
+ }
+ return fail("删除失败");
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/dto/PrescriptionOrderRequest.java b/src/main/java/com/gxwebsoft/clinic/dto/PrescriptionOrderRequest.java
new file mode 100644
index 0000000..44bc7c2
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/dto/PrescriptionOrderRequest.java
@@ -0,0 +1,24 @@
+package com.gxwebsoft.clinic.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 处方订单请求参数
+ *
+ * @author 科技小王子
+ * @since 2025-11-03
+ */
+@Data
+@Schema(name = "PrescriptionOrderRequest", description = "处方订单请求参数")
+public class PrescriptionOrderRequest implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "处方ID", required = true)
+ private Integer prescriptionId;
+
+ @Schema(description = "支付方式:0余额支付,1微信支付,2支付宝支付,3银联支付,4现金支付,5POS机支付,6免费,7积分支付", required = true)
+ private Integer payType;
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/entity/ClinicAppointment.java b/src/main/java/com/gxwebsoft/clinic/entity/ClinicAppointment.java
new file mode 100644
index 0000000..c38ae8d
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/entity/ClinicAppointment.java
@@ -0,0 +1,81 @@
+package com.gxwebsoft.clinic.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 挂号
+ *
+ * @author 科技小王子
+ * @since 2025-10-19 09:27:03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Schema(name = "ClinicAppointment对象", description = "挂号")
+public class ClinicAppointment implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "主键ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "类型")
+ private Integer type;
+
+ @Schema(description = "就诊原因")
+ private String reason;
+
+ @Schema(description = "挂号时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime evaluateTime;
+
+ @Schema(description = "医生")
+ private Integer doctorId;
+
+ @Schema(description = "医生名称")
+ @TableField(exist = false)
+ private String doctorName;
+
+ @Schema(description = "医生职位")
+ @TableField(exist = false)
+ private String doctorPosition;
+
+ @Schema(description = "患者")
+ private Integer userId;
+
+ @Schema(description = "患者名称")
+ @TableField(exist = false)
+ private String nickname;
+
+ @Schema(description = "手机")
+ @TableField(exist = false)
+ private String phone;
+
+ @Schema(description = "备注")
+ private String comments;
+
+ @Schema(description = "排序号")
+ private Integer sortNumber;
+
+ @Schema(description = "是否删除")
+ private Integer isDelete;
+
+ @Schema(description = "租户id")
+ private Integer tenantId;
+
+ @Schema(description = "创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+ @Schema(description = "修改时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/entity/ClinicCase.java b/src/main/java/com/gxwebsoft/clinic/entity/ClinicCase.java
new file mode 100644
index 0000000..263264d
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/entity/ClinicCase.java
@@ -0,0 +1,73 @@
+package com.gxwebsoft.clinic.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 病例列表
+ *
+ * @author LX
+ * @since 2025-12-25 17:24:55
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "ClinicCase对象", description = "病例列表")
+public class ClinicCase implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ private Integer userId;
+
+ @ApiModelProperty(value = "医生用户id")
+ private Integer doctorUserId;
+
+ @ApiModelProperty(value = "病情主诉")
+ private String patientCondition;
+
+ @ApiModelProperty(value = "既往史")
+ private String pastHistory;
+
+ @ApiModelProperty(value = "过敏史")
+ private String allergyHistory;
+
+ @ApiModelProperty(value = "诊断")
+ private String diagnostic;
+
+ @ApiModelProperty(value = "治疗方案")
+ private String plan;
+
+ @ApiModelProperty(value = "照片")
+ private String photoList;
+
+ @ApiModelProperty(value = "0待审核 1通过 2拒绝")
+ private Integer status;
+
+ @ApiModelProperty(value = "备注")
+ private String comments;
+
+ @ApiModelProperty(value = "排序号")
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "是否删除, 0否, 1是")
+ @TableLogic
+ private Integer deleted;
+
+ @ApiModelProperty(value = "租户id")
+ private Integer tenantId;
+
+ @ApiModelProperty(value = "修改时间")
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty(value = "创建时间")
+ private LocalDateTime createTime;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/entity/ClinicDoctorApply.java b/src/main/java/com/gxwebsoft/clinic/entity/ClinicDoctorApply.java
new file mode 100644
index 0000000..8d8e173
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/entity/ClinicDoctorApply.java
@@ -0,0 +1,125 @@
+package com.gxwebsoft.clinic.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.time.LocalDate;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 医生入驻申请
+ *
+ * @author 科技小王子
+ * @since 2025-10-19 09:27:04
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Schema(name = "ClinicDoctorApply对象", description = "医生入驻申请")
+public class ClinicDoctorApply implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "主键ID")
+ @TableId(value = "apply_id", type = IdType.AUTO)
+ private Integer applyId;
+
+ @Schema(description = "类型 0医生")
+ private Integer type;
+
+ @Schema(description = "用户ID")
+ private Integer userId;
+
+ @Schema(description = "姓名")
+ private String realName;
+
+ @Schema(description = "性别 1男 2女")
+ private Integer gender;
+
+ @Schema(description = "手机号")
+ private String mobile;
+
+ @Schema(description = "客户名称")
+ private String dealerName;
+
+ @Schema(description = "证件号码")
+ private String idCard;
+
+ @Schema(description = "生日")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDate birthDate;
+
+ @Schema(description = "区分职称等级(如主治医师、副主任医师)")
+ private String professionalTitle;
+
+ @Schema(description = "工作单位")
+ private String workUnit;
+
+ @Schema(description = "执业资格核心凭证")
+ private String practiceLicense;
+
+ @Schema(description = "限定可执业科室或疾病类型")
+ private String practiceScope;
+
+ @Schema(description = "开始工作时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime startWorkDate;
+
+ @Schema(description = "简历")
+ private String resume;
+
+ @Schema(description = "使用 JSON 存储多个证件文件路径(如执业证、学历证)")
+ private String certificationFiles;
+
+ @Schema(description = "详细地址")
+ private String address;
+
+ @Schema(description = "签约价格")
+ private BigDecimal money;
+
+ @Schema(description = "推荐人用户ID")
+ private Integer refereeId;
+
+ @Schema(description = "申请方式(10需后台审核 20无需审核)")
+ private Integer applyType;
+
+ @Schema(description = "审核状态 (10待审核 20审核通过 30驳回)")
+ private Integer applyStatus;
+
+ @Schema(description = "申请时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime applyTime;
+
+ @Schema(description = "审核时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime auditTime;
+
+ @Schema(description = "合同时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime contractTime;
+
+ @Schema(description = "过期时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime expirationTime;
+
+ @Schema(description = "驳回原因")
+ private String rejectReason;
+
+ @Schema(description = "备注")
+ private String comments;
+
+ @Schema(description = "商城ID")
+ private Integer tenantId;
+
+ @Schema(description = "创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+ @Schema(description = "修改时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/entity/ClinicDoctorUser.java b/src/main/java/com/gxwebsoft/clinic/entity/ClinicDoctorUser.java
new file mode 100644
index 0000000..ca43983
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/entity/ClinicDoctorUser.java
@@ -0,0 +1,102 @@
+package com.gxwebsoft.clinic.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 分销商用户记录表
+ *
+ * @author 科技小王子
+ * @since 2025-10-23 15:58:20
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Schema(name = "ClinicDoctorUser对象", description = "分销商用户记录表")
+public class ClinicDoctorUser implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "主键ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "诊所")
+ private Integer clinicId;
+
+ @Schema(description = "类型 0经销商 1企业 2集团")
+ private Integer type;
+
+ @Schema(description = "自增ID")
+ private Integer userId;
+
+ @Schema(description = "昵称")
+ @TableField(exist = false)
+ private String nickname;
+
+ @Schema(description = "头像")
+ @TableField(exist = false)
+ private String avatar;
+
+ @Schema(description = "姓名")
+ private String realName;
+
+ @Schema(description = "手机号")
+ @TableField(exist = false)
+ private String phone;
+
+ @Schema(description = "部门")
+ private Integer departmentId;
+
+ @Schema(description = "专业领域")
+ private String specialty;
+
+ @Schema(description = "职务级别")
+ private String position;
+
+ @Schema(description = "执业资格")
+ private String qualification;
+
+ @Schema(description = "医生简介")
+ private String introduction;
+
+ @Schema(description = "挂号费")
+ private BigDecimal consultationFee;
+
+ @Schema(description = "工作年限")
+ private Integer workYears;
+
+ @Schema(description = "问诊人数")
+ private Integer consultationCount;
+
+ @Schema(description = "专属二维码")
+ private String qrcode;
+
+ @Schema(description = "备注")
+ private String comments;
+
+ @Schema(description = "排序号")
+ private Integer sortNumber;
+
+ @Schema(description = "是否删除")
+ private Integer isDelete;
+
+ @Schema(description = "租户id")
+ private Integer tenantId;
+
+ @Schema(description = "创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+ @Schema(description = "修改时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/entity/ClinicList.java b/src/main/java/com/gxwebsoft/clinic/entity/ClinicList.java
new file mode 100644
index 0000000..d784bc2
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/entity/ClinicList.java
@@ -0,0 +1,91 @@
+package com.gxwebsoft.clinic.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.time.LocalDateTime;
+import java.io.Serializable;
+
+import com.gxwebsoft.common.system.entity.Area;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 诊所列表
+ *
+ * @author LX
+ * @since 2025-12-09 17:29:44
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "ClinicList对象", description = "诊所列表")
+@TableName("clinic_clinic_list")
+public class ClinicList implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty(value = "名称")
+ private String name;
+
+ @ApiModelProperty(value = "省份id")
+ private Integer provinceId;
+
+ @ApiModelProperty(value = "城市id")
+ private Integer cityId;
+
+ @ApiModelProperty(value = "区域id")
+ private Integer regionId;
+
+ @ApiModelProperty(value = "管理员id")
+ private Integer userId;
+
+ @ApiModelProperty(value = "详细地址")
+ private String address;
+
+ @ApiModelProperty(value = "联系方式")
+ private String contact;
+
+ @ApiModelProperty(value = "logo")
+ private String logo;
+
+ @ApiModelProperty(value = "资质")
+ private String qualify;
+
+ @ApiModelProperty(value = "0待审核 1通过 2拒绝")
+ private Integer status;
+
+ @ApiModelProperty(value = "备注")
+ private String comments;
+
+ @ApiModelProperty(value = "排序号")
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "是否删除, 0否, 1是")
+ @TableLogic
+ private Integer deleted;
+
+ @ApiModelProperty(value = "租户id")
+ private Integer tenantId;
+
+ @ApiModelProperty(value = "修改时间")
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty(value = "创建时间")
+ private LocalDateTime createTime;
+
+ private String lat;
+
+ private String lng;
+
+ @TableField(exist = false)
+ private Area province;
+
+ @TableField(exist = false)
+ private Area city;
+
+ @TableField(exist = false)
+ private Area region;
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/entity/ClinicMedicine.java b/src/main/java/com/gxwebsoft/clinic/entity/ClinicMedicine.java
new file mode 100644
index 0000000..56f7bee
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/entity/ClinicMedicine.java
@@ -0,0 +1,74 @@
+package com.gxwebsoft.clinic.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 药品库
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:06:31
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Schema(name = "ClinicMedicine对象", description = "药品库")
+public class ClinicMedicine implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "主键ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "诊所")
+ private Integer clinicId;
+
+ @Schema(description = "药名")
+ private String name;
+
+ @Schema(description = "拼音")
+ private String pinyin;
+
+ @Schema(description = "分类(如“清热解毒”、“补气养血”)")
+ private String category;
+
+ @Schema(description = "规格(如“饮片”、“颗粒”)")
+ private String specification;
+
+ @Schema(description = "单位(如“克”、“袋”)")
+ private String unit;
+
+ @Schema(description = "描述")
+ private String content;
+
+ @Schema(description = "单价")
+ private BigDecimal pricePerUnit;
+
+ @Schema(description = "是否活跃")
+ private Integer isActive;
+
+ @Schema(description = "买家用户ID")
+ private Integer userId;
+
+ @Schema(description = "备注")
+ private String comments;
+
+ @Schema(description = "商城ID")
+ private Integer tenantId;
+
+ @Schema(description = "创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+ @Schema(description = "修改时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/entity/ClinicMedicineInout.java b/src/main/java/com/gxwebsoft/clinic/entity/ClinicMedicineInout.java
new file mode 100644
index 0000000..3d3f428
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/entity/ClinicMedicineInout.java
@@ -0,0 +1,99 @@
+package com.gxwebsoft.clinic.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 出入库
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:06:32
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Schema(name = "ClinicMedicineInout对象", description = "出入库")
+public class ClinicMedicineInout implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "主键ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "买家用户ID")
+ private Integer userId;
+
+ @Schema(description = "订单编号")
+ private String orderNo;
+
+ @Schema(description = "分销商用户id(一级)")
+ private Integer firstUserId;
+
+ @Schema(description = "分销商用户id(二级)")
+ private Integer secondUserId;
+
+ @Schema(description = "分销商用户id(三级)")
+ private Integer thirdUserId;
+
+ @Schema(description = "分销佣金(一级)")
+ private BigDecimal firstMoney;
+
+ @Schema(description = "分销佣金(二级)")
+ private BigDecimal secondMoney;
+
+ @Schema(description = "分销佣金(三级)")
+ private BigDecimal thirdMoney;
+
+ @Schema(description = "单价")
+ private BigDecimal price;
+
+ @Schema(description = "订单总金额")
+ private BigDecimal orderPrice;
+
+ @Schema(description = "结算金额")
+ private BigDecimal settledPrice;
+
+ @Schema(description = "换算成度")
+ private BigDecimal degreePrice;
+
+ @Schema(description = "实发金额")
+ private BigDecimal payPrice;
+
+ @Schema(description = "税率")
+ private BigDecimal rate;
+
+ @Schema(description = "结算月份")
+ private String month;
+
+ @Schema(description = "订单是否失效(0未失效 1已失效)")
+ private Integer isInvalid;
+
+ @Schema(description = "佣金结算(0未结算 1已结算)")
+ private Integer isSettled;
+
+ @Schema(description = "结算时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime settleTime;
+
+ @Schema(description = "备注")
+ private String comments;
+
+ @Schema(description = "商城ID")
+ private Integer tenantId;
+
+ @Schema(description = "创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+ @Schema(description = "修改时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/entity/ClinicMedicineStock.java b/src/main/java/com/gxwebsoft/clinic/entity/ClinicMedicineStock.java
new file mode 100644
index 0000000..aa5973a
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/entity/ClinicMedicineStock.java
@@ -0,0 +1,59 @@
+package com.gxwebsoft.clinic.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 药品库存
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:06:32
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Schema(name = "ClinicMedicineStock对象", description = "药品库存")
+public class ClinicMedicineStock implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "主键ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "药品")
+ private Integer medicineId;
+
+ @Schema(description = "库存数量")
+ private Integer stockQuantity;
+
+ @Schema(description = "最小库存预警")
+ private Integer minStockLevel;
+
+ @Schema(description = "上次更新时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime lastUpdated;
+
+ @Schema(description = "买家用户ID")
+ private Integer userId;
+
+ @Schema(description = "备注")
+ private String comments;
+
+ @Schema(description = "商城ID")
+ private Integer tenantId;
+
+ @Schema(description = "创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+ @Schema(description = "修改时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/entity/ClinicPatientUser.java b/src/main/java/com/gxwebsoft/clinic/entity/ClinicPatientUser.java
new file mode 100644
index 0000000..f038601
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/entity/ClinicPatientUser.java
@@ -0,0 +1,94 @@
+package com.gxwebsoft.clinic.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+
+import com.gxwebsoft.common.system.entity.User;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 患者
+ *
+ * @author 科技小王子
+ * @since 2025-10-19 09:27:04
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Schema(name = "ClinicPatientUser对象", description = "患者")
+public class ClinicPatientUser implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "主键ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "诊所")
+ private Integer clinicId;
+
+ @Schema(description = "类型 0经销商 1企业 2集团")
+ private Integer type;
+
+ @Schema(description = "自增ID")
+ private Integer userId;
+
+ private Integer patientUserId;
+
+ @Schema(description = "姓名")
+ private String realName;
+
+ @Schema(description = "头像")
+ @TableField(exist = false)
+ private String avatar;
+
+ @Schema(description = "手机号")
+ @TableField(exist = false)
+ private String phone;
+
+ @Schema(description = "性别 0未知 1男 2女")
+ private Integer sex;
+
+ @Schema(description = "年龄")
+ private Integer age;
+
+ @Schema(description = "身高")
+ private String height;
+
+ @Schema(description = "体重")
+ private String weight;
+
+ @Schema(description = "过敏史")
+ private String allergyHistory;
+
+ @Schema(description = "专属二维码")
+ private String qrcode;
+
+ @Schema(description = "备注")
+ private String comments;
+
+ @Schema(description = "排序号")
+ private Integer sortNumber;
+
+ @Schema(description = "是否删除")
+ private Integer isDelete;
+
+ @Schema(description = "租户id")
+ private Integer tenantId;
+
+ @Schema(description = "创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+ @Schema(description = "修改时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
+
+ @TableField(exist = false)
+ private User patientUser;
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/entity/ClinicPrescription.java b/src/main/java/com/gxwebsoft/clinic/entity/ClinicPrescription.java
new file mode 100644
index 0000000..ec767c1
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/entity/ClinicPrescription.java
@@ -0,0 +1,143 @@
+package com.gxwebsoft.clinic.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.gxwebsoft.shop.entity.Order;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 处方主表
+
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:01:13
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Schema(name = "ClinicPrescription对象", description = "处方主表")
+public class ClinicPrescription implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "主键ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "诊所")
+ private Integer clinicId;
+
+ @Schema(description = "患者")
+ private Integer userId;
+
+ @Schema(description = "患者名称")
+ @TableField(exist = false)
+ private String realName;
+
+ @Schema(description = "年龄")
+ @TableField(exist = false)
+ private String age;
+
+ @Schema(description = "身高")
+ @TableField(exist = false)
+ private String height;
+
+ @Schema(description = "体重")
+ @TableField(exist = false)
+ private String weight;
+
+ @Schema(description = "医生")
+ private Integer doctorId;
+
+ @Schema(description = "医生名称")
+ @TableField(exist = false)
+ private String doctorName;
+
+ @Schema(description = "医生资格")
+ @TableField(exist = false)
+ private String qualification;
+
+ @Schema(description = "订单编号")
+ private String orderNo;
+
+ private Integer orderId;
+
+ @Schema(description = "0未付款,1已付款")
+ @TableField(exist = false)
+ private Boolean payStatus;
+
+ @Schema(description = "0未使用,1已完成,2已取消,3取消中,4退款申请中,5退款被拒绝,6退款成功,7客户端申请退款")
+ @TableField(exist = false)
+ private Integer orderStatus;
+
+ @Schema(description = "关联就诊表")
+ private Integer visitRecordId;
+
+ @Schema(description = "处方类型 0中药 1西药")
+ private Integer prescriptionType;
+
+ @Schema(description = "诊断结果")
+ private String diagnosis;
+
+ @Schema(description = "治疗方案")
+ private String treatmentPlan;
+
+ @Schema(description = "煎药说明")
+ private String decoctionInstructions;
+
+ @Schema(description = "上传附件")
+ private String image;
+
+ @Schema(description = "订单总金额")
+ private BigDecimal orderPrice;
+
+ @Schema(description = "单价")
+ private BigDecimal price;
+
+ @Schema(description = "实付金额")
+ private BigDecimal payPrice;
+
+ @Schema(description = "订单是否失效(0未失效 1已失效)")
+ private Integer isInvalid;
+
+ @Schema(description = "结算(0未结算 1已结算)")
+ private Integer isSettled;
+
+ @Schema(description = "结算时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime settleTime;
+
+ @Schema(description = "状态, 0正常, 1已完成,2已支付,3已取消")
+ private Integer status;
+
+ @Schema(description = "备注")
+ private String comments;
+
+ @Schema(description = "商城ID")
+ private Integer tenantId;
+
+ @Schema(description = "创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+ @Schema(description = "修改时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
+
+ @Schema(description = "处方明细")
+ @TableField(exist = false)
+ private List items;
+
+ @TableField(exist = false)
+ private Boolean showPayButton;
+
+ @TableField(exist = false)
+ private Order shopOrder;
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/entity/ClinicPrescriptionItem.java b/src/main/java/com/gxwebsoft/clinic/entity/ClinicPrescriptionItem.java
new file mode 100644
index 0000000..78329d0
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/entity/ClinicPrescriptionItem.java
@@ -0,0 +1,99 @@
+package com.gxwebsoft.clinic.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 处方明细表
+
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:01:13
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Schema(name = "ClinicPrescriptionItem对象", description = "处方明细表")
+public class ClinicPrescriptionItem implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "自增ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "关联处方")
+ private Integer prescriptionId;
+
+ @Schema(description = "订单编号")
+ private String prescriptionNo;
+
+ @Schema(description = "关联药品")
+ private Integer medicineId;
+
+ @Schema(description = "药品名称")
+ @TableField(exist = false)
+ private String medicineName;
+
+ @Schema(description = "规格")
+ @TableField(exist = false)
+ private String specification;
+
+ @Schema(description = "单位")
+ @TableField(exist = false)
+ private String unit;
+
+ @Schema(description = "单价")
+ @TableField(exist = false)
+ private BigDecimal pricePerUnit;
+
+ @Schema(description = "药品")
+ @TableField(exist = false)
+ private ClinicMedicine clinicMedicine;
+
+ @Schema(description = "剂量(如“10g”)")
+ private String dosage;
+
+ @Schema(description = "用法频率(如“每日三次”)")
+ private String usageFrequency;
+
+ @Schema(description = "服用天数")
+ private Integer days;
+
+ @Schema(description = "购买数量")
+ private Integer amount;
+
+ @Schema(description = "单价")
+ private BigDecimal unitPrice;
+
+ @Schema(description = "数量")
+ private Integer quantity;
+
+ @Schema(description = "排序号")
+ private Integer sortNumber;
+
+ @Schema(description = "备注")
+ private String comments;
+
+ @Schema(description = "用户id")
+ private Integer userId;
+
+ @Schema(description = "租户id")
+ private Integer tenantId;
+
+ @Schema(description = "更新时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
+
+ @Schema(description = "创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/entity/PrescriptionOrder.java b/src/main/java/com/gxwebsoft/clinic/entity/PrescriptionOrder.java
new file mode 100644
index 0000000..c7188e2
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/entity/PrescriptionOrder.java
@@ -0,0 +1,148 @@
+package com.gxwebsoft.clinic.entity;
+
+import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.List;
+
+import com.gxwebsoft.shop.entity.Order;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 处方主表
+
+ *
+ * @author LX
+ * @since 2025-12-10 11:28:03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "PrescriptionOrder对象", description = "处方主表")
+@TableName("clinic_prescription_order")
+public class PrescriptionOrder implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "主键ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ private Integer clinicId;
+
+ @ApiModelProperty(value = "患者")
+ private Integer userId;
+
+ @ApiModelProperty(value = "医生")
+ private Integer doctorId;
+
+ private Integer orderId;
+
+ @ApiModelProperty(value = "订单编号")
+ private String orderNo;
+
+ @ApiModelProperty(value = "关联就诊表")
+ private Integer visitRecordId;
+
+ @ApiModelProperty(value = "处方类型 0中药 1西药")
+ private Integer prescriptionType;
+
+ @ApiModelProperty(value = "诊断结果")
+ private String diagnosis;
+
+ @ApiModelProperty(value = "治疗方案")
+ private String treatmentPlan;
+
+ @ApiModelProperty(value = "煎药说明")
+ private String decoctionInstructions;
+
+ @ApiModelProperty(value = "上传照片")
+ private String image;
+
+ @ApiModelProperty(value = "订单总金额")
+ private BigDecimal orderPrice;
+
+ @ApiModelProperty(value = "单价")
+ private BigDecimal price;
+
+ @ApiModelProperty(value = "实付金额")
+ private BigDecimal payPrice;
+
+ @ApiModelProperty(value = "煎药金额")
+ private BigDecimal decoctionAmount;
+
+ @ApiModelProperty(value = "快递金额")
+ private BigDecimal expressAmount;
+
+ @ApiModelProperty(value = "订单是否失效(0未失效 1已失效)")
+ private Integer isInvalid;
+
+ @ApiModelProperty(value = "结算(0未结算 1已结算)")
+ private Integer isSettled;
+
+ @ApiModelProperty(value = "结算时间")
+ private LocalDateTime settleTime;
+
+ @ApiModelProperty(value = "姓名")
+ private String name;
+
+ @ApiModelProperty(value = "手机号码")
+ private String phone;
+
+ @ApiModelProperty(value = "所在国家")
+ private String country;
+
+ @ApiModelProperty(value = "所在省份")
+ private String province;
+
+ @ApiModelProperty(value = "所在城市")
+ private String city;
+
+ @ApiModelProperty(value = "所在辖区")
+ private String region;
+
+ @ApiModelProperty(value = "收货地址")
+ private String address;
+
+ private String fullAddress;
+
+ private String expressName;
+
+ private String expressNo;
+
+ @ApiModelProperty(value = "排序号")
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "状态, 0正常, 1已完成,2已支付,3已取消")
+ private Integer status;
+
+ @ApiModelProperty(value = "备注")
+ private String comments;
+
+ @ApiModelProperty(value = "商城ID")
+ private Integer tenantId;
+
+ @ApiModelProperty(value = "创建时间")
+ private LocalDateTime createTime;
+
+ @ApiModelProperty(value = "修改时间")
+ private LocalDateTime updateTime;
+
+
+ @Schema(description = "处方明细")
+ @TableField(exist = false)
+ private List items;
+
+ @TableField(exist = false)
+ private Boolean showPayButton;
+
+ @TableField(exist = false)
+ private Order shopOrder;
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/entity/PrescriptionOrderItem.java b/src/main/java/com/gxwebsoft/clinic/entity/PrescriptionOrderItem.java
new file mode 100644
index 0000000..998024f
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/entity/PrescriptionOrderItem.java
@@ -0,0 +1,77 @@
+package com.gxwebsoft.clinic.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 处方明细表
+
+ *
+ * @author LX
+ * @since 2025-12-10 11:28:03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "PrescriptionOrderItem对象", description = "处方明细表")
+@TableName("clinic_prescription_order_item")
+public class PrescriptionOrderItem implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "自增ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty(value = "关联处方")
+ private Integer prescriptionId;
+
+ @ApiModelProperty(value = "订单编号")
+ private String prescriptionNo;
+
+ @ApiModelProperty(value = "关联药品")
+ private Integer medicineId;
+
+ @ApiModelProperty(value = "剂量(如“10g”)")
+ private String dosage;
+
+ @ApiModelProperty(value = "用法频率(如“每日三次”)")
+ private String usageFrequency;
+
+ @ApiModelProperty(value = "服用天数")
+ private Integer days;
+
+ @ApiModelProperty(value = "购买数量")
+ private Integer amount;
+
+ @ApiModelProperty(value = "单价")
+ private BigDecimal unitPrice;
+
+ @ApiModelProperty(value = "数量")
+ private Integer quantity;
+
+ @ApiModelProperty(value = "排序号")
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "备注")
+ private String comments;
+
+ @ApiModelProperty(value = "用户id")
+ private Integer userId;
+
+ @ApiModelProperty(value = "租户id")
+ private Integer tenantId;
+
+ @ApiModelProperty(value = "更新时间")
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty(value = "创建时间")
+ private LocalDateTime createTime;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/ClinicAppointmentMapper.java b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicAppointmentMapper.java
new file mode 100644
index 0000000..adcec99
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicAppointmentMapper.java
@@ -0,0 +1,37 @@
+package com.gxwebsoft.clinic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.clinic.entity.ClinicAppointment;
+import com.gxwebsoft.clinic.param.ClinicAppointmentParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 挂号Mapper
+ *
+ * @author 科技小王子
+ * @since 2025-10-19 09:27:03
+ */
+public interface ClinicAppointmentMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") ClinicAppointmentParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") ClinicAppointmentParam param);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/ClinicCaseMapper.java b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicCaseMapper.java
new file mode 100644
index 0000000..64c81b1
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicCaseMapper.java
@@ -0,0 +1,37 @@
+package com.gxwebsoft.clinic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.clinic.entity.ClinicCase;
+import com.gxwebsoft.clinic.param.ClinicCaseParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 病例列表Mapper
+ *
+ * @author LX
+ * @since 2025-12-25 17:24:55
+ */
+public interface ClinicCaseMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") ClinicCaseParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") ClinicCaseParam param);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/ClinicDoctorApplyMapper.java b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicDoctorApplyMapper.java
new file mode 100644
index 0000000..2a08473
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicDoctorApplyMapper.java
@@ -0,0 +1,37 @@
+package com.gxwebsoft.clinic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.clinic.entity.ClinicDoctorApply;
+import com.gxwebsoft.clinic.param.ClinicDoctorApplyParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 医生入驻申请Mapper
+ *
+ * @author 科技小王子
+ * @since 2025-10-19 09:27:04
+ */
+public interface ClinicDoctorApplyMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") ClinicDoctorApplyParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") ClinicDoctorApplyParam param);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/ClinicDoctorUserMapper.java b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicDoctorUserMapper.java
new file mode 100644
index 0000000..ffda343
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicDoctorUserMapper.java
@@ -0,0 +1,37 @@
+package com.gxwebsoft.clinic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.clinic.entity.ClinicDoctorUser;
+import com.gxwebsoft.clinic.param.ClinicDoctorUserParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 分销商用户记录表Mapper
+ *
+ * @author 科技小王子
+ * @since 2025-10-19 09:27:04
+ */
+public interface ClinicDoctorUserMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") ClinicDoctorUserParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") ClinicDoctorUserParam param);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/ClinicListMapper.java b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicListMapper.java
new file mode 100644
index 0000000..aac8888
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicListMapper.java
@@ -0,0 +1,37 @@
+package com.gxwebsoft.clinic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.clinic.entity.ClinicList;
+import com.gxwebsoft.clinic.param.ClinicListParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 诊所列表Mapper
+ *
+ * @author LX
+ * @since 2025-12-09 17:29:44
+ */
+public interface ClinicListMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") ClinicListParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") ClinicListParam param);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/ClinicMedicineInoutMapper.java b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicMedicineInoutMapper.java
new file mode 100644
index 0000000..9454319
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicMedicineInoutMapper.java
@@ -0,0 +1,37 @@
+package com.gxwebsoft.clinic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.clinic.entity.ClinicMedicineInout;
+import com.gxwebsoft.clinic.param.ClinicMedicineInoutParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 出入库Mapper
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:06:32
+ */
+public interface ClinicMedicineInoutMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") ClinicMedicineInoutParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") ClinicMedicineInoutParam param);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/ClinicMedicineMapper.java b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicMedicineMapper.java
new file mode 100644
index 0000000..8fca0aa
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicMedicineMapper.java
@@ -0,0 +1,37 @@
+package com.gxwebsoft.clinic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.clinic.entity.ClinicMedicine;
+import com.gxwebsoft.clinic.param.ClinicMedicineParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 药品库Mapper
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:06:31
+ */
+public interface ClinicMedicineMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") ClinicMedicineParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") ClinicMedicineParam param);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/ClinicMedicineStockMapper.java b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicMedicineStockMapper.java
new file mode 100644
index 0000000..9a95139
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicMedicineStockMapper.java
@@ -0,0 +1,37 @@
+package com.gxwebsoft.clinic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.clinic.entity.ClinicMedicineStock;
+import com.gxwebsoft.clinic.param.ClinicMedicineStockParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 药品库存Mapper
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:06:32
+ */
+public interface ClinicMedicineStockMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") ClinicMedicineStockParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") ClinicMedicineStockParam param);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/ClinicPatientUserMapper.java b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicPatientUserMapper.java
new file mode 100644
index 0000000..bf25805
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicPatientUserMapper.java
@@ -0,0 +1,37 @@
+package com.gxwebsoft.clinic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.clinic.entity.ClinicPatientUser;
+import com.gxwebsoft.clinic.param.ClinicPatientUserParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 患者Mapper
+ *
+ * @author 科技小王子
+ * @since 2025-10-19 09:27:04
+ */
+public interface ClinicPatientUserMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") ClinicPatientUserParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") ClinicPatientUserParam param);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/ClinicPrescriptionItemMapper.java b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicPrescriptionItemMapper.java
new file mode 100644
index 0000000..1a21b01
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicPrescriptionItemMapper.java
@@ -0,0 +1,38 @@
+package com.gxwebsoft.clinic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.clinic.entity.ClinicPrescriptionItem;
+import com.gxwebsoft.clinic.param.ClinicPrescriptionItemParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 处方明细表
+Mapper
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:01:13
+ */
+public interface ClinicPrescriptionItemMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") ClinicPrescriptionItemParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") ClinicPrescriptionItemParam param);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/ClinicPrescriptionMapper.java b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicPrescriptionMapper.java
new file mode 100644
index 0000000..6eeefda
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/ClinicPrescriptionMapper.java
@@ -0,0 +1,38 @@
+package com.gxwebsoft.clinic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.clinic.entity.ClinicPrescription;
+import com.gxwebsoft.clinic.param.ClinicPrescriptionParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 处方主表
+Mapper
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:01:13
+ */
+public interface ClinicPrescriptionMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") ClinicPrescriptionParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") ClinicPrescriptionParam param);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/PrescriptionOrderItemMapper.java b/src/main/java/com/gxwebsoft/clinic/mapper/PrescriptionOrderItemMapper.java
new file mode 100644
index 0000000..2e08911
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/PrescriptionOrderItemMapper.java
@@ -0,0 +1,38 @@
+package com.gxwebsoft.clinic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.clinic.entity.PrescriptionOrderItem;
+import com.gxwebsoft.clinic.param.PrescriptionOrderItemParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 处方明细表
+Mapper
+ *
+ * @author LX
+ * @since 2025-12-10 11:28:03
+ */
+public interface PrescriptionOrderItemMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") PrescriptionOrderItemParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") PrescriptionOrderItemParam param);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/PrescriptionOrderMapper.java b/src/main/java/com/gxwebsoft/clinic/mapper/PrescriptionOrderMapper.java
new file mode 100644
index 0000000..292a45b
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/PrescriptionOrderMapper.java
@@ -0,0 +1,38 @@
+package com.gxwebsoft.clinic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gxwebsoft.clinic.entity.PrescriptionOrder;
+import com.gxwebsoft.clinic.param.PrescriptionOrderParam;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 处方主表
+Mapper
+ *
+ * @author LX
+ * @since 2025-12-10 11:28:03
+ */
+public interface PrescriptionOrderMapper extends BaseMapper {
+
+ /**
+ * 分页查询
+ *
+ * @param page 分页对象
+ * @param param 查询参数
+ * @return List
+ */
+ List selectPageRel(@Param("page") IPage page,
+ @Param("param") PrescriptionOrderParam param);
+
+ /**
+ * 查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List selectListRel(@Param("param") PrescriptionOrderParam param);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicAppointmentMapper.xml b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicAppointmentMapper.xml
new file mode 100644
index 0000000..5aee909
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicAppointmentMapper.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+ SELECT a.*, b.nickname, b.phone, c.real_name as doctorName, c.position as doctorPosition
+ FROM clinic_appointment a
+ LEFT JOIN gxwebsoft_core.sys_user b ON a.user_id = b.user_id
+ LEFT JOIN clinic_doctor_user c ON a.doctor_id = c.user_id
+
+
+ AND a.id = #{param.id}
+
+
+ AND a.type = #{param.type}
+
+
+ AND a.reason LIKE CONCAT('%', #{param.reason}, '%')
+
+
+ AND a.evaluate_time LIKE CONCAT('%', #{param.evaluateTime}, '%')
+
+
+ AND a.doctor_id = #{param.doctorId}
+
+
+ AND a.user_id = #{param.userId}
+
+
+ AND a.comments LIKE CONCAT('%', #{param.comments}, '%')
+
+
+ AND a.sort_number = #{param.sortNumber}
+
+
+ AND a.is_delete = #{param.isDelete}
+
+
+ AND a.create_time >= #{param.createTimeStart}
+
+
+ AND a.create_time <= #{param.createTimeEnd}
+
+
+ AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicCaseMapper.xml b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicCaseMapper.xml
new file mode 100644
index 0000000..d14f357
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicCaseMapper.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+ SELECT a.*
+ FROM clinic_case a
+
+
+ AND a.id = #{param.id}
+
+
+ AND a.user_id = #{param.userId}
+
+
+ AND a.doctor_user_id = #{param.doctorUserId}
+
+
+ AND a.patient_condition LIKE CONCAT('%', #{param.patientCondition}, '%')
+
+
+ AND a.past_history LIKE CONCAT('%', #{param.pastHistory}, '%')
+
+
+ AND a.allergy_history LIKE CONCAT('%', #{param.allergyHistory}, '%')
+
+
+ AND a.diagnostic LIKE CONCAT('%', #{param.diagnostic}, '%')
+
+
+ AND a.plan LIKE CONCAT('%', #{param.plan}, '%')
+
+
+ AND a.photo_list LIKE CONCAT('%', #{param.photoList}, '%')
+
+
+ AND a.status = #{param.status}
+
+
+ AND a.comments LIKE CONCAT('%', #{param.comments}, '%')
+
+
+ AND a.sort_number = #{param.sortNumber}
+
+
+ AND a.deleted = #{param.deleted}
+
+
+ AND a.deleted = 0
+
+
+ AND a.create_time >= #{param.createTimeStart}
+
+
+ AND a.create_time <= #{param.createTimeEnd}
+
+
+ AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicDoctorApplyMapper.xml b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicDoctorApplyMapper.xml
new file mode 100644
index 0000000..c701860
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicDoctorApplyMapper.xml
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+ SELECT a.*
+ FROM clinic_doctor_apply a
+
+
+ AND a.apply_id = #{param.applyId}
+
+
+ AND a.type = #{param.type}
+
+
+ AND a.user_id = #{param.userId}
+
+
+ AND a.real_name LIKE CONCAT('%', #{param.realName}, '%')
+
+
+ AND a.gender = #{param.gender}
+
+
+ AND a.mobile LIKE CONCAT('%', #{param.mobile}, '%')
+
+
+ AND a.dealer_name LIKE CONCAT('%', #{param.dealerName}, '%')
+
+
+ AND a.id_card LIKE CONCAT('%', #{param.idCard}, '%')
+
+
+ AND a.birth_date LIKE CONCAT('%', #{param.birthDate}, '%')
+
+
+ AND a.professional_title LIKE CONCAT('%', #{param.professionalTitle}, '%')
+
+
+ AND a.work_unit LIKE CONCAT('%', #{param.workUnit}, '%')
+
+
+ AND a.practice_license LIKE CONCAT('%', #{param.practiceLicense}, '%')
+
+
+ AND a.practice_scope LIKE CONCAT('%', #{param.practiceScope}, '%')
+
+
+ AND a.start_work_date LIKE CONCAT('%', #{param.startWorkDate}, '%')
+
+
+ AND a.resume LIKE CONCAT('%', #{param.resume}, '%')
+
+
+ AND a.certification_files LIKE CONCAT('%', #{param.certificationFiles}, '%')
+
+
+ AND a.address LIKE CONCAT('%', #{param.address}, '%')
+
+
+ AND a.money = #{param.money}
+
+
+ AND a.referee_id = #{param.refereeId}
+
+
+ AND a.apply_type = #{param.applyType}
+
+
+ AND a.apply_status = #{param.applyStatus}
+
+
+ AND a.apply_time LIKE CONCAT('%', #{param.applyTime}, '%')
+
+
+ AND a.audit_time LIKE CONCAT('%', #{param.auditTime}, '%')
+
+
+ AND a.contract_time LIKE CONCAT('%', #{param.contractTime}, '%')
+
+
+ AND a.expiration_time LIKE CONCAT('%', #{param.expirationTime}, '%')
+
+
+ AND a.reject_reason LIKE CONCAT('%', #{param.rejectReason}, '%')
+
+
+ AND a.comments LIKE CONCAT('%', #{param.comments}, '%')
+
+
+ AND a.create_time >= #{param.createTimeStart}
+
+
+ AND a.create_time <= #{param.createTimeEnd}
+
+
+ AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicDoctorUserMapper.xml b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicDoctorUserMapper.xml
new file mode 100644
index 0000000..f5993aa
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicDoctorUserMapper.xml
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+ SELECT a.*
+ FROM clinic_doctor_user a
+
+
+ AND a.id = #{param.id}
+
+
+ AND a.clinic_id = #{param.clinicId}
+
+
+ AND a.type = #{param.type}
+
+
+ AND a.user_id = #{param.userId}
+
+
+ AND a.real_name LIKE CONCAT('%', #{param.realName}, '%')
+
+
+ AND a.phone LIKE CONCAT('%', #{param.phone}, '%')
+
+
+ AND a.department_id = #{param.departmentId}
+
+
+ AND a.specialty LIKE CONCAT('%', #{param.specialty}, '%')
+
+
+ AND a.position LIKE CONCAT('%', #{param.position}, '%')
+
+
+ AND a.qualification LIKE CONCAT('%', #{param.qualification}, '%')
+
+
+ AND a.introduction LIKE CONCAT('%', #{param.introduction}, '%')
+
+
+ AND a.consultation_fee = #{param.consultationFee}
+
+
+ AND a.work_years = #{param.workYears}
+
+
+ AND a.consultation_count = #{param.consultationCount}
+
+
+ AND a.qrcode LIKE CONCAT('%', #{param.qrcode}, '%')
+
+
+ AND a.comments LIKE CONCAT('%', #{param.comments}, '%')
+
+
+ AND a.sort_number = #{param.sortNumber}
+
+
+ AND a.is_delete = #{param.isDelete}
+
+
+ AND a.create_time >= #{param.createTimeStart}
+
+
+ AND a.create_time <= #{param.createTimeEnd}
+
+
+ AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ OR a.real_name = #{param.keywords}
+ )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicListMapper.xml b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicListMapper.xml
new file mode 100644
index 0000000..b5a0cb4
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicListMapper.xml
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+ SELECT a.*
+ FROM clinic_clinic_list a
+
+
+ AND a.id = #{param.id}
+
+
+ AND a.name LIKE CONCAT('%', #{param.name}, '%')
+
+
+ AND a.clinic_id = #{param.clinicId}
+
+
+ AND a.province_id = #{param.provinceId}
+
+
+ AND a.city_id = #{param.cityId}
+
+
+ AND a.region_id = #{param.regionId}
+
+
+ AND a.user_id = #{param.userId}
+
+
+ AND a.address LIKE CONCAT('%', #{param.address}, '%')
+
+
+ AND a.contact LIKE CONCAT('%', #{param.contact}, '%')
+
+
+ AND a.logo LIKE CONCAT('%', #{param.logo}, '%')
+
+
+ AND a.qualify LIKE CONCAT('%', #{param.qualify}, '%')
+
+
+ AND a.status = #{param.status}
+
+
+ AND a.comments LIKE CONCAT('%', #{param.comments}, '%')
+
+
+ AND a.sort_number = #{param.sortNumber}
+
+
+ AND a.deleted = #{param.deleted}
+
+
+ AND a.deleted = 0
+
+
+ AND a.create_time >= #{param.createTimeStart}
+
+
+ AND a.create_time <= #{param.createTimeEnd}
+
+
+ AND a.lat LIKE CONCAT('%', #{param.lat}, '%')
+
+
+ AND a.lng LIKE CONCAT('%', #{param.lng}, '%')
+
+
+ AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicMedicineInoutMapper.xml b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicMedicineInoutMapper.xml
new file mode 100644
index 0000000..0e49aac
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicMedicineInoutMapper.xml
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+ SELECT a.*
+ FROM clinic_medicine_inout a
+
+
+ AND a.id = #{param.id}
+
+
+ AND a.user_id = #{param.userId}
+
+
+ AND a.order_no LIKE CONCAT('%', #{param.orderNo}, '%')
+
+
+ AND a.first_user_id = #{param.firstUserId}
+
+
+ AND a.second_user_id = #{param.secondUserId}
+
+
+ AND a.third_user_id = #{param.thirdUserId}
+
+
+ AND a.first_money = #{param.firstMoney}
+
+
+ AND a.second_money = #{param.secondMoney}
+
+
+ AND a.third_money = #{param.thirdMoney}
+
+
+ AND a.price = #{param.price}
+
+
+ AND a.order_price = #{param.orderPrice}
+
+
+ AND a.settled_price = #{param.settledPrice}
+
+
+ AND a.degree_price = #{param.degreePrice}
+
+
+ AND a.pay_price = #{param.payPrice}
+
+
+ AND a.rate = #{param.rate}
+
+
+ AND a.month LIKE CONCAT('%', #{param.month}, '%')
+
+
+ AND a.is_invalid = #{param.isInvalid}
+
+
+ AND a.is_settled = #{param.isSettled}
+
+
+ AND a.settle_time LIKE CONCAT('%', #{param.settleTime}, '%')
+
+
+ AND a.comments LIKE CONCAT('%', #{param.comments}, '%')
+
+
+ AND a.create_time >= #{param.createTimeStart}
+
+
+ AND a.create_time <= #{param.createTimeEnd}
+
+
+ AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicMedicineMapper.xml b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicMedicineMapper.xml
new file mode 100644
index 0000000..5d7abf6
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicMedicineMapper.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+ SELECT a.*
+ FROM clinic_medicine a
+
+
+ AND a.id = #{param.id}
+
+
+ AND a.name LIKE CONCAT('%', #{param.name}, '%')
+
+
+ AND a.clinic_id = #{param.clinicId}
+
+
+ AND a.pinyin LIKE CONCAT('%', #{param.pinyin}, '%')
+
+
+ AND a.category LIKE CONCAT('%', #{param.category}, '%')
+
+
+ AND a.specification LIKE CONCAT('%', #{param.specification}, '%')
+
+
+ AND a.unit LIKE CONCAT('%', #{param.unit}, '%')
+
+
+ AND a.content LIKE CONCAT('%', #{param.content}, '%')
+
+
+ AND a.price_per_unit = #{param.pricePerUnit}
+
+
+ AND a.is_active = #{param.isActive}
+
+
+ AND a.user_id = #{param.userId}
+
+
+ AND a.comments LIKE CONCAT('%', #{param.comments}, '%')
+
+
+ AND a.create_time >= #{param.createTimeStart}
+
+
+ AND a.create_time <= #{param.createTimeEnd}
+
+
+ AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicMedicineStockMapper.xml b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicMedicineStockMapper.xml
new file mode 100644
index 0000000..93ffcd9
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicMedicineStockMapper.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+ SELECT a.*
+ FROM clinic_medicine_stock a
+
+
+ AND a.id = #{param.id}
+
+
+ AND a.medicine_id = #{param.medicineId}
+
+
+ AND a.stock_quantity = #{param.stockQuantity}
+
+
+ AND a.min_stock_level = #{param.minStockLevel}
+
+
+ AND a.last_updated LIKE CONCAT('%', #{param.lastUpdated}, '%')
+
+
+ AND a.user_id = #{param.userId}
+
+
+ AND a.comments LIKE CONCAT('%', #{param.comments}, '%')
+
+
+ AND a.create_time >= #{param.createTimeStart}
+
+
+ AND a.create_time <= #{param.createTimeEnd}
+
+
+ AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicPatientUserMapper.xml b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicPatientUserMapper.xml
new file mode 100644
index 0000000..2479544
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicPatientUserMapper.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+ SELECT a.*
+ FROM clinic_patient_user a
+
+
+ AND a.id = #{param.id}
+
+
+ AND a.clinic_id = #{param.clinicId}
+
+
+ AND a.type = #{param.type}
+
+
+ AND a.user_id = #{param.userId}
+
+
+ AND a.real_name LIKE CONCAT('%', #{param.realName}, '%')
+
+
+ AND a.age LIKE CONCAT('%', #{param.age}, '%')
+
+
+ AND a.qrcode LIKE CONCAT('%', #{param.qrcode}, '%')
+
+
+ AND a.height LIKE CONCAT('%', #{param.height}, '%')
+
+
+ AND a.weight LIKE CONCAT('%', #{param.weight}, '%')
+
+
+ AND a.allergy_history LIKE CONCAT('%', #{param.allergyHistory}, '%')
+
+
+ AND a.comments LIKE CONCAT('%', #{param.comments}, '%')
+
+
+ AND a.sort_number = #{param.sortNumber}
+
+
+ AND a.is_delete = #{param.isDelete}
+
+
+ AND a.create_time >= #{param.createTimeStart}
+
+
+ AND a.create_time <= #{param.createTimeEnd}
+
+
+ AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ OR a.real_name = #{param.keywords}
+ )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicPrescriptionItemMapper.xml b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicPrescriptionItemMapper.xml
new file mode 100644
index 0000000..bd5f01c
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicPrescriptionItemMapper.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+ SELECT a.*, b.name AS medicineName, b.specification, b.unit, b.price_per_unit AS pricePerUnit
+ FROM clinic_prescription_item a
+ LEFT JOIN clinic_medicine b ON a.id = b.id
+
+
+ AND a.id = #{param.id}
+
+
+ AND a.prescription_id = #{param.prescriptionId}
+
+
+ AND a.prescription_no LIKE CONCAT('%', #{param.prescriptionNo}, '%')
+
+
+ AND a.medicine_id = #{param.medicineId}
+
+
+ AND a.dosage LIKE CONCAT('%', #{param.dosage}, '%')
+
+
+ AND a.usage_frequency LIKE CONCAT('%', #{param.usageFrequency}, '%')
+
+
+ AND a.days = #{param.days}
+
+
+ AND a.amount = #{param.amount}
+
+
+ AND a.unit_price = #{param.unitPrice}
+
+
+ AND a.quantity = #{param.quantity}
+
+
+ AND a.sort_number = #{param.sortNumber}
+
+
+ AND a.comments LIKE CONCAT('%', #{param.comments}, '%')
+
+
+ AND a.user_id = #{param.userId}
+
+
+ AND a.create_time >= #{param.createTimeStart}
+
+
+ AND a.create_time <= #{param.createTimeEnd}
+
+
+ AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicPrescriptionMapper.xml b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicPrescriptionMapper.xml
new file mode 100644
index 0000000..6249ca3
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicPrescriptionMapper.xml
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+ SELECT a.*, b.real_name, b.age, b.sex, b.height, b.weight, c.real_name as doctorName, c.qualification, d.order_status as orderStatus, d.pay_status as payStatus
+ FROM clinic_prescription a
+ LEFT JOIN clinic_patient_user b ON a.user_id = b.user_id
+ LEFT JOIN clinic_doctor_user c ON a.doctor_id = c.user_id
+ LEFT JOIN shop_order d ON a.order_no = d.order_no
+
+
+ AND a.id = #{param.id}
+
+
+ AND a.clinic_id = #{param.clinicId}
+
+
+ AND a.user_id = #{param.userId}
+
+
+ AND (a.user_id = #{param.userId} OR a.doctor_id = #{param.userId})
+
+
+
+ AND a.doctor_id = #{param.doctorId}
+
+
+ AND a.order_no LIKE CONCAT('%', #{param.orderNo}, '%')
+
+
+ AND a.visit_record_id = #{param.visitRecordId}
+
+
+ AND a.prescription_type = #{param.prescriptionType}
+
+
+ AND a.diagnosis LIKE CONCAT('%', #{param.diagnosis}, '%')
+
+
+ AND a.treatment_plan LIKE CONCAT('%', #{param.treatmentPlan}, '%')
+
+
+ AND a.decoction_instructions LIKE CONCAT('%', #{param.decoctionInstructions}, '%')
+
+
+ AND a.order_price = #{param.orderPrice}
+
+
+ AND a.price = #{param.price}
+
+
+ AND a.pay_price = #{param.payPrice}
+
+
+ AND a.is_invalid = #{param.isInvalid}
+
+
+ AND a.is_settled = #{param.isSettled}
+
+
+ AND a.id IN
+
+ #{item}
+
+
+
+ AND a.settle_time LIKE CONCAT('%', #{param.settleTime}, '%')
+
+
+ AND a.status = #{param.status}
+
+
+ AND a.comments LIKE CONCAT('%', #{param.comments}, '%')
+
+
+ AND a.create_time >= #{param.createTimeStart}
+
+
+ AND a.create_time <= #{param.createTimeEnd}
+
+
+ AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ )
+
+
+
+
+
+ AND d.pay_status = 0 AND d.order_status = 0
+
+
+
+ AND d.pay_status = 1 AND d.delivery_status = 10 AND d.order_status = 0
+
+
+
+ AND d.pay_status = 1 AND d.order_status = 0
+
+
+
+ AND d.delivery_status = 20 AND d.order_status != 1
+
+
+
+ AND d.order_status = 1 AND d.evaluate_status = 0
+
+
+
+ AND d.order_status = 1
+
+
+
+ AND (d.order_status = 4 OR d.order_status = 5 OR d.order_status = 6 OR d.order_status = 7)
+
+
+
+ AND d.deleted = 1
+
+
+
+ AND a.order_status = 2
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/xml/PrescriptionOrderItemMapper.xml b/src/main/java/com/gxwebsoft/clinic/mapper/xml/PrescriptionOrderItemMapper.xml
new file mode 100644
index 0000000..30a765d
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/xml/PrescriptionOrderItemMapper.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+ SELECT a.*
+ FROM clinic_prescription_order_item a
+
+
+ AND a.id = #{param.id}
+
+
+ AND a.prescription_id = #{param.prescriptionId}
+
+
+ AND a.prescription_no LIKE CONCAT('%', #{param.prescriptionNo}, '%')
+
+
+ AND a.medicine_id = #{param.medicineId}
+
+
+ AND a.dosage LIKE CONCAT('%', #{param.dosage}, '%')
+
+
+ AND a.usage_frequency LIKE CONCAT('%', #{param.usageFrequency}, '%')
+
+
+ AND a.days = #{param.days}
+
+
+ AND a.amount = #{param.amount}
+
+
+ AND a.unit_price = #{param.unitPrice}
+
+
+ AND a.quantity = #{param.quantity}
+
+
+ AND a.sort_number = #{param.sortNumber}
+
+
+ AND a.comments LIKE CONCAT('%', #{param.comments}, '%')
+
+
+ AND a.user_id = #{param.userId}
+
+
+ AND a.create_time >= #{param.createTimeStart}
+
+
+ AND a.create_time <= #{param.createTimeEnd}
+
+
+ AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/xml/PrescriptionOrderMapper.xml b/src/main/java/com/gxwebsoft/clinic/mapper/xml/PrescriptionOrderMapper.xml
new file mode 100644
index 0000000..7427f7d
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/xml/PrescriptionOrderMapper.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+ SELECT a.*
+ FROM clinic_prescription_order a
+
+
+ AND a.id = #{param.id}
+
+
+ AND a.clinic_id = #{param.clinicId}
+
+
+ AND a.user_id = #{param.userId}
+
+
+ AND a.doctor_id = #{param.doctorId}
+
+
+ AND a.order_id = #{param.orderId}
+
+
+ AND a.order_no LIKE CONCAT('%', #{param.orderNo}, '%')
+
+
+ AND a.visit_record_id = #{param.visitRecordId}
+
+
+ AND a.prescription_type = #{param.prescriptionType}
+
+
+ AND a.diagnosis LIKE CONCAT('%', #{param.diagnosis}, '%')
+
+
+ AND a.treatment_plan LIKE CONCAT('%', #{param.treatmentPlan}, '%')
+
+
+ AND a.decoction_instructions LIKE CONCAT('%', #{param.decoctionInstructions}, '%')
+
+
+ AND a.image LIKE CONCAT('%', #{param.image}, '%')
+
+
+ AND a.order_price = #{param.orderPrice}
+
+
+ AND a.price = #{param.price}
+
+
+ AND a.pay_price = #{param.payPrice}
+
+
+ AND a.is_invalid = #{param.isInvalid}
+
+
+ AND a.is_settled = #{param.isSettled}
+
+
+ AND a.settle_time LIKE CONCAT('%', #{param.settleTime}, '%')
+
+
+ AND a.sort_number = #{param.sortNumber}
+
+
+ AND a.status = #{param.status}
+
+
+ AND a.comments LIKE CONCAT('%', #{param.comments}, '%')
+
+
+ AND a.create_time >= #{param.createTimeStart}
+
+
+ AND a.create_time <= #{param.createTimeEnd}
+
+
+ AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ )
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gxwebsoft/clinic/param/ClinicAppointmentParam.java b/src/main/java/com/gxwebsoft/clinic/param/ClinicAppointmentParam.java
new file mode 100644
index 0000000..a6e6a17
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/param/ClinicAppointmentParam.java
@@ -0,0 +1,58 @@
+package com.gxwebsoft.clinic.param;
+
+import java.math.BigDecimal;
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 挂号查询参数
+ *
+ * @author 科技小王子
+ * @since 2025-10-19 09:27:03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@Schema(name = "ClinicAppointmentParam对象", description = "挂号查询参数")
+public class ClinicAppointmentParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "主键ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer id;
+
+ @Schema(description = "类型")
+ @QueryField(type = QueryType.EQ)
+ private Integer type;
+
+ @Schema(description = "就诊原因")
+ private String reason;
+
+ @Schema(description = "挂号时间")
+ private String evaluateTime;
+
+ @Schema(description = "医生")
+ @QueryField(type = QueryType.EQ)
+ private Integer doctorId;
+
+ @Schema(description = "患者")
+ @QueryField(type = QueryType.EQ)
+ private Integer userId;
+
+ @Schema(description = "备注")
+ private String comments;
+
+ @Schema(description = "排序号")
+ @QueryField(type = QueryType.EQ)
+ private Integer sortNumber;
+
+ @Schema(description = "是否删除")
+ @QueryField(type = QueryType.EQ)
+ private Integer isDelete;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/param/ClinicCaseParam.java b/src/main/java/com/gxwebsoft/clinic/param/ClinicCaseParam.java
new file mode 100644
index 0000000..6903767
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/param/ClinicCaseParam.java
@@ -0,0 +1,69 @@
+package com.gxwebsoft.clinic.param;
+
+import java.math.BigDecimal;
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 病例列表查询参数
+ *
+ * @author LX
+ * @since 2025-12-25 17:24:55
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "ClinicCaseParam对象", description = "病例列表查询参数")
+public class ClinicCaseParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @QueryField(type = QueryType.EQ)
+ private Integer id;
+
+ @QueryField(type = QueryType.EQ)
+ private Integer userId;
+
+ @ApiModelProperty(value = "医生用户id")
+ @QueryField(type = QueryType.EQ)
+ private Integer doctorUserId;
+
+ @ApiModelProperty(value = "病情主诉")
+ private String patientCondition;
+
+ @ApiModelProperty(value = "既往史")
+ private String pastHistory;
+
+ @ApiModelProperty(value = "过敏史")
+ private String allergyHistory;
+
+ @ApiModelProperty(value = "诊断")
+ private String diagnostic;
+
+ @ApiModelProperty(value = "治疗方案")
+ private String plan;
+
+ @ApiModelProperty(value = "照片")
+ private String photoList;
+
+ @ApiModelProperty(value = "0待审核 1通过 2拒绝")
+ @QueryField(type = QueryType.EQ)
+ private Integer status;
+
+ @ApiModelProperty(value = "备注")
+ private String comments;
+
+ @ApiModelProperty(value = "排序号")
+ @QueryField(type = QueryType.EQ)
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "是否删除, 0否, 1是")
+ @QueryField(type = QueryType.EQ)
+ private Integer deleted;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/param/ClinicDoctorApplyParam.java b/src/main/java/com/gxwebsoft/clinic/param/ClinicDoctorApplyParam.java
new file mode 100644
index 0000000..e9863da
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/param/ClinicDoctorApplyParam.java
@@ -0,0 +1,114 @@
+package com.gxwebsoft.clinic.param;
+
+import java.math.BigDecimal;
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 医生入驻申请查询参数
+ *
+ * @author 科技小王子
+ * @since 2025-10-19 09:27:04
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@Schema(name = "ClinicDoctorApplyParam对象", description = "医生入驻申请查询参数")
+public class ClinicDoctorApplyParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "主键ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer applyId;
+
+ @Schema(description = "类型 0医生")
+ @QueryField(type = QueryType.EQ)
+ private Integer type;
+
+ @Schema(description = "用户ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer userId;
+
+ @Schema(description = "姓名")
+ private String realName;
+
+ @Schema(description = "性别 1男 2女")
+ @QueryField(type = QueryType.EQ)
+ private Integer gender;
+
+ @Schema(description = "手机号")
+ private String mobile;
+
+ @Schema(description = "客户名称")
+ private String dealerName;
+
+ @Schema(description = "证件号码")
+ private String idCard;
+
+ @Schema(description = "生日")
+ private String birthDate;
+
+ @Schema(description = "区分职称等级(如主治医师、副主任医师)")
+ private String professionalTitle;
+
+ @Schema(description = "工作单位")
+ private String workUnit;
+
+ @Schema(description = "执业资格核心凭证")
+ private String practiceLicense;
+
+ @Schema(description = "限定可执业科室或疾病类型")
+ private String practiceScope;
+
+ @Schema(description = "开始工作时间")
+ private String startWorkDate;
+
+ @Schema(description = "简历")
+ private String resume;
+
+ @Schema(description = "使用 JSON 存储多个证件文件路径(如执业证、学历证)")
+ private String certificationFiles;
+
+ @Schema(description = "详细地址")
+ private String address;
+
+ @Schema(description = "签约价格")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal money;
+
+ @Schema(description = "推荐人用户ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer refereeId;
+
+ @Schema(description = "申请方式(10需后台审核 20无需审核)")
+ @QueryField(type = QueryType.EQ)
+ private Integer applyType;
+
+ @Schema(description = "审核状态 (10待审核 20审核通过 30驳回)")
+ @QueryField(type = QueryType.EQ)
+ private Integer applyStatus;
+
+ @Schema(description = "申请时间")
+ private String applyTime;
+
+ @Schema(description = "审核时间")
+ private String auditTime;
+
+ @Schema(description = "合同时间")
+ private String contractTime;
+
+ @Schema(description = "过期时间")
+ private String expirationTime;
+
+ @Schema(description = "驳回原因")
+ private String rejectReason;
+
+ @Schema(description = "备注")
+ private String comments;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/param/ClinicDoctorUserParam.java b/src/main/java/com/gxwebsoft/clinic/param/ClinicDoctorUserParam.java
new file mode 100644
index 0000000..940301f
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/param/ClinicDoctorUserParam.java
@@ -0,0 +1,89 @@
+package com.gxwebsoft.clinic.param;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+/**
+ * 分销商用户记录表查询参数
+ *
+ * @author 科技小王子
+ * @since 2025-10-23 15:58:20
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@Schema(name = "ClinicDoctorUserParam对象", description = "分销商用户记录表查询参数")
+public class ClinicDoctorUserParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "主键ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer id;
+
+ @Schema(description = "诊所")
+ private Integer clinicId;
+
+ @Schema(description = "类型 0经销商 1企业 2集团")
+ @QueryField(type = QueryType.EQ)
+ private Integer type;
+
+ @Schema(description = "自增ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer userId;
+
+ @Schema(description = "姓名")
+ private String realName;
+
+ @Schema(description = "手机号")
+ private String phone;
+
+ @Schema(description = "部门")
+ @QueryField(type = QueryType.EQ)
+ private Integer departmentId;
+
+ @Schema(description = "专业领域")
+ private String specialty;
+
+ @Schema(description = "职务级别")
+ private String position;
+
+ @Schema(description = "执业资格")
+ private String qualification;
+
+ @Schema(description = "医生简介")
+ private String introduction;
+
+ @Schema(description = "挂号费")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal consultationFee;
+
+ @Schema(description = "工作年限")
+ @QueryField(type = QueryType.EQ)
+ private Integer workYears;
+
+ @Schema(description = "问诊人数")
+ @QueryField(type = QueryType.EQ)
+ private Integer consultationCount;
+
+ @Schema(description = "专属二维码")
+ private String qrcode;
+
+ @Schema(description = "备注")
+ private String comments;
+
+ @Schema(description = "排序号")
+ @QueryField(type = QueryType.EQ)
+ private Integer sortNumber;
+
+ @Schema(description = "是否删除")
+ @QueryField(type = QueryType.EQ)
+ private Integer isDelete;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/param/ClinicListParam.java b/src/main/java/com/gxwebsoft/clinic/param/ClinicListParam.java
new file mode 100644
index 0000000..158d537
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/param/ClinicListParam.java
@@ -0,0 +1,83 @@
+package com.gxwebsoft.clinic.param;
+
+import java.math.BigDecimal;
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 诊所列表查询参数
+ *
+ * @author LX
+ * @since 2025-12-09 17:29:44
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "ClinicListParam对象", description = "诊所列表查询参数")
+public class ClinicListParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @QueryField(type = QueryType.EQ)
+ private Integer id;
+
+ @ApiModelProperty(value = "名称")
+ private String name;
+
+ @Schema(description = "诊所")
+ private Integer clinicId;
+
+ @ApiModelProperty(value = "省份id")
+ @QueryField(type = QueryType.EQ)
+ private Integer provinceId;
+
+ @ApiModelProperty(value = "城市id")
+ @QueryField(type = QueryType.EQ)
+ private Integer cityId;
+
+ @ApiModelProperty(value = "区域id")
+ @QueryField(type = QueryType.EQ)
+ private Integer regionId;
+
+ @ApiModelProperty(value = "管理员id")
+ @QueryField(type = QueryType.EQ)
+ private Integer userId;
+
+ @ApiModelProperty(value = "详细地址")
+ private String address;
+
+ @ApiModelProperty(value = "联系方式")
+ private String contact;
+
+ @ApiModelProperty(value = "logo")
+ private String logo;
+
+ @ApiModelProperty(value = "资质")
+ private String qualify;
+
+ @ApiModelProperty(value = "0待审核 1通过 2拒绝")
+ @QueryField(type = QueryType.EQ)
+ private Integer status;
+
+ @ApiModelProperty(value = "备注")
+ private String comments;
+
+ @ApiModelProperty(value = "排序号")
+ @QueryField(type = QueryType.EQ)
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "是否删除, 0否, 1是")
+ @QueryField(type = QueryType.EQ)
+ private Integer deleted;
+
+ private String lat;
+
+ private String lng;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/param/ClinicMedicineInoutParam.java b/src/main/java/com/gxwebsoft/clinic/param/ClinicMedicineInoutParam.java
new file mode 100644
index 0000000..a438209
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/param/ClinicMedicineInoutParam.java
@@ -0,0 +1,102 @@
+package com.gxwebsoft.clinic.param;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+/**
+ * 出入库查询参数
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:06:32
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@Schema(name = "ClinicMedicineInoutParam对象", description = "出入库查询参数")
+public class ClinicMedicineInoutParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "主键ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer id;
+
+ @Schema(description = "买家用户ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer userId;
+
+ @Schema(description = "订单编号")
+ private String orderNo;
+
+ @Schema(description = "分销商用户id(一级)")
+ @QueryField(type = QueryType.EQ)
+ private Integer firstUserId;
+
+ @Schema(description = "分销商用户id(二级)")
+ @QueryField(type = QueryType.EQ)
+ private Integer secondUserId;
+
+ @Schema(description = "分销商用户id(三级)")
+ @QueryField(type = QueryType.EQ)
+ private Integer thirdUserId;
+
+ @Schema(description = "分销佣金(一级)")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal firstMoney;
+
+ @Schema(description = "分销佣金(二级)")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal secondMoney;
+
+ @Schema(description = "分销佣金(三级)")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal thirdMoney;
+
+ @Schema(description = "单价")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal price;
+
+ @Schema(description = "订单总金额")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal orderPrice;
+
+ @Schema(description = "结算金额")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal settledPrice;
+
+ @Schema(description = "换算成度")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal degreePrice;
+
+ @Schema(description = "实发金额")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal payPrice;
+
+ @Schema(description = "税率")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal rate;
+
+ @Schema(description = "结算月份")
+ private String month;
+
+ @Schema(description = "订单是否失效(0未失效 1已失效)")
+ @QueryField(type = QueryType.EQ)
+ private Integer isInvalid;
+
+ @Schema(description = "佣金结算(0未结算 1已结算)")
+ @QueryField(type = QueryType.EQ)
+ private Integer isSettled;
+
+ @Schema(description = "结算时间")
+ private String settleTime;
+
+ @Schema(description = "备注")
+ private String comments;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/param/ClinicMedicineParam.java b/src/main/java/com/gxwebsoft/clinic/param/ClinicMedicineParam.java
new file mode 100644
index 0000000..8098809
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/param/ClinicMedicineParam.java
@@ -0,0 +1,66 @@
+package com.gxwebsoft.clinic.param;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import io.swagger.models.auth.In;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+/**
+ * 药品库查询参数
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:06:31
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@Schema(name = "ClinicMedicineParam对象", description = "药品库查询参数")
+public class ClinicMedicineParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "主键ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer id;
+
+ private Integer clinicId;
+
+ @Schema(description = "药名")
+ private String name;
+
+ @Schema(description = "拼音")
+ private String pinyin;
+
+ @Schema(description = "分类(如“清热解毒”、“补气养血”)")
+ private String category;
+
+ @Schema(description = "规格(如“饮片”、“颗粒”)")
+ private String specification;
+
+ @Schema(description = "单位(如“克”、“袋”)")
+ private String unit;
+
+ @Schema(description = "描述")
+ private String content;
+
+ @Schema(description = "单价")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal pricePerUnit;
+
+ @Schema(description = "是否活跃")
+ @QueryField(type = QueryType.EQ)
+ private Integer isActive;
+
+ @Schema(description = "买家用户ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer userId;
+
+ @Schema(description = "备注")
+ private String comments;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/param/ClinicMedicineStockParam.java b/src/main/java/com/gxwebsoft/clinic/param/ClinicMedicineStockParam.java
new file mode 100644
index 0000000..a784c67
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/param/ClinicMedicineStockParam.java
@@ -0,0 +1,50 @@
+package com.gxwebsoft.clinic.param;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 药品库存查询参数
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:06:32
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@Schema(name = "ClinicMedicineStockParam对象", description = "药品库存查询参数")
+public class ClinicMedicineStockParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "主键ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer id;
+
+ @Schema(description = "药品")
+ @QueryField(type = QueryType.EQ)
+ private Integer medicineId;
+
+ @Schema(description = "库存数量")
+ @QueryField(type = QueryType.EQ)
+ private Integer stockQuantity;
+
+ @Schema(description = "最小库存预警")
+ @QueryField(type = QueryType.EQ)
+ private Integer minStockLevel;
+
+ @Schema(description = "上次更新时间")
+ private String lastUpdated;
+
+ @Schema(description = "买家用户ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer userId;
+
+ @Schema(description = "备注")
+ private String comments;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/param/ClinicPatientUserParam.java b/src/main/java/com/gxwebsoft/clinic/param/ClinicPatientUserParam.java
new file mode 100644
index 0000000..ecd7e63
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/param/ClinicPatientUserParam.java
@@ -0,0 +1,70 @@
+package com.gxwebsoft.clinic.param;
+
+import java.math.BigDecimal;
+
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 患者查询参数
+ *
+ * @author 科技小王子
+ * @since 2025-10-23 15:27:17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@Schema(name = "ClinicPatientUserParam对象", description = "患者查询参数")
+public class ClinicPatientUserParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "主键ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer id;
+
+ @Schema(description = "诊所")
+ private Integer clinicId;
+
+ @Schema(description = "类型 0经销商 1企业 2集团")
+ @QueryField(type = QueryType.EQ)
+ private Integer type;
+
+ @Schema(description = "自增ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer userId;
+
+ @Schema(description = "姓名")
+ private String realName;
+
+ @Schema(description = "年龄")
+ private String age;
+
+ @Schema(description = "专属二维码")
+ private String qrcode;
+
+ @Schema(description = "身高")
+ private String height;
+
+ @Schema(description = "体重")
+ private String weight;
+
+ @Schema(description = "过敏史")
+ private String allergyHistory;
+
+ @Schema(description = "备注")
+ private String comments;
+
+ @Schema(description = "排序号")
+ @QueryField(type = QueryType.EQ)
+ private Integer sortNumber;
+
+ @Schema(description = "是否删除")
+ @QueryField(type = QueryType.EQ)
+ private Integer isDelete;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/param/ClinicPrescriptionItemParam.java b/src/main/java/com/gxwebsoft/clinic/param/ClinicPrescriptionItemParam.java
new file mode 100644
index 0000000..5f83762
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/param/ClinicPrescriptionItemParam.java
@@ -0,0 +1,81 @@
+package com.gxwebsoft.clinic.param;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+import java.util.Set;
+
+/**
+ * 处方明细表
+查询参数
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:01:13
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@Schema(name = "ClinicPrescriptionItemParam对象", description = "处方明细表 查询参数")
+public class ClinicPrescriptionItemParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "自增ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer id;
+
+ @Schema(description = "关联处方")
+ @QueryField(type = QueryType.EQ)
+ private Integer prescriptionId;
+
+ @Schema(description = "订单编号")
+ private String prescriptionNo;
+
+ @Schema(description = "关联药品")
+ @QueryField(type = QueryType.EQ)
+ private Integer medicineId;
+
+ @Schema(description = "剂量(如“10g”)")
+ private String dosage;
+
+ @Schema(description = "用法频率(如“每日三次”)")
+ private String usageFrequency;
+
+ @Schema(description = "服用天数")
+ @QueryField(type = QueryType.EQ)
+ private Integer days;
+
+ @Schema(description = "购买数量")
+ @QueryField(type = QueryType.EQ)
+ private Integer amount;
+
+ @Schema(description = "单价")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal unitPrice;
+
+ @Schema(description = "数量")
+ @QueryField(type = QueryType.EQ)
+ private Integer quantity;
+
+ @Schema(description = "排序号")
+ @QueryField(type = QueryType.EQ)
+ private Integer sortNumber;
+
+ @Schema(description = "备注")
+ private String comments;
+
+ @Schema(description = "用户id")
+ @QueryField(type = QueryType.EQ)
+ private Integer userId;
+
+ @Schema(description = "处方ID集查询")
+ @TableField(exist = false)
+ private Set prescriptionIds;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/param/ClinicPrescriptionParam.java b/src/main/java/com/gxwebsoft/clinic/param/ClinicPrescriptionParam.java
new file mode 100644
index 0000000..8b46a76
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/param/ClinicPrescriptionParam.java
@@ -0,0 +1,109 @@
+package com.gxwebsoft.clinic.param;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+import java.util.Set;
+
+/**
+ * 处方主表
+查询参数
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:01:12
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@Schema(name = "ClinicPrescriptionParam对象", description = "处方主表查询参数")
+public class ClinicPrescriptionParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "主键ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer id;
+
+ @Schema(description = "诊所")
+ private Integer clinicId;
+
+ @Schema(description = "患者")
+ @QueryField(type = QueryType.EQ)
+ private Integer userId;
+
+ @Schema(description = "医生")
+ @QueryField(type = QueryType.EQ)
+ private Integer doctorId;
+
+ @Schema(description = "订单编号")
+ private String orderNo;
+
+ @Schema(description = "订单类型 0商城订单 1处方订单")
+ private Integer type;
+
+ @Schema(description = "关联就诊表")
+ @QueryField(type = QueryType.EQ)
+ private Integer visitRecordId;
+
+ @Schema(description = "处方类型 0中药 1西药")
+ @QueryField(type = QueryType.EQ)
+ private Integer prescriptionType;
+
+ @Schema(description = "诊断结果")
+ private String diagnosis;
+
+ @Schema(description = "治疗方案")
+ private String treatmentPlan;
+
+ @Schema(description = "煎药说明")
+ private String decoctionInstructions;
+
+ @Schema(description = "订单总金额")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal orderPrice;
+
+ @Schema(description = "单价")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal price;
+
+ @Schema(description = "实付金额")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal payPrice;
+
+ @Schema(description = "订单是否失效(0未失效 1已失效)")
+ @QueryField(type = QueryType.EQ)
+ private Integer isInvalid;
+
+ @Schema(description = "结算(0未结算 1已结算)")
+ @QueryField(type = QueryType.EQ)
+ private Integer isSettled;
+
+ @Schema(description = "结算时间")
+ private String settleTime;
+
+ @Schema(description = "状态, 0正常, 1已完成,2已支付,3已取消")
+ @QueryField(type = QueryType.EQ)
+ private Integer status;
+
+ @Schema(description = "备注")
+ private String comments;
+
+ @Schema(description = "处方ID集查询")
+ @TableField(exist = false)
+ private Set ids;
+
+ @Schema(description = "订单状态筛选:-1全部,0待支付,1待发货,2待核销,3待收货,4待评价,5已完成,6已退款,7已删除")
+ private Integer statusFilter;
+
+ @TableField(exist = false)
+ private Integer loginUserId;
+
+ @TableField(exist = false)
+ private Boolean withDoctor;
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/param/PrescriptionOrderItemParam.java b/src/main/java/com/gxwebsoft/clinic/param/PrescriptionOrderItemParam.java
new file mode 100644
index 0000000..647848f
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/param/PrescriptionOrderItemParam.java
@@ -0,0 +1,75 @@
+package com.gxwebsoft.clinic.param;
+
+import java.math.BigDecimal;
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 处方明细表
+查询参数
+ *
+ * @author LX
+ * @since 2025-12-10 11:28:03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "PrescriptionOrderItemParam对象", description = "处方明细表查询参数")
+public class PrescriptionOrderItemParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "自增ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer id;
+
+ @ApiModelProperty(value = "关联处方")
+ @QueryField(type = QueryType.EQ)
+ private Integer prescriptionId;
+
+ @ApiModelProperty(value = "订单编号")
+ private String prescriptionNo;
+
+ @ApiModelProperty(value = "关联药品")
+ @QueryField(type = QueryType.EQ)
+ private Integer medicineId;
+
+ @ApiModelProperty(value = "剂量(如“10g”)")
+ private String dosage;
+
+ @ApiModelProperty(value = "用法频率(如“每日三次”)")
+ private String usageFrequency;
+
+ @ApiModelProperty(value = "服用天数")
+ @QueryField(type = QueryType.EQ)
+ private Integer days;
+
+ @ApiModelProperty(value = "购买数量")
+ @QueryField(type = QueryType.EQ)
+ private Integer amount;
+
+ @ApiModelProperty(value = "单价")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal unitPrice;
+
+ @ApiModelProperty(value = "数量")
+ @QueryField(type = QueryType.EQ)
+ private Integer quantity;
+
+ @ApiModelProperty(value = "排序号")
+ @QueryField(type = QueryType.EQ)
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "备注")
+ private String comments;
+
+ @ApiModelProperty(value = "用户id")
+ @QueryField(type = QueryType.EQ)
+ private Integer userId;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/param/PrescriptionOrderParam.java b/src/main/java/com/gxwebsoft/clinic/param/PrescriptionOrderParam.java
new file mode 100644
index 0000000..b308e04
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/param/PrescriptionOrderParam.java
@@ -0,0 +1,102 @@
+package com.gxwebsoft.clinic.param;
+
+import java.math.BigDecimal;
+import com.gxwebsoft.common.core.annotation.QueryField;
+import com.gxwebsoft.common.core.annotation.QueryType;
+import com.gxwebsoft.common.core.web.BaseParam;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 处方主表
+查询参数
+ *
+ * @author LX
+ * @since 2025-12-10 11:28:03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "PrescriptionOrderParam对象", description = "处方主表查询参数")
+public class PrescriptionOrderParam extends BaseParam {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "主键ID")
+ @QueryField(type = QueryType.EQ)
+ private Integer id;
+
+ @QueryField(type = QueryType.EQ)
+ private Integer clinicId;
+
+ @ApiModelProperty(value = "患者")
+ @QueryField(type = QueryType.EQ)
+ private Integer userId;
+
+ @ApiModelProperty(value = "医生")
+ @QueryField(type = QueryType.EQ)
+ private Integer doctorId;
+
+ @QueryField(type = QueryType.EQ)
+ private Integer orderId;
+
+ @ApiModelProperty(value = "订单编号")
+ private String orderNo;
+
+ @ApiModelProperty(value = "关联就诊表")
+ @QueryField(type = QueryType.EQ)
+ private Integer visitRecordId;
+
+ @ApiModelProperty(value = "处方类型 0中药 1西药")
+ @QueryField(type = QueryType.EQ)
+ private Integer prescriptionType;
+
+ @ApiModelProperty(value = "诊断结果")
+ private String diagnosis;
+
+ @ApiModelProperty(value = "治疗方案")
+ private String treatmentPlan;
+
+ @ApiModelProperty(value = "煎药说明")
+ private String decoctionInstructions;
+
+ @ApiModelProperty(value = "上传照片")
+ private String image;
+
+ @ApiModelProperty(value = "订单总金额")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal orderPrice;
+
+ @ApiModelProperty(value = "单价")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal price;
+
+ @ApiModelProperty(value = "实付金额")
+ @QueryField(type = QueryType.EQ)
+ private BigDecimal payPrice;
+
+ @ApiModelProperty(value = "订单是否失效(0未失效 1已失效)")
+ @QueryField(type = QueryType.EQ)
+ private Integer isInvalid;
+
+ @ApiModelProperty(value = "结算(0未结算 1已结算)")
+ @QueryField(type = QueryType.EQ)
+ private Integer isSettled;
+
+ @ApiModelProperty(value = "结算时间")
+ private String settleTime;
+
+ @ApiModelProperty(value = "排序号")
+ @QueryField(type = QueryType.EQ)
+ private Integer sortNumber;
+
+ @ApiModelProperty(value = "状态, 0正常, 1已完成,2已支付,3已取消")
+ @QueryField(type = QueryType.EQ)
+ private Integer status;
+
+ @ApiModelProperty(value = "备注")
+ private String comments;
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/service/ClinicAppointmentService.java b/src/main/java/com/gxwebsoft/clinic/service/ClinicAppointmentService.java
new file mode 100644
index 0000000..28c7ac1
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/service/ClinicAppointmentService.java
@@ -0,0 +1,42 @@
+package com.gxwebsoft.clinic.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.clinic.entity.ClinicAppointment;
+import com.gxwebsoft.clinic.param.ClinicAppointmentParam;
+
+import java.util.List;
+
+/**
+ * 挂号Service
+ *
+ * @author 科技小王子
+ * @since 2025-10-19 09:27:04
+ */
+public interface ClinicAppointmentService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(ClinicAppointmentParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(ClinicAppointmentParam param);
+
+ /**
+ * 根据id查询
+ *
+ * @param id 主键ID
+ * @return ClinicAppointment
+ */
+ ClinicAppointment getByIdRel(Integer id);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/service/ClinicCaseService.java b/src/main/java/com/gxwebsoft/clinic/service/ClinicCaseService.java
new file mode 100644
index 0000000..357fa66
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/service/ClinicCaseService.java
@@ -0,0 +1,42 @@
+package com.gxwebsoft.clinic.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.clinic.entity.ClinicCase;
+import com.gxwebsoft.clinic.param.ClinicCaseParam;
+
+import java.util.List;
+
+/**
+ * 病例列表Service
+ *
+ * @author LX
+ * @since 2025-12-25 17:24:55
+ */
+public interface ClinicCaseService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(ClinicCaseParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(ClinicCaseParam param);
+
+ /**
+ * 根据id查询
+ *
+ * @param id
+ * @return ClinicCase
+ */
+ ClinicCase getByIdRel(Integer id);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/service/ClinicDoctorApplyService.java b/src/main/java/com/gxwebsoft/clinic/service/ClinicDoctorApplyService.java
new file mode 100644
index 0000000..228ac95
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/service/ClinicDoctorApplyService.java
@@ -0,0 +1,42 @@
+package com.gxwebsoft.clinic.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.clinic.entity.ClinicDoctorApply;
+import com.gxwebsoft.clinic.param.ClinicDoctorApplyParam;
+
+import java.util.List;
+
+/**
+ * 医生入驻申请Service
+ *
+ * @author 科技小王子
+ * @since 2025-10-19 09:27:04
+ */
+public interface ClinicDoctorApplyService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(ClinicDoctorApplyParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(ClinicDoctorApplyParam param);
+
+ /**
+ * 根据id查询
+ *
+ * @param applyId 主键ID
+ * @return ClinicDoctorApply
+ */
+ ClinicDoctorApply getByIdRel(Integer applyId);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/service/ClinicDoctorUserService.java b/src/main/java/com/gxwebsoft/clinic/service/ClinicDoctorUserService.java
new file mode 100644
index 0000000..e7afbc9
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/service/ClinicDoctorUserService.java
@@ -0,0 +1,43 @@
+package com.gxwebsoft.clinic.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.clinic.entity.ClinicDoctorUser;
+import com.gxwebsoft.clinic.param.ClinicDoctorUserParam;
+
+import java.util.List;
+
+/**
+ * 分销商用户记录表Service
+ *
+ * @author 科技小王子
+ * @since 2025-10-19 09:27:04
+ */
+public interface ClinicDoctorUserService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(ClinicDoctorUserParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(ClinicDoctorUserParam param);
+
+ /**
+ * 根据id查询
+ *
+ * @param id 主键ID
+ * @return ClinicDoctorUser
+ */
+ ClinicDoctorUser getByIdRel(Integer id);
+
+ ClinicDoctorUser getByUserId(Integer userId);
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/service/ClinicListService.java b/src/main/java/com/gxwebsoft/clinic/service/ClinicListService.java
new file mode 100644
index 0000000..e6cf568
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/service/ClinicListService.java
@@ -0,0 +1,43 @@
+package com.gxwebsoft.clinic.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.clinic.entity.ClinicList;
+import com.gxwebsoft.clinic.param.ClinicListParam;
+
+import java.util.List;
+
+/**
+ * 诊所列表Service
+ *
+ * @author LX
+ * @since 2025-12-09 17:29:44
+ */
+public interface ClinicListService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(ClinicListParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(ClinicListParam param);
+
+ /**
+ * 根据id查询
+ *
+ * @param id
+ * @return ClinicList
+ */
+ ClinicList getByIdRel(Integer id);
+
+ ClinicList getByUserId(Integer userId);
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/service/ClinicMedicineInoutService.java b/src/main/java/com/gxwebsoft/clinic/service/ClinicMedicineInoutService.java
new file mode 100644
index 0000000..f3c55fa
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/service/ClinicMedicineInoutService.java
@@ -0,0 +1,42 @@
+package com.gxwebsoft.clinic.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.clinic.entity.ClinicMedicineInout;
+import com.gxwebsoft.clinic.param.ClinicMedicineInoutParam;
+import com.gxwebsoft.common.core.web.PageResult;
+
+import java.util.List;
+
+/**
+ * 出入库Service
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:06:32
+ */
+public interface ClinicMedicineInoutService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(ClinicMedicineInoutParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(ClinicMedicineInoutParam param);
+
+ /**
+ * 根据id查询
+ *
+ * @param id 主键ID
+ * @return ClinicMedicineInout
+ */
+ ClinicMedicineInout getByIdRel(Integer id);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/service/ClinicMedicineService.java b/src/main/java/com/gxwebsoft/clinic/service/ClinicMedicineService.java
new file mode 100644
index 0000000..e393701
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/service/ClinicMedicineService.java
@@ -0,0 +1,42 @@
+package com.gxwebsoft.clinic.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.clinic.entity.ClinicMedicine;
+import com.gxwebsoft.clinic.param.ClinicMedicineParam;
+import com.gxwebsoft.common.core.web.PageResult;
+
+import java.util.List;
+
+/**
+ * 药品库Service
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:06:31
+ */
+public interface ClinicMedicineService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(ClinicMedicineParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(ClinicMedicineParam param);
+
+ /**
+ * 根据id查询
+ *
+ * @param id 主键ID
+ * @return ClinicMedicine
+ */
+ ClinicMedicine getByIdRel(Integer id);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/service/ClinicMedicineStockService.java b/src/main/java/com/gxwebsoft/clinic/service/ClinicMedicineStockService.java
new file mode 100644
index 0000000..04e792a
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/service/ClinicMedicineStockService.java
@@ -0,0 +1,42 @@
+package com.gxwebsoft.clinic.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.clinic.entity.ClinicMedicineStock;
+import com.gxwebsoft.clinic.param.ClinicMedicineStockParam;
+import com.gxwebsoft.common.core.web.PageResult;
+
+import java.util.List;
+
+/**
+ * 药品库存Service
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:06:32
+ */
+public interface ClinicMedicineStockService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(ClinicMedicineStockParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(ClinicMedicineStockParam param);
+
+ /**
+ * 根据id查询
+ *
+ * @param id 主键ID
+ * @return ClinicMedicineStock
+ */
+ ClinicMedicineStock getByIdRel(Integer id);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/service/ClinicPatientUserService.java b/src/main/java/com/gxwebsoft/clinic/service/ClinicPatientUserService.java
new file mode 100644
index 0000000..b06657f
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/service/ClinicPatientUserService.java
@@ -0,0 +1,45 @@
+package com.gxwebsoft.clinic.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.clinic.entity.ClinicPatientUser;
+import com.gxwebsoft.clinic.param.ClinicPatientUserParam;
+
+import java.util.List;
+
+/**
+ * 患者Service
+ *
+ * @author 科技小王子
+ * @since 2025-10-19 09:27:04
+ */
+public interface ClinicPatientUserService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(ClinicPatientUserParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(ClinicPatientUserParam param);
+
+ /**
+ * 根据id查询
+ *
+ * @param id 主键ID
+ * @return ClinicPatientUser
+ */
+ ClinicPatientUser getByIdRel(Integer id);
+
+ ClinicPatientUser getByPatientUserId(Integer patientUserId);
+
+ ClinicPatientUser check(Integer doctorUserId, Integer patientUserId);
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/service/ClinicPrescriptionItemService.java b/src/main/java/com/gxwebsoft/clinic/service/ClinicPrescriptionItemService.java
new file mode 100644
index 0000000..42b8687
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/service/ClinicPrescriptionItemService.java
@@ -0,0 +1,43 @@
+package com.gxwebsoft.clinic.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.clinic.entity.ClinicPrescriptionItem;
+import com.gxwebsoft.clinic.param.ClinicPrescriptionItemParam;
+import com.gxwebsoft.common.core.web.PageResult;
+
+import java.util.List;
+
+/**
+ * 处方明细表
+Service
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:01:13
+ */
+public interface ClinicPrescriptionItemService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(ClinicPrescriptionItemParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(ClinicPrescriptionItemParam param);
+
+ /**
+ * 根据id查询
+ *
+ * @param id 自增ID
+ * @return ClinicPrescriptionItem
+ */
+ ClinicPrescriptionItem getByIdRel(Integer id);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/service/ClinicPrescriptionService.java b/src/main/java/com/gxwebsoft/clinic/service/ClinicPrescriptionService.java
new file mode 100644
index 0000000..a2a45a5
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/service/ClinicPrescriptionService.java
@@ -0,0 +1,49 @@
+package com.gxwebsoft.clinic.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.clinic.entity.ClinicPrescription;
+import com.gxwebsoft.clinic.param.ClinicPrescriptionParam;
+import com.gxwebsoft.common.core.web.PageResult;
+
+import java.util.List;
+
+/**
+ * 处方主表
+Service
+ *
+ * @author 科技小王子
+ * @since 2025-10-22 02:01:13
+ */
+public interface ClinicPrescriptionService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(ClinicPrescriptionParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(ClinicPrescriptionParam param);
+
+ /**
+ * 根据id查询
+ *
+ * @param id 主键ID
+ * @return ClinicPrescription
+ */
+ ClinicPrescription getByIdRel(Integer id);
+
+ // 添加成功后返回数据
+ ClinicPrescription getByLastId(ClinicPrescription clinicPrescription);
+
+ ClinicPrescription getByOrderNo(String orderNo);
+
+ ClinicPrescription getByOrderId(Integer orderId);
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/service/PrescriptionOrderItemService.java b/src/main/java/com/gxwebsoft/clinic/service/PrescriptionOrderItemService.java
new file mode 100644
index 0000000..1c705e7
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/service/PrescriptionOrderItemService.java
@@ -0,0 +1,45 @@
+package com.gxwebsoft.clinic.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.clinic.entity.PrescriptionOrderItem;
+import com.gxwebsoft.clinic.param.PrescriptionOrderItemParam;
+
+import java.util.List;
+
+/**
+ * 处方明细表
+Service
+ *
+ * @author LX
+ * @since 2025-12-10 11:28:03
+ */
+public interface PrescriptionOrderItemService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(PrescriptionOrderItemParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(PrescriptionOrderItemParam param);
+
+ List getByOrderId(Integer orderId);
+
+ /**
+ * 根据id查询
+ *
+ * @param id 自增ID
+ * @return PrescriptionOrderItem
+ */
+ PrescriptionOrderItem getByIdRel(Integer id);
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/service/PrescriptionOrderService.java b/src/main/java/com/gxwebsoft/clinic/service/PrescriptionOrderService.java
new file mode 100644
index 0000000..a329c76
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/service/PrescriptionOrderService.java
@@ -0,0 +1,44 @@
+package com.gxwebsoft.clinic.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gxwebsoft.common.core.web.PageResult;
+import com.gxwebsoft.clinic.entity.PrescriptionOrder;
+import com.gxwebsoft.clinic.param.PrescriptionOrderParam;
+
+import java.util.List;
+
+/**
+ * 处方主表
+Service
+ *
+ * @author LX
+ * @since 2025-12-10 11:28:03
+ */
+public interface PrescriptionOrderService extends IService {
+
+ /**
+ * 分页关联查询
+ *
+ * @param param 查询参数
+ * @return PageResult
+ */
+ PageResult pageRel(PrescriptionOrderParam param);
+
+ /**
+ * 关联查询全部
+ *
+ * @param param 查询参数
+ * @return List
+ */
+ List listRel(PrescriptionOrderParam param);
+
+ /**
+ * 根据id查询
+ *
+ * @param id 主键ID
+ * @return PrescriptionOrder
+ */
+ PrescriptionOrder getByIdRel(Integer id);
+
+ PrescriptionOrder getByOrderNo(String orderNo);
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/service/impl/ClinicAppointmentServiceImpl.java b/src/main/java/com/gxwebsoft/clinic/service/impl/ClinicAppointmentServiceImpl.java
new file mode 100644
index 0000000..2af3f86
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/service/impl/ClinicAppointmentServiceImpl.java
@@ -0,0 +1,47 @@
+package com.gxwebsoft.clinic.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gxwebsoft.clinic.mapper.ClinicAppointmentMapper;
+import com.gxwebsoft.clinic.service.ClinicAppointmentService;
+import com.gxwebsoft.clinic.entity.ClinicAppointment;
+import com.gxwebsoft.clinic.param.ClinicAppointmentParam;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.PageResult;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 挂号Service实现
+ *
+ * @author 科技小王子
+ * @since 2025-10-19 09:27:04
+ */
+@Service
+public class ClinicAppointmentServiceImpl extends ServiceImpl implements ClinicAppointmentService {
+
+ @Override
+ public PageResult pageRel(ClinicAppointmentParam param) {
+ PageParam page = new PageParam<>(param);
+ page.setDefaultOrder("sort_number asc, create_time desc");
+ List list = baseMapper.selectPageRel(page, param);
+ return new PageResult<>(list, page.getTotal());
+ }
+
+ @Override
+ public List listRel(ClinicAppointmentParam param) {
+ List list = baseMapper.selectListRel(param);
+ // 排序
+ PageParam page = new PageParam<>();
+ page.setDefaultOrder("sort_number asc, create_time desc");
+ return page.sortRecords(list);
+ }
+
+ @Override
+ public ClinicAppointment getByIdRel(Integer id) {
+ ClinicAppointmentParam param = new ClinicAppointmentParam();
+ param.setId(id);
+ return param.getOne(baseMapper.selectListRel(param));
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/service/impl/ClinicCaseServiceImpl.java b/src/main/java/com/gxwebsoft/clinic/service/impl/ClinicCaseServiceImpl.java
new file mode 100644
index 0000000..15f4358
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/service/impl/ClinicCaseServiceImpl.java
@@ -0,0 +1,47 @@
+package com.gxwebsoft.clinic.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gxwebsoft.clinic.mapper.ClinicCaseMapper;
+import com.gxwebsoft.clinic.service.ClinicCaseService;
+import com.gxwebsoft.clinic.entity.ClinicCase;
+import com.gxwebsoft.clinic.param.ClinicCaseParam;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.PageResult;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 病例列表Service实现
+ *
+ * @author LX
+ * @since 2025-12-25 17:24:55
+ */
+@Service
+public class ClinicCaseServiceImpl extends ServiceImpl implements ClinicCaseService {
+
+ @Override
+ public PageResult pageRel(ClinicCaseParam param) {
+ PageParam page = new PageParam<>(param);
+ page.setDefaultOrder("sort_number asc, create_time desc");
+ List list = baseMapper.selectPageRel(page, param);
+ return new PageResult<>(list, page.getTotal());
+ }
+
+ @Override
+ public List listRel(ClinicCaseParam param) {
+ List list = baseMapper.selectListRel(param);
+ // 排序
+ PageParam page = new PageParam<>();
+ page.setDefaultOrder("sort_number asc, create_time desc");
+ return page.sortRecords(list);
+ }
+
+ @Override
+ public ClinicCase getByIdRel(Integer id) {
+ ClinicCaseParam param = new ClinicCaseParam();
+ param.setId(id);
+ return param.getOne(baseMapper.selectListRel(param));
+ }
+
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/service/impl/ClinicDoctorApplyServiceImpl.java b/src/main/java/com/gxwebsoft/clinic/service/impl/ClinicDoctorApplyServiceImpl.java
new file mode 100644
index 0000000..9ba52d1
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/service/impl/ClinicDoctorApplyServiceImpl.java
@@ -0,0 +1,47 @@
+package com.gxwebsoft.clinic.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gxwebsoft.clinic.mapper.ClinicDoctorApplyMapper;
+import com.gxwebsoft.clinic.service.ClinicDoctorApplyService;
+import com.gxwebsoft.clinic.entity.ClinicDoctorApply;
+import com.gxwebsoft.clinic.param.ClinicDoctorApplyParam;
+import com.gxwebsoft.common.core.web.PageParam;
+import com.gxwebsoft.common.core.web.PageResult;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 医生入驻申请Service实现
+ *
+ * @author 科技小王子
+ * @since 2025-10-19 09:27:04
+ */
+@Service
+public class ClinicDoctorApplyServiceImpl extends ServiceImpl implements ClinicDoctorApplyService {
+
+ @Override
+ public PageResult pageRel(ClinicDoctorApplyParam param) {
+ PageParam page = new PageParam<>(param);
+ page.setDefaultOrder("sort_number asc, create_time desc");
+ List