From b164e5e26a20ee08376cc416946496882635fdf1 Mon Sep 17 00:00:00 2001 From: shenyifei Date: Sun, 9 Nov 2025 13:22:29 +0800 Subject: [PATCH] init commit --- .coding/settings.xml | 11 + .dockerignore | 1 + .editorconfig | 21 + .gitattributes | 151 ++++ .gitignore | 73 ++ .lingma/rules/design.md | 5 + .mvn/wrapper/MavenWrapperDownloader.java | 118 +++ .mvn/wrapper/maven-wrapper.jar | Bin 0 -> 50710 bytes .mvn/wrapper/maven-wrapper.properties | 17 + build.sh | 20 + docker/Dockerfile | 56 ++ docker/entrypoint.sh | 59 ++ docker/xjar/Dockerfile | 49 + docker/xjar/entrypoint.sh | 59 ++ erp-turbo-admin/pom.xml | 144 +++ .../turbo/admin/ErpTurboAdminApplication.java | 17 + .../admin/controller/AgreementController.java | 85 ++ .../admin/controller/BoxBrandController.java | 85 ++ .../controller/BoxProductController.java | 85 ++ .../admin/controller/ChannelController.java | 74 ++ .../admin/controller/CompanyController.java | 85 ++ .../CompanyPaymentAccountController.java | 85 ++ .../admin/controller/CostItemController.java | 85 ++ .../admin/controller/DealerController.java | 85 ++ .../DealerPaymentAccountController.java | 85 ++ .../DealerRebateCustomerController.java | 85 ++ .../controller/DealerWarehouseController.java | 85 ++ .../controller/DictionaryController.java | 85 ++ .../admin/controller/EmployeeController.java | 194 ++++ .../controller/ExtractionController.java | 38 + .../admin/controller/GiftBoxController.java | 85 ++ .../MaterialCategoryController.java | 99 +++ .../admin/controller/MaterialController.java | 93 ++ .../admin/controller/MenuController.java | 93 ++ .../turbo/admin/controller/OcrController.java | 61 ++ .../controller/PermissionController.java | 84 ++ .../admin/controller/PlatformController.java | 86 ++ .../controller/PurchaseOrderController.java | 163 ++++ .../admin/controller/RoleController.java | 86 ++ .../admin/controller/SettingController.java | 43 + .../admin/controller/ShipOrderController.java | 95 ++ .../admin/controller/SupplierController.java | 85 ++ .../admin/controller/UserController.java | 108 +++ .../src/main/resources/application.yml | 17 + .../src/main/resources/bootstrap.yml | 7 + .../main/resources/i18n/messages.properties | 22 + .../resources/i18n/messages_en.properties | 22 + .../resources/i18n/messages_zh_CN.properties | 21 + erp-turbo-auth/pom.xml | 143 +++ .../turbo/auth/ErpTurboAuthApplication.java | 17 + .../auth/controller/CaptchaController.java | 57 ++ .../auth/controller/ChannelController.java | 32 + .../auth/controller/UserAuthController.java | 301 +++++++ .../turbo/auth/controller/UserController.java | 211 +++++ .../auth/exception/UserAuthErrorCode.java | 42 + .../src/main/resources/application.yml | 17 + .../src/main/resources/bootstrap.yml | 7 + .../main/resources/i18n/messages.properties | 22 + .../resources/i18n/messages_en.properties | 22 + .../resources/i18n/messages_zh_CN.properties | 21 + erp-turbo-business/erp-turbo-biz/pom.xml | 143 +++ .../erp/turbo/biz/ErpTurboBizApplication.java | 17 + .../biz/app/assembler/BoxBrandAssembler.java | 17 + .../app/assembler/BoxProductAssembler.java | 15 + .../biz/app/assembler/CompanyAssembler.java | 15 + .../CompanyPaymentAccountAssembler.java | 17 + .../biz/app/assembler/CostItemAssembler.java | 15 + .../biz/app/assembler/DealerAssembler.java | 17 + .../DealerPaymentAccountAssembler.java | 17 + .../DealerRebateCustomerAssembler.java | 17 + .../assembler/DealerWarehouseAssembler.java | 18 + .../biz/app/assembler/GiftBoxAssembler.java | 15 + .../app/assembler/PurchaseOrderAssembler.java | 17 + .../biz/app/assembler/ShipOrderAssembler.java | 15 + .../biz/app/assembler/SupplierAssembler.java | 15 + .../executor/cmd/BoxBrandCreateCmdExe.java | 29 + .../executor/cmd/BoxBrandDestroyCmdExe.java | 22 + .../executor/cmd/BoxBrandUpdateCmdExe.java | 27 + .../executor/cmd/BoxProductCreateCmdExe.java | 29 + .../executor/cmd/BoxProductDestroyCmdExe.java | 22 + .../executor/cmd/BoxProductUpdateCmdExe.java | 27 + .../app/executor/cmd/CompanyCreateCmdExe.java | 29 + .../executor/cmd/CompanyDestroyCmdExe.java | 22 + .../CompanyPaymentAccountCreateCmdExe.java | 29 + .../CompanyPaymentAccountDestroyCmdExe.java | 22 + .../CompanyPaymentAccountUpdateCmdExe.java | 27 + .../app/executor/cmd/CompanyUpdateCmdExe.java | 27 + .../executor/cmd/CostItemCreateCmdExe.java | 29 + .../executor/cmd/CostItemDestroyCmdExe.java | 22 + .../executor/cmd/CostItemUpdateCmdExe.java | 27 + .../app/executor/cmd/DealerCreateCmdExe.java | 29 + .../app/executor/cmd/DealerDestroyCmdExe.java | 22 + .../cmd/DealerPaymentAccountCreateCmdExe.java | 29 + .../DealerPaymentAccountDestroyCmdExe.java | 22 + .../cmd/DealerPaymentAccountUpdateCmdExe.java | 27 + .../cmd/DealerRebateCustomerCreateCmdExe.java | 29 + .../DealerRebateCustomerDestroyCmdExe.java | 22 + .../cmd/DealerRebateCustomerUpdateCmdExe.java | 27 + .../app/executor/cmd/DealerUpdateCmdExe.java | 27 + .../cmd/DealerWarehouseCreateCmdExe.java | 29 + .../cmd/DealerWarehouseDestroyCmdExe.java | 22 + .../cmd/DealerWarehouseUpdateCmdExe.java | 27 + .../app/executor/cmd/GiftBoxCreateCmdExe.java | 29 + .../executor/cmd/GiftBoxDestroyCmdExe.java | 22 + .../app/executor/cmd/GiftBoxUpdateCmdExe.java | 27 + .../cmd/PurchaseOrderApproveCmdExe.java | 22 + .../cmd/PurchaseOrderCreateCmdExe.java | 29 + .../cmd/PurchaseOrderDestroyCmdExe.java | 22 + .../cmd/PurchaseOrderFinalApproveCmdExe.java | 22 + .../cmd/PurchaseOrderRejectApproveCmdExe.java | 22 + .../cmd/PurchaseOrderRejectFinalCmdExe.java | 22 + .../cmd/PurchaseOrderSubmitReviewCmdExe.java | 22 + .../cmd/PurchaseOrderUpdateCmdExe.java | 27 + .../PurchaseOrderWithdrawReviewCmdExe.java | 22 + .../executor/cmd/ShipOrderCreateCmdExe.java | 29 + .../executor/cmd/ShipOrderDestroyCmdExe.java | 22 + .../cmd/ShipOrderGenerateDocumentCmdExe.java | 22 + .../executor/cmd/ShipOrderUpdateCmdExe.java | 27 + .../executor/cmd/SupplierCreateCmdExe.java | 29 + .../executor/cmd/SupplierDestroyCmdExe.java | 22 + .../executor/cmd/SupplierUpdateCmdExe.java | 27 + .../executor/query/BoxBrandListQryExe.java | 30 + .../executor/query/BoxBrandPageQryExe.java | 29 + .../executor/query/BoxBrandShowQryExe.java | 29 + .../executor/query/BoxProductListQryExe.java | 30 + .../executor/query/BoxProductPageQryExe.java | 29 + .../executor/query/BoxProductShowQryExe.java | 29 + .../app/executor/query/CompanyListQryExe.java | 30 + .../app/executor/query/CompanyPageQryExe.java | 29 + .../CompanyPaymentAccountListQryExe.java | 30 + .../CompanyPaymentAccountPageQryExe.java | 29 + .../CompanyPaymentAccountShowQryExe.java | 29 + .../app/executor/query/CompanyShowQryExe.java | 29 + .../executor/query/CostItemListQryExe.java | 30 + .../executor/query/CostItemPageQryExe.java | 29 + .../executor/query/CostItemShowQryExe.java | 29 + .../app/executor/query/DealerListQryExe.java | 30 + .../app/executor/query/DealerPageQryExe.java | 29 + .../query/DealerPaymentAccountListQryExe.java | 30 + .../query/DealerPaymentAccountPageQryExe.java | 29 + .../query/DealerPaymentAccountShowQryExe.java | 29 + .../query/DealerRebateCustomerListQryExe.java | 30 + .../query/DealerRebateCustomerPageQryExe.java | 29 + .../query/DealerRebateCustomerShowQryExe.java | 29 + .../app/executor/query/DealerShowQryExe.java | 29 + .../query/DealerWarehouseListQryExe.java | 30 + .../query/DealerWarehousePageQryExe.java | 29 + .../query/DealerWarehouseShowQryExe.java | 29 + .../app/executor/query/GiftBoxListQryExe.java | 30 + .../app/executor/query/GiftBoxPageQryExe.java | 29 + .../app/executor/query/GiftBoxShowQryExe.java | 29 + .../query/PurchaseOrderCountQryExe.java | 23 + .../query/PurchaseOrderListQryExe.java | 30 + .../query/PurchaseOrderPageQryExe.java | 29 + .../query/PurchaseOrderShowQryExe.java | 29 + .../executor/query/ShipOrderListQryExe.java | 30 + .../executor/query/ShipOrderPageQryExe.java | 29 + .../executor/query/ShipOrderShowQryExe.java | 29 + .../executor/query/SupplierListQryExe.java | 30 + .../executor/query/SupplierPageQryExe.java | 29 + .../executor/query/SupplierShowQryExe.java | 29 + .../biz/app/service/BoxBrandServiceImpl.java | 71 ++ .../app/service/BoxProductServiceImpl.java | 71 ++ .../CompanyPaymentAccountServiceImpl.java | 71 ++ .../biz/app/service/CompanyServiceImpl.java | 71 ++ .../biz/app/service/CostItemServiceImpl.java | 71 ++ .../DealerPaymentAccountServiceImpl.java | 71 ++ .../DealerRebateCustomerServiceImpl.java | 71 ++ .../biz/app/service/DealerServiceImpl.java | 71 ++ .../service/DealerWarehouseServiceImpl.java | 71 ++ .../biz/app/service/GiftBoxServiceImpl.java | 71 ++ .../app/service/PurchaseOrderServiceImpl.java | 111 +++ .../biz/app/service/ShipOrderServiceImpl.java | 79 ++ .../biz/app/service/SupplierServiceImpl.java | 71 ++ .../erp/turbo/biz/domain/entity/BoxBrand.java | 55 ++ .../turbo/biz/domain/entity/BoxProduct.java | 71 ++ .../erp/turbo/biz/domain/entity/Company.java | 64 ++ .../domain/entity/CompanyPaymentAccount.java | 89 ++ .../erp/turbo/biz/domain/entity/CostItem.java | 66 ++ .../erp/turbo/biz/domain/entity/Dealer.java | 102 +++ .../domain/entity/DealerPaymentAccount.java | 78 ++ .../domain/entity/DealerRebateCustomer.java | 51 ++ .../biz/domain/entity/DealerWarehouse.java | 83 ++ .../erp/turbo/biz/domain/entity/GiftBox.java | 60 ++ .../biz/domain/entity/PurchaseOrder.java | 148 ++++ .../turbo/biz/domain/entity/ShipOrder.java | 199 +++++ .../erp/turbo/biz/domain/entity/Supplier.java | 64 ++ .../biz/domain/gateway/BoxBrandGateway.java | 30 + .../biz/domain/gateway/BoxProductGateway.java | 30 + .../biz/domain/gateway/CompanyGateway.java | 30 + .../gateway/CompanyPaymentAccountGateway.java | 30 + .../biz/domain/gateway/CostItemGateway.java | 30 + .../biz/domain/gateway/DealerGateway.java | 30 + .../gateway/DealerPaymentAccountGateway.java | 30 + .../gateway/DealerRebateCustomerGateway.java | 30 + .../gateway/DealerWarehouseGateway.java | 30 + .../biz/domain/gateway/GiftBoxGateway.java | 30 + .../domain/gateway/PurchaseOrderGateway.java | 42 + .../biz/domain/gateway/ShipOrderGateway.java | 33 + .../biz/domain/gateway/SupplierGateway.java | 30 + .../convert/BoxBrandConvert.java | 35 + .../convert/BoxProductConvert.java | 32 + .../convert/CompanyConvert.java | 32 + .../convert/CompanyPaymentAccountConvert.java | 35 + .../convert/CostItemConvert.java | 32 + .../infrastructure/convert/DealerConvert.java | 35 + .../convert/DealerPaymentAccountConvert.java | 35 + .../convert/DealerRebateCustomerConvert.java | 35 + .../convert/DealerWarehouseConvert.java | 38 + .../convert/GiftBoxConvert.java | 32 + .../convert/OrderCompanyConvert.java | 21 + .../convert/OrderCostConvert.java | 28 + .../convert/OrderDealerConvert.java | 21 + .../convert/OrderPackageConvert.java | 28 + .../convert/OrderRebateConvert.java | 21 + .../convert/OrderSupplierConvert.java | 30 + .../convert/OrderVehicleConvert.java | 22 + .../convert/PurchaseOrderConvert.java | 52 ++ .../convert/ShipOrderConvert.java | 100 +++ .../convert/SupplierConvert.java | 32 + .../biz/infrastructure/entity/BoxBrandDO.java | 55 ++ .../infrastructure/entity/BoxProductDO.java | 77 ++ .../biz/infrastructure/entity/CompanyDO.java | 68 ++ .../entity/CompanyPaymentAccountDO.java | 106 +++ .../biz/infrastructure/entity/CostItemDO.java | 71 ++ .../biz/infrastructure/entity/DealerDO.java | 113 +++ .../entity/DealerPaymentAccountDO.java | 83 ++ .../entity/DealerRebateCustomerDO.java | 52 ++ .../entity/DealerWarehouseDO.java | 91 ++ .../biz/infrastructure/entity/GiftBoxDO.java | 64 ++ .../infrastructure/entity/OrderCompanyDO.java | 106 +++ .../infrastructure/entity/OrderCostDO.java | 84 ++ .../infrastructure/entity/OrderDealerDO.java | 174 ++++ .../infrastructure/entity/OrderPackageDO.java | 95 ++ .../infrastructure/entity/OrderRebateDO.java | 75 ++ .../entity/OrderSupplierDO.java | 164 ++++ .../infrastructure/entity/OrderVehicleDO.java | 114 +++ .../entity/PurchaseOrderDO.java | 150 ++++ .../infrastructure/entity/ShipOrderDO.java | 230 +++++ .../entity/ShipOrderItemDO.java | 70 ++ .../entity/ShipOrderPackageDO.java | 76 ++ .../biz/infrastructure/entity/SupplierDO.java | 68 ++ .../gateway/BoxBrandGatewayImpl.java | 114 +++ .../gateway/BoxProductGatewayImpl.java | 100 +++ .../gateway/CompanyGatewayImpl.java | 99 +++ .../CompanyPaymentAccountGatewayImpl.java | 121 +++ .../gateway/CostItemGatewayImpl.java | 101 +++ .../gateway/DealerGatewayImpl.java | 124 +++ .../DealerPaymentAccountGatewayImpl.java | 156 ++++ .../DealerRebateCustomerGatewayImpl.java | 121 +++ .../gateway/DealerWarehouseGatewayImpl.java | 133 +++ .../gateway/GiftBoxGatewayImpl.java | 97 ++ .../gateway/PurchaseOrderGatewayImpl.java | 836 ++++++++++++++++++ .../gateway/ShipOrderGatewayImpl.java | 132 +++ .../gateway/SupplierGatewayImpl.java | 102 +++ .../infrastructure/mapper/BoxBrandMapper.java | 13 + .../mapper/BoxProductMapper.java | 13 + .../infrastructure/mapper/CompanyMapper.java | 13 + .../mapper/CompanyPaymentAccountMapper.java | 13 + .../infrastructure/mapper/CostItemMapper.java | 13 + .../infrastructure/mapper/DealerMapper.java | 13 + .../mapper/DealerPaymentAccountMapper.java | 13 + .../mapper/DealerRebateCustomerMapper.java | 13 + .../mapper/DealerWarehouseMapper.java | 13 + .../infrastructure/mapper/GiftBoxMapper.java | 13 + .../mapper/OrderCompanyMapper.java | 13 + .../mapper/OrderCostMapper.java | 13 + .../mapper/OrderDealerMapper.java | 13 + .../mapper/OrderPackageMapper.java | 13 + .../mapper/OrderRebateMapper.java | 13 + .../mapper/OrderSupplierMapper.java | 13 + .../mapper/OrderVehicleMapper.java | 13 + .../mapper/PurchaseOrderMapper.java | 13 + .../mapper/ShipOrderItemMapper.java | 13 + .../mapper/ShipOrderMapper.java | 13 + .../mapper/ShipOrderPackageMapper.java | 13 + .../infrastructure/mapper/SupplierMapper.java | 13 + .../src/main/resources/application.yml | 14 + .../src/main/resources/bootstrap.yml | 7 + .../main/resources/i18n/messages.properties | 22 + .../resources/i18n/messages_en.properties | 22 + .../resources/i18n/messages_zh_CN.properties | 21 + .../main/resources/mapper/BoxBrandMapper.xml | 20 + .../resources/mapper/BoxProductMapper.xml | 24 + .../main/resources/mapper/CompanyMapper.xml | 23 + .../mapper/CompanyPaymentAccountMapper.xml | 27 + .../main/resources/mapper/CostItemMapper.xml | 23 + .../main/resources/mapper/DealerMapper.xml | 28 + .../mapper/DealerPaymentAccountMapper.xml | 24 + .../mapper/DealerRebateCustomerMapper.xml | 19 + .../mapper/DealerWarehouseMapper.xml | 25 + .../main/resources/mapper/GiftBoxMapper.xml | 22 + .../resources/mapper/OrderCompanyMapper.xml | 28 + .../main/resources/mapper/OrderCostMapper.xml | 25 + .../resources/mapper/OrderDealerMapper.xml | 40 + .../resources/mapper/OrderPackageMapper.xml | 27 + .../resources/mapper/OrderRebateMapper.xml | 23 + .../resources/mapper/OrderSupplierMapper.xml | 39 + .../resources/mapper/OrderVehicleMapper.xml | 30 + .../resources/mapper/PurchaseOrderMapper.xml | 33 + .../resources/mapper/ShipOrderItemMapper.xml | 23 + .../main/resources/mapper/ShipOrderMapper.xml | 48 + .../mapper/ShipOrderPackageMapper.xml | 24 + .../main/resources/mapper/SupplierMapper.xml | 23 + erp-turbo-business/erp-turbo-facade/pom.xml | 151 ++++ .../facade/ErpTurboFacadeApplication.java | 17 + .../web/controller/WxMaController.java | 88 ++ .../web/controller/WxMpController.java | 88 ++ .../executor/cmd/VehicleExtractionCmdExe.java | 51 ++ .../app/executor/cmd/WxMaCallbackCmdExe.java | 34 + .../app/executor/cmd/WxMaNotifyCmdExe.java | 21 + .../executor/cmd/WxMaOcrBankCardCmdExe.java | 34 + .../app/executor/cmd/WxMaOcrIdCardCmdExe.java | 35 + .../app/executor/cmd/WxMpCallbackCmdExe.java | 105 +++ .../app/executor/cmd/WxPhoneBindCmdExe.java | 29 + .../facade/app/executor/common/WxCmdExe.java | 113 +++ .../executor/handler/SubscribeHandler.java | 74 ++ .../executor/handler/UnsubscribeHandler.java | 37 + .../app/executor/query/WxOpenidQryExe.java | 34 + .../app/service/DeepSeekServiceImpl.java | 22 + .../facade/app/service/WxCpServiceImpl.java | 22 + .../facade/app/service/WxMaServiceImpl.java | 54 ++ .../facade/app/service/WxMpServiceImpl.java | 21 + .../src/main/resources/application.yml | 14 + .../src/main/resources/bootstrap.yml | 7 + .../main/resources/i18n/messages.properties | 22 + .../resources/i18n/messages_en.properties | 22 + .../resources/i18n/messages_zh_CN.properties | 21 + erp-turbo-business/erp-turbo-infra/pom.xml | 141 +++ .../turbo/infra/ErpTurboInfraApplication.java | 17 + .../app/assembler/AgreementAssembler.java | 15 + .../app/assembler/CategoryAssembler.java | 18 + .../infra/app/assembler/ChannelAssembler.java | 11 + .../app/assembler/DictionaryAssembler.java | 15 + .../app/assembler/MaterialAssembler.java | 18 + .../app/assembler/PlatformAssembler.java | 15 + .../infra/app/assembler/SettingAssembler.java | 15 + .../executor/cmd/AgreementCreateCmdExe.java | 29 + .../executor/cmd/AgreementDestroyCmdExe.java | 22 + .../executor/cmd/AgreementUpdateCmdExe.java | 27 + .../executor/cmd/CategoryCreateCmdExe.java | 25 + .../executor/cmd/CategoryDestroyCmdExe.java | 19 + .../executor/cmd/CategoryUpdateCmdExe.java | 25 + .../app/executor/cmd/ChannelCreateCmdExe.java | 23 + .../executor/cmd/ChannelDestroyCmdExe.java | 18 + .../app/executor/cmd/ChannelUpdateCmdExe.java | 23 + .../executor/cmd/DictionaryCreateCmdExe.java | 31 + .../executor/cmd/DictionaryDestroyCmdExe.java | 22 + .../executor/cmd/DictionaryUpdateCmdExe.java | 27 + .../executor/cmd/MaterialBatchAddCmdExe.java | 25 + .../executor/cmd/MaterialCreateCmdExe.java | 21 + .../executor/cmd/MaterialDestroyCmdExe.java | 18 + .../executor/cmd/MaterialUpdateCmdExe.java | 23 + .../executor/cmd/PlatformCreateCmdExe.java | 26 + .../executor/cmd/PlatformDestroyCmdExe.java | 21 + .../executor/cmd/PlatformUpdateCmdExe.java | 21 + .../app/executor/cmd/SettingUpdateCmdExe.java | 29 + .../executor/query/AgreementListQryExe.java | 30 + .../executor/query/AgreementPageQryExe.java | 29 + .../executor/query/AgreementShowQryExe.java | 29 + .../executor/query/CategoryListQryExe.java | 27 + .../executor/query/CategoryPageQryExe.java | 25 + .../executor/query/CategoryShowQryExe.java | 25 + .../app/executor/query/ChannelPageQryExe.java | 24 + .../app/executor/query/ChannelShowQryExe.java | 30 + .../executor/query/DictionaryListQryExe.java | 36 + .../executor/query/DictionaryPageQryExe.java | 29 + .../executor/query/DictionaryShowQryExe.java | 29 + .../executor/query/MaterialPageQryExe.java | 25 + .../app/executor/query/MaterialQryExe.java | 12 + .../executor/query/MaterialShowQryExe.java | 24 + .../app/executor/query/OssTokenQryExe.java | 35 + .../executor/query/PlatformListQryExe.java | 30 + .../executor/query/PlatformPageQryExe.java | 29 + .../executor/query/PlatformShowQryExe.java | 26 + .../app/executor/query/SettingShowQryExe.java | 36 + .../app/service/AgreementServiceImpl.java | 71 ++ .../app/service/CategoryServiceImpl.java | 65 ++ .../infra/app/service/ChannelServiceImpl.java | 59 ++ .../app/service/DictionaryServiceImpl.java | 71 ++ .../app/service/MaterialServiceImpl.java | 78 ++ .../app/service/PlatformServiceImpl.java | 68 ++ .../infra/app/service/SettingServiceImpl.java | 37 + .../turbo/infra/domain/entity/Agreement.java | 45 + .../turbo/infra/domain/entity/Category.java | 40 + .../turbo/infra/domain/entity/Channel.java | 54 ++ .../infra/domain/entity/Credentials.java | 20 + .../turbo/infra/domain/entity/Dictionary.java | 47 + .../turbo/infra/domain/entity/Material.java | 46 + .../turbo/infra/domain/entity/Platform.java | 22 + .../turbo/infra/domain/entity/Setting.java | 33 + .../domain/gateway/AgreementGateway.java | 30 + .../infra/domain/gateway/CategoryGateway.java | 26 + .../infra/domain/gateway/ChannelGateway.java | 21 + .../domain/gateway/DictionaryGateway.java | 30 + .../infra/domain/gateway/MaterialGateway.java | 26 + .../infra/domain/gateway/OssGateway.java | 14 + .../infra/domain/gateway/PlatformGateway.java | 29 + .../infra/domain/gateway/SettingGateway.java | 16 + .../convert/AgreementConvert.java | 32 + .../convert/CategoryConvert.java | 33 + .../convert/ChannelConvert.java | 17 + .../convert/DictionaryConvert.java | 32 + .../convert/MaterialConvert.java | 36 + .../convert/PlatformConvert.java | 21 + .../convert/SettingConvert.java | 34 + .../infrastructure/entity/AgreementDO.java | 54 ++ .../infrastructure/entity/CategoryDO.java | 50 ++ .../infrastructure/entity/ChannelDO.java | 74 ++ .../infrastructure/entity/DictionaryDO.java | 56 ++ .../infrastructure/entity/MaterialDO.java | 52 ++ .../infrastructure/entity/PlatformDO.java | 37 + .../infrastructure/entity/SettingDO.java | 40 + .../gateway/AgreementGatewayImpl.java | 103 +++ .../gateway/CategoryGatewayImpl.java | 123 +++ .../gateway/ChannelGatewayImpl.java | 74 ++ .../gateway/DictionaryGatewayImpl.java | 98 ++ .../gateway/MaterialGatewayImpl.java | 118 +++ .../infrastructure/gateway/OssConvert.java | 13 + .../gateway/OssGatewayImpl.java | 59 ++ .../gateway/PlatformGatewayImpl.java | 82 ++ .../gateway/SettingGatewayImpl.java | 54 ++ .../mapper/AgreementMapper.java | 13 + .../infrastructure/mapper/CategoryMapper.java | 12 + .../infrastructure/mapper/ChannelMapper.java | 9 + .../mapper/DictionaryMapper.java | 13 + .../infrastructure/mapper/MaterialMapper.java | 12 + .../infrastructure/mapper/PlatformMapper.java | 12 + .../infrastructure/mapper/SettingMapper.java | 13 + .../src/main/resources/application.yml | 10 + .../src/main/resources/bootstrap.yml | 7 + .../main/resources/i18n/messages.properties | 22 + .../resources/i18n/messages_en.properties | 22 + .../resources/i18n/messages_zh_CN.properties | 21 + .../main/resources/mapper/AgreementMapper.xml | 20 + .../main/resources/mapper/CategoryMapper.xml | 18 + .../main/resources/mapper/ChannelMapper.xml | 20 + .../resources/mapper/DictionaryMapper.xml | 20 + .../main/resources/mapper/MaterialMapper.xml | 18 + .../main/resources/mapper/PlatformMapper.xml | 16 + .../main/resources/mapper/SettingMapper.xml | 18 + erp-turbo-business/erp-turbo-rbac/pom.xml | 142 +++ .../turbo/rbac/ErpTurboRbacApplication.java | 17 + .../rbac/app/assembler/MenuAssembler.java | 14 + .../app/assembler/PermissionAssembler.java | 11 + .../rbac/app/assembler/RoleAssembler.java | 37 + .../rbac/app/assembler/UserRoleAssembler.java | 15 + .../app/executor/cmd/MenuCreateCmdExe.java | 22 + .../app/executor/cmd/MenuDestroyCmdExe.java | 16 + .../app/executor/cmd/MenuUpdateCmdExe.java | 22 + .../executor/cmd/PermissionCreateCmdExe.java | 19 + .../executor/cmd/PermissionDestroyCmdExe.java | 18 + .../executor/cmd/PermissionUpdateCmdExe.java | 19 + .../app/executor/cmd/RoleCreateCmdExe.java | 21 + .../app/executor/cmd/RoleDestroyCmdExe.java | 16 + .../app/executor/cmd/RoleUpdateCmdExe.java | 21 + .../executor/cmd/UserRoleCreateCmdExe.java | 25 + .../app/executor/cmd/UserRoleListQryExe.java | 23 + .../executor/cmd/UserRoleUpdateCmdExe.java | 40 + .../app/executor/query/MenuDragCmdExe.java | 21 + .../app/executor/query/MenuListQryExe.java | 26 + .../app/executor/query/MenuShowQryExe.java | 24 + .../app/executor/query/MenuTreeQryExe.java | 46 + .../executor/query/PermissionListQryExe.java | 23 + .../executor/query/PermissionPageQryExe.java | 22 + .../executor/query/PermissionShowQryExe.java | 19 + .../app/executor/query/RoleListQryExe.java | 24 + .../app/executor/query/RolePageQryExe.java | 23 + .../app/executor/query/RoleShowQryExe.java | 22 + .../app/executor/query/UserMenuQryExe.java | 45 + .../executor/query/UserPermissionQryExe.java | 23 + .../rbac/app/service/MenuServiceImpl.java | 79 ++ .../app/service/PermissionServiceImpl.java | 66 ++ .../rbac/app/service/RoleServiceImpl.java | 68 ++ .../rbac/app/service/UserMenuServiceImpl.java | 25 + .../service/UserPermissionServiceImpl.java | 25 + .../rbac/app/service/UserRoleServiceImpl.java | 41 + .../erp/turbo/rbac/domain/entity/Menu.java | 73 ++ .../turbo/rbac/domain/entity/Permission.java | 19 + .../erp/turbo/rbac/domain/entity/Role.java | 58 ++ .../turbo/rbac/domain/entity/RoleMenu.java | 24 + .../rbac/domain/entity/RolePermission.java | 22 + .../turbo/rbac/domain/entity/UserRole.java | 18 + .../rbac/domain/gateway/MenuGateway.java | 31 + .../domain/gateway/PermissionGateway.java | 29 + .../rbac/domain/gateway/RoleGateway.java | 30 + .../rbac/domain/gateway/RoleMenuGateway.java | 10 + .../rbac/domain/gateway/UserRoleGateway.java | 21 + .../infrastructure/convert/MenuConvert.java | 28 + .../convert/PermissionConvert.java | 17 + .../infrastructure/convert/RoleConvert.java | 44 + .../convert/RoleMenuConvert.java | 18 + .../convert/UserRoleConvert.java | 18 + .../rbac/infrastructure/entity/MenuDO.java | 95 ++ .../infrastructure/entity/PermissionDO.java | 24 + .../rbac/infrastructure/entity/RoleDO.java | 62 ++ .../infrastructure/entity/RoleMenuDO.java | 22 + .../entity/RolePermissionDO.java | 19 + .../infrastructure/entity/UserRoleDO.java | 32 + .../gateway/MenuGatewayImpl.java | 181 ++++ .../gateway/PermissionGatewayImpl.java | 96 ++ .../gateway/RoleGatewayImpl.java | 190 ++++ .../gateway/RoleMenuGatewayImpl.java | 25 + .../gateway/UserRoleGatewayImpl.java | 129 +++ .../infrastructure/mapper/MenuMapper.java | 21 + .../mapper/PermissionMapper.java | 15 + .../infrastructure/mapper/RoleMapper.java | 13 + .../infrastructure/mapper/RoleMenuMapper.java | 14 + .../mapper/RolePermissionMapper.java | 9 + .../infrastructure/mapper/UserRoleMapper.java | 21 + .../src/main/resources/application.yml | 10 + .../src/main/resources/bootstrap.yml | 7 + .../main/resources/i18n/messages.properties | 22 + .../resources/i18n/messages_en.properties | 22 + .../resources/i18n/messages_zh_CN.properties | 21 + .../src/main/resources/mapper/MenuMapper.xml | 23 + .../resources/mapper/PermissionMapper.xml | 43 + .../src/main/resources/mapper/RoleMapper.xml | 26 + .../main/resources/mapper/RoleMenuMapper.xml | 44 + .../resources/mapper/RolePermissionMapper.xml | 12 + .../main/resources/mapper/UserRoleMapper.xml | 45 + erp-turbo-business/erp-turbo-user/pom.xml | 141 +++ .../turbo/user/ErpTurboUserApplication.java | 17 + .../user/app/assembler/AdminAssembler.java | 11 + .../user/app/assembler/EmployeeAssembler.java | 17 + .../user/app/assembler/UserAssembler.java | 14 + .../user/app/assembler/UserAuthAssembler.java | 16 + .../executor/cmd/EmployeeCreateCmdExe.java | 59 ++ .../executor/cmd/EmployeeDestroyCmdExe.java | 21 + .../executor/cmd/EmployeeDisableCmdExe.java | 35 + .../cmd/EmployeeRestPasswordCmdExe.java | 22 + .../cmd/EmployeeUpdateAvatarCmdExe.java | 28 + .../executor/cmd/EmployeeUpdateCmdExe.java | 27 + .../executor/cmd/UpdatePasswordCmdExe.java | 40 + .../app/executor/cmd/UserCreateCmdExe.java | 25 + .../app/executor/cmd/UserDestroyCmdExe.java | 17 + .../app/executor/cmd/UserDisableCmdExe.java | 17 + .../app/executor/cmd/UserEnableCmdExe.java | 17 + .../user/app/executor/cmd/UserListQryExe.java | 25 + .../executor/cmd/UserUnsubscribeCmdExe.java | 17 + .../app/executor/cmd/UserUpdateCmdExe.java | 21 + .../app/executor/query/AdminShowQryExe.java | 23 + .../executor/query/EmployeeListQryExe.java | 29 + .../executor/query/EmployeePageQryExe.java | 28 + .../executor/query/EmployeeShowQryExe.java | 28 + .../app/executor/query/OpenSafeCmdExe.java | 22 + .../executor/query/PasswordLoginQryExe.java | 87 ++ .../executor/query/UserAuthShowQryExe.java | 25 + .../app/executor/query/UserPageQryExe.java | 24 + .../app/executor/query/UserShowQryExe.java | 25 + .../executor/query/WxMaCodeLoginQryExe.java | 57 ++ .../user/app/service/AdminServiceImpl.java | 29 + .../user/app/service/EmployeeServiceImpl.java | 85 ++ .../user/app/service/UserAuthServiceImpl.java | 57 ++ .../user/app/service/UserServiceImpl.java | 84 ++ .../erp/turbo/user/domain/entity/Admin.java | 33 + .../turbo/user/domain/entity/Employee.java | 38 + .../erp/turbo/user/domain/entity/User.java | 103 +++ .../turbo/user/domain/entity/UserAuth.java | 47 + .../user/domain/gateway/AdminGateway.java | 11 + .../user/domain/gateway/EmployeeGateway.java | 31 + .../user/domain/gateway/UserAuthGateway.java | 28 + .../user/domain/gateway/UserGateway.java | 41 + .../infrastructure/convert/AdminConvert.java | 14 + .../convert/EmployeeConvert.java | 33 + .../convert/UserAuthConvert.java | 30 + .../infrastructure/convert/UserConvert.java | 53 ++ .../user/infrastructure/entity/AdminDO.java | 37 + .../infrastructure/entity/EmployeeDO.java | 71 ++ .../infrastructure/entity/UserAuthDO.java | 55 ++ .../user/infrastructure/entity/UserDO.java | 118 +++ .../gateway/AdminGatewayImpl.java | 42 + .../gateway/EmployeeGatewayImpl.java | 112 +++ .../gateway/UserAuthGatewayImpl.java | 122 +++ .../gateway/UserGatewayImpl.java | 231 +++++ .../infrastructure/mapper/AdminMapper.java | 9 + .../infrastructure/mapper/EmployeeMapper.java | 12 + .../infrastructure/mapper/UserAuthMapper.java | 12 + .../infrastructure/mapper/UserMapper.java | 18 + .../src/main/resources/application.yml | 10 + .../src/main/resources/bootstrap.yml | 7 + .../main/resources/i18n/messages.properties | 22 + .../resources/i18n/messages_en.properties | 22 + .../resources/i18n/messages_zh_CN.properties | 21 + .../src/main/resources/mapper/AdminMapper.xml | 17 + .../main/resources/mapper/EmployeeMapper.xml | 23 + .../main/resources/mapper/UserAuthMapper.xml | 39 + .../src/main/resources/mapper/UserMapper.xml | 61 ++ erp-turbo-business/pom.xml | 45 + erp-turbo-common/erp-turbo-ai/pom.xml | 42 + .../ai/config/DeepSeekAutoConfiguration.java | 28 + .../turbo/ai/config/DeepSeekProperties.java | 18 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../src/main/resources/openapi.yml | 4 + erp-turbo-common/erp-turbo-api/pom.xml | 41 + .../turbo/api/biz/api/BoxBrandServiceI.java | 30 + .../turbo/api/biz/api/BoxProductServiceI.java | 30 + .../api/CompanyPaymentAccountServiceI.java | 30 + .../turbo/api/biz/api/CompanyServiceI.java | 30 + .../turbo/api/biz/api/CostItemServiceI.java | 30 + .../biz/api/DealerPaymentAccountServiceI.java | 30 + .../biz/api/DealerRebateCustomerServiceI.java | 30 + .../erp/turbo/api/biz/api/DealerServiceI.java | 30 + .../api/biz/api/DealerWarehouseServiceI.java | 30 + .../turbo/api/biz/api/GiftBoxServiceI.java | 30 + .../api/biz/api/PurchaseOrderServiceI.java | 43 + .../turbo/api/biz/api/ShipOrderServiceI.java | 33 + .../turbo/api/biz/api/SupplierServiceI.java | 30 + .../api/biz/dto/cmd/BoxBrandCreateCmd.java | 53 ++ .../api/biz/dto/cmd/BoxBrandDestroyCmd.java | 19 + .../api/biz/dto/cmd/BoxBrandUpdateCmd.java | 18 + .../api/biz/dto/cmd/BoxProductCreateCmd.java | 80 ++ .../api/biz/dto/cmd/BoxProductDestroyCmd.java | 19 + .../api/biz/dto/cmd/BoxProductUpdateCmd.java | 18 + .../api/biz/dto/cmd/CompanyCreateCmd.java | 65 ++ .../api/biz/dto/cmd/CompanyDestroyCmd.java | 19 + .../cmd/CompanyPaymentAccountCreateCmd.java | 100 +++ .../cmd/CompanyPaymentAccountDestroyCmd.java | 19 + .../cmd/CompanyPaymentAccountUpdateCmd.java | 18 + .../api/biz/dto/cmd/CompanyUpdateCmd.java | 18 + .../api/biz/dto/cmd/CostItemCreateCmd.java | 68 ++ .../api/biz/dto/cmd/CostItemDestroyCmd.java | 19 + .../api/biz/dto/cmd/CostItemUpdateCmd.java | 18 + .../api/biz/dto/cmd/DealerCreateCmd.java | 98 ++ .../api/biz/dto/cmd/DealerDestroyCmd.java | 19 + .../cmd/DealerPaymentAccountCreateCmd.java | 77 ++ .../cmd/DealerPaymentAccountDestroyCmd.java | 19 + .../cmd/DealerPaymentAccountUpdateCmd.java | 18 + .../cmd/DealerRebateCustomerCreateCmd.java | 47 + .../cmd/DealerRebateCustomerDestroyCmd.java | 19 + .../cmd/DealerRebateCustomerUpdateCmd.java | 18 + .../api/biz/dto/cmd/DealerUpdateCmd.java | 21 + .../biz/dto/cmd/DealerWarehouseCreateCmd.java | 83 ++ .../dto/cmd/DealerWarehouseDestroyCmd.java | 19 + .../biz/dto/cmd/DealerWarehouseUpdateCmd.java | 18 + .../api/biz/dto/cmd/GiftBoxCreateCmd.java | 68 ++ .../api/biz/dto/cmd/GiftBoxDestroyCmd.java | 19 + .../api/biz/dto/cmd/GiftBoxUpdateCmd.java | 18 + .../biz/dto/cmd/PurchaseOrderApproveCmd.java | 44 + .../biz/dto/cmd/PurchaseOrderCreateCmd.java | 76 ++ .../biz/dto/cmd/PurchaseOrderDestroyCmd.java | 19 + .../dto/cmd/PurchaseOrderFinalApproveCmd.java | 19 + .../cmd/PurchaseOrderRejectApproveCmd.java | 22 + .../dto/cmd/PurchaseOrderRejectFinalCmd.java | 19 + .../dto/cmd/PurchaseOrderSubmitReviewCmd.java | 19 + .../biz/dto/cmd/PurchaseOrderUpdateCmd.java | 18 + .../cmd/PurchaseOrderWithdrawReviewCmd.java | 19 + .../api/biz/dto/cmd/ShipOrderCreateCmd.java | 158 ++++ .../api/biz/dto/cmd/ShipOrderDestroyCmd.java | 19 + .../dto/cmd/ShipOrderGenerateDocumentCmd.java | 71 ++ .../api/biz/dto/cmd/ShipOrderUpdateCmd.java | 71 ++ .../api/biz/dto/cmd/SupplierCreateCmd.java | 65 ++ .../api/biz/dto/cmd/SupplierDestroyCmd.java | 19 + .../api/biz/dto/cmd/SupplierUpdateCmd.java | 18 + .../api/biz/dto/common/OrderCompany.java | 95 ++ .../turbo/api/biz/dto/common/OrderCost.java | 81 ++ .../turbo/api/biz/dto/common/OrderDealer.java | 171 ++++ .../api/biz/dto/common/OrderPackage.java | 92 ++ .../turbo/api/biz/dto/common/OrderRebate.java | 68 ++ .../api/biz/dto/common/OrderSupplier.java | 163 ++++ .../api/biz/dto/common/OrderVehicle.java | 115 +++ .../api/biz/dto/common/ShipOrderItem.java | 74 ++ .../api/biz/dto/common/ShipOrderPackage.java | 80 ++ .../api/biz/dto/enums/BoxBrandTypeEnum.java | 32 + .../biz/dto/enums/BoxProductSpecTypeEnum.java | 20 + .../CompanyPaymentAccountCategoryEnum.java | 20 + .../enums/CompanyPaymentAccountTypeEnum.java | 21 + .../CompanyPaymentPublicAccountTypeEnum.java | 22 + .../biz/dto/enums/CostItemCostTypeEnum.java | 23 + .../api/biz/dto/enums/DealerTypeEnum.java | 20 + .../biz/dto/enums/OrderCostPayerTypeEnum.java | 20 + .../dto/enums/OrderPackageBoxTypeEnum.java | 22 + .../dto/enums/OrderRebateCalcMethodEnum.java | 20 + .../dto/enums/OrderVehiclePriceTypeEnum.java | 20 + .../enums/PurchaseOrderPricingMethodEnum.java | 21 + .../biz/dto/enums/PurchaseOrderStateEnum.java | 24 + .../api/biz/dto/enums/ShipOrderStateEnum.java | 23 + .../api/biz/dto/qry/BoxBrandListQry.java | 25 + .../api/biz/dto/qry/BoxBrandPageQry.java | 19 + .../api/biz/dto/qry/BoxBrandShowQry.java | 19 + .../api/biz/dto/qry/BoxProductListQry.java | 19 + .../api/biz/dto/qry/BoxProductPageQry.java | 33 + .../api/biz/dto/qry/BoxProductShowQry.java | 19 + .../turbo/api/biz/dto/qry/CompanyListQry.java | 19 + .../turbo/api/biz/dto/qry/CompanyPageQry.java | 31 + .../dto/qry/CompanyPaymentAccountListQry.java | 35 + .../dto/qry/CompanyPaymentAccountPageQry.java | 32 + .../dto/qry/CompanyPaymentAccountShowQry.java | 19 + .../turbo/api/biz/dto/qry/CompanyShowQry.java | 19 + .../api/biz/dto/qry/CostItemListQry.java | 38 + .../api/biz/dto/qry/CostItemPageQry.java | 32 + .../api/biz/dto/qry/CostItemShowQry.java | 19 + .../turbo/api/biz/dto/qry/DealerListQry.java | 33 + .../turbo/api/biz/dto/qry/DealerPageQry.java | 35 + .../dto/qry/DealerPaymentAccountListQry.java | 22 + .../dto/qry/DealerPaymentAccountPageQry.java | 19 + .../dto/qry/DealerPaymentAccountShowQry.java | 22 + .../dto/qry/DealerRebateCustomerListQry.java | 22 + .../dto/qry/DealerRebateCustomerPageQry.java | 22 + .../dto/qry/DealerRebateCustomerShowQry.java | 22 + .../turbo/api/biz/dto/qry/DealerShowQry.java | 19 + .../biz/dto/qry/DealerWarehouseListQry.java | 25 + .../biz/dto/qry/DealerWarehousePageQry.java | 22 + .../biz/dto/qry/DealerWarehouseShowQry.java | 25 + .../turbo/api/biz/dto/qry/GiftBoxListQry.java | 19 + .../turbo/api/biz/dto/qry/GiftBoxPageQry.java | 24 + .../turbo/api/biz/dto/qry/GiftBoxShowQry.java | 19 + .../biz/dto/qry/PurchaseOrderCountQry.java | 23 + .../api/biz/dto/qry/PurchaseOrderListQry.java | 19 + .../api/biz/dto/qry/PurchaseOrderPageQry.java | 47 + .../api/biz/dto/qry/PurchaseOrderShowQry.java | 19 + .../api/biz/dto/qry/ShipOrderListQry.java | 19 + .../api/biz/dto/qry/ShipOrderPageQry.java | 19 + .../api/biz/dto/qry/ShipOrderShowQry.java | 22 + .../api/biz/dto/qry/SupplierListQry.java | 28 + .../api/biz/dto/qry/SupplierPageQry.java | 31 + .../api/biz/dto/qry/SupplierShowQry.java | 19 + .../erp/turbo/api/biz/dto/vo/BoxBrandVO.java | 68 ++ .../turbo/api/biz/dto/vo/BoxProductVO.java | 87 ++ .../biz/dto/vo/CompanyPaymentAccountVO.java | 106 +++ .../erp/turbo/api/biz/dto/vo/CompanyVO.java | 73 ++ .../erp/turbo/api/biz/dto/vo/CostItemVO.java | 75 ++ .../biz/dto/vo/DealerPaymentAccountVO.java | 91 ++ .../biz/dto/vo/DealerRebateCustomerVO.java | 61 ++ .../erp/turbo/api/biz/dto/vo/DealerVO.java | 117 +++ .../api/biz/dto/vo/DealerWarehouseVO.java | 103 +++ .../erp/turbo/api/biz/dto/vo/GiftBoxVO.java | 68 ++ .../turbo/api/biz/dto/vo/PurchaseOrderVO.java | 166 ++++ .../erp/turbo/api/biz/dto/vo/ShipOrderVO.java | 243 +++++ .../erp/turbo/api/biz/dto/vo/SupplierVO.java | 73 ++ .../api/facade/api/DeepSeekServiceI.java | 8 + .../turbo/api/facade/api/WxCpServiceI.java | 7 + .../turbo/api/facade/api/WxMaServiceI.java | 21 + .../turbo/api/facade/api/WxMpServiceI.java | 7 + .../turbo/api/facade/api/WxPayServiceI.java | 9 + .../facade/dto/cmd/VehicleExtractionCmd.java | 15 + .../api/facade/dto/cmd/WxCpNotifyCmd.java | 18 + .../api/facade/dto/cmd/WxMaCallbackCmd.java | 39 + .../api/facade/dto/cmd/WxMaPhoneBindCmd.java | 24 + .../api/facade/dto/cmd/WxMpCallbackCmd.java | 39 + .../api/facade/dto/cmd/WxPayCreateCmd.java | 30 + .../facade/dto/cmd/WxPayPaymentNotifyCmd.java | 34 + .../api/facade/dto/qry/WxMaOpenidQry.java | 29 + .../api/facade/dto/qry/WxMaPhoneQry.java | 24 + .../facade/dto/vo/VehicleExtractionVO.java | 28 + .../api/facade/dto/vo/WxMaOcrBankCardVO.java | 21 + .../api/facade/dto/vo/WxMaOcrIdCardVO.java | 24 + .../turbo/api/facade/dto/vo/WxMaOpenidVO.java | 21 + .../turbo/api/facade/dto/vo/WxPayJsApiVO.java | 30 + .../api/facade/exception/FacadeErrorCode.java | 26 + .../api/facade/exception/FacadeException.java | 32 + .../api/infra/api/AgreementServiceI.java | 30 + .../turbo/api/infra/api/CategoryServiceI.java | 26 + .../turbo/api/infra/api/ChannelServiceI.java | 21 + .../api/infra/api/DictionaryServiceI.java | 30 + .../turbo/api/infra/api/MaterialServiceI.java | 35 + .../turbo/api/infra/api/PlatformServiceI.java | 29 + .../turbo/api/infra/api/SettingServiceI.java | 16 + .../api/infra/api/WarehouseServiceI.java | 30 + .../api/infra/dto/cmd/AgreementCreateCmd.java | 50 ++ .../infra/dto/cmd/AgreementDestroyCmd.java | 19 + .../api/infra/dto/cmd/AgreementUpdateCmd.java | 18 + .../api/infra/dto/cmd/CategoryCreateCmd.java | 26 + .../api/infra/dto/cmd/CategoryDestroyCmd.java | 19 + .../api/infra/dto/cmd/CategoryUpdateCmd.java | 15 + .../api/infra/dto/cmd/ChannelCreateCmd.java | 49 + .../api/infra/dto/cmd/ChannelDestroyCmd.java | 18 + .../api/infra/dto/cmd/ChannelUpdateCmd.java | 17 + .../infra/dto/cmd/DictionaryCreateCmd.java | 53 ++ .../infra/dto/cmd/DictionaryDestroyCmd.java | 19 + .../infra/dto/cmd/DictionaryUpdateCmd.java | 18 + .../infra/dto/cmd/MaterialBatchAddCmd.java | 17 + .../api/infra/dto/cmd/MaterialCreateCmd.java | 25 + .../api/infra/dto/cmd/MaterialDestroyCmd.java | 15 + .../api/infra/dto/cmd/MaterialUpdateCmd.java | 14 + .../api/infra/dto/cmd/PlatformCreateCmd.java | 22 + .../api/infra/dto/cmd/PlatformDestroyCmd.java | 18 + .../api/infra/dto/cmd/PlatformUpdateCmd.java | 17 + .../api/infra/dto/cmd/SettingUpdateCmd.java | 26 + .../api/infra/dto/cmd/WarehouseCreateCmd.java | 55 ++ .../infra/dto/cmd/WarehouseDestroyCmd.java | 19 + .../api/infra/dto/cmd/WarehouseUpdateCmd.java | 18 + .../infra/dto/common/AliPayConfigValue.java | 50 ++ .../common/ChargingPilePurchaseConfig.java | 59 ++ .../dto/common/CustomMenuConfigValue.java | 53 ++ .../dto/common/CustomThemeConfigValue.java | 38 + .../api/infra/dto/common/SettingValue.java | 35 + .../dto/common/TencentMapConfigValue.java | 22 + .../dto/common/WxCpNotifyConfigValue.java | 22 + .../dto/common/WxMaCodeUploadConfigValue.java | 35 + .../api/infra/dto/common/WxMaConfigValue.java | 32 + .../common/WxMaMessagePushConfigValue.java | 32 + .../WxMaSubscribeMessageConfigValue.java | 19 + .../api/infra/dto/common/WxMpConfigValue.java | 30 + .../common/WxMpMessagePushConfigValue.java | 32 + .../infra/dto/common/WxPayConfigValue.java | 91 ++ .../infra/dto/enums/AgreementSceneEnum.java | 13 + .../api/infra/dto/enums/CategoryTypeEnum.java | 52 ++ .../api/infra/dto/enums/SettingKeyEnum.java | 74 ++ .../api/infra/dto/qry/AgreementListQry.java | 23 + .../api/infra/dto/qry/AgreementPageQry.java | 23 + .../api/infra/dto/qry/AgreementShowQry.java | 19 + .../api/infra/dto/qry/CategoryPageQry.java | 24 + .../api/infra/dto/qry/CategoryShowQry.java | 19 + .../api/infra/dto/qry/CategoryTreeQry.java | 24 + .../api/infra/dto/qry/ChannelPageQry.java | 18 + .../api/infra/dto/qry/ChannelShowQry.java | 18 + .../api/infra/dto/qry/DictionaryListQry.java | 22 + .../api/infra/dto/qry/DictionaryPageQry.java | 25 + .../api/infra/dto/qry/DictionaryShowQry.java | 19 + .../api/infra/dto/qry/MaterialPageQry.java | 25 + .../api/infra/dto/qry/MaterialShowQry.java | 15 + .../api/infra/dto/qry/PlatformListQry.java | 15 + .../api/infra/dto/qry/PlatformPageQry.java | 18 + .../api/infra/dto/qry/PlatformShowQry.java | 18 + .../api/infra/dto/qry/SettingShowQry.java | 20 + .../api/infra/dto/qry/WarehouseListQry.java | 19 + .../api/infra/dto/qry/WarehousePageQry.java | 22 + .../api/infra/dto/qry/WarehouseShowQry.java | 19 + .../turbo/api/infra/dto/vo/AgreementVO.java | 50 ++ .../turbo/api/infra/dto/vo/CategoryVO.java | 53 ++ .../erp/turbo/api/infra/dto/vo/ChannelVO.java | 76 ++ .../turbo/api/infra/dto/vo/DictionaryVO.java | 53 ++ .../turbo/api/infra/dto/vo/MaterialVO.java | 42 + .../turbo/api/infra/dto/vo/PlatformVO.java | 33 + .../erp/turbo/api/infra/dto/vo/SettingVO.java | 31 + .../turbo/api/infra/dto/vo/WarehouseVO.java | 55 ++ .../erp/turbo/api/rbac/api/MenuServiceI.java | 32 + .../api/rbac/api/PermissionServiceI.java | 27 + .../erp/turbo/api/rbac/api/RoleServiceI.java | 27 + .../turbo/api/rbac/api/UserMenuServiceI.java | 13 + .../api/rbac/api/UserPermissionServiceI.java | 11 + .../turbo/api/rbac/api/UserRoleServiceI.java | 16 + .../turbo/api/rbac/dto/cmd/MenuCreateCmd.java | 45 + .../api/rbac/dto/cmd/MenuDestroyCmd.java | 15 + .../turbo/api/rbac/dto/cmd/MenuDragCmd.java | 33 + .../turbo/api/rbac/dto/cmd/MenuUpdateCmd.java | 14 + .../api/rbac/dto/cmd/PermissionCreateCmd.java | 17 + .../rbac/dto/cmd/PermissionDestroyCmd.java | 15 + .../api/rbac/dto/cmd/PermissionUpdateCmd.java | 13 + .../turbo/api/rbac/dto/cmd/RoleCreateCmd.java | 33 + .../api/rbac/dto/cmd/RoleDestroyCmd.java | 15 + .../turbo/api/rbac/dto/cmd/RoleUpdateCmd.java | 15 + .../api/rbac/dto/cmd/UserRoleCreateCmd.java | 19 + .../api/rbac/dto/cmd/UserRoleUpdateCmd.java | 25 + .../dto/constants/PermissionConstant.java | 54 ++ .../api/rbac/dto/constants/RoleConstant.java | 22 + .../api/rbac/dto/enums/MenuTypeEnum.java | 21 + .../turbo/api/rbac/dto/qry/MenuListQry.java | 21 + .../turbo/api/rbac/dto/qry/MenuShowQry.java | 15 + .../turbo/api/rbac/dto/qry/MenuTreeQry.java | 21 + .../api/rbac/dto/qry/PermissionListQry.java | 12 + .../api/rbac/dto/qry/PermissionPageQry.java | 17 + .../api/rbac/dto/qry/PermissionShowQry.java | 14 + .../turbo/api/rbac/dto/qry/RoleListQry.java | 32 + .../api/rbac/dto/qry/RoleMenuTreeQry.java | 23 + .../turbo/api/rbac/dto/qry/RolePageQry.java | 27 + .../turbo/api/rbac/dto/qry/RoleShowQry.java | 14 + .../api/rbac/dto/qry/UserPermissionQry.java | 23 + .../api/rbac/dto/qry/UserRoleListQry.java | 19 + .../erp/turbo/api/rbac/dto/vo/MenuVO.java | 91 ++ .../turbo/api/rbac/dto/vo/PermissionVO.java | 21 + .../erp/turbo/api/rbac/dto/vo/RoleVO.java | 72 ++ .../erp/turbo/api/rbac/dto/vo/UserRoleVO.java | 27 + .../api/rbac/exception/RbacErrorCode.java | 37 + .../api/rbac/exception/RbacException.java | 32 + .../erp/turbo/api/user/api/AdminServiceI.java | 11 + .../turbo/api/user/api/EmployeeServiceI.java | 34 + .../turbo/api/user/api/UserAuthServiceI.java | 22 + .../erp/turbo/api/user/api/UserServiceI.java | 34 + .../api/user/dto/cmd/AdminCreateCmd.java | 24 + .../api/user/dto/cmd/EmployeeCreateCmd.java | 65 ++ .../api/user/dto/cmd/EmployeeDestroyCmd.java | 18 + .../api/user/dto/cmd/EmployeeDisableCmd.java | 20 + .../user/dto/cmd/EmployeeRestPasswordCmd.java | 25 + .../user/dto/cmd/EmployeeUpdateAvatarCmd.java | 21 + .../api/user/dto/cmd/EmployeeUpdateCmd.java | 46 + .../turbo/api/user/dto/cmd/OpenSafeCmd.java | 24 + .../api/user/dto/cmd/UpdatePasswordCmd.java | 34 + .../api/user/dto/cmd/UserAuthCreateCmd.java | 47 + .../turbo/api/user/dto/cmd/UserCreateCmd.java | 44 + .../api/user/dto/cmd/UserDestroyCmd.java | 18 + .../api/user/dto/cmd/UserDisableCmd.java | 19 + .../turbo/api/user/dto/cmd/UserEnableCmd.java | 19 + .../turbo/api/user/dto/cmd/UserUpdateCmd.java | 40 + .../api/user/dto/cmd/UserUpdateWxCmd.java | 33 + .../api/user/dto/enums/AdminTypeEnum.java | 20 + .../api/user/dto/enums/PlatformTypeEnum.java | 22 + .../api/user/dto/enums/SocialTypeEnum.java | 28 + .../api/user/dto/enums/SourceChannelEnum.java | 22 + .../api/user/dto/enums/SourceWayEnum.java | 22 + .../api/user/dto/enums/UserStateEnum.java | 21 + .../turbo/api/user/dto/qry/AdminShowQry.java | 20 + .../erp/turbo/api/user/dto/qry/Captcha.java | 45 + .../turbo/api/user/dto/qry/CaptchaQry.java | 32 + .../api/user/dto/qry/EmployeeListQry.java | 18 + .../api/user/dto/qry/EmployeePageQry.java | 30 + .../api/user/dto/qry/EmployeeShowQry.java | 21 + .../api/user/dto/qry/PasswordLoginQry.java | 35 + .../api/user/dto/qry/UserAuthShowQry.java | 22 + .../turbo/api/user/dto/qry/UserListQry.java | 22 + .../turbo/api/user/dto/qry/UserPageQry.java | 77 ++ .../turbo/api/user/dto/qry/UserShowQry.java | 17 + .../erp/turbo/api/user/dto/vo/AdminVO.java | 34 + .../erp/turbo/api/user/dto/vo/EmployeeVO.java | 93 ++ .../erp/turbo/api/user/dto/vo/OssTokenVO.java | 21 + .../erp/turbo/api/user/dto/vo/UserAuthVO.java | 50 ++ .../erp/turbo/api/user/dto/vo/UserVO.java | 126 +++ .../api/user/exception/UserErrorCode.java | 117 +++ .../api/user/exception/UserException.java | 32 + .../resources/security/serialize.allowlist | 3 + erp-turbo-common/erp-turbo-apm/pom.xml | 41 + erp-turbo-common/erp-turbo-base/pom.xml | 85 ++ .../erp/turbo/base/annotation/Decrypt.java | 11 + .../erp/turbo/base/config/AopConfig.java | 13 + .../turbo/base/config/BaseConfiguration.java | 19 + .../turbo/base/constant/ProfileConstant.java | 9 + .../xunhong/erp/turbo/base/dto/Command.java | 22 + .../xunhong/erp/turbo/base/dto/PageDTO.java | 43 + .../xunhong/erp/turbo/base/dto/PageQuery.java | 28 + .../com/xunhong/erp/turbo/base/dto/Query.java | 28 + .../com/xunhong/erp/turbo/base/dto/User.java | 80 ++ .../erp/turbo/base/dto/UserSession.java | 41 + .../turbo/base/exception/BizErrorCode.java | 70 ++ .../turbo/base/exception/BizException.java | 44 + .../erp/turbo/base/exception/ErrorCode.java | 23 + .../base/exception/RemoteCallException.java | 28 + .../turbo/base/exception/RepoErrorCode.java | 42 + .../turbo/base/exception/SystemException.java | 44 + .../erp/turbo/base/pool/ThreadPoolUtils.java | 21 + .../base/statemachine/BaseStateMachine.java | 29 + .../turbo/base/statemachine/StateMachine.java | 17 + .../erp/turbo/base/utils/BeanNameUtils.java | 24 + .../erp/turbo/base/utils/BeanValidator.java | 33 + .../erp/turbo/base/utils/HttpUtils.java | 276 ++++++ .../erp/turbo/base/utils/MoneyUtils.java | 33 + .../turbo/base/utils/RemoteCallWrapper.java | 143 +++ .../erp/turbo/base/utils/RestClientUtils.java | 81 ++ .../turbo/base/utils/SpringContextHolder.java | 30 + .../erp/turbo/base/utils/UrlUtils.java | 54 ++ ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../src/main/resources/base.yml | 41 + erp-turbo-common/erp-turbo-cache/pom.xml | 60 ++ .../cache/config/CacheConfiguration.java | 14 + .../turbo/cache/constant/CacheConstant.java | 12 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../src/main/resources/cache.yml | 47 + erp-turbo-common/erp-turbo-captcha/pom.xml | 29 + .../captcha/config/CaptchaConfiguration.java | 124 +++ .../service/CaptchaCacheServiceRedisImpl.java | 56 ++ .../META-INF/captcha/messages.properties | 13 + .../captcha/messages_en_US.properties | 13 + ...m.anji.captcha.service.CaptchaCacheService | 1 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../src/main/resources/captcha.properties | 59 ++ erp-turbo-common/erp-turbo-config/pom.xml | 52 ++ .../src/main/resources/config.yml | 20 + erp-turbo-common/erp-turbo-datasource/pom.xml | 97 ++ .../config/DatasourceConfiguration.java | 50 ++ .../datasource/domain/entity/BaseDO.java | 39 + .../handler/AesEncryptTypeHandler.java | 63 ++ .../handler/GeometryTypeWKBHandler.java | 86 ++ .../handler/GeometryTypeWKTHandler.java | 66 ++ .../handler/MyMetaObjectHandler.java | 26 + .../handler/MybatisExceptionHandler.java | 27 + .../interceptor/EmptyListInterceptor.java | 85 ++ .../erp/turbo/datasource/util/AesUtil.java | 66 ++ ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../src/main/resources/datasource.yml | 53 ++ erp-turbo-common/erp-turbo-dify/pom.xml | 36 + .../xunhong/erp/turbo/dify/ChatClient.java | 159 ++++ .../erp/turbo/dify/CompletionClient.java | 49 + .../xunhong/erp/turbo/dify/DifyClient.java | 148 ++++ .../erp/turbo/dify/DifyClientException.java | 16 + .../erp/turbo/dify/DifyRequestException.java | 16 + .../erp/turbo/dify/WorkflowClient.java | 34 + .../dify/constants/DifyServerConstants.java | 12 + .../xunhong/erp/turbo/dify/dto/DataDTO.java | 40 + .../xunhong/erp/turbo/dify/dto/OutputDTO.java | 14 + .../erp/turbo/dify/dto/ResponseDTO.java | 4 + .../turbo/dify/dto/WorkflowResponseDTO.java | 19 + .../erp/turbo/dify/http/DifyRoute.java | 14 + erp-turbo-common/erp-turbo-es/pom.xml | 42 + .../erp/turbo/es/config/EsConfiguration.java | 17 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../erp-turbo-es/src/main/resources/es.yml | 11 + erp-turbo-common/erp-turbo-file/pom.xml | 57 ++ .../xunhong/erp/turbo/file/FileService.java | 34 + .../erp/turbo/file/MockFileServiceImpl.java | 35 + .../erp/turbo/file/OssServiceImpl.java | 154 ++++ .../turbo/file/config/OssConfiguration.java | 44 + .../erp/turbo/file/config/OssProperties.java | 35 + .../exception/FileErrorCode.java | 35 + .../exception/FileException.java | 32 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + erp-turbo-common/erp-turbo-job/pom.xml | 29 + .../turbo/job/config/XxlJobConfiguration.java | 52 ++ .../turbo/job/config/XxlJobProperties.java | 36 + .../erp/turbo/job/handler/JobGroupDto.java | 31 + .../erp/turbo/job/handler/JobGroupRunner.java | 49 + .../erp/turbo/job/handler/XxlJobConstant.java | 88 ++ .../erp/turbo/job/handler/XxlJobHandler.java | 163 ++++ ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../erp-turbo-job/src/main/resources/job.yml | 7 + erp-turbo-common/erp-turbo-limiter/pom.xml | 68 ++ .../erp/turbo/limiter/RateLimiter.java | 19 + .../limiter/SlidingWindowRateLimiter.java | 32 + .../RateLimiterConfiguration.java | 18 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../src/main/resources/limiter.yml | 18 + erp-turbo-common/erp-turbo-lock/pom.xml | 29 + .../erp/turbo/lock/DistributeLock.java | 57 ++ .../erp/turbo/lock/DistributeLockAspect.java | 114 +++ .../turbo/lock/DistributeLockConstant.java | 17 + .../turbo/lock/DistributeLockException.java | 28 + .../config/DistributeLockConfiguration.java | 20 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + erp-turbo-common/erp-turbo-logback/pom.xml | 31 + .../src/main/resources/logback-spring.xml | 100 +++ .../src/main/resources/logging.yml | 4 + erp-turbo-common/erp-turbo-mq/pom.xml | 31 + .../stream/config/StreamConfiguration.java | 17 + .../erp/turbo/stream/param/Message.java | 22 + .../erp/turbo/stream/param/MessageBody.java | 22 + .../turbo/stream/producer/StreamProducer.java | 46 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../src/main/resources/stream.yml | 6 + erp-turbo-common/erp-turbo-quartz/pom.xml | 32 + .../src/main/resources/quartz.yml | 0 erp-turbo-common/erp-turbo-rpc/pom.xml | 46 + .../turbo/rpc/config/RpcConfiguration.java | 23 + .../xunhong/erp/turbo/rpc/facade/Facade.java | 7 + .../erp/turbo/rpc/facade/FacadeAspect.java | 183 ++++ .../turbo/rpc/filter/DubboConsumerFilter.java | 29 + .../turbo/rpc/filter/DubboProviderFilter.java | 29 + .../dubbo/org.apache.dubbo.rpc.Filter | 2 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../erp-turbo-rpc/src/main/resources/rpc.yml | 19 + .../resources/security/serialize.allowlist | 2 + erp-turbo-common/erp-turbo-sa-token/pom.xml | 79 ++ .../erp/turbo/satoken/SaTokenConfigure.java | 15 + .../satoken/SaTokenExceptionHandler.java | 44 + .../erp/turbo/satoken/StpInterfaceImpl.java | 47 + .../src/main/resources/sa-token.yml | 37 + erp-turbo-common/erp-turbo-swagger/pom.xml | 42 + erp-turbo-common/erp-turbo-web/pom.xml | 58 ++ .../turbo/web/annotation/CacheControl.java | 19 + .../turbo/web/annotation/RepeatSubmit.java | 21 + .../turbo/web/aspect/MerchantIdAspect.java | 73 ++ .../web/config/ApplicationConfigurer.java | 160 ++++ .../erp/turbo/web/config/TomcatConfig.java | 20 + .../erp/turbo/web/enums/CachePolicy.java | 24 + .../web/handler/DecryptControllerAdvice.java | 50 ++ .../web/handler/GlobalExceptionHandler.java | 151 ++++ .../handler/SensitiveResponseBodyAdvice.java | 76 ++ .../CacheControlHandlerInterceptor.java | 98 ++ .../interceptor/RepeatSubmitInterceptor.java | 94 ++ .../web/interceptor/UserInterceptor.java | 69 ++ .../web/service/OperationLogGetService.java | 18 + .../xunhong/erp/turbo/web/utils/IPUtils.java | 50 ++ erp-turbo-common/erp-turbo-weixin/pom.xml | 55 ++ .../handler/WeixinExceptionHandler.java | 23 + erp-turbo-common/pom.xml | 125 +++ erp-turbo-schedule/pom.xml | 141 +++ .../schedule/ErpTurboScheduleApplication.java | 17 + .../turbo/schedule/config/QuartzConfig.java | 7 + .../src/main/resources/application.yml | 10 + .../src/main/resources/bootstrap.yml | 7 + erp-turbo-svc/.gitignore | 5 + erp-turbo-svc/pom.xml | 259 ++++++ layers/layers.xml | 43 + mvnw | 310 +++++++ mvnw.cmd | 182 ++++ output.pdf | Bin 0 -> 3865 bytes pom.xml | 426 +++++++++ proguard.cfg | 43 + webpage.pdf | 0 1077 files changed, 45294 insertions(+) create mode 100644 .coding/settings.xml create mode 100644 .dockerignore create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .lingma/rules/design.md create mode 100644 .mvn/wrapper/MavenWrapperDownloader.java create mode 100644 .mvn/wrapper/maven-wrapper.jar create mode 100644 .mvn/wrapper/maven-wrapper.properties create mode 100644 build.sh create mode 100644 docker/Dockerfile create mode 100644 docker/entrypoint.sh create mode 100644 docker/xjar/Dockerfile create mode 100644 docker/xjar/entrypoint.sh create mode 100644 erp-turbo-admin/pom.xml create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/ErpTurboAdminApplication.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/AgreementController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/BoxBrandController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/BoxProductController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/ChannelController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/CompanyController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/CompanyPaymentAccountController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/CostItemController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DealerController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DealerPaymentAccountController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DealerRebateCustomerController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DealerWarehouseController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DictionaryController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/EmployeeController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/ExtractionController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/GiftBoxController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/MaterialCategoryController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/MaterialController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/MenuController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/OcrController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/PermissionController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/PlatformController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/PurchaseOrderController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/RoleController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/SettingController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/ShipOrderController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/SupplierController.java create mode 100644 erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/UserController.java create mode 100644 erp-turbo-admin/src/main/resources/application.yml create mode 100644 erp-turbo-admin/src/main/resources/bootstrap.yml create mode 100644 erp-turbo-admin/src/main/resources/i18n/messages.properties create mode 100644 erp-turbo-admin/src/main/resources/i18n/messages_en.properties create mode 100644 erp-turbo-admin/src/main/resources/i18n/messages_zh_CN.properties create mode 100644 erp-turbo-auth/pom.xml create mode 100644 erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/ErpTurboAuthApplication.java create mode 100644 erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/controller/CaptchaController.java create mode 100644 erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/controller/ChannelController.java create mode 100644 erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/controller/UserAuthController.java create mode 100644 erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/controller/UserController.java create mode 100644 erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/exception/UserAuthErrorCode.java create mode 100644 erp-turbo-auth/src/main/resources/application.yml create mode 100644 erp-turbo-auth/src/main/resources/bootstrap.yml create mode 100644 erp-turbo-auth/src/main/resources/i18n/messages.properties create mode 100644 erp-turbo-auth/src/main/resources/i18n/messages_en.properties create mode 100644 erp-turbo-auth/src/main/resources/i18n/messages_zh_CN.properties create mode 100644 erp-turbo-business/erp-turbo-biz/pom.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/ErpTurboBizApplication.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/BoxBrandAssembler.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/BoxProductAssembler.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/CompanyAssembler.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/CompanyPaymentAccountAssembler.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/CostItemAssembler.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/DealerAssembler.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/DealerPaymentAccountAssembler.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/DealerRebateCustomerAssembler.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/DealerWarehouseAssembler.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/GiftBoxAssembler.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/PurchaseOrderAssembler.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/ShipOrderAssembler.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/SupplierAssembler.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxBrandCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxBrandDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxBrandUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxProductCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxProductDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxProductUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyPaymentAccountCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyPaymentAccountDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyPaymentAccountUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CostItemCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CostItemDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CostItemUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerPaymentAccountCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerPaymentAccountDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerPaymentAccountUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerRebateCustomerCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerRebateCustomerDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerRebateCustomerUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerWarehouseCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerWarehouseDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerWarehouseUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/GiftBoxCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/GiftBoxDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/GiftBoxUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderApproveCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderFinalApproveCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderRejectApproveCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderRejectFinalCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderSubmitReviewCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderWithdrawReviewCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/ShipOrderCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/ShipOrderDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/ShipOrderGenerateDocumentCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/ShipOrderUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/SupplierCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/SupplierDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/SupplierUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxBrandListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxBrandPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxBrandShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxProductListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxProductPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxProductShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyPaymentAccountListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyPaymentAccountPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyPaymentAccountShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CostItemListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CostItemPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CostItemShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerPaymentAccountListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerPaymentAccountPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerPaymentAccountShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerRebateCustomerListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerRebateCustomerPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerRebateCustomerShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerWarehouseListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerWarehousePageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerWarehouseShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/GiftBoxListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/GiftBoxPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/GiftBoxShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/PurchaseOrderCountQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/PurchaseOrderListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/PurchaseOrderPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/PurchaseOrderShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/ShipOrderListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/ShipOrderPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/ShipOrderShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/SupplierListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/SupplierPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/SupplierShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/BoxBrandServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/BoxProductServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/CompanyPaymentAccountServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/CompanyServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/CostItemServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/DealerPaymentAccountServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/DealerRebateCustomerServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/DealerServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/DealerWarehouseServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/GiftBoxServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/PurchaseOrderServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/ShipOrderServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/SupplierServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/BoxBrand.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/BoxProduct.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/Company.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/CompanyPaymentAccount.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/CostItem.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/Dealer.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/DealerPaymentAccount.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/DealerRebateCustomer.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/DealerWarehouse.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/GiftBox.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/PurchaseOrder.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/ShipOrder.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/Supplier.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/BoxBrandGateway.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/BoxProductGateway.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/CompanyGateway.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/CompanyPaymentAccountGateway.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/CostItemGateway.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/DealerGateway.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/DealerPaymentAccountGateway.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/DealerRebateCustomerGateway.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/DealerWarehouseGateway.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/GiftBoxGateway.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/PurchaseOrderGateway.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/ShipOrderGateway.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/SupplierGateway.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/BoxBrandConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/BoxProductConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/CompanyConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/CompanyPaymentAccountConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/CostItemConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/DealerConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/DealerPaymentAccountConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/DealerRebateCustomerConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/DealerWarehouseConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/GiftBoxConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderCompanyConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderCostConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderDealerConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderPackageConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderRebateConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderSupplierConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderVehicleConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/PurchaseOrderConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/ShipOrderConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/SupplierConvert.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/BoxBrandDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/BoxProductDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/CompanyDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/CompanyPaymentAccountDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/CostItemDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/DealerDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/DealerPaymentAccountDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/DealerRebateCustomerDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/DealerWarehouseDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/GiftBoxDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderCompanyDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderCostDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderDealerDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderPackageDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderRebateDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderSupplierDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderVehicleDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/PurchaseOrderDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/ShipOrderDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/ShipOrderItemDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/ShipOrderPackageDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/SupplierDO.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/BoxBrandGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/BoxProductGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/CompanyGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/CompanyPaymentAccountGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/CostItemGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/DealerGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/DealerPaymentAccountGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/DealerRebateCustomerGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/DealerWarehouseGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/GiftBoxGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/PurchaseOrderGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/ShipOrderGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/SupplierGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/BoxBrandMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/BoxProductMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/CompanyMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/CompanyPaymentAccountMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/CostItemMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/DealerMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/DealerPaymentAccountMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/DealerRebateCustomerMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/DealerWarehouseMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/GiftBoxMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderCompanyMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderCostMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderDealerMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderPackageMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderRebateMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderSupplierMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderVehicleMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/PurchaseOrderMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/ShipOrderItemMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/ShipOrderMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/ShipOrderPackageMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/SupplierMapper.java create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/application.yml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/bootstrap.yml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/i18n/messages.properties create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/i18n/messages_en.properties create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/i18n/messages_zh_CN.properties create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/BoxBrandMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/BoxProductMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/CompanyMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/CompanyPaymentAccountMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/CostItemMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/DealerMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/DealerPaymentAccountMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/DealerRebateCustomerMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/DealerWarehouseMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/GiftBoxMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderCompanyMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderCostMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderDealerMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderPackageMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderRebateMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderSupplierMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderVehicleMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/PurchaseOrderMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/ShipOrderItemMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/ShipOrderMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/ShipOrderPackageMapper.xml create mode 100644 erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/SupplierMapper.xml create mode 100644 erp-turbo-business/erp-turbo-facade/pom.xml create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/ErpTurboFacadeApplication.java create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/adapter/web/controller/WxMaController.java create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/adapter/web/controller/WxMpController.java create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/VehicleExtractionCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMaCallbackCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMaNotifyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMaOcrBankCardCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMaOcrIdCardCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMpCallbackCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxPhoneBindCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/common/WxCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/handler/SubscribeHandler.java create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/handler/UnsubscribeHandler.java create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/query/WxOpenidQryExe.java create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/service/DeepSeekServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/service/WxCpServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/service/WxMaServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/service/WxMpServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/resources/application.yml create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/resources/bootstrap.yml create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/resources/i18n/messages.properties create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/resources/i18n/messages_en.properties create mode 100644 erp-turbo-business/erp-turbo-facade/src/main/resources/i18n/messages_zh_CN.properties create mode 100644 erp-turbo-business/erp-turbo-infra/pom.xml create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/ErpTurboInfraApplication.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/AgreementAssembler.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/CategoryAssembler.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/ChannelAssembler.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/DictionaryAssembler.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/MaterialAssembler.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/PlatformAssembler.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/SettingAssembler.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/AgreementCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/AgreementDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/AgreementUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/CategoryCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/CategoryDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/CategoryUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/ChannelCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/ChannelDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/ChannelUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/DictionaryCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/DictionaryDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/DictionaryUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/MaterialBatchAddCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/MaterialCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/MaterialDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/MaterialUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/PlatformCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/PlatformDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/PlatformUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/SettingUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/AgreementListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/AgreementPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/AgreementShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/CategoryListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/CategoryPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/CategoryShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/ChannelPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/ChannelShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/DictionaryListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/DictionaryPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/DictionaryShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/MaterialPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/MaterialQryExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/MaterialShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/OssTokenQryExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/PlatformListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/PlatformPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/PlatformShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/SettingShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/AgreementServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/CategoryServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/ChannelServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/DictionaryServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/MaterialServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/PlatformServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/SettingServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Agreement.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Category.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Channel.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Credentials.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Dictionary.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Material.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Platform.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Setting.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/AgreementGateway.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/CategoryGateway.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/ChannelGateway.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/DictionaryGateway.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/MaterialGateway.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/OssGateway.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/PlatformGateway.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/SettingGateway.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/AgreementConvert.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/CategoryConvert.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/ChannelConvert.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/DictionaryConvert.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/MaterialConvert.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/PlatformConvert.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/SettingConvert.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/AgreementDO.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/CategoryDO.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/ChannelDO.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/DictionaryDO.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/MaterialDO.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/PlatformDO.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/SettingDO.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/AgreementGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/CategoryGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/ChannelGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/DictionaryGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/MaterialGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/OssConvert.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/OssGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/PlatformGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/SettingGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/AgreementMapper.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/CategoryMapper.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/ChannelMapper.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/DictionaryMapper.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/MaterialMapper.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/PlatformMapper.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/SettingMapper.java create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/resources/application.yml create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/resources/bootstrap.yml create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/resources/i18n/messages.properties create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/resources/i18n/messages_en.properties create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/resources/i18n/messages_zh_CN.properties create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/AgreementMapper.xml create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/CategoryMapper.xml create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/ChannelMapper.xml create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/DictionaryMapper.xml create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/MaterialMapper.xml create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/PlatformMapper.xml create mode 100644 erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/SettingMapper.xml create mode 100644 erp-turbo-business/erp-turbo-rbac/pom.xml create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/ErpTurboRbacApplication.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/assembler/MenuAssembler.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/assembler/PermissionAssembler.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/assembler/RoleAssembler.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/assembler/UserRoleAssembler.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/MenuCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/MenuDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/MenuUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/PermissionCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/PermissionDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/PermissionUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/RoleCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/RoleDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/RoleUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/UserRoleCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/UserRoleListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/UserRoleUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/MenuDragCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/MenuListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/MenuShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/MenuTreeQryExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/PermissionListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/PermissionPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/PermissionShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/RoleListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/RolePageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/RoleShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/UserMenuQryExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/UserPermissionQryExe.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/MenuServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/PermissionServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/RoleServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/UserMenuServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/UserPermissionServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/UserRoleServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/Menu.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/Permission.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/Role.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/RoleMenu.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/RolePermission.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/UserRole.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/MenuGateway.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/PermissionGateway.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/RoleGateway.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/RoleMenuGateway.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/UserRoleGateway.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/MenuConvert.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/PermissionConvert.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/RoleConvert.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/RoleMenuConvert.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/UserRoleConvert.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/MenuDO.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/PermissionDO.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/RoleDO.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/RoleMenuDO.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/RolePermissionDO.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/UserRoleDO.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/MenuGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/PermissionGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/RoleGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/RoleMenuGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/UserRoleGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/MenuMapper.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/PermissionMapper.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/RoleMapper.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/RoleMenuMapper.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/RolePermissionMapper.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/UserRoleMapper.java create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/resources/application.yml create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/resources/bootstrap.yml create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/resources/i18n/messages.properties create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/resources/i18n/messages_en.properties create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/resources/i18n/messages_zh_CN.properties create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/MenuMapper.xml create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/PermissionMapper.xml create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/RoleMapper.xml create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/RoleMenuMapper.xml create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/RolePermissionMapper.xml create mode 100644 erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/UserRoleMapper.xml create mode 100644 erp-turbo-business/erp-turbo-user/pom.xml create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/ErpTurboUserApplication.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/assembler/AdminAssembler.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/assembler/EmployeeAssembler.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/assembler/UserAssembler.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/assembler/UserAuthAssembler.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeDisableCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeRestPasswordCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeUpdateAvatarCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UpdatePasswordCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserCreateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserDestroyCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserDisableCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserEnableCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserUnsubscribeCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserUpdateCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/AdminShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/EmployeeListQryExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/EmployeePageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/EmployeeShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/OpenSafeCmdExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/PasswordLoginQryExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/UserAuthShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/UserPageQryExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/UserShowQryExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/WxMaCodeLoginQryExe.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/service/AdminServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/service/EmployeeServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/service/UserAuthServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/service/UserServiceImpl.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/entity/Admin.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/entity/Employee.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/entity/User.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/entity/UserAuth.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/gateway/AdminGateway.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/gateway/EmployeeGateway.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/gateway/UserAuthGateway.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/gateway/UserGateway.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/convert/AdminConvert.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/convert/EmployeeConvert.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/convert/UserAuthConvert.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/convert/UserConvert.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/entity/AdminDO.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/entity/EmployeeDO.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/entity/UserAuthDO.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/entity/UserDO.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/gateway/AdminGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/gateway/EmployeeGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/gateway/UserAuthGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/gateway/UserGatewayImpl.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/mapper/AdminMapper.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/mapper/EmployeeMapper.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/mapper/UserAuthMapper.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/mapper/UserMapper.java create mode 100644 erp-turbo-business/erp-turbo-user/src/main/resources/application.yml create mode 100644 erp-turbo-business/erp-turbo-user/src/main/resources/bootstrap.yml create mode 100644 erp-turbo-business/erp-turbo-user/src/main/resources/i18n/messages.properties create mode 100644 erp-turbo-business/erp-turbo-user/src/main/resources/i18n/messages_en.properties create mode 100644 erp-turbo-business/erp-turbo-user/src/main/resources/i18n/messages_zh_CN.properties create mode 100644 erp-turbo-business/erp-turbo-user/src/main/resources/mapper/AdminMapper.xml create mode 100644 erp-turbo-business/erp-turbo-user/src/main/resources/mapper/EmployeeMapper.xml create mode 100644 erp-turbo-business/erp-turbo-user/src/main/resources/mapper/UserAuthMapper.xml create mode 100644 erp-turbo-business/erp-turbo-user/src/main/resources/mapper/UserMapper.xml create mode 100644 erp-turbo-business/pom.xml create mode 100644 erp-turbo-common/erp-turbo-ai/pom.xml create mode 100644 erp-turbo-common/erp-turbo-ai/src/main/java/com/xunhong/erp/turbo/ai/config/DeepSeekAutoConfiguration.java create mode 100644 erp-turbo-common/erp-turbo-ai/src/main/java/com/xunhong/erp/turbo/ai/config/DeepSeekProperties.java create mode 100644 erp-turbo-common/erp-turbo-ai/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 erp-turbo-common/erp-turbo-ai/src/main/resources/openapi.yml create mode 100644 erp-turbo-common/erp-turbo-api/pom.xml create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/BoxBrandServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/BoxProductServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/CompanyPaymentAccountServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/CompanyServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/CostItemServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/DealerPaymentAccountServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/DealerRebateCustomerServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/DealerServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/DealerWarehouseServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/GiftBoxServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/PurchaseOrderServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/ShipOrderServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/SupplierServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxBrandCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxBrandDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxBrandUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxProductCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxProductDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxProductUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyPaymentAccountCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyPaymentAccountDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyPaymentAccountUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CostItemCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CostItemDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CostItemUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerPaymentAccountCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerPaymentAccountDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerPaymentAccountUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerRebateCustomerCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerRebateCustomerDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerRebateCustomerUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerWarehouseCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerWarehouseDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerWarehouseUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/GiftBoxCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/GiftBoxDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/GiftBoxUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderApproveCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderFinalApproveCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderRejectApproveCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderRejectFinalCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderSubmitReviewCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderWithdrawReviewCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/ShipOrderCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/ShipOrderDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/ShipOrderGenerateDocumentCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/ShipOrderUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/SupplierCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/SupplierDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/SupplierUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderCompany.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderCost.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderDealer.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderPackage.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderRebate.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderSupplier.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderVehicle.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/ShipOrderItem.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/ShipOrderPackage.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/BoxBrandTypeEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/BoxProductSpecTypeEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/CompanyPaymentAccountCategoryEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/CompanyPaymentAccountTypeEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/CompanyPaymentPublicAccountTypeEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/CostItemCostTypeEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/DealerTypeEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/OrderCostPayerTypeEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/OrderPackageBoxTypeEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/OrderRebateCalcMethodEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/OrderVehiclePriceTypeEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/PurchaseOrderPricingMethodEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/PurchaseOrderStateEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/ShipOrderStateEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxBrandListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxBrandPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxBrandShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxProductListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxProductPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxProductShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyPaymentAccountListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyPaymentAccountPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyPaymentAccountShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CostItemListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CostItemPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CostItemShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerPaymentAccountListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerPaymentAccountPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerPaymentAccountShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerRebateCustomerListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerRebateCustomerPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerRebateCustomerShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerWarehouseListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerWarehousePageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerWarehouseShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/GiftBoxListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/GiftBoxPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/GiftBoxShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/PurchaseOrderCountQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/PurchaseOrderListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/PurchaseOrderPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/PurchaseOrderShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/ShipOrderListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/ShipOrderPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/ShipOrderShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/SupplierListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/SupplierPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/SupplierShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/BoxBrandVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/BoxProductVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/CompanyPaymentAccountVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/CompanyVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/CostItemVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/DealerPaymentAccountVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/DealerRebateCustomerVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/DealerVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/DealerWarehouseVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/GiftBoxVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/PurchaseOrderVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/ShipOrderVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/SupplierVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/DeepSeekServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/WxCpServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/WxMaServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/WxMpServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/WxPayServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/VehicleExtractionCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxCpNotifyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxMaCallbackCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxMaPhoneBindCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxMpCallbackCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxPayCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxPayPaymentNotifyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/qry/WxMaOpenidQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/qry/WxMaPhoneQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/VehicleExtractionVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/WxMaOcrBankCardVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/WxMaOcrIdCardVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/WxMaOpenidVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/WxPayJsApiVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/exception/FacadeErrorCode.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/exception/FacadeException.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/AgreementServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/CategoryServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/ChannelServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/DictionaryServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/MaterialServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/PlatformServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/SettingServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/WarehouseServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/AgreementCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/AgreementDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/AgreementUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/CategoryCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/CategoryDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/CategoryUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/ChannelCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/ChannelDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/ChannelUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/DictionaryCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/DictionaryDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/DictionaryUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/MaterialBatchAddCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/MaterialCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/MaterialDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/MaterialUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/PlatformCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/PlatformDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/PlatformUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/SettingUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/WarehouseCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/WarehouseDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/WarehouseUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/AliPayConfigValue.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/ChargingPilePurchaseConfig.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/CustomMenuConfigValue.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/CustomThemeConfigValue.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/SettingValue.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/TencentMapConfigValue.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxCpNotifyConfigValue.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMaCodeUploadConfigValue.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMaConfigValue.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMaMessagePushConfigValue.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMaSubscribeMessageConfigValue.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMpConfigValue.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMpMessagePushConfigValue.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxPayConfigValue.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/enums/AgreementSceneEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/enums/CategoryTypeEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/enums/SettingKeyEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/AgreementListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/AgreementPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/AgreementShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/CategoryPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/CategoryShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/CategoryTreeQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/ChannelPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/ChannelShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/DictionaryListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/DictionaryPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/DictionaryShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/MaterialPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/MaterialShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/PlatformListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/PlatformPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/PlatformShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/SettingShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/WarehouseListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/WarehousePageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/WarehouseShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/AgreementVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/CategoryVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/ChannelVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/DictionaryVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/MaterialVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/PlatformVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/SettingVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/WarehouseVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/MenuServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/PermissionServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/RoleServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/UserMenuServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/UserPermissionServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/UserRoleServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/MenuCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/MenuDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/MenuDragCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/MenuUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/PermissionCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/PermissionDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/PermissionUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/RoleCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/RoleDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/RoleUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/UserRoleCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/UserRoleUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/constants/PermissionConstant.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/constants/RoleConstant.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/enums/MenuTypeEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/MenuListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/MenuShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/MenuTreeQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/PermissionListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/PermissionPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/PermissionShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/RoleListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/RoleMenuTreeQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/RolePageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/RoleShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/UserPermissionQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/UserRoleListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/vo/MenuVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/vo/PermissionVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/vo/RoleVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/vo/UserRoleVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/exception/RbacErrorCode.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/exception/RbacException.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/api/AdminServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/api/EmployeeServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/api/UserAuthServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/api/UserServiceI.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/AdminCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeDisableCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeRestPasswordCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeUpdateAvatarCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/OpenSafeCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UpdatePasswordCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserAuthCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserCreateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserDestroyCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserDisableCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserEnableCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserUpdateCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserUpdateWxCmd.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/AdminTypeEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/PlatformTypeEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/SocialTypeEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/SourceChannelEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/SourceWayEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/UserStateEnum.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/AdminShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/Captcha.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/CaptchaQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/EmployeeListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/EmployeePageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/EmployeeShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/PasswordLoginQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/UserAuthShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/UserListQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/UserPageQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/UserShowQry.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/AdminVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/EmployeeVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/OssTokenVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/UserAuthVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/UserVO.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/exception/UserErrorCode.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/exception/UserException.java create mode 100644 erp-turbo-common/erp-turbo-api/src/main/resources/security/serialize.allowlist create mode 100644 erp-turbo-common/erp-turbo-apm/pom.xml create mode 100644 erp-turbo-common/erp-turbo-base/pom.xml create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/annotation/Decrypt.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/config/AopConfig.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/config/BaseConfiguration.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/constant/ProfileConstant.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/Command.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/PageDTO.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/PageQuery.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/Query.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/User.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/UserSession.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/BizErrorCode.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/BizException.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/ErrorCode.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/RemoteCallException.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/RepoErrorCode.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/SystemException.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/pool/ThreadPoolUtils.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/statemachine/BaseStateMachine.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/statemachine/StateMachine.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/BeanNameUtils.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/BeanValidator.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/HttpUtils.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/MoneyUtils.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/RemoteCallWrapper.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/RestClientUtils.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/SpringContextHolder.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/UrlUtils.java create mode 100644 erp-turbo-common/erp-turbo-base/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 erp-turbo-common/erp-turbo-base/src/main/resources/base.yml create mode 100644 erp-turbo-common/erp-turbo-cache/pom.xml create mode 100644 erp-turbo-common/erp-turbo-cache/src/main/java/com/xunhong/erp/turbo/cache/config/CacheConfiguration.java create mode 100644 erp-turbo-common/erp-turbo-cache/src/main/java/com/xunhong/erp/turbo/cache/constant/CacheConstant.java create mode 100644 erp-turbo-common/erp-turbo-cache/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 erp-turbo-common/erp-turbo-cache/src/main/resources/cache.yml create mode 100644 erp-turbo-common/erp-turbo-captcha/pom.xml create mode 100644 erp-turbo-common/erp-turbo-captcha/src/main/java/com/xunhong/erp/turbo/captcha/config/CaptchaConfiguration.java create mode 100644 erp-turbo-common/erp-turbo-captcha/src/main/java/com/xunhong/erp/turbo/captcha/service/CaptchaCacheServiceRedisImpl.java create mode 100644 erp-turbo-common/erp-turbo-captcha/src/main/resources/META-INF/captcha/messages.properties create mode 100644 erp-turbo-common/erp-turbo-captcha/src/main/resources/META-INF/captcha/messages_en_US.properties create mode 100644 erp-turbo-common/erp-turbo-captcha/src/main/resources/META-INF/services/com.anji.captcha.service.CaptchaCacheService create mode 100644 erp-turbo-common/erp-turbo-captcha/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 erp-turbo-common/erp-turbo-captcha/src/main/resources/captcha.properties create mode 100644 erp-turbo-common/erp-turbo-config/pom.xml create mode 100644 erp-turbo-common/erp-turbo-config/src/main/resources/config.yml create mode 100644 erp-turbo-common/erp-turbo-datasource/pom.xml create mode 100644 erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/config/DatasourceConfiguration.java create mode 100644 erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/domain/entity/BaseDO.java create mode 100644 erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/AesEncryptTypeHandler.java create mode 100644 erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/GeometryTypeWKBHandler.java create mode 100644 erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/GeometryTypeWKTHandler.java create mode 100644 erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/MyMetaObjectHandler.java create mode 100644 erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/MybatisExceptionHandler.java create mode 100644 erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/interceptor/EmptyListInterceptor.java create mode 100644 erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/util/AesUtil.java create mode 100644 erp-turbo-common/erp-turbo-datasource/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 erp-turbo-common/erp-turbo-datasource/src/main/resources/datasource.yml create mode 100644 erp-turbo-common/erp-turbo-dify/pom.xml create mode 100644 erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/ChatClient.java create mode 100644 erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/CompletionClient.java create mode 100644 erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/DifyClient.java create mode 100644 erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/DifyClientException.java create mode 100644 erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/DifyRequestException.java create mode 100644 erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/WorkflowClient.java create mode 100644 erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/constants/DifyServerConstants.java create mode 100644 erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/dto/DataDTO.java create mode 100644 erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/dto/OutputDTO.java create mode 100644 erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/dto/ResponseDTO.java create mode 100644 erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/dto/WorkflowResponseDTO.java create mode 100644 erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/http/DifyRoute.java create mode 100644 erp-turbo-common/erp-turbo-es/pom.xml create mode 100644 erp-turbo-common/erp-turbo-es/src/main/java/com/xunhong/erp/turbo/es/config/EsConfiguration.java create mode 100644 erp-turbo-common/erp-turbo-es/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 erp-turbo-common/erp-turbo-es/src/main/resources/es.yml create mode 100644 erp-turbo-common/erp-turbo-file/pom.xml create mode 100644 erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/FileService.java create mode 100644 erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/MockFileServiceImpl.java create mode 100644 erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/OssServiceImpl.java create mode 100644 erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/config/OssConfiguration.java create mode 100644 erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/config/OssProperties.java create mode 100644 erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/infrastructure/exception/FileErrorCode.java create mode 100644 erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/infrastructure/exception/FileException.java create mode 100644 erp-turbo-common/erp-turbo-file/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 erp-turbo-common/erp-turbo-job/pom.xml create mode 100644 erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/config/XxlJobConfiguration.java create mode 100644 erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/config/XxlJobProperties.java create mode 100644 erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/handler/JobGroupDto.java create mode 100644 erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/handler/JobGroupRunner.java create mode 100644 erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/handler/XxlJobConstant.java create mode 100644 erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/handler/XxlJobHandler.java create mode 100644 erp-turbo-common/erp-turbo-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 erp-turbo-common/erp-turbo-job/src/main/resources/job.yml create mode 100644 erp-turbo-common/erp-turbo-limiter/pom.xml create mode 100644 erp-turbo-common/erp-turbo-limiter/src/main/java/com/xunhong/erp/turbo/limiter/RateLimiter.java create mode 100644 erp-turbo-common/erp-turbo-limiter/src/main/java/com/xunhong/erp/turbo/limiter/SlidingWindowRateLimiter.java create mode 100644 erp-turbo-common/erp-turbo-limiter/src/main/java/com/xunhong/erp/turbo/limiter/configuration/RateLimiterConfiguration.java create mode 100644 erp-turbo-common/erp-turbo-limiter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 erp-turbo-common/erp-turbo-limiter/src/main/resources/limiter.yml create mode 100644 erp-turbo-common/erp-turbo-lock/pom.xml create mode 100644 erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/DistributeLock.java create mode 100644 erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/DistributeLockAspect.java create mode 100644 erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/DistributeLockConstant.java create mode 100644 erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/DistributeLockException.java create mode 100644 erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/config/DistributeLockConfiguration.java create mode 100644 erp-turbo-common/erp-turbo-lock/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 erp-turbo-common/erp-turbo-logback/pom.xml create mode 100644 erp-turbo-common/erp-turbo-logback/src/main/resources/logback-spring.xml create mode 100644 erp-turbo-common/erp-turbo-logback/src/main/resources/logging.yml create mode 100644 erp-turbo-common/erp-turbo-mq/pom.xml create mode 100644 erp-turbo-common/erp-turbo-mq/src/main/java/com/xunhong/erp/turbo/stream/config/StreamConfiguration.java create mode 100644 erp-turbo-common/erp-turbo-mq/src/main/java/com/xunhong/erp/turbo/stream/param/Message.java create mode 100644 erp-turbo-common/erp-turbo-mq/src/main/java/com/xunhong/erp/turbo/stream/param/MessageBody.java create mode 100644 erp-turbo-common/erp-turbo-mq/src/main/java/com/xunhong/erp/turbo/stream/producer/StreamProducer.java create mode 100644 erp-turbo-common/erp-turbo-mq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 erp-turbo-common/erp-turbo-mq/src/main/resources/stream.yml create mode 100644 erp-turbo-common/erp-turbo-quartz/pom.xml create mode 100644 erp-turbo-common/erp-turbo-quartz/src/main/resources/quartz.yml create mode 100644 erp-turbo-common/erp-turbo-rpc/pom.xml create mode 100644 erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/config/RpcConfiguration.java create mode 100644 erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/facade/Facade.java create mode 100644 erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/facade/FacadeAspect.java create mode 100644 erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/filter/DubboConsumerFilter.java create mode 100644 erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/filter/DubboProviderFilter.java create mode 100644 erp-turbo-common/erp-turbo-rpc/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter create mode 100644 erp-turbo-common/erp-turbo-rpc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 erp-turbo-common/erp-turbo-rpc/src/main/resources/rpc.yml create mode 100644 erp-turbo-common/erp-turbo-rpc/src/main/resources/security/serialize.allowlist create mode 100644 erp-turbo-common/erp-turbo-sa-token/pom.xml create mode 100644 erp-turbo-common/erp-turbo-sa-token/src/main/java/com/xunhong/erp/turbo/satoken/SaTokenConfigure.java create mode 100644 erp-turbo-common/erp-turbo-sa-token/src/main/java/com/xunhong/erp/turbo/satoken/SaTokenExceptionHandler.java create mode 100644 erp-turbo-common/erp-turbo-sa-token/src/main/java/com/xunhong/erp/turbo/satoken/StpInterfaceImpl.java create mode 100644 erp-turbo-common/erp-turbo-sa-token/src/main/resources/sa-token.yml create mode 100644 erp-turbo-common/erp-turbo-swagger/pom.xml create mode 100644 erp-turbo-common/erp-turbo-web/pom.xml create mode 100644 erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/annotation/CacheControl.java create mode 100644 erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/annotation/RepeatSubmit.java create mode 100644 erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/aspect/MerchantIdAspect.java create mode 100644 erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/config/ApplicationConfigurer.java create mode 100644 erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/config/TomcatConfig.java create mode 100644 erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/enums/CachePolicy.java create mode 100644 erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/handler/DecryptControllerAdvice.java create mode 100644 erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/handler/GlobalExceptionHandler.java create mode 100644 erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/handler/SensitiveResponseBodyAdvice.java create mode 100644 erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/interceptor/CacheControlHandlerInterceptor.java create mode 100644 erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/interceptor/RepeatSubmitInterceptor.java create mode 100644 erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/interceptor/UserInterceptor.java create mode 100644 erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/service/OperationLogGetService.java create mode 100644 erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/utils/IPUtils.java create mode 100644 erp-turbo-common/erp-turbo-weixin/pom.xml create mode 100644 erp-turbo-common/erp-turbo-weixin/src/main/java/com/xunhong/erp/turbo/weixin/handler/WeixinExceptionHandler.java create mode 100644 erp-turbo-common/pom.xml create mode 100644 erp-turbo-schedule/pom.xml create mode 100644 erp-turbo-schedule/src/main/java/com/xunhong/erp/turbo/schedule/ErpTurboScheduleApplication.java create mode 100644 erp-turbo-schedule/src/main/java/com/xunhong/erp/turbo/schedule/config/QuartzConfig.java create mode 100644 erp-turbo-schedule/src/main/resources/application.yml create mode 100644 erp-turbo-schedule/src/main/resources/bootstrap.yml create mode 100644 erp-turbo-svc/.gitignore create mode 100644 erp-turbo-svc/pom.xml create mode 100644 layers/layers.xml create mode 100644 mvnw create mode 100644 mvnw.cmd create mode 100644 output.pdf create mode 100644 pom.xml create mode 100644 proguard.cfg create mode 100644 webpage.pdf diff --git a/.coding/settings.xml b/.coding/settings.xml new file mode 100644 index 0000000..30fdd57 --- /dev/null +++ b/.coding/settings.xml @@ -0,0 +1,11 @@ + + + + + aliyun maven + aliyun maven + https://maven.aliyun.com/nexus/content/groups/public/ + *,!jitpack.io + + + diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..eb5a316 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +target diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..2cb12ae --- /dev/null +++ b/.editorconfig @@ -0,0 +1,21 @@ +# Code Style Guide +root = true + +[*] +indent_style = tab +indent_size = 4 +max_line_length = 80 + +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.{yaml,yml,bat,md}] +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false + +[Jenkinsfile] +indent_size = 2 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..e77dfa8 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,151 @@ +# This file is inspired by https://github.com/alexkaratarakis/gitattributes +# +# Auto detect text files and perform LF normalization +# http://davidlaing.com/2012/09/19/customise-your-gitattributes-to-become-a-git-ninja/ +* text=auto + +# The above will handle all files NOT found below +# These files are text and should be normalized (Convert crlf => lf) + +*.bat text eol=crlf +*.coffee text +*.css text +*.cql text +*.df text +*.ejs text +*.html text +*.java text +*.js text +*.json text +*.less text +*.properties text +*.sass text +*.scss text +*.sh text +*.sql text +*.txt text +*.ts text +*.xml text +*.yaml text +*.yml text + +# Documents +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain +*.markdown text +*.md text +*.adoc text +*.textile text +*.mustache text +*.csv text +*.tab text +*.tsv text +*.txt text +AUTHORS text +CHANGELOG text +CHANGES text +CONTRIBUTING text +COPYING text +copyright text +*COPYRIGHT* text +INSTALL text +license text +LICENSE text +NEWS text +readme text +*README* text +TODO text + +# Graphics +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.tif binary +*.tiff binary +*.ico binary +# SVG treated as an asset (binary) by default. If you want to treat it as text, +# comment-out the following line and uncomment the line after. +*.svg binary +#*.svg text +*.eps binary + +# These files are binary and should be left untouched +# (binary is a macro for -text -diff) +*.class binary +*.jar binary +*.war binary + +## LINTERS +.csslintrc text +.eslintrc text +.jscsrc text +.jshintrc text +.jshintignore text +.stylelintrc text + +## CONFIGS +*.bowerrc text +*.conf text +*.config text +.editorconfig text +.gitattributes text +.gitconfig text +.gitignore text +.htaccess text +*.npmignore text + +## HEROKU +Procfile text +.slugignore text + +## AUDIO +*.kar binary +*.m4a binary +*.mid binary +*.midi binary +*.mp3 binary +*.ogg binary +*.ra binary + +## VIDEO +*.3gpp binary +*.3gp binary +*.as binary +*.asf binary +*.asx binary +*.fla binary +*.flv binary +*.m4v binary +*.mng binary +*.mov binary +*.mp4 binary +*.mpeg binary +*.mpg binary +*.swc binary +*.swf binary +*.webm binary + +## ARCHIVES +*.7z binary +*.gz binary +*.rar binary +*.tar binary +*.zip binary + +## FONTS +*.ttf binary +*.eot binary +*.otf binary +*.woff binary +*.woff2 binary + +docker/entrypoint.sh text eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49de3bf --- /dev/null +++ b/.gitignore @@ -0,0 +1,73 @@ +# Java +*.class +*.db +*.ear +*.jar +*.war + +# Intellij +.idea/ +classes/ +*.ids +*.iml +*.ipr +*.iws +*.orig + +# Eclipse +.settings/ +.classpath +.factorypath +.loadpath +.metadata +.project +*.bak +*.launch +*.pydevproject +*.swp +*.tmp +*~.nib +local.properties + +# Visual Studio Code +.vscode/ + +# JRebel +rebel.xml + +# Maven +!.mvn/wrapper/maven-wrapper.jar +!maven/wrapper/maven-wrapper.jar +maven/ +target/ +.flattened-pom.xml +release.properties + +# Gradle +!gradle/wrapper/maven-wrapper.jar +.gradle/ +build/ + +# SVN +.svn/ + +# Mac OSX +.DS_Store + +# Windows +._* +*.*~ +*~ +.merge_file* +Desktop.ini +Thumbs.db + +# Others +logs/ +log/ +.log +.buildpath +.cproject +.externalToolBuilders/** +.Spotlight-V100 +.Trashes diff --git a/.lingma/rules/design.md b/.lingma/rules/design.md new file mode 100644 index 0000000..8360cb0 --- /dev/null +++ b/.lingma/rules/design.md @@ -0,0 +1,5 @@ +--- +trigger: manual +--- + +不用管 erp-turbo-svc 这个目录的代码 diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..d3a500e --- /dev/null +++ b/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,118 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.6"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://mirrors.cloud.tencent.com/nexus/repository/maven-public/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if (mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if (mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if (!outputFile.getParentFile().exists()) { + if (!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054 GIT binary patch literal 50710 zcmbTd1CVCTmM+|7+wQV$+qP}n>auOywyU~q+qUhh+uxis_~*a##hm*_WW?9E7Pb7N%LRFiwbEGCJ0XP=%-6oeT$XZcYgtzC2~q zk(K08IQL8oTl}>>+hE5YRgXTB@fZ4TH9>7=79e`%%tw*SQUa9~$xKD5rS!;ZG@ocK zQdcH}JX?W|0_Afv?y`-NgLum62B&WSD$-w;O6G0Sm;SMX65z)l%m1e-g8Q$QTI;(Q z+x$xth4KFvH@Bs6(zn!iF#nenk^Y^ce;XIItAoCsow38eq?Y-Auh!1in#Rt-_D>H^ z=EjbclGGGa6VnaMGmMLj`x3NcwA43Jb(0gzl;RUIRAUDcR1~99l2SAPkVhoRMMtN} zXvC<tOmX83grD8GSo_Lo?%lNfhD#EBgPo z*nf@ppMC#B!T)Ae0RG$mlJWmGl7CkuU~B8-==5i;rS;8i6rJ=PoQxf446XDX9g|c> zU64ePyMlsI^V5Jq5A+BPe#e73+kpc_r1tv#B)~EZ;7^67F0*QiYfrk0uVW;Qb=NsG zN>gsuCwvb?s-KQIppEaeXtEMdc9dy6Dfduz-tMTms+i01{eD9JE&h?Kht*$eOl#&L zJdM_-vXs(V#$Ed;5wyNWJdPNh+Z$+;$|%qR(t`4W@kDhd*{(7-33BOS6L$UPDeE_53j${QfKN-0v-HG z(QfyvFNbwPK%^!eIo4ac1;b>c0vyf9}Xby@YY!lkz-UvNp zwj#Gg|4B~?n?G^{;(W;|{SNoJbHTMpQJ*Wq5b{l9c8(%?Kd^1?H1om1de0Da9M;Q=n zUfn{f87iVb^>Exl*nZ0hs(Yt>&V9$Pg`zX`AI%`+0SWQ4Zc(8lUDcTluS z5a_KerZWe}a-MF9#Cd^fi!y3%@RFmg&~YnYZ6<=L`UJ0v={zr)>$A;x#MCHZy1st7 ztT+N07NR+vOwSV2pvWuN1%lO!K#Pj0Fr>Q~R40{bwdL%u9i`DSM4RdtEH#cW)6}+I-eE< z&tZs+(Ogu(H_;$a$!7w`MH0r%h&@KM+<>gJL@O~2K2?VrSYUBbhCn#yy?P)uF3qWU z0o09mIik+kvzV6w>vEZy@&Mr)SgxPzUiDA&%07m17udz9usD82afQEps3$pe!7fUf z0eiidkJ)m3qhOjVHC_M(RYCBO%CZKZXFb8}s0-+}@CIn&EF(rRWUX2g^yZCvl0bI} zbP;1S)iXnRC&}5-Tl(hASKqdSnO?ASGJ*MIhOXIblmEudj(M|W!+I3eDc}7t`^mtg z)PKlaXe(OH+q-)qcQ8a@!llRrpGI8DsjhoKvw9T;TEH&?s=LH0w$EzI>%u;oD@x83 zJL7+ncjI9nn!TlS_KYu5vn%f*@qa5F;| zEFxY&B?g=IVlaF3XNm_03PA)=3|{n-UCgJoTr;|;1AU9|kPE_if8!Zvb}0q$5okF$ zHaJdmO&gg!9oN|M{!qGE=tb|3pVQ8PbL$}e;NgXz<6ZEggI}wO@aBP**2Wo=yN#ZC z4G$m^yaM9g=|&!^ft8jOLuzc3Psca*;7`;gnHm}tS0%f4{|VGEwu45KptfNmwxlE~ z^=r30gi@?cOm8kAz!EylA4G~7kbEiRlRIzwrb~{_2(x^$-?|#e6Bi_**(vyr_~9Of z!n>Gqf+Qwiu!xhi9f53=PM3`3tNF}pCOiPU|H4;pzjcsqbwg*{{kyrTxk<;mx~(;; z1NMrpaQ`57yn34>Jo3b|HROE(UNcQash!0p2-!Cz;{IRv#Vp5!3o$P8!%SgV~k&Hnqhp`5eLjTcy93cK!3Hm-$`@yGnaE=?;*2uSpiZTs_dDd51U%i z{|Zd9ou-;laGS_x=O}a+ zB||za<795A?_~Q=r=coQ+ZK@@ zId~hWQL<%)fI_WDIX#=(WNl!Dm$a&ROfLTd&B$vatq!M-2Jcs;N2vps$b6P1(N}=oI3<3luMTmC|0*{ zm1w8bt7vgX($!0@V0A}XIK)w!AzUn7vH=pZEp0RU0p?}ch2XC-7r#LK&vyc2=-#Q2 z^L%8)JbbcZ%g0Du;|8=q8B>X=mIQirpE=&Ox{TiuNDnOPd-FLI^KfEF729!!0x#Es z@>3ursjFSpu%C-8WL^Zw!7a0O-#cnf`HjI+AjVCFitK}GXO`ME&on|^=~Zc}^LBp9 zj=-vlN;Uc;IDjtK38l7}5xxQF&sRtfn4^TNtnzXv4M{r&ek*(eNbIu!u$>Ed%` z5x7+&)2P&4>0J`N&ZP8$vcR+@FS0126s6+Jx_{{`3ZrIMwaJo6jdrRwE$>IU_JTZ} z(||hyyQ)4Z1@wSlT94(-QKqkAatMmkT7pCycEB1U8KQbFX&?%|4$yyxCtm3=W`$4fiG0WU3yI@c zx{wfmkZAYE_5M%4{J-ygbpH|(|GD$2f$3o_Vti#&zfSGZMQ5_f3xt6~+{RX=$H8at z?GFG1Tmp}}lmm-R->ve*Iv+XJ@58p|1_jRvfEgz$XozU8#iJS})UM6VNI!3RUU!{5 zXB(+Eqd-E;cHQ>)`h0(HO_zLmzR3Tu-UGp;08YntWwMY-9i^w_u#wR?JxR2bky5j9 z3Sl-dQQU$xrO0xa&>vsiK`QN<$Yd%YXXM7*WOhnRdSFt5$aJux8QceC?lA0_if|s> ze{ad*opH_kb%M&~(~&UcX0nFGq^MqjxW?HJIP462v9XG>j(5Gat_)#SiNfahq2Mz2 zU`4uV8m$S~o9(W>mu*=h%Gs(Wz+%>h;R9Sg)jZ$q8vT1HxX3iQnh6&2rJ1u|j>^Qf`A76K%_ubL`Zu?h4`b=IyL>1!=*%!_K)=XC z6d}4R5L+sI50Q4P3upXQ3Z!~1ZXLlh!^UNcK6#QpYt-YC=^H=EPg3)z*wXo*024Q4b2sBCG4I# zlTFFY=kQ>xvR+LsuDUAk)q%5pEcqr(O_|^spjhtpb1#aC& zghXzGkGDC_XDa%t(X`E+kvKQ4zrQ*uuQoj>7@@ykWvF332)RO?%AA&Fsn&MNzmFa$ zWk&&^=NNjxLjrli_8ESU)}U|N{%j&TQmvY~lk!~Jh}*=^INA~&QB9em!in_X%Rl1&Kd~Z(u z9mra#<@vZQlOY+JYUwCrgoea4C8^(xv4ceCXcejq84TQ#sF~IU2V}LKc~Xlr_P=ry zl&Hh0exdCbVd^NPCqNNlxM3vA13EI8XvZ1H9#bT7y*U8Y{H8nwGpOR!e!!}*g;mJ#}T{ekSb}5zIPmye*If(}}_=PcuAW#yidAa^9-`<8Gr0 z)Fz=NiZ{)HAvw{Pl5uu)?)&i&Us$Cx4gE}cIJ}B4Xz~-q7)R_%owbP!z_V2=Aq%Rj z{V;7#kV1dNT9-6R+H}}(ED*_!F=~uz>&nR3gb^Ce%+0s#u|vWl<~JD3MvS0T9thdF zioIG3c#Sdsv;LdtRv3ml7%o$6LTVL>(H`^@TNg`2KPIk*8-IB}X!MT0`hN9Ddf7yN z?J=GxPL!uJ7lqwowsl?iRrh@#5C$%E&h~Z>XQcvFC*5%0RN-Opq|=IwX(dq(*sjs+ zqy99+v~m|6T#zR*e1AVxZ8djd5>eIeCi(b8sUk)OGjAsKSOg^-ugwl2WSL@d#?mdl zib0v*{u-?cq}dDGyZ%$XRY=UkQwt2oGu`zQneZh$=^! zj;!pCBWQNtvAcwcWIBM2y9!*W|8LmQy$H~5BEx)78J`4Z0(FJO2P^!YyQU{*Al+fs z){!4JvT1iLrJ8aU3k0t|P}{RN)_^v%$$r;+p0DY7N8CXzmS*HB*=?qaaF9D@#_$SN zSz{moAK<*RH->%r7xX~9gVW$l7?b|_SYI)gcjf0VAUJ%FcQP(TpBs; zg$25D!Ry_`8xpS_OJdeo$qh#7U+cepZ??TII7_%AXsT$B z=e)Bx#v%J0j``00Zk5hsvv6%T^*xGNx%KN-=pocSoqE5_R)OK%-Pbu^1MNzfds)mL zxz^F4lDKV9D&lEY;I+A)ui{TznB*CE$=9(wgE{m}`^<--OzV-5V4X2w9j(_!+jpTr zJvD*y6;39&T+==$F&tsRKM_lqa1HC}aGL0o`%c9mO=fts?36@8MGm7Vi{Y z^<7m$(EtdSr#22<(rm_(l_(`j!*Pu~Y>>xc>I9M#DJYDJNHO&4=HM%YLIp?;iR&$m z#_$ZWYLfGLt5FJZhr3jpYb`*%9S!zCG6ivNHYzNHcI%khtgHBliM^Ou}ZVD7ehU9 zS+W@AV=?Ro!=%AJ>Kcy9aU3%VX3|XM_K0A+ZaknKDyIS3S-Hw1C7&BSW5)sqj5Ye_ z4OSW7Yu-;bCyYKHFUk}<*<(@TH?YZPHr~~Iy%9@GR2Yd}J2!N9K&CN7Eq{Ka!jdu; zQNB*Y;i(7)OxZK%IHGt#Rt?z`I|A{q_BmoF!f^G}XVeTbe1Wnzh%1g>j}>DqFf;Rp zz7>xIs12@Ke0gr+4-!pmFP84vCIaTjqFNg{V`5}Rdt~xE^I;Bxp4)|cs8=f)1YwHz zqI`G~s2~qqDV+h02b`PQpUE#^^Aq8l%y2|ByQeXSADg5*qMprEAE3WFg0Q39`O+i1 z!J@iV!`Y~C$wJ!5Z+j5$i<1`+@)tBG$JL=!*uk=2k;T<@{|s1$YL079FvK%mPhyHV zP8^KGZnp`(hVMZ;s=n~3r2y;LTwcJwoBW-(ndU-$03{RD zh+Qn$ja_Z^OuMf3Ub|JTY74s&Am*(n{J3~@#OJNYuEVVJd9*H%)oFoRBkySGm`hx! zT3tG|+aAkXcx-2Apy)h^BkOyFTWQVeZ%e2@;*0DtlG9I3Et=PKaPt&K zw?WI7S;P)TWED7aSH$3hL@Qde?H#tzo^<(o_sv_2ci<7M?F$|oCFWc?7@KBj-;N$P zB;q!8@bW-WJY9do&y|6~mEruZAVe$!?{)N9rZZxD-|oltkhW9~nR8bLBGXw<632!l z*TYQn^NnUy%Ds}$f^=yQ+BM-a5X4^GHF=%PDrRfm_uqC zh{sKwIu|O0&jWb27;wzg4w5uA@TO_j(1X?8E>5Zfma|Ly7Bklq|s z9)H`zoAGY3n-+&JPrT!>u^qg9Evx4y@GI4$n-Uk_5wttU1_t?6><>}cZ-U+&+~JE) zPlDbO_j;MoxdLzMd~Ew|1o^a5q_1R*JZ=#XXMzg?6Zy!^hop}qoLQlJ{(%!KYt`MK z8umEN@Z4w!2=q_oe=;QttPCQy3Nm4F@x>@v4sz_jo{4m*0r%J(w1cSo;D_hQtJs7W z><$QrmG^+<$4{d2bgGo&3-FV}avg9zI|Rr(k{wTyl3!M1q+a zD9W{pCd%il*j&Ft z5H$nENf>>k$;SONGW`qo6`&qKs*T z2^RS)pXk9b@(_Fw1bkb)-oqK|v}r$L!W&aXA>IpcdNZ_vWE#XO8X`#Yp1+?RshVcd zknG%rPd*4ECEI0wD#@d+3NbHKxl}n^Sgkx==Iu%}HvNliOqVBqG?P2va zQ;kRJ$J6j;+wP9cS za#m;#GUT!qAV%+rdWolk+)6kkz4@Yh5LXP+LSvo9_T+MmiaP-eq6_k;)i6_@WSJ zlT@wK$zqHu<83U2V*yJ|XJU4farT#pAA&@qu)(PO^8PxEmPD4;Txpio+2)#!9 z>&=i7*#tc0`?!==vk>s7V+PL#S1;PwSY?NIXN2=Gu89x(cToFm))7L;< z+bhAbVD*bD=}iU`+PU+SBobTQ%S!=VL!>q$rfWsaaV}Smz>lO9JXT#`CcH_mRCSf4%YQAw`$^yY z3Y*^Nzk_g$xn7a_NO(2Eb*I=^;4f!Ra#Oo~LLjlcjke*k*o$~U#0ZXOQ5@HQ&T46l z7504MUgZkz2gNP1QFN8Y?nSEnEai^Rgyvl}xZfMUV6QrJcXp;jKGqB=D*tj{8(_pV zqyB*DK$2lgYGejmJUW)*s_Cv65sFf&pb(Yz8oWgDtQ0~k^0-wdF|tj}MOXaN@ydF8 zNr={U?=;&Z?wr^VC+`)S2xl}QFagy;$mG=TUs7Vi2wws5zEke4hTa2)>O0U?$WYsZ z<8bN2bB_N4AWd%+kncgknZ&}bM~eDtj#C5uRkp21hWW5gxWvc6b*4+dn<{c?w9Rmf zIVZKsPl{W2vQAlYO3yh}-{Os=YBnL8?uN5(RqfQ=-1cOiUnJu>KcLA*tQK3FU`_bM zM^T28w;nAj5EdAXFi&Kk1Nnl2)D!M{@+D-}bIEe+Lc4{s;YJc-{F#``iS2uk;2!Zp zF9#myUmO!wCeJIoi^A+T^e~20c+c2C}XltaR!|U-HfDA=^xF97ev}$l6#oY z&-&T{egB)&aV$3_aVA51XGiU07$s9vubh_kQG?F$FycvS6|IO!6q zq^>9|3U^*!X_C~SxX&pqUkUjz%!j=VlXDo$!2VLH!rKj@61mDpSr~7B2yy{>X~_nc zRI+7g2V&k zd**H++P9dg!-AOs3;GM`(g<+GRV$+&DdMVpUxY9I1@uK28$az=6oaa+PutlO9?6#? zf-OsgT>^@8KK>ggkUQRPPgC7zjKFR5spqQb3ojCHzj^(UH~v+!y*`Smv)VpVoPwa6 zWG18WJaPKMi*F6Zdk*kU^`i~NNTfn3BkJniC`yN98L-Awd)Z&mY? zprBW$!qL-OL7h@O#kvYnLsfff@kDIegt~?{-*5A7JrA;#TmTe?jICJqhub-G@e??D zqiV#g{)M!kW1-4SDel7TO{;@*h2=_76g3NUD@|c*WO#>MfYq6_YVUP+&8e4|%4T`w zXzhmVNziAHazWO2qXcaOu@R1MrPP{t)`N)}-1&~mq=ZH=w=;-E$IOk=y$dOls{6sRR`I5>|X zpq~XYW4sd;J^6OwOf**J>a7u$S>WTFPRkjY;BfVgQst)u4aMLR1|6%)CB^18XCz+r ztkYQ}G43j~Q&1em(_EkMv0|WEiKu;z2zhb(L%$F&xWwzOmk;VLBYAZ8lOCziNoPw1 zv2BOyXA`A8z^WH!nXhKXM`t0;6D*-uGds3TYGrm8SPnJJOQ^fJU#}@aIy@MYWz**H zvkp?7I5PE{$$|~{-ZaFxr6ZolP^nL##mHOErB^AqJqn^hFA=)HWj!m3WDaHW$C)i^ z9@6G$SzB=>jbe>4kqr#sF7#K}W*Cg-5y6kun3u&0L7BpXF9=#7IN8FOjWrWwUBZiU zT_se3ih-GBKx+Uw0N|CwP3D@-C=5(9T#BH@M`F2!Goiqx+Js5xC92|Sy0%WWWp={$(am!#l~f^W_oz78HX<0X#7 zp)p1u~M*o9W@O8P{0Qkg@Wa# z2{Heb&oX^CQSZWSFBXKOfE|tsAm#^U-WkDnU;IowZ`Ok4!mwHwH=s|AqZ^YD4!5!@ zPxJj+Bd-q6w_YG`z_+r;S86zwXb+EO&qogOq8h-Ect5(M2+>(O7n7)^dP*ws_3U6v zVsh)sk^@*c>)3EML|0<-YROho{lz@Nd4;R9gL{9|64xVL`n!m$-Jjrx?-Bacp!=^5 z1^T^eB{_)Y<9)y{-4Rz@9_>;_7h;5D+@QcbF4Wv7hu)s0&==&6u)33 zHRj+&Woq-vDvjwJCYES@$C4{$?f$Ibi4G()UeN11rgjF+^;YE^5nYprYoJNoudNj= zm1pXSeG64dcWHObUetodRn1Fw|1nI$D9z}dVEYT0lQnsf_E1x2vBLql7NrHH!n&Sq z6lc*mvU=WS6=v9Lrl}&zRiu_6u;6g%_DU{9b+R z#YHqX7`m9eydf?KlKu6Sb%j$%_jmydig`B*TN`cZL-g!R)iE?+Q5oOqBFKhx z%MW>BC^(F_JuG(ayE(MT{S3eI{cKiwOtPwLc0XO*{*|(JOx;uQOfq@lp_^cZo=FZj z4#}@e@dJ>Bn%2`2_WPeSN7si^{U#H=7N4o%Dq3NdGybrZgEU$oSm$hC)uNDC_M9xc zGzwh5Sg?mpBIE8lT2XsqTt3j3?We8}3bzLBTQd639vyg^$0#1epq8snlDJP2(BF)K zSx30RM+{f+b$g{9usIL8H!hCO117Xgv}ttPJm9wVRjPk;ePH@zxv%j9k5`TzdXLeT zFgFX`V7cYIcBls5WN0Pf6SMBN+;CrQ(|EsFd*xtwr#$R{Z9FP`OWtyNsq#mCgZ7+P z^Yn$haBJ)r96{ZJd8vlMl?IBxrgh=fdq_NF!1{jARCVz>jNdC)H^wfy?R94#MPdUjcYX>#wEx+LB#P-#4S-%YH>t-j+w zOFTI8gX$ard6fAh&g=u&56%3^-6E2tpk*wx3HSCQ+t7+*iOs zPk5ysqE}i*cQocFvA68xHfL|iX(C4h*67@3|5Qwle(8wT&!&{8*{f%0(5gH+m>$tq zp;AqrP7?XTEooYG1Dzfxc>W%*CyL16q|fQ0_jp%%Bk^k!i#Nbi(N9&T>#M{gez_Ws zYK=l}adalV(nH}I_!hNeb;tQFk3BHX7N}}R8%pek^E`X}%ou=cx8InPU1EE0|Hen- zyw8MoJqB5=)Z%JXlrdTXAE)eqLAdVE-=>wGHrkRet}>3Yu^lt$Kzu%$3#(ioY}@Gu zjk3BZuQH&~7H+C*uX^4}F*|P89JX;Hg2U!pt>rDi(n(Qe-c}tzb0#6_ItoR0->LSt zR~UT<-|@TO%O`M+_e_J4wx7^)5_%%u+J=yF_S#2Xd?C;Ss3N7KY^#-vx+|;bJX&8r zD?|MetfhdC;^2WG`7MCgs>TKKN=^=!x&Q~BzmQio_^l~LboTNT=I zC5pme^P@ER``p$2md9>4!K#vV-Fc1an7pl>_|&>aqP}+zqR?+~Z;f2^`a+-!Te%V? z;H2SbF>jP^GE(R1@%C==XQ@J=G9lKX+Z<@5}PO(EYkJh=GCv#)Nj{DkWJM2}F&oAZ6xu8&g7pn1ps2U5srwQ7CAK zN&*~@t{`31lUf`O;2w^)M3B@o)_mbRu{-`PrfNpF!R^q>yTR&ETS7^-b2*{-tZAZz zw@q5x9B5V8Qd7dZ!Ai$9hk%Q!wqbE1F1c96&zwBBaRW}(^axoPpN^4Aw}&a5dMe+*Gomky_l^54*rzXro$ z>LL)U5Ry>~FJi=*{JDc)_**c)-&faPz`6v`YU3HQa}pLtb5K)u%K+BOqXP0)rj5Au$zB zW1?vr?mDv7Fsxtsr+S6ucp2l#(4dnr9sD*v+@*>g#M4b|U?~s93>Pg{{a5|rm2xfI z`>E}?9S@|IoUX{Q1zjm5YJT|3S>&09D}|2~BiMo=z4YEjXlWh)V&qs;*C{`UMxp$9 zX)QB?G$fPD6z5_pNs>Jeh{^&U^)Wbr?2D6-q?)`*1k@!UvwQgl8eG$r+)NnFoT)L6 zg7lEh+E6J17krfYJCSjWzm67hEth24pomhz71|Qodn#oAILN)*Vwu2qpJirG)4Wnv}9GWOFrQg%Je+gNrPl8mw7ykE8{ z=|B4+uwC&bpp%eFcRU6{mxRV32VeH8XxX>v$du<$(DfinaaWxP<+Y97Z#n#U~V zVEu-GoPD=9$}P;xv+S~Ob#mmi$JQmE;Iz4(){y*9pFyW-jjgdk#oG$fl4o9E8bo|L zWjo4l%n51@Kz-n%zeSCD`uB?T%FVk+KBI}=ve zvlcS#wt`U6wrJo}6I6Rwb=1GzZfwE=I&Ne@p7*pH84XShXYJRgvK)UjQL%R9Zbm(m zxzTQsLTON$WO7vM)*vl%Pc0JH7WhP;$z@j=y#avW4X8iqy6mEYr@-}PW?H)xfP6fQ z&tI$F{NNct4rRMSHhaelo<5kTYq+(?pY)Ieh8*sa83EQfMrFupMM@nfEV@EmdHUv9 z35uzIrIuo4#WnF^_jcpC@uNNaYTQ~uZWOE6P@LFT^1@$o&q+9Qr8YR+ObBkpP9=F+$s5+B!mX2~T zAuQ6RenX?O{IlLMl1%)OK{S7oL}X%;!XUxU~xJN8xk z`xywS*naF(J#?vOpB(K=o~lE;m$zhgPWDB@=p#dQIW>xe_p1OLoWInJRKbEuoncf; zmS1!u-ycc1qWnDg5Nk2D)BY%jmOwCLC+Ny>`f&UxFowIsHnOXfR^S;&F(KXd{ODlm z$6#1ccqt-HIH9)|@fHnrKudu!6B$_R{fbCIkSIb#aUN|3RM>zuO>dpMbROZ`^hvS@ z$FU-;e4W}!ubzKrU@R*dW*($tFZ>}dd*4_mv)#O>X{U@zSzQt*83l9mI zI$8O<5AIDx`wo0}f2fsPC_l>ONx_`E7kdXu{YIZbp1$(^oBAH({T~&oQ&1{X951QW zmhHUxd)t%GQ9#ak5fTjk-cahWC;>^Rg7(`TVlvy0W@Y!Jc%QL3Ozu# zDPIqBCy&T2PWBj+d-JA-pxZlM=9ja2ce|3B(^VCF+a*MMp`(rH>Rt6W1$;r{n1(VK zLs>UtkT43LR2G$AOYHVailiqk7naz2yZGLo*xQs!T9VN5Q>eE(w zw$4&)&6xIV$IO^>1N-jrEUg>O8G4^@y+-hQv6@OmF@gy^nL_n1P1-Rtyy$Bl;|VcV zF=p*&41-qI5gG9UhKmmnjs932!6hceXa#-qfK;3d*a{)BrwNFeKU|ge?N!;zk+kB! zMD_uHJR#%b54c2tr~uGPLTRLg$`fupo}cRJeTwK;~}A>(Acy4k-Xk&Aa1&eWYS1ULWUj@fhBiWY$pdfy+F z@G{OG{*v*mYtH3OdUjwEr6%_ZPZ3P{@rfbNPQG!BZ7lRyC^xlMpWH`@YRar`tr}d> z#wz87t?#2FsH-jM6m{U=gp6WPrZ%*w0bFm(T#7m#v^;f%Z!kCeB5oiF`W33W5Srdt zdU?YeOdPG@98H7NpI{(uN{FJdu14r(URPH^F6tOpXuhU7T9a{3G3_#Ldfx_nT(Hec zo<1dyhsVsTw;ZkVcJ_0-h-T3G1W@q)_Q30LNv)W?FbMH+XJ* zy=$@39Op|kZv`Rt>X`zg&at(?PO^I=X8d9&myFEx#S`dYTg1W+iE?vt#b47QwoHI9 zNP+|3WjtXo{u}VG(lLUaW0&@yD|O?4TS4dfJI`HC-^q;M(b3r2;7|FONXphw-%7~* z&;2!X17|05+kZOpQ3~3!Nb>O94b&ZSs%p)TK)n3m=4eiblVtSx@KNFgBY_xV6ts;NF;GcGxMP8OKV^h6LmSb2E#Qnw ze!6Mnz7>lE9u{AgQ~8u2zM8CYD5US8dMDX-5iMlgpE9m*s+Lh~A#P1er*rF}GHV3h z=`STo?kIXw8I<`W0^*@mB1$}pj60R{aJ7>C2m=oghKyxMbFNq#EVLgP0cH3q7H z%0?L93-z6|+jiN|@v>ix?tRBU(v-4RV`}cQH*fp|)vd3)8i9hJ3hkuh^8dz{F5-~_ zUUr1T3cP%cCaTooM8dj|4*M=e6flH0&8ve32Q)0dyisl))XkZ7Wg~N}6y`+Qi2l+e zUd#F!nJp{#KIjbQdI`%oZ`?h=5G^kZ_uN`<(`3;a!~EMsWV|j-o>c?x#;zR2ktiB! z);5rrHl?GPtr6-o!tYd|uK;Vbsp4P{v_4??=^a>>U4_aUXPWQ$FPLE4PK$T^3Gkf$ zHo&9$U&G`d(Os6xt1r?sg14n)G8HNyWa^q8#nf0lbr4A-Fi;q6t-`pAx1T*$eKM*$ z|CX|gDrk#&1}>5H+`EjV$9Bm)Njw&7-ZR{1!CJTaXuP!$Pcg69`{w5BRHysB$(tWUes@@6aM69kb|Lx$%BRY^-o6bjH#0!7b;5~{6J+jKxU!Kmi# zndh@+?}WKSRY2gZ?Q`{(Uj|kb1%VWmRryOH0T)f3cKtG4oIF=F7RaRnH0Rc_&372={_3lRNsr95%ZO{IX{p@YJ^EI%+gvvKes5cY+PE@unghjdY5#9A!G z70u6}?zmd?v+{`vCu-53_v5@z)X{oPC@P)iA3jK$`r zSA2a7&!^zmUiZ82R2=1cumBQwOJUPz5Ay`RLfY(EiwKkrx%@YN^^XuET;tE zmr-6~I7j!R!KrHu5CWGSChO6deaLWa*9LLJbcAJsFd%Dy>a!>J`N)Z&oiU4OEP-!Ti^_!p}O?7`}i7Lsf$-gBkuY*`Zb z7=!nTT;5z$_5$=J=Ko+Cp|Q0J=%oFr>hBgnL3!tvFoLNhf#D0O=X^h+x08iB;@8pXdRHxX}6R4k@i6%vmsQwu^5z zk1ip`#^N)^#Lg#HOW3sPI33xqFB4#bOPVnY%d6prwxf;Y-w9{ky4{O6&94Ra8VN@K zb-lY;&`HtxW@sF!doT5T$2&lIvJpbKGMuDAFM#!QPXW87>}=Q4J3JeXlwHys?!1^#37q_k?N@+u&Ns20pEoBeZC*np;i;M{2C0Z4_br2gsh6eL z#8`#sn41+$iD?^GL%5?cbRcaa-Nx0vE(D=*WY%rXy3B%gNz0l?#noGJGP728RMY#q z=2&aJf@DcR?QbMmN)ItUe+VM_U!ryqA@1VVt$^*xYt~-qvW!J4Tp<-3>jT=7Zow5M z8mSKp0v4b%a8bxFr>3MwZHSWD73D@+$5?nZAqGM#>H@`)mIeC#->B)P8T$zh-Pxnc z8)~Zx?TWF4(YfKuF3WN_ckpCe5;x4V4AA3(i$pm|78{%!q?|~*eH0f=?j6i)n~Hso zmTo>vqEtB)`%hP55INf7HM@taH)v`Fw40Ayc*R!T?O{ziUpYmP)AH`euTK!zg9*6Z z!>M=$3pd0!&TzU=hc_@@^Yd3eUQpX4-33}b{?~5t5lgW=ldJ@dUAH%`l5US1y_`40 zs(X`Qk}vvMDYYq+@Rm+~IyCX;iD~pMgq^KY)T*aBz@DYEB={PxA>)mI6tM*sx-DmGQHEaHwRrAmNjO!ZLHO4b;;5mf@zzlPhkP($JeZGE7 z?^XN}Gf_feGoG~BjUgVa*)O`>lX=$BSR2)uD<9 z>o^|nb1^oVDhQbfW>>!;8-7<}nL6L^V*4pB=>wwW+RXAeRvKED(n1;R`A6v$6gy0I(;Vf?!4;&sgn7F%LpM}6PQ?0%2Z@b{It<(G1CZ|>913E0nR2r^Pa*Bp z@tFGi*CQ~@Yc-?{cwu1 zsilf=k^+Qs>&WZG(3WDixisHpR>`+ihiRwkL(3T|=xsoNP*@XX3BU8hr57l3k;pni zI``=3Nl4xh4oDj<%>Q1zYXHr%Xg_xrK3Nq?vKX3|^Hb(Bj+lONTz>4yhU-UdXt2>j z<>S4NB&!iE+ao{0Tx^N*^|EZU;0kJkx@zh}S^P{ieQjGl468CbC`SWnwLRYYiStXm zOxt~Rb3D{dz=nHMcY)#r^kF8|q8KZHVb9FCX2m^X*(|L9FZg!5a7((!J8%MjT$#Fs)M1Pb zq6hBGp%O1A+&%2>l0mpaIzbo&jc^!oN^3zxap3V2dNj3x<=TwZ&0eKX5PIso9j1;e zwUg+C&}FJ`k(M|%%}p=6RPUq4sT3-Y;k-<68ciZ~_j|bt>&9ZLHNVrp#+pk}XvM{8 z`?k}o-!if>hVlCP9j%&WI2V`5SW)BCeR5>MQhF)po=p~AYN%cNa_BbV6EEh_kk^@a zD>4&>uCGCUmyA-c)%DIcF4R6!>?6T~Mj_m{Hpq`*(wj>foHL;;%;?(((YOxGt)Bhx zuS+K{{CUsaC++%}S6~CJ=|vr(iIs-je)e9uJEU8ZJAz)w166q)R^2XI?@E2vUQ!R% zn@dxS!JcOimXkWJBz8Y?2JKQr>`~SmE2F2SL38$SyR1^yqj8_mkBp)o$@+3BQ~Mid z9U$XVqxX3P=XCKj0*W>}L0~Em`(vG<>srF8+*kPrw z20{z(=^w+ybdGe~Oo_i|hYJ@kZl*(9sHw#Chi&OIc?w`nBODp?ia$uF%Hs(X>xm?j zqZQ`Ybf@g#wli`!-al~3GWiE$K+LCe=Ndi!#CVjzUZ z!sD2O*;d28zkl))m)YN7HDi^z5IuNo3^w(zy8 zszJG#mp#Cj)Q@E@r-=NP2FVxxEAeOI2e=|KshybNB6HgE^(r>HD{*}S}mO>LuRGJT{*tfTzw_#+er-0${}%YPe@CMJ1Ng#j#)i)SnY@ss3gL;g zg2D~#Kpdfu#G;q1qz_TwSz1VJT(b3zby$Vk&;Y#1(A)|xj`_?i5YQ;TR%jice5E;0 zYHg;`zS5{S*9xI6o^j>rE8Ua*XhIw{_-*&@(R|C(am8__>+Ws&Q^ymy*X4~hR2b5r zm^p3sw}yv=tdyncy_Ui7{BQS732et~Z_@{-IhHDXAV`(Wlay<#hb>%H%WDi+K$862nA@BDtM#UCKMu+kM`!JHyWSi?&)A7_ z3{cyNG%a~nnH_!+;g&JxEMAmh-Z}rC!o7>OVzW&PoMyTA_g{hqXG)SLraA^OP**<7 zjWbr7z!o2n3hnx7A=2O=WL;`@9N{vQIM@&|G-ljrPvIuJHYtss0Er0fT5cMXNUf1B z7FAwBDixt0X7C3S)mPe5g`YtME23wAnbU)+AtV}z+e8G;0BP=bI;?(#|Ep!vVfDbK zvx+|CKF>yt0hWQ3drchU#XBU+HiuG*V^snFAPUp-5<#R&BUAzoB!aZ+e*KIxa26V}s6?nBK(U-7REa573wg-jqCg>H8~>O{ z*C0JL-?X-k_y%hpUFL?I>0WV{oV`Nb)nZbJG01R~AG>flIJf)3O*oB2i8~;!P?Wo_ z0|QEB*fifiL6E6%>tlAYHm2cjTFE@*<);#>689Z6S#BySQ@VTMhf9vYQyLeDg1*F} zjq>i1*x>5|CGKN{l9br3kB0EHY|k4{%^t7-uhjd#NVipUZa=EUuE5kS1_~qYX?>hJ z$}!jc9$O$>J&wnu0SgfYods^z?J4X;X7c77Me0kS-dO_VUQ39T(Kv(Y#s}Qqz-0AH z^?WRL(4RzpkD+T5FG_0NyPq-a-B7A5LHOCqwObRJi&oRi(<;OuIN7SV5PeHU$<@Zh zPozEV`dYmu0Z&Tqd>t>8JVde9#Pt+l95iHe$4Xwfy1AhI zDM4XJ;bBTTvRFtW>E+GzkN)9k!hA5z;xUOL2 zq4}zn-DP{qc^i|Y%rvi|^5k-*8;JZ~9a;>-+q_EOX+p1Wz;>i7c}M6Nv`^NY&{J-> z`(mzDJDM}QPu5i44**2Qbo(XzZ-ZDu%6vm8w@DUarqXj41VqP~ zs&4Y8F^Waik3y1fQo`bVUH;b=!^QrWb)3Gl=QVKr+6sxc=ygauUG|cm?|X=;Q)kQ8 zM(xrICifa2p``I7>g2R~?a{hmw@{!NS5`VhH8+;cV(F>B94M*S;5#O`YzZH1Z%yD? zZ61w(M`#aS-*~Fj;x|J!KM|^o;MI#Xkh0ULJcA?o4u~f%Z^16ViA27FxU5GM*rKq( z7cS~MrZ=f>_OWx8j#-Q3%!aEU2hVuTu(7`TQk-Bi6*!<}0WQi;_FpO;fhpL4`DcWp zGOw9vx0N~6#}lz(r+dxIGZM3ah-8qrqMmeRh%{z@dbUD2w15*_4P?I~UZr^anP}DB zU9CCrNiy9I3~d#&!$DX9e?A});BjBtQ7oGAyoI$8YQrkLBIH@2;lt4E^)|d6Jwj}z z&2_E}Y;H#6I4<10d_&P0{4|EUacwFHauvrjAnAm6yeR#}f}Rk27CN)vhgRqEyPMMS7zvunj2?`f;%?alsJ+-K+IzjJx>h8 zu~m_y$!J5RWAh|C<6+uiCNsOKu)E72M3xKK(a9Okw3e_*O&}7llNV!=P87VM2DkAk zci!YXS2&=P0}Hx|wwSc9JP%m8dMJA*q&VFB0yMI@5vWoAGraygwn){R+Cj6B1a2Px z5)u(K5{+;z2n*_XD!+Auv#LJEM)(~Hx{$Yb^ldQmcYF2zNH1V30*)CN_|1$v2|`LnFUT$%-tO0Eg|c5$BB~yDfzS zcOXJ$wpzVK0MfTjBJ0b$r#_OvAJ3WRt+YOLlJPYMx~qp>^$$$h#bc|`g0pF-Ao43? z>*A+8lx>}L{p(Tni2Vvk)dtzg$hUKjSjXRagj)$h#8=KV>5s)J4vGtRn5kP|AXIz! zPgbbVxW{2o4s-UM;c#We8P&mPN|DW7_uLF!a|^0S=wr6Esx9Z$2|c1?GaupU6$tb| zY_KU`(_29O_%k(;>^|6*pZURH3`@%EuKS;Ns z1lujmf;r{qAN&Q0&m{wJSZ8MeE7RM5+Sq;ul_ z`+ADrd_Um+G37js6tKsArNB}n{p*zTUxQr>3@wA;{EUbjNjlNd6$Mx zg0|MyU)v`sa~tEY5$en7^PkC=S<2@!nEdG6L=h(vT__0F=S8Y&eM=hal#7eM(o^Lu z2?^;05&|CNliYrq6gUv;|i!(W{0N)LWd*@{2q*u)}u*> z7MQgk6t9OqqXMln?zoMAJcc zMKaof_Up})q#DzdF?w^%tTI7STI^@8=Wk#enR*)&%8yje>+tKvUYbW8UAPg55xb70 zEn5&Ba~NmOJlgI#iS8W3-@N%>V!#z-ZRwfPO1)dQdQkaHsiqG|~we2ALqG7Ruup(DqSOft2RFg_X%3w?6VqvV1uzX_@F(diNVp z4{I|}35=11u$;?|JFBEE*gb;T`dy+8gWJ9~pNsecrO`t#V9jW-6mnfO@ff9od}b(3s4>p0i30gbGIv~1@a^F2kl7YO;DxmF3? zWi-RoXhzRJV0&XE@ACc?+@6?)LQ2XNm4KfalMtsc%4!Fn0rl zpHTrHwR>t>7W?t!Yc{*-^xN%9P0cs0kr=`?bQ5T*oOo&VRRu+1chM!qj%2I!@+1XF z4GWJ=7ix9;Wa@xoZ0RP`NCWw0*8247Y4jIZ>GEW7zuoCFXl6xIvz$ezsWgKdVMBH> z{o!A7f;R-@eK9Vj7R40xx)T<2$?F2E<>Jy3F;;=Yt}WE59J!1WN367 zA^6pu_zLoZIf*x031CcwotS{L8bJE(<_F%j_KJ2P_IusaZXwN$&^t716W{M6X2r_~ zaiMwdISX7Y&Qi&Uh0upS3TyEIXNDICQlT5fHXC`aji-c{U(J@qh-mWl-uMN|T&435 z5)a1dvB|oe%b2mefc=Vpm0C%IUYYh7HI*;3UdgNIz}R##(#{(_>82|zB0L*1i4B5j-xi9O4x10rs_J6*gdRBX=@VJ+==sWb&_Qc6tSOowM{BX@(zawtjl zdU!F4OYw2@Tk1L^%~JCwb|e#3CC>srRHQ*(N%!7$Mu_sKh@|*XtR>)BmWw!;8-mq7 zBBnbjwx8Kyv|hd*`5}84flTHR1Y@@uqjG`UG+jN_YK&RYTt7DVwfEDXDW4U+iO{>K zw1hr{_XE*S*K9TzzUlJH2rh^hUm2v7_XjwTuYap|>zeEDY$HOq3X4Tz^X}E9z)x4F zs+T?Ed+Hj<#jY-`Va~fT2C$=qFT-5q$@p9~0{G&eeL~tiIAHXA!f6C(rAlS^)&k<- zXU|ZVs}XQ>s5iONo~t!XXZgtaP$Iau;JT%h)>}v54yut~pykaNye4axEK#5@?TSsQ zE;Jvf9I$GVb|S`7$pG)4vgo9NXsKr?u=F!GnA%VS2z$@Z(!MR9?EPcAqi5ft)Iz6sNl`%kj+_H-X`R<>BFrBW=fSlD|{`D%@Rcbu2?%>t7i34k?Ujb)2@J-`j#4 zLK<69qcUuniIan-$A1+fR=?@+thwDIXtF1Tks@Br-xY zfB+zblrR(ke`U;6U~-;p1Kg8Lh6v~LjW@9l2P6s+?$2!ZRPX`(ZkRGe7~q(4&gEi<$ch`5kQ?*1=GSqkeV z{SA1EaW_A!t{@^UY2D^YO0(H@+kFVzZaAh0_`A`f(}G~EP~?B|%gtxu&g%^x{EYSz zk+T;_c@d;+n@$<>V%P=nk36?L!}?*=vK4>nJSm+1%a}9UlmTJTrfX4{Lb7smNQn@T zw9p2%(Zjl^bWGo1;DuMHN(djsEm)P8mEC2sL@KyPjwD@d%QnZ$ zMJ3cnn!_!iP{MzWk%PI&D?m?C(y2d|2VChluN^yHya(b`h>~GkI1y;}O_E57zOs!{ zt2C@M$^PR2U#(dZmA-sNreB@z-yb0Bf7j*yONhZG=onhx>t4)RB`r6&TP$n zgmN*)eCqvgriBO-abHQ8ECN0bw?z5Bxpx z=jF@?zFdVn?@gD5egM4o$m`}lV(CWrOKKq(sv*`mNcHcvw&Xryfw<{ch{O&qc#WCTXX6=#{MV@q#iHYba!OUY+MGeNTjP%Fj!WgM&`&RlI^=AWTOqy-o zHo9YFt!gQ*p7{Fl86>#-JLZo(b^O`LdFK~OsZBRR@6P?ad^Ujbqm_j^XycM4ZHFyg ziUbIFW#2tj`65~#2V!4z7DM8Z;fG0|APaQ{a2VNYpNotB7eZ5kp+tPDz&Lqs0j%Y4tA*URpcfi z_M(FD=fRGdqf430j}1z`O0I=;tLu81bwJXdYiN7_&a-?ly|-j*+=--XGvCq#32Gh(=|qj5F?kmihk{%M&$}udW5)DHK zF_>}5R8&&API}o0osZJRL3n~>76nUZ&L&iy^s>PMnNcYZ|9*1$v-bzbT3rpWsJ+y{ zPrg>5Zlery96Um?lc6L|)}&{992{_$J&=4%nRp9BAC6!IB=A&=tF>r8S*O-=!G(_( zwXbX_rGZgeiK*&n5E;f=k{ktyA1(;x_kiMEt0*gpp_4&(twlS2e5C?NoD{n>X2AT# zY@Zp?#!b1zNq96MQqeO*M1MMBin5v#RH52&Xd~DO6-BZLnA6xO1$sou(YJ1Dlc{WF zVa%2DyYm`V#81jP@70IJ;DX@y*iUt$MLm)ByAD$eUuji|5{ptFYq(q)mE(5bOpxjM z^Q`AHWq44SG3`_LxC9fwR)XRVIp=B%<(-lOC3jI#bb@dK(*vjom!=t|#<@dZql%>O z15y^{4tQoeW9Lu%G&V$90x6F)xN6y_oIn;!Q zs)8jT$;&;u%Y>=T3hg34A-+Y*na=|glcStr5D;&5*t5*DmD~x;zQAV5{}Ya`?RRGa zT*t9@$a~!co;pD^!J5bo?lDOWFx%)Y=-fJ+PDGc0>;=q=s?P4aHForSB+)v0WY2JH z?*`O;RHum6j%#LG)Vu#ciO#+jRC3!>T(9fr+XE7T2B7Z|0nR5jw@WG)kDDzTJ=o4~ zUpeyt7}_nd`t}j9BKqryOha{34erm)RmST)_9Aw)@ zHbiyg5n&E{_CQR@h<}34d7WM{s{%5wdty1l+KX8*?+-YkNK2Be*6&jc>@{Fd;Ps|| z26LqdI3#9le?;}risDq$K5G3yoqK}C^@-8z^wj%tdgw-6@F#Ju{Sg7+y)L?)U$ez> zoOaP$UFZ?y5BiFycir*pnaAaY+|%1%8&|(@VB)zweR%?IidwJyK5J!STzw&2RFx zZV@qeaCB01Hu#U9|1#=Msc8Pgz5P*4Lrp!Q+~(G!OiNR{qa7|r^H?FC6gVhkk3y7=uW#Sh;&>78bZ}aK*C#NH$9rX@M3f{nckYI+5QG?Aj1DM)@~z_ zw!UAD@gedTlePB*%4+55naJ8ak_;))#S;4ji!LOqY5VRI){GMwHR~}6t4g>5C_#U# ztYC!tjKjrKvRy=GAsJVK++~$|+s!w9z3H4G^mACv=EErXNSmH7qN}%PKcN|8%9=i)qS5+$L zu&ya~HW%RMVJi4T^pv?>mw*Gf<)-7gf#Qj|e#w2|v4#t!%Jk{&xlf;$_?jW*n!Pyx zkG$<18kiLOAUPuFfyu-EfWX%4jYnjBYc~~*9JEz6oa)_R|8wjZA|RNrAp%}14L7fW zi7A5Wym*K+V8pkqqO-X#3ft{0qs?KVt^)?kS>AicmeO&q+~J~ zp0YJ_P~_a8j= zsAs~G=8F=M{4GZL{|B__UorX@MRNQLn?*_gym4aW(~+i13knnk1P=khoC-ViMZk+x zLW(l}oAg1H`dU+Fv**;qw|ANDSRs>cGqL!Yw^`; zv;{E&8CNJcc)GHzTYM}f&NPw<6j{C3gaeelU#y!M)w-utYEHOCCJo|Vgp7K6C_$14 zqIrLUB0bsgz^D%V%fbo2f9#yb#CntTX?55Xy|Kps&Xek*4_r=KDZ z+`TQuv|$l}MWLzA5Ay6Cvsa^7xvwXpy?`w(6vx4XJ zWuf1bVSb#U8{xlY4+wlZ$9jjPk)X_;NFMqdgq>m&W=!KtP+6NL57`AMljW+es zzqjUjgz;V*kktJI?!NOg^s_)ph45>4UDA!Vo0hn>KZ+h-3=?Y3*R=#!fOX zP$Y~+14$f66ix?UWB_6r#fMcC^~X4R-<&OD1CSDNuX~y^YwJ>sW0j`T<2+3F9>cLo z#!j57$ll2K9(%$4>eA7(>FJX5e)pR5&EZK!IMQzOfik#FU*o*LGz~7u(8}XzIQRy- z!U7AlMTIe|DgQFmc%cHy_9^{o`eD%ja_L>ckU6$O4*U**o5uR7`FzqkU8k4gxtI=o z^P^oGFPm5jwZMI{;nH}$?p@uV8FT4r=|#GziKXK07bHJLtK}X%I0TON$uj(iJ`SY^ zc$b2CoxCQ>7LH@nxcdW&_C#fMYBtTxcg46dL{vf%EFCZ~eErMvZq&Z%Lhumnkn^4A zsx$ay(FnN7kYah}tZ@0?-0Niroa~13`?hVi6`ndno`G+E8;$<6^gsE-K3)TxyoJ4M zb6pj5=I8^FD5H@`^V#Qb2^0cx7wUz&cruA5g>6>qR5)O^t1(-qqP&1g=qvY#s&{bx zq8Hc%LsbK1*%n|Y=FfojpE;w~)G0-X4i*K3{o|J7`krhIOd*c*$y{WIKz2n2*EXEH zT{oml3Th5k*vkswuFXdGDlcLj15Nec5pFfZ*0?XHaF_lVuiB%Pv&p7z)%38}%$Gup zVTa~C8=cw%6BKn_|4E?bPNW4PT7}jZQLhDJhvf4z;~L)506IE0 zX!tWXX(QOQPRj-p80QG79t8T2^az4Zp2hOHziQlvT!|H)jv{Ixodabzv6lBj)6WRB z{)Kg@$~~(7$-az?lw$4@L%I&DI0Lo)PEJJziWP33a3azb?jyXt1v0N>2kxwA6b%l> zZqRpAo)Npi&loWbjFWtEV)783BbeIAhqyuc+~>i7aQ8shIXt)bjCWT6$~ro^>99G} z2XfmT0(|l!)XJb^E!#3z4oEGIsL(xd; zYX1`1I(cG|u#4R4T&C|m*9KB1`UzKvho5R@1eYtUL9B72{i(ir&ls8g!pD ztR|25xGaF!4z5M+U@@lQf(12?xGy`!|3E}7pI$k`jOIFjiDr{tqf0va&3pOn6Pu)% z@xtG2zjYuJXrV)DUrIF*y<1O1<$#54kZ#2;=X51J^F#0nZ0(;S$OZDt_U2bx{RZ=Q zMMdd$fH|!s{ zXq#l;{`xfV`gp&C>A`WrQU?d{!Ey5(1u*VLJt>i27aZ-^&2IIk=zP5p+{$q(K?2(b z8?9h)kvj9SF!Dr zoyF}?V|9;6abHxWk2cEvGs$-}Pg}D+ZzgkaN&$Snp%;5m%zh1E#?Wac-}x?BYlGN#U#Mek*}kek#I9XaHt?mz3*fDrRTQ#&#~xyeqJk1QJ~E$7qsw6 z?sV;|?*=-{M<1+hXoj?@-$y+(^BJ1H~wQ9G8C0#^aEAyhDduNX@haoa=PuPp zYsGv8UBfQaRHgBgLjmP^eh>fLMeh{8ic)?xz?#3kX-D#Z{;W#cd_`9OMFIaJg-=t`_3*!YDgtNQ2+QUEAJB9M{~AvT$H`E)IKmCR21H532+ata8_i_MR@ z2Xj<3w<`isF~Ah$W{|9;51ub*f4#9ziKrOR&jM{x7I_7()O@`F*5o$KtZ?fxU~g`t zUovNEVKYn$U~VX8eR)qb`7;D8pn*Pp$(otYTqL)5KH$lUS-jf}PGBjy$weoceAcPp z&5ZYB$r&P$MN{0H0AxCe4Qmd3T%M*5d4i%#!nmBCN-WU-4m4Tjxn-%j3HagwTxCZ9 z)j5vO-C7%s%D!&UfO>bi2oXiCw<-w{vVTK^rVbv#W=WjdADJy8$khnU!`ZWCIU`># zyjc^1W~pcu>@lDZ{zr6gv%)2X4n27~Ve+cQqcND%0?IFSP4sH#yIaXXYAq^z3|cg` z`I3$m%jra>e2W-=DiD@84T!cb%||k)nPmEE09NC%@PS_OLhkrX*U!cgD*;;&gIaA(DyVT4QD+q_xu z>r`tg{hiGY&DvD-)B*h+YEd+Zn)WylQl}<4>(_NlsKXCRV;a)Rcw!wtelM2_rWX`j zTh5A|i6=2BA(iMCnj_fob@*eA;V?oa4Z1kRBGaU07O70fb6-qmA$Hg$ps@^ka1=RO zTbE_2#)1bndC3VuK@e!Sftxq4=Uux}fDxXE#Q5_x=E1h>T5`DPHz zbH<_OjWx$wy7=%0!mo*qH*7N4tySm+R0~(rbus`7;+wGh;C0O%x~fEMkt!eV>U$`i z5>Q(o z=t$gPjgGh0&I7KY#k50V7DJRX<%^X z>6+ebc9efB3@eE2Tr){;?_w`vhgF>`-GDY(YkR{9RH(MiCnyRtd!LxXJ75z+?2 zGi@m^+2hKJ5sB1@Xi@s_@p_Kwbc<*LQ_`mr^Y%j}(sV_$`J(?_FWP)4NW*BIL~sR>t6 zM;qTJZ~GoY36&{h-Pf}L#y2UtR}>ZaI%A6VkU>vG4~}9^i$5WP2Tj?Cc}5oQxe2=q z8BeLa$hwCg_psjZyC2+?yX4*hJ58Wu^w9}}7X*+i5Rjqu5^@GzXiw#SUir1G1`jY% zOL=GE_ENYxhcyUrEt9XlMNP6kx6h&%6^u3@zB8KUCAa18T(R2J`%JjWZ z!{7cXaEW+Qu*iJPu+m>QqW}Lo$4Z+!I)0JNzZ&_M%=|B1yejFRM04bGAvu{=lNPd+ zJRI^DRQ(?FcVUD+bgEcAi@o(msqys9RTCG#)TjI!9~3-dc`>gW;HSJuQvH~d`MQs86R$|SKXHh zqS9Qy)u;T`>>a!$LuaE2keJV%;8g)tr&Nnc;EkvA-RanHXsy)D@XN0a>h}z2j81R; zsUNJf&g&rKpuD0WD@=dDrPHdBoK42WoBU|nMo17o(5^;M|dB4?|FsAGVrSyWcI`+FVw^vTVC`y}f(BwJl zrw3Sp151^9=}B})6@H*i4-dIN_o^br+BkcLa^H56|^2XsT0dESw2 zMX>(KqNl=x2K5=zIKg}2JpGAZu{I_IO}0$EQ5P{4zol**PCt3F4`GX}2@vr8#Y)~J zKb)gJeHcFnR@4SSh%b;c%J`l=W*40UPjF#q{<}ywv-=vHRFmDjv)NtmC zQx9qm)d%0zH&qG7AFa3VAU1S^(n8VFTC~Hb+HjYMjX8r#&_0MzlNR*mnLH5hi}`@{ zK$8qiDDvS_(L9_2vHgzEQ${DYSE;DqB!g*jhJghE&=LTnbgl&Xepo<*uRtV{2wDHN z)l;Kg$TA>Y|K8Lc&LjWGj<+bp4Hiye_@BfU(y#nF{fpR&|Ltbye?e^j0}8JC4#xi% zv29ZR%8%hk=3ZDvO-@1u8KmQ@6p%E|dlHuy#H1&MiC<*$YdLkHmR#F3ae;bKd;@*i z2_VfELG=B}JMLCO-6UQy^>RDE%K4b>c%9ki`f~Z2Qu8hO7C#t%Aeg8E%+}6P7Twtg z-)dj(w}_zFK&86KR@q9MHicUAucLVshUdmz_2@32(V`y3`&Kf8Q2I)+!n0mR=rrDU zXvv^$ho;yh*kNqJ#r1}b0|i|xRUF6;lhx$M*uG3SNLUTC@|htC z-=fsw^F%$qqz4%QdjBrS+ov}Qv!z00E+JWas>p?z@=t!WWU3K*?Z(0meTuTOC7OTx zU|kFLE0bLZ+WGcL$u4E}5dB0g`h|uwv3=H6f+{5z9oLv-=Q45+n~V4WwgO=CabjM% zBAN+RjM65(-}>Q2V#i1Na@a0`08g&y;W#@sBiX6Tpy8r}*+{RnyGUT`?XeHSqo#|J z^ww~c;ou|iyzpErDtlVU=`8N7JSu>4M z_pr9=tX0edVn9B}YFO2y(88j#S{w%E8vVOpAboK*27a7e4Ekjt0)hIX99*1oE;vex z7#%jhY=bPijA=Ce@9rRO(Vl_vnd00!^TAc<+wVvRM9{;hP*rqEL_(RzfK$er_^SN; z)1a8vo8~Dr5?;0X0J62Cusw$A*c^Sx1)dom`-)Pl7hsW4i(r*^Mw`z5K>!2ixB_mu z*Ddqjh}zceRFdmuX1akM1$3>G=#~|y?eYv(e-`Qy?bRHIq=fMaN~fB zUa6I8Rt=)jnplP>yuS+P&PxeWpJ#1$F`iqRl|jF$WL_aZFZl@kLo&d$VJtu&w?Q0O zzuXK>6gmygq(yXJy0C1SL}T8AplK|AGNUOhzlGeK_oo|haD@)5PxF}rV+5`-w{Aag zus45t=FU*{LguJ11Sr-28EZkq;!mJO7AQGih1L4rEyUmp>B!%X0YemsrV3QFvlgt* z5kwlPzaiJ+kZ^PMd-RRbl(Y?F*m`4*UIhIuf#8q>H_M=fM*L_Op-<_r zBZagV=4B|EW+KTja?srADTZXCd3Yv%^Chfpi)cg{ED${SI>InNpRj5!euKv?=Xn92 zsS&FH(*w`qLIy$doc>RE&A5R?u zzkl1sxX|{*fLpXvIW>9d<$ePROttn3oc6R!sN{&Y+>Jr@yeQN$sFR z;w6A<2-0%UA?c8Qf;sX7>>uKRBv3Ni)E9pI{uVzX|6Bb0U)`lhLE3hK58ivfRs1}d zNjlGK0hdq0qjV@q1qI%ZFMLgcpWSY~mB^LK)4GZ^h_@H+3?dAe_a~k*;9P_d7%NEFP6+ zgV(oGr*?W(ql?6SQ~`lUsjLb%MbfC4V$)1E0Y_b|OIYxz4?O|!kRb?BGrgiH5+(>s zoqM}v*;OBfg-D1l`M6T6{K`LG+0dJ1)!??G5g(2*vlNkm%Q(MPABT$r13q?|+kL4- zf)Mi5r$sn;u41aK(K#!m+goyd$c!KPl~-&-({j#D4^7hQkV3W|&>l_b!}!z?4($OA z5IrkfuT#F&S1(`?modY&I40%gtroig{YMvF{K{>5u^I51k8RriGd${z)=5k2tG zM|&Bp5kDTfb#vfuTTd?)a=>bX=lokw^y9+2LS?kwHQIWI~pYgy7 zb?A-RKVm_vM5!9?C%qYdfRAw& zAU7`up~%g=p@}pg#b7E)BFYx3g%(J36Nw(Dij!b>cMl@CSNbrW!DBDbTD4OXk!G4x zi}JBKc8HBYx$J~31PXH+4^x|UxK~(<@I;^3pWN$E=sYma@JP|8YL`L(zI6Y#c%Q{6 z*APf`DU$S4pr#_!60BH$FGViP14iJmbrzSrOkR;f3YZa{#E7Wpd@^4E-zH8EgPc-# zKWFPvh%WbqU_%ZEt`=Q?odKHc7@SUmY{GK`?40VuL~o)bS|is$Hn=<=KGHOsEC5tB zFb|q}gGlL97NUf$G$>^1b^3E18PZ~Pm9kX%*ftnolljiEt@2#F2R5ah$zbXd%V_Ev zyDd{1o_uuoBga$fB@Fw!V5F3jIr=a-ykqrK?WWZ#a(bglI_-8pq74RK*KfQ z0~Dzus7_l;pMJYf>Bk`)`S8gF!To-BdMnVw5M-pyu+aCiC5dwNH|6fgRsIKZcF&)g zr}1|?VOp}I3)IR@m1&HX1~#wsS!4iYqES zK}4J{Ei>;e3>LB#Oly>EZkW14^@YmpbgxCDi#0RgdM${&wxR+LiX}B+iRioOB0(pDKpVEI;ND?wNx>%e|m{RsqR_{(nmQ z3ZS}@t!p4a(BKx_-CYwrcyJ5u1TO9bcXti$8sy>xcLKqKCc#~UOZYD{llKTSFEjJ~ zyNWt>tLU}*>^`TvPxtP%F`ZJQw@W0^>x;!^@?k_)9#bF$j0)S3;mH-IR5y82l|%=F z2lR8zhP?XNP-ucZZ6A+o$xOyF!w;RaLHGh57GZ|TCXhJqY~GCh)aXEV$1O&$c}La1 zjuJxkY9SM4av^Hb;i7efiYaMwI%jGy`3NdY)+mcJhF(3XEiSlU3c|jMBi|;m-c?~T z+x0_@;SxcoY=(6xNgO$bBt~Pj8`-<1S|;Bsjrzw3@zSjt^JC3X3*$HI79i~!$RmTz zsblZsLYs7L$|=1CB$8qS!tXrWs!F@BVuh?kN(PvE5Av-*r^iYu+L^j^m9JG^#=m>@ z=1soa)H*w6KzoR$B8mBCXoU;f5^bVuwQ3~2LKg!yxomG1#XPmn(?YH@E~_ED+W6mxs%x{%Z<$pW`~ON1~2XjP5v(0{C{+6Dm$00tsd3w=f=ZENy zOgb-=f}|Hb*LQ$YdWg<(u7x3`PKF)B7ZfZ6;1FrNM63 z?O6tE%EiU@6%rVuwIQjvGtOofZBGZT1Sh(xLIYt9c4VI8`!=UJd2BfLjdRI#SbVAX ziT(f*RI^T!IL5Ac>ql7uduF#nuCRJ1)2bdvAyMxp-5^Ww5p#X{rb5)(X|fEhDHHW{ zw(Lfc$g;+Q`B0AiPGtmK%*aWfQQ$d!*U<|-@n2HZvCWSiw^I>#vh+LyC;aaVWGbmkENr z&kl*8o^_FW$T?rDYLO1Pyi%>@&kJKQoH2E0F`HjcN}Zlnx1ddoDA>G4Xu_jyp6vuT zPvC}pT&Owx+qB`zUeR|4G;OH(<<^_bzkjln0k40t`PQxc$7h(T8Ya~X+9gDc8Z9{Z z&y0RAU}#_kQGrM;__MK9vwIwK^aoqFhk~dK!ARf1zJqHMxF2?7-8|~yoO@_~Ed;_wvT%Vs{9RK$6uUQ|&@#6vyBsFK9eZW1Ft#D2)VpQRwpR(;x^ zdoTgMqfF9iBl%{`QDv7B0~8{8`8k`C4@cbZAXBu00v#kYl!#_Wug{)2PwD5cNp?K^ z9+|d-4z|gZ!L{57>!Ogfbzchm>J1)Y%?NThxIS8frAw@z>Zb9v%3_3~F@<=LG%r*U zaTov}{{^z~SeX!qgSYow`_5)ij*QtGp4lvF`aIGQ>@3ZTkDmsl#@^5*NGjOuu82}o zzLF~Q9SW+mP=>88%eSA1W4_W7-Q>rdq^?t=m6}^tDPaBRGFLg%ak93W!kOp#EO{6& zP%}Iff5HZQ9VW$~+9r=|Quj#z*=YwcnssS~9|ub2>v|u1JXP47vZ1&L1O%Z1DsOrDfSIMHU{VT>&>H=9}G3i@2rP+rx@eU@uE8rJNec zij~#FmuEBj03F1~ct@C@$>y)zB+tVyjV3*n`mtAhIM0$58vM9jOQC}JJOem|EpwqeMuYPxu3sv}oMS?S#o6GGK@8PN59)m&K4Dc&X% z(;XL_kKeYkafzS3Wn5DD>Yiw{LACy_#jY4op(>9q>>-*9@C0M+=b#bknAWZ37^(Ij zq>H%<@>o4a#6NydoF{_M4i4zB_KG)#PSye9bk0Ou8h%1Dtl7Q_y#7*n%g)?m>xF~( zjqvOwC;*qvN_3(*a+w2|ao0D?@okOvg8JskUw(l7n`0fncglavwKd?~l_ryKJ^Ky! zKCHkIC-o7%fFvPa$)YNh022lakMar^dgL=t#@XLyNHHw!b?%WlM)R@^!)I!smZL@k zBi=6wE5)2v&!UNV(&)oOYW(6Qa!nUjDKKBf-~Da=#^HE4(@mWk)LPvhyN3i4goB$3K8iV7uh zsv+a?#c4&NWeK(3AH;ETrMOIFgu{_@%XRwCZ;L=^8Ts)hix4Pf3yJRQ<8xb^CkdmC z?c_gB)XmRsk`9ch#tx4*hO=#qS7={~Vb4*tTf<5P%*-XMfUUYkI9T1cEF;ObfxxI-yNuA=I$dCtz3ey znVkctYD*`fUuZ(57+^B*R=Q}~{1z#2!ca?)+YsRQb+lt^LmEvZt_`=j^wqig+wz@n@ z`LIMQJT3bxMzuKg8EGBU+Q-6cs5(@5W?N>JpZL{$9VF)veF`L5%DSYTNQEypW%6$u zm_~}T{HeHj1bAlKl8ii92l9~$dm=UM21kLemA&b$;^!wB7#IKWGnF$TVq!!lBlG4 z{?Rjz?P(uvid+|i$VH?`-C&Gcb3{(~Vpg`w+O);Wk1|Mrjxrht0GfRUnZqz2MhrXa zqgVC9nemD5)H$to=~hp)c=l9?#~Z_7i~=U-`FZxb-|TR9@YCxx;Zjo-WpMNOn2)z) zFPGGVl%3N$f`gp$gPnWC+f4(rmts%fidpo^BJx72zAd7|*Xi{2VXmbOm)1`w^tm9% znM=0Fg4bDxH5PxPEm{P3#A(mxqlM7SIARP?|2&+c7qmU8kP&iApzL|F>Dz)Ixp_`O zP%xrP1M6@oYhgo$ZWwrAsYLa4 z|I;DAvJxno9HkQrhLPQk-8}=De{9U3U%)dJ$955?_AOms!9gia%)0E$Mp}$+0er@< zq7J&_SzvShM?e%V?_zUu{niL@gt5UFOjFJUJ}L?$f%eU%jUSoujr{^O=?=^{19`ON zlRIy8Uo_nqcPa6@yyz`CM?pMJ^^SN^Fqtt`GQ8Q#W4kE7`V9^LT}j#pMChl!j#g#J zr-=CCaV%xyFeQ9SK+mG(cTwW*)xa(eK;_Z(jy)woZp~> zA(4}-&VH+TEeLzPTqw&FOoK(ZjD~m{KW05fiGLe@E3Z2`rLukIDahE*`u!ubU)9`o zn^-lyht#E#-dt~S>}4y$-mSbR8{T@}22cn^refuQ08NjLOv?JiEWjyOnzk<^R5%gO zhUH_B{oz~u#IYwVnUg8?3P*#DqD8#X;%q%HY**=I>>-S|!X*-!x1{^l#OnR56O>iD zc;i;KS+t$koh)E3)w0OjWJl_aW2;xF=9D9Kr>)(5}4FqUbk# zI#$N8o0w;IChL49m9CJTzoC!|u{Ljd%ECgBOf$}&jA^$(V#P#~)`&g`H8E{uv52pp zwto`xUL-L&WTAVREEm$0g_gYPL(^vHq(*t1WCH_6alhkeW&GCZ3hL)|{O-jiFOBrF z!EW=Jej|dqQitT6!B-7&io2K)WIm~Q)v@yq%U|VpV+I?{y0@Yd%n8~-NuuM*pM~KA z85YB};IS~M(c<}4Hxx>qRK0cdl&e?t253N%vefkgds>Ubn8X}j6Vpgs>a#nFq$osY z1ZRwLqFv=+BTb=i%D2Wv>_yE0z}+niZ4?rE|*a3d7^kndWGwnFqt+iZ(7+aln<}jzbAQ(#Z2SS}3S$%Bd}^ zc9ghB%O)Z_mTZMRC&H#)I#fiLuIkGa^`4e~9oM5zKPx?zjkC&Xy0~r{;S?FS%c7w< zWbMpzc(xSw?9tGxG~_l}Acq}zjt5ClaB7-!vzqnlrX;}$#+PyQ9oU)_DfePh2E1<7 ztok6g6K^k^DuHR*iJ?jw?bs_whk|bx`dxu^nC6#e{1*m~z1eq7m}Cf$*^Eua(oi_I zAL+3opNhJteu&mWQ@kQWPucmiP)4|nFG`b2tpC;h{-PI@`+h?9v=9mn|0R-n8#t=+Z*FD(c5 zjj79Jxkgck*DV=wpFgRZuwr%}KTm+dx?RT@aUHJdaX-ODh~gByS?WGx&czAkvkg;x zrf92l8$Or_zOwJVwh>5rB`Q5_5}ef6DjS*$x30nZbuO3dijS*wvNEqTY5p1_A0gWr znH<(Qvb!os14|R)n2Ost>jS2;d1zyLHu`Svm|&dZD+PpP{Bh>U&`Md;gRl64q;>{8MJJM$?UNUd`aC>BiLe>*{ zJY15->yW+<3rLgYeTruFDtk1ovU<$(_y7#HgUq>)r0{^}Xbth}V#6?%5jeFYt;SG^ z3qF)=uWRU;Jj)Q}cpY8-H+l_n$2$6{ZR?&*IGr{>ek!69ZH0ZoJ*Ji+ezzlJ^%qL3 zO5a`6gwFw(moEzqxh=yJ9M1FTn!eo&qD#y5AZXErHs%22?A+JmS&GIolml!)rZTnUDM3YgzYfT#;OXn)`PWv3Ta z!-i|-Wojv*k&bC}_JJDjiAK(Ba|YZgUI{f}TdEOFT2+}nPmttytw7j%@bQZDV1vvj z^rp{gRkCDmYJHGrE1~e~AE!-&6B6`7UxVQuvRrfdFkGX8H~SNP_X4EodVd;lXd^>eV1jN+Tt4}Rsn)R0LxBz0c=NXU|pUe!MQQFkGBWbR3&(jLm z%RSLc#p}5_dO{GD=DEFr=Fc% z85CBF>*t!6ugI?soX(*JNxBp+-DdZ4X0LldiK}+WWGvXV(C(Ht|!3$psR=&c*HIM=BmX;pRIpz@Ale{9dhGe(U2|Giv;# zOc|;?p67J=Q(kamB*aus=|XP|m{jN^6@V*Bpm?ye56Njh#vyJqE=DweC;?Rv7faX~ zde03n^I~0B2vUmr;w^X37tVxUK?4}ifsSH5_kpKZIzpYu0;Kv}SBGfI2AKNp+VN#z`nI{UNDRbo-wqa4NEls zICRJpu)??cj^*WcZ^MAv+;bDbh~gpN$1Cor<{Y2oyIDws^JsfW^5AL$azE(T0p&pP z1Mv~6Q44R&RHoH95&OuGx2srIr<@zYJTOMKiVs;Bx3py89I87LOb@%mr`0)#;7_~Z zzcZj8?w=)>%5@HoCHE_&hnu(n_yQ-L(~VjpjjkbT7e)Dk5??fApg(d>vwLRJ-x{um z*Nt?DqTSxh_MIyogY!vf1mU1`Gld-&L)*43f6dilz`Q@HEz;+>MDDYv9u!s;WXeao zUq=TaL$P*IFgJzrGc>j1dDOd zed+=ZBo?w4mr$2)Ya}?vedDopomhW1`#P<%YOJ_j=WwClX0xJH-f@s?^tmzs_j7t!k zK@j^zS0Q|mM4tVP5Ram$VbS6|YDY&y?Q1r1joe9dj08#CM{RSMTU}(RCh`hp_Rkl- zGd|Cv~G@F{DLhCizAm9AN!^{rNs8hu!G@8RpnGx7e`-+K$ffN<0qjR zGq^$dj_Tv!n*?zOSyk5skI7JVKJ)3jysnjIu-@VSzQiP8r6MzudCU=~?v-U8yzo^7 zGf~SUTvEp+S*!X9uX!sq=o}lH;r{pzk~M*VA(uyQ`3C8!{C;)&6)95fv(cK!%Cuz$ z_Zal57H6kPN>25KNiI6z6F)jzEkh#%OqU#-__Xzy)KyH};81#N6OfX$$IXWzOn`Q& z4f$Z1t>)8&8PcYfEwY5UadU1yg+U*(1m2ZlHoC-!2?gB!!fLhmTl))D@dhvkx#+Yj z1O=LV{(T%{^IeCuFK>%QR!VZ4GnO5tK8a+thWE zg4VytZrwcS?7^ zuZfhYnB8dwd%VLO?DK7pV5Wi<(`~DYqOXn8#jUIL^)12*Dbhk4GmL_E2`WX&iT16o zk(t|hok(Y|v-wzn?4x34T)|+SfZP>fiq!><*%vnxGN~ypST-FtC+@TPv*vYv@iU!_ z@2gf|PrgQ?Ktf*9^CnJ(x*CtZVB8!OBfg0%!wL;Z8(tYYre0vcnPGlyCc$V(Ipl*P z_(J!a=o@vp^%Efme!K74(Ke7A>Y}|sxV+JL^aYa{~m%5#$$+R1? zGaQhZTTX!#s#=Xtpegqero$RNt&`4xn3g$)=y*;=N=Qai)}~`xtxI_N*#MMCIq#HFifT zz(-*m;pVH&+4bixL&Bbg)W5FN^bH87pAHp)zPkWNMfTFqS=l~AC$3FX3kQUSh_C?-ZftyClgM)o_D7cX$RGlEYblux0jv5 zTr|i-I3@ZPCGheCl~BGhImF)K4!9@?pC(gi3ozX=a!|r1)LFxy_8c&wY0<^{2cm|P zv6Y`QktY*;I)IUd5y3ne1CqpVanlY45z8hf4&$EUBnucDj16pDa4&GI&TArYhf*xh zdj>*%APH8(h~c>o@l#%T>R$e>rwVx_WUB|~V`p^JHsg*y12lzj&zF}w6W09HwB2yb z%Q~`es&(;7#*DUC_w-Dmt7|$*?TA_m;zB+-u{2;Bg{O}nV7G_@7~<)Bv8fH^G$XG8$(&{A zwXJK5LRK%M34(t$&NI~MHT{UQ9qN-V_yn|%PqC81EIiSzmMM=2zb`mIwiP_b)x+2M z7Gd`83h79j#SItpQ}luuf2uOU`my_rY5T{6P#BNlb%h%<#MZb=m@y5aW;#o1^2Z)SWo+b`y0gV^iRcZtz5!-05vF z7wNo=hc6h4hc&s@uL^jqRvD6thVYtbErDK9k!;+a0xoE0WL7zLixjn5;$fXvT=O3I zT6jI&^A7k6R{&5#lVjz#8%_RiAa2{di{`kx79K+j72$H(!ass|B%@l%KeeKchYLe_ z>!(JC2fxsv>XVen+Y42GeYPxMWqm`6F$(E<6^s|g(slNk!lL*6v^W2>f6hh^mE$s= z3D$)}{V5(Qm&A6bp%2Q}*GZ5Qrf}n7*Hr51?bJOyA-?B4vg6y_EX<*-e20h{=0Mxs zbuQGZ$fLyO5v$nQ&^kuH+mNq9O#MWSfThtH|0q1i!NrWj^S}_P;Q1OkYLW6U^?_7G zx2wg?CULj7))QU(n{$0JE%1t2dWrMi2g-Os{v|8^wK{@qlj%+1b^?NI z$}l2tjp0g>K3O+p%yK<9!XqmQ?E9>z&(|^Pi~aSRwI5x$jaA62GFz9%fmO3t3a>cq zK8Xbv=5Ps~4mKN5+Eqw12(!PEyedFXv~VLxMB~HwT1Vfo51pQ#D8e$e4pFZ{&RC2P z5gTIzl{3!&(tor^BwZfR8j4k{7Rq#`riKXP2O-Bh66#WWK2w=z;iD9GLl+3 zpHIaI4#lQ&S-xBK8PiQ%dwOh?%BO~DCo06pN7<^dnZCN@NzY{_Z1>rrB0U|nC&+!2 z2y!oBcTd2;@lzyk(B=TkyZ)zy0deK05*Q0zk+o$@nun`VI1Er7pjq>8V zNmlW{p7S^Btgb(TA}jL(uR>`0w8gHP^T~Sh5Tkip^spk4SBAhC{TZU}_Z)UJw-}zm zPq{KBm!k)?P{`-(9?LFt&YN4s%SIZ-9lJ!Ws~B%exHOeVFk3~}HewnnH(d)qkLQ_d z6h>O)pEE{vbOVw}E+jdYC^wM+AAhaI(YAibUc@B#_mDss0Ji&BK{WG`4 zOk>vSNq(Bq2IB@s>>Rxm6Wv?h;ZXkpb1l8u|+_qXWdC*jjcPCixq;!%BVPSp#hP zqo`%cNf&YoQXHC$D=D45RiT|5ngPlh?0T~?lUf*O)){K@*Kbh?3RW1j9-T?%lDk@y z4+~?wKI%Y!-=O|_IuKz|=)F;V7ps=5@g)RrE;;tvM$gUhG>jHcw2Hr@fS+k^Zr~>G z^JvPrZc}_&d_kEsqAEMTMJw!!CBw)u&ZVzmq+ZworuaE&TT>$pYsd9|g9O^0orAe8 z221?Va!l1|Y5X1Y?{G7rt1sX#qFA^?RLG^VjoxPf63;AS=_mVDfGJKg73L zsGdnTUD40y(>S##2l|W2Cy!H(@@5KBa(#gs`vlz}Y~$ot5VsqPQ{{YtjYFvIumZzt zA{CcxZLJR|4#{j7k~Tu*jkwz8QA|5G1$Cl895R`Zyp;irp1{KN){kB30O8P1W5;@bG znvX74roeMmQlUi=v9Y%(wl$ZC#9tKNFpvi3!C}f1m6Ct|l2g%psc{TJp)@yu)*e2> z((p0Fg*8gJ!|3WZke9;Z{8}&NRkv7iP=#_y-F}x^y?2m%-D_aj^)f04%mneyjo_;) z6qc_Zu$q37d~X``*eP~Q>I2gg%rrV8v=kDfpp$=%Vj}hF)^dsSWygoN(A$g*E=Do6FX?&(@F#7pbiJ`;c0c@Ul zDqW_90Wm#5f2L<(Lf3)3TeXtI7nhYwRm(F;*r_G6K@OPW4H(Y3O5SjUzBC}u3d|eQ8*8d@?;zUPE+i#QNMn=r(ap?2SH@vo*m z3HJ%XuG_S6;QbWy-l%qU;8x;>z>4pMW7>R}J%QLf%@1BY(4f_1iixd-6GlO7Vp*yU zp{VU^3?s?90i=!#>H`lxT!q8rk>W_$2~kbpz7eV{3wR|8E=8**5?qn8#n`*(bt1xRQrdGxyx2y%B$qmw#>ZV$c7%cO#%JM1lY$Y0q?Yuo> ze9KdJoiM)RH*SB%^;TAdX-zEjA7@%y=!0=Zg%iWK7jVI9b&Dk}0$Af&08KHo+ zOwDhFvA(E|ER%a^cdh@^wLUlmIv6?_3=BvX8jKk92L=Y}7Jf5OGMfh` zBdR1wFCi-i5@`9km{isRb0O%TX+f~)KNaEz{rXQa89`YIF;EN&gN)cigu6mNh>?Cm zAO&Im2flv6D{jwm+y<%WsPe4!89n~KN|7}Cb{Z;XweER73r}Qp2 zz}WP4j}U0&(uD&9yGy6`!+_v-S(yG*iytsTR#x_Rc>=6u^vnRDnf1gP{#2>`ffrAC% zTZ5WQ@hAK;P;>kX{D)mIXe4%a5p=LO1xXH@8T?mz7Q@d)$3pL{{B!2{-v70L*o1AO+|n5beiw~ zk@(>m?T3{2k2c;NWc^`4@P&Z?BjxXJ@;x1qhn)9Mn*IFdt_J-dIqx5#d`NfyfX~m( zIS~5)MfZ2Uy?_4W`47i}u0ZgPh<{D|w_d#;D}Q&U$Q-G}xM1A@1f{#%A$jh6Qp&0hQ<0bPOM z-{1Wm&p%%#eb_?x7i;bol EfAhh=DF6Tf literal 0 HcmV?d00001 diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..5a15b6d --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,17 @@ +# +# Copyright 2012-2019 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +distributionUrl=https://mirrors.cloud.tencent.com/nexus/repository/maven-public/org/apache/maven/apache-maven/3.9.6/apache-maven-3.9.6-bin.zip +wrapperUrl=https://mirrors.cloud.tencent.com/nexus/repository/maven-public/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..67e8c4b --- /dev/null +++ b/build.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# 检查是否提供了版本号 +if [ -z "$1" ]; then + echo "Usage: $0 [xjar_password]" + echo "Example: $0 1.0.0 mysecretpassword" + exit 1 +fi + +VERSION=$1 +XJAR_PASSWORD=${2:-io.xjar} # 使用第二个参数,如果未提供则默认为 "io.xjar" + +# 使用 Maven 编译和打包项目 +./mvnw -T 4C -U compile package -Pprod -DskipTests -s ./.coding/settings.xml -Dxjar.password=$XJAR_PASSWORD + +# 构建 Docker 镜像 +docker build -t registry.cn-hangzhou.aliyuncs.com/m809745357/erp-turbo:$VERSION -f docker/Dockerfile --build-arg ACTIVE=dev --build-arg MODULE=erp-turbo-svc . + +# 推送 Docker 镜像到仓库 +docker push registry.cn-hangzhou.aliyuncs.com/m809745357/erp-turbo:$VERSION diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..cd6a31c --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,56 @@ +# 使用基础镜像 +FROM openjdk:21-jdk as builder + +# 设置工作目录并指定构建模块 +WORKDIR /app +ARG MODULE + +# 复制必要文件 +COPY $MODULE/target/$MODULE.jar application.jar +COPY docker/entrypoint.sh entrypoint.sh + +# 使用 Spring Boot 的分层模式提取 JAR 文件的依赖项 +RUN java -Djarmode=layertools -jar application.jar extract + +# 创建容器镜像 +FROM openjdk:21-jdk + +ARG ACTIVE + +# 定义镜像元数据和环境变量 +LABEL maintainer="shenyifei <809745357@qq.com>" +LABEL version="1.0.0" +ENV HOME "/app" +ENV TZ "Asia/Shanghai" +ENV LANG "C.UTF-8" +ENV XMS "500m" +ENV XMX "2g" +ENV XSS "256k" +ENV GC_MODE "G1" +ENV USE_GC_LOG "Y" +ENV USE_HEAP_DUMP "Y" +ENV USE_LARGE_PAGES "N" +ENV SPRING_PROFILES_ACTIVE ${ACTIVE} +ENV SERVER_PORT "8080" +ENV MANAGEMENT_SERVER_PORT "9080" +ENV NACOS_SERVER_ADDR "nacos-headless:8848" + +WORKDIR $HOME + +# 从基础镜像复制应用程序依赖项和模块 +COPY --from=builder /app/dependencies/ ./ +COPY --from=builder /app/spring-boot-loader ./ +COPY --from=builder /app/modules-dependencies ./ +COPY --from=builder /app/snapshot-dependencies/ ./ +COPY --from=builder /app/application/ ./ +COPY --from=builder /app/entrypoint.sh ./ +RUN chmod +x entrypoint.sh + +RUN mkdir $HOME/logs \ + && touch $HOME/logs/entrypoint.out \ + && ln -sf /dev/stdout $HOME/logs/entrypoint.out \ + && ln -sf /dev/stderr $HOME/logs/entrypoint.out + +# 设置启动入口和端口 +EXPOSE $SERVER_PORT $MANAGEMENT_SERVER_PORT +ENTRYPOINT ["./entrypoint.sh"] diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100644 index 0000000..7b3b644 --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,59 @@ +#!/bin/bash +JAVA_OPTS="${JAVA_OPTS} -server" +JAVA_OPTS="${JAVA_OPTS} -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions" +JAVA_OPTS="${JAVA_OPTS} -XX:+AlwaysPreTouch -XX:+PrintFlagsFinal -XX:-DisplayVMOutput -XX:-OmitStackTraceInFastThrow" +JAVA_OPTS="${JAVA_OPTS} -Xms${XMS:-1G} -Xmx${XMX:-1G} -Xss${XSS:-256K}" +JAVA_OPTS="${JAVA_OPTS} -XX:MetaspaceSize=${METASPACE_SIZE:-128M} -XX:MaxMetaspaceSize=${MAX_METASPACE_SIZE:-256M}" +JAVA_OPTS="${JAVA_OPTS} -XX:MaxGCPauseMillis=${MAX_GC_PAUSE_MILLIS:-200}" + +if [[ "${GC_MODE}" == "ShenandoahGC" ]]; then + echo "GC mode is ShenandoahGC" + JAVA_OPTS="${JAVA_OPTS} -XX:+UseShenandoahGC" +elif [[ "${GC_MODE}" == "ZGC" ]]; then + echo "GC mode is ZGC" + JAVA_OPTS="${JAVA_OPTS} -XX:+UseZGC" +elif [[ "${GC_MODE}" == "G1" ]]; then + echo "GC mode is G1" + JAVA_OPTS="${JAVA_OPTS} -XX:+UseG1GC" + JAVA_OPTS="${JAVA_OPTS} -XX:InitiatingHeapOccupancyPercent=${INITIATING_HEAP_OCCUPANCY_PERCENT:-45}" + JAVA_OPTS="${JAVA_OPTS} -XX:G1ReservePercent=${G1_RESERVE_PERCENT:-10} -XX:G1HeapWastePercent=${G1_HEAP_WASTE_PERCENT:-5} " + JAVA_OPTS="${JAVA_OPTS} -XX:G1NewSizePercent=${G1_NEW_SIZE_PERCENT:-50} -XX:G1MaxNewSizePercent=${G1_MAX_NEW_SIZE_PERCENT:-60}" + JAVA_OPTS="${JAVA_OPTS} -XX:G1MixedGCCountTarget=${G1_MIXED_GCCOUNT_TARGET:-8}" + JAVA_OPTS="${JAVA_OPTS} -XX:G1MixedGCLiveThresholdPercent=${G1_MIXED_GCLIVE_THRESHOLD_PERCENT:-65}" + JAVA_OPTS="${JAVA_OPTS} -XX:+UseStringDeduplication -XX:+ParallelRefProcEnabled" +elif [[ "${GC_MODE}" == "CMS" ]]; then + echo "GC mode is CMS" + JAVA_OPTS="${JAVA_OPTS} -XX:+UseConcMarkSweepGC -Xmn${XMN:-512m}" + JAVA_OPTS="${JAVA_OPTS} -XX:ParallelGCThreads=${PARALLEL_GC_THREADS:-2} -XX:ConcGCThreads=${CONC_GC_THREADS:-1}" + JAVA_OPTS="${JAVA_OPTS} -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=${CMS_INITIATING_HEAP_OCCUPANCY_PERCENT:-92}" + JAVA_OPTS="${JAVA_OPTS} -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark" +fi + +if [[ "${USE_GC_LOG}" == "Y" ]]; then + echo "GC log path is '${HOME}/logs/jvm_gc.log'." + JAVA_OPTS="${JAVA_OPTS} -XX:+PrintVMOptions" + JAVA_OPTS="${JAVA_OPTS} -Xlog:gc:file=${HOME}/logs/jvm_gc-%p-%t.log:tags,uptime,time,level:filecount=${GC_LOG_FILE_COUNT:-10},filesize=${GC_LOG_FILE_SIZE:-100M}" +fi + +if [ ! -d "${HOME}/logs" ]; then + mkdir ${HOME}/logs +fi + +if [[ "${USE_HEAP_DUMP}" == "Y" ]]; then + echo "Heap dump path is '${HOME}/logs/jvm_heap_dump.hprof'." + JAVA_OPTS="${JAVA_OPTS} -XX:HeapDumpPath=${HOME}/logs/jvm_heap_dump.hprof -XX:+HeapDumpOnOutOfMemoryError" +fi + +if [[ "${USE_LARGE_PAGES}" == "Y" ]]; then + echo "Use large pages." + JAVA_OPTS="${JAVA_OPTS} -XX:+UseLargePages" +fi + +if [[ "${JDWP_DEBUG:-N}" == "Y" ]]; then + echo "Attach to remote JVM using port ${JDWP_PORT:-5005}." + JAVA_OPTS="${JAVA_OPTS} -Xdebug -Xrunjdwp:transport=dt_socket,address=${JDWP_PORT:-5005},server=y,suspend=n" +fi + +JAVA_OPTS="${JAVA_OPTS} -Dserver.port=${SERVER_PORT} -Dmanagement.server.port=${MANAGEMENT_SERVER_PORT} -Dspring.profiles.active=prod" + +exec java $JAVA_OPTS -noverify -Djava.security.egd=file:/dev/./urandom "org.springframework.boot.loader.launch.JarLauncher" "$@" diff --git a/docker/xjar/Dockerfile b/docker/xjar/Dockerfile new file mode 100644 index 0000000..6998f0f --- /dev/null +++ b/docker/xjar/Dockerfile @@ -0,0 +1,49 @@ +# 使用基础镜像 +FROM golang:1.21.3 as builder + +# 设置工作目录并指定构建模块 +WORKDIR /app +ARG MODULE + +# 复制必要文件 +COPY $MODULE/target/xJarDir . + +RUN go mod init . && \ + go mod tidy && \ + go build -o . xjar.go +# +## 创建容器镜像 +#FROM openjdk:21-jdk +# +#ARG ACTIVE +# +## 定义镜像元数据和环境变量 +#LABEL maintainer="shenyifei <809745357@qq.com>" +#LABEL version="1.0.0" +#ENV HOME "/app" +#ENV TZ "Asia/Shanghai" +#ENV LANG "C.UTF-8" +#ENV XMS "500m" +#ENV XMX "2g" +#ENV XSS "256k" +#ENV GC_MODE "G1" +#ENV USE_GC_LOG "Y" +#ENV USE_HEAP_DUMP "Y" +#ENV USE_LARGE_PAGES "N" +#ENV SPRING_PROFILES_ACTIVE ${ACTIVE} +#ENV SERVER_PORT "8080" +#ENV MANAGEMENT_SERVER_PORT "9080" +#ENV NACOS_SERVER_ADDR "nacos-headless:8848" +# +#WORKDIR $HOME +# +#RUN chmod +x entrypoint.sh +# +#RUN mkdir $HOME/logs \ +# && touch $HOME/logs/entrypoint.out \ +# && ln -sf /dev/stdout $HOME/logs/entrypoint.out \ +# && ln -sf /dev/stderr $HOME/logs/entrypoint.out +# +## 设置启动入口和端口 +#EXPOSE $SERVER_PORT $MANAGEMENT_SERVER_PORT +#ENTRYPOINT ["./entrypoint.sh"] diff --git a/docker/xjar/entrypoint.sh b/docker/xjar/entrypoint.sh new file mode 100644 index 0000000..a17fc32 --- /dev/null +++ b/docker/xjar/entrypoint.sh @@ -0,0 +1,59 @@ +#!/bin/bash +JAVA_OPTS="${JAVA_OPTS} -server" +JAVA_OPTS="${JAVA_OPTS} -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions" +JAVA_OPTS="${JAVA_OPTS} -XX:+AlwaysPreTouch -XX:+PrintFlagsFinal -XX:-DisplayVMOutput -XX:-OmitStackTraceInFastThrow" +JAVA_OPTS="${JAVA_OPTS} -Xms${XMS:-1G} -Xmx${XMX:-1G} -Xss${XSS:-256K}" +JAVA_OPTS="${JAVA_OPTS} -XX:MetaspaceSize=${METASPACE_SIZE:-128M} -XX:MaxMetaspaceSize=${MAX_METASPACE_SIZE:-256M}" +JAVA_OPTS="${JAVA_OPTS} -XX:MaxGCPauseMillis=${MAX_GC_PAUSE_MILLIS:-200}" + +if [[ "${GC_MODE}" == "ShenandoahGC" ]]; then + echo "GC mode is ShenandoahGC" + JAVA_OPTS="${JAVA_OPTS} -XX:+UseShenandoahGC" +elif [[ "${GC_MODE}" == "ZGC" ]]; then + echo "GC mode is ZGC" + JAVA_OPTS="${JAVA_OPTS} -XX:+UseZGC" +elif [[ "${GC_MODE}" == "G1" ]]; then + echo "GC mode is G1" + JAVA_OPTS="${JAVA_OPTS} -XX:+UseG1GC" + JAVA_OPTS="${JAVA_OPTS} -XX:InitiatingHeapOccupancyPercent=${INITIATING_HEAP_OCCUPANCY_PERCENT:-45}" + JAVA_OPTS="${JAVA_OPTS} -XX:G1ReservePercent=${G1_RESERVE_PERCENT:-10} -XX:G1HeapWastePercent=${G1_HEAP_WASTE_PERCENT:-5} " + JAVA_OPTS="${JAVA_OPTS} -XX:G1NewSizePercent=${G1_NEW_SIZE_PERCENT:-50} -XX:G1MaxNewSizePercent=${G1_MAX_NEW_SIZE_PERCENT:-60}" + JAVA_OPTS="${JAVA_OPTS} -XX:G1MixedGCCountTarget=${G1_MIXED_GCCOUNT_TARGET:-8}" + JAVA_OPTS="${JAVA_OPTS} -XX:G1MixedGCLiveThresholdPercent=${G1_MIXED_GCLIVE_THRESHOLD_PERCENT:-65}" + JAVA_OPTS="${JAVA_OPTS} -XX:+UseStringDeduplication -XX:+ParallelRefProcEnabled" +elif [[ "${GC_MODE}" == "CMS" ]]; then + echo "GC mode is CMS" + JAVA_OPTS="${JAVA_OPTS} -XX:+UseConcMarkSweepGC -Xmn${XMN:-512m}" + JAVA_OPTS="${JAVA_OPTS} -XX:ParallelGCThreads=${PARALLEL_GC_THREADS:-2} -XX:ConcGCThreads=${CONC_GC_THREADS:-1}" + JAVA_OPTS="${JAVA_OPTS} -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=${CMS_INITIATING_HEAP_OCCUPANCY_PERCENT:-92}" + JAVA_OPTS="${JAVA_OPTS} -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark" +fi + +if [[ "${USE_GC_LOG}" == "Y" ]]; then + echo "GC log path is '${HOME}/logs/jvm_gc.log'." + JAVA_OPTS="${JAVA_OPTS} -XX:+PrintVMOptions" + JAVA_OPTS="${JAVA_OPTS} -Xlog:gc:file=${HOME}/logs/jvm_gc-%p-%t.log:tags,uptime,time,level:filecount=${GC_LOG_FILE_COUNT:-10},filesize=${GC_LOG_FILE_SIZE:-100M}" +fi + +if [ ! -d "${HOME}/logs" ]; then + mkdir ${HOME}/logs +fi + +if [[ "${USE_HEAP_DUMP}" == "Y" ]]; then + echo "Heap dump path is '${HOME}/logs/jvm_heap_dump.hprof'." + JAVA_OPTS="${JAVA_OPTS} -XX:HeapDumpPath=${HOME}/logs/jvm_heap_dump.hprof -XX:+HeapDumpOnOutOfMemoryError" +fi + +if [[ "${USE_LARGE_PAGES}" == "Y" ]]; then + echo "Use large pages." + JAVA_OPTS="${JAVA_OPTS} -XX:+UseLargePages" +fi + +if [[ "${JDWP_DEBUG:-N}" == "Y" ]]; then + echo "Attach to remote JVM using port ${JDWP_PORT:-5005}." + JAVA_OPTS="${JAVA_OPTS} -Xdebug -Xrunjdwp:transport=dt_socket,address=${JDWP_PORT:-5005},server=y,suspend=n" +fi + +JAVA_OPTS="${JAVA_OPTS} -Dserver.port=${SERVER_PORT} -Dmanagement.server.port=${MANAGEMENT_SERVER_PORT} -Dspring.profiles.active=prod" + +exec xjar java $JAVA_OPTS -noverify -Djava.security.egd=file:/dev/./urandom zsplat.jar diff --git a/erp-turbo-admin/pom.xml b/erp-turbo-admin/pom.xml new file mode 100644 index 0000000..469dcf2 --- /dev/null +++ b/erp-turbo-admin/pom.xml @@ -0,0 +1,144 @@ + + + 4.0.0 + + + com.xunhong + ERPTurbo + 1.0.0-SNAPSHOT + ../pom.xml + + + erp-turbo-admin + 1.0.0-SNAPSHOT + + + erp-turbo-admin + 21 + 21 + UTF-8 + + + + + org.springframework.boot + spring-boot-starter + + + + com.xunhong + erp-turbo-base + + + + com.xunhong + erp-turbo-config + + + + com.xunhong + erp-turbo-file + + + + com.xunhong + erp-turbo-api + + + + com.xunhong + erp-turbo-rpc + + + + com.xunhong + erp-turbo-web + + + + com.xunhong + erp-turbo-sa-token + + + + com.xunhong + erp-turbo-apm + + + + com.xunhong + erp-turbo-logback + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + junit + junit + test + + + + + com.h2database + h2 + 1.4.200 + test + + + com.baomidou + mybatis-mate-annotation + 1.3.4 + + + + com.itextpdf + itext7-core + 8.0.3 + pom + + + com.itextpdf + html2pdf + 5.0.3 + + + + + ${application.name} + + + org.springframework.boot + spring-boot-maven-plugin + + true + + com.xunhong.erp.turbo.admin.ErpTurboAdminApplication + + + true + + ../layers/layers.xml + + + + + + package + + repackage + + + + + + + + diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/ErpTurboAdminApplication.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/ErpTurboAdminApplication.java new file mode 100644 index 0000000..e20ea32 --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/ErpTurboAdminApplication.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.admin; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * Spring Boot Starter + * + * @author shenyifei + */ +@SpringBootApplication(scanBasePackages = {"com.xunhong.erp.turbo", "com.alibaba.cola"}) +public class ErpTurboAdminApplication { + + public static void main(String[] args) { + SpringApplication.run(ErpTurboAdminApplication.class, args); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/AgreementController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/AgreementController.java new file mode 100644 index 0000000..0c0e256 --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/AgreementController.java @@ -0,0 +1,85 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.infra.api.AgreementServiceI; +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.AgreementListQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.AgreementPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.AgreementShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.AgreementVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author shenyifei + */ +@Tag(name = "Agreement", description = "协议管理") +@RestController("operationAgreementController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class AgreementController { + + @DubboReference(version = "1.0.0") + private final AgreementServiceI agreementService; + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_AGREEMENT_VIEW}) + @GetMapping("listAgreement") + @Operation(summary = "协议列表", method = "GET") + public MultiResponse listAgreement(@ModelAttribute @Validated AgreementListQry agreementListQry) { + return MultiResponse.of(agreementService.list(agreementListQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_AGREEMENT_CREATE}) + @PostMapping("createAgreement") + @Operation(summary = "创建协议", method = "POST") + public SingleResponse createAgreement(@RequestBody @Validated AgreementCreateCmd agreementCreateCmd) { + return SingleResponse.of(agreementService.create(agreementCreateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_AGREEMENT_VIEW}) + @GetMapping("showAgreement") + @Operation(summary = "协议详情", method = "GET") + public SingleResponse showAgreement(@ModelAttribute @Validated AgreementShowQry agreementShowQry) { + return SingleResponse.of(agreementService.show(agreementShowQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_AGREEMENT_VIEW}) + @GetMapping("pageAgreement") + @Operation(summary = "协议列表", method = "GET") + public PageResponse pageAgreement(@ModelAttribute @Validated AgreementPageQry agreementPageQry) { + PageDTO page = agreementService.page(agreementPageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_AGREEMENT_UPDATE}) + @RequestMapping(value = "updateAgreement", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "协议更新", method = "PATCH") + public SingleResponse updateAgreement(@RequestBody @Validated AgreementUpdateCmd agreementUpdateCmd) { + return SingleResponse.of(agreementService.update(agreementUpdateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_AGREEMENT_DELETE}) + @DeleteMapping("destroyAgreement") + @Operation(summary = "协议删除", method = "DELETE") + public Response destroyAgreement(@RequestBody @Validated AgreementDestroyCmd agreementDestroyCmd) { + agreementService.destroy(agreementDestroyCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/BoxBrandController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/BoxBrandController.java new file mode 100644 index 0000000..7ab022f --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/BoxBrandController.java @@ -0,0 +1,85 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.biz.api.BoxBrandServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxBrandListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxBrandPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxBrandShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.BoxBrandVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author shenyifei + */ +@Tag(name = "BoxBrand", description = "纸箱品牌管理") +@RestController("operationBoxBrandController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class BoxBrandController { + + @DubboReference(version = "1.0.0") + private final BoxBrandServiceI boxBrandService; + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_BOX_BRAND_VIEW}) + @GetMapping("listBoxBrand") + @Operation(summary = "纸箱品牌列表", method = "GET") + public MultiResponse listBoxBrand(@ModelAttribute @Validated BoxBrandListQry boxBrandListQry) { + return MultiResponse.of(boxBrandService.list(boxBrandListQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_BOX_BRAND_CREATE}) + @PostMapping("createBoxBrand") + @Operation(summary = "创建纸箱品牌", method = "POST") + public SingleResponse createBoxBrand(@RequestBody @Validated BoxBrandCreateCmd boxBrandCreateCmd) { + return SingleResponse.of(boxBrandService.create(boxBrandCreateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_BOX_BRAND_VIEW}) + @GetMapping("showBoxBrand") + @Operation(summary = "纸箱品牌详情", method = "GET") + public SingleResponse showBoxBrand(@ModelAttribute @Validated BoxBrandShowQry boxBrandShowQry) { + return SingleResponse.of(boxBrandService.show(boxBrandShowQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_BOX_BRAND_VIEW}) + @GetMapping("pageBoxBrand") + @Operation(summary = "纸箱品牌列表", method = "GET") + public PageResponse pageBoxBrand(@ModelAttribute @Validated BoxBrandPageQry boxBrandPageQry) { + PageDTO page = boxBrandService.page(boxBrandPageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_BOX_BRAND_UPDATE}) + @RequestMapping(value = "updateBoxBrand", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "纸箱品牌更新", method = "PATCH") + public SingleResponse updateBoxBrand(@RequestBody @Validated BoxBrandUpdateCmd boxBrandUpdateCmd) { + return SingleResponse.of(boxBrandService.update(boxBrandUpdateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_BOX_BRAND_DELETE}) + @DeleteMapping("destroyBoxBrand") + @Operation(summary = "纸箱品牌删除", method = "DELETE") + public Response destroyBoxBrand(@RequestBody @Validated BoxBrandDestroyCmd boxBrandDestroyCmd) { + boxBrandService.destroy(boxBrandDestroyCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/BoxProductController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/BoxProductController.java new file mode 100644 index 0000000..e71bab8 --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/BoxProductController.java @@ -0,0 +1,85 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.biz.api.BoxProductServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxProductListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxProductPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxProductShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.BoxProductVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author shenyifei + */ +@Tag(name = "BoxProduct", description = "纸箱产品管理") +@RestController("operationBoxProductController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class BoxProductController { + + @DubboReference(version = "1.0.0") + private final BoxProductServiceI boxProductService; + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_BOX_PRODUCT_VIEW}) + @GetMapping("listBoxProduct") + @Operation(summary = "纸箱产品列表", method = "GET") + public MultiResponse listBoxProduct(@ModelAttribute @Validated BoxProductListQry boxProductListQry) { + return MultiResponse.of(boxProductService.list(boxProductListQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_BOX_PRODUCT_CREATE}) + @PostMapping("createBoxProduct") + @Operation(summary = "创建纸箱产品", method = "POST") + public SingleResponse createBoxProduct(@RequestBody @Validated BoxProductCreateCmd boxProductCreateCmd) { + return SingleResponse.of(boxProductService.create(boxProductCreateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_BOX_PRODUCT_VIEW}) + @GetMapping("showBoxProduct") + @Operation(summary = "纸箱产品详情", method = "GET") + public SingleResponse showBoxProduct(@ModelAttribute @Validated BoxProductShowQry boxProductShowQry) { + return SingleResponse.of(boxProductService.show(boxProductShowQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_BOX_PRODUCT_VIEW}) + @GetMapping("pageBoxProduct") + @Operation(summary = "纸箱产品列表", method = "GET") + public PageResponse pageBoxProduct(@ModelAttribute @Validated BoxProductPageQry boxProductPageQry) { + PageDTO page = boxProductService.page(boxProductPageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_BOX_PRODUCT_UPDATE}) + @RequestMapping(value = "updateBoxProduct", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "纸箱产品更新", method = "PATCH") + public SingleResponse updateBoxProduct(@RequestBody @Validated BoxProductUpdateCmd boxProductUpdateCmd) { + return SingleResponse.of(boxProductService.update(boxProductUpdateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_BOX_PRODUCT_DELETE}) + @DeleteMapping("destroyBoxProduct") + @Operation(summary = "纸箱产品删除", method = "DELETE") + public Response destroyBoxProduct(@RequestBody @Validated BoxProductDestroyCmd boxProductDestroyCmd) { + boxProductService.destroy(boxProductDestroyCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/ChannelController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/ChannelController.java new file mode 100644 index 0000000..6d5af23 --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/ChannelController.java @@ -0,0 +1,74 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.infra.api.ChannelServiceI; +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.ChannelPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.ChannelShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.ChannelVO; +import com.xunhong.erp.turbo.api.rbac.dto.constants.PermissionConstant; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +@Tag(name = "Channel", description = "渠道管理") +@RestController("operationChannelController") +@RequestMapping("/operation") +@RequiredArgsConstructor +public class ChannelController { + + @DubboReference(version = "1.0.0") + private final ChannelServiceI channelService; + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_CHANNEL_VIEW}) + @GetMapping("/pageChannel") + @Operation(summary = "渠道分页", method = "GET") + public PageResponse pageChannel(@ModelAttribute @Validated ChannelPageQry channelPageQry) { + PageDTO page = channelService.page(channelPageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_CHANNEL_CREATE}) + @PostMapping("/createChannel") + @Operation(summary = "创建渠道", method = "POST") + public SingleResponse createChannel(@RequestBody @Validated ChannelCreateCmd channelCreateCmd) { + return SingleResponse.of(channelService.create(channelCreateCmd)); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_CHANNEL_VIEW}) + @GetMapping("/showChannel") + @Operation(summary = "渠道详情", method = "GET") + public SingleResponse showChannel(@ModelAttribute @Validated ChannelShowQry channelShowQry) { + return SingleResponse.of(channelService.show(channelShowQry)); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_CHANNEL_UPDATE}) + @RequestMapping(value = "/updateChannel", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "渠道更新", method = "PATCH") + public SingleResponse updateChannel(@RequestBody @Validated ChannelUpdateCmd channelUpdateCmd) { + return SingleResponse.of(channelService.update(channelUpdateCmd)); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_CHANNEL_DELETE}) + @DeleteMapping(value = "/destroyChannel") + @Operation(summary = "渠道删除", method = "DELETE") + public Response destroyChannel(@RequestBody @Validated ChannelDestroyCmd channelDestroyCmd) { + channelService.destroy(channelDestroyCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/CompanyController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/CompanyController.java new file mode 100644 index 0000000..374286d --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/CompanyController.java @@ -0,0 +1,85 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.biz.api.CompanyServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.CompanyVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author shenyifei + */ +@Tag(name = "Company", description = "公司管理管理") +@RestController("operationCompanyController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class CompanyController { + + @DubboReference(version = "1.0.0") + private final CompanyServiceI companyService; + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_COMPANY_VIEW}) + @GetMapping("listCompany") + @Operation(summary = "公司管理列表", method = "GET") + public MultiResponse listCompany(@ModelAttribute @Validated CompanyListQry companyListQry) { + return MultiResponse.of(companyService.list(companyListQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_COMPANY_CREATE}) + @PostMapping("createCompany") + @Operation(summary = "创建公司管理", method = "POST") + public SingleResponse createCompany(@RequestBody @Validated CompanyCreateCmd companyCreateCmd) { + return SingleResponse.of(companyService.create(companyCreateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_COMPANY_VIEW}) + @GetMapping("showCompany") + @Operation(summary = "公司管理详情", method = "GET") + public SingleResponse showCompany(@ModelAttribute @Validated CompanyShowQry companyShowQry) { + return SingleResponse.of(companyService.show(companyShowQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_COMPANY_VIEW}) + @GetMapping("pageCompany") + @Operation(summary = "公司管理列表", method = "GET") + public PageResponse pageCompany(@ModelAttribute @Validated CompanyPageQry companyPageQry) { + PageDTO page = companyService.page(companyPageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_COMPANY_UPDATE}) + @RequestMapping(value = "updateCompany", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "公司管理更新", method = "PATCH") + public SingleResponse updateCompany(@RequestBody @Validated CompanyUpdateCmd companyUpdateCmd) { + return SingleResponse.of(companyService.update(companyUpdateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_COMPANY_DELETE}) + @DeleteMapping("destroyCompany") + @Operation(summary = "公司管理删除", method = "DELETE") + public Response destroyCompany(@RequestBody @Validated CompanyDestroyCmd companyDestroyCmd) { + companyService.destroy(companyDestroyCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/CompanyPaymentAccountController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/CompanyPaymentAccountController.java new file mode 100644 index 0000000..afd1076 --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/CompanyPaymentAccountController.java @@ -0,0 +1,85 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.biz.api.CompanyPaymentAccountServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPaymentAccountListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPaymentAccountPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPaymentAccountShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.CompanyPaymentAccountVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author shenyifei + */ +@Tag(name = "CompanyPaymentAccount", description = "公司付款账户管理") +@RestController("operationCompanyPaymentAccountController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class CompanyPaymentAccountController { + + @DubboReference(version = "1.0.0") + private final CompanyPaymentAccountServiceI companyPaymentAccountService; + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_COMPANY_PAYMENT_ACCOUNT_VIEW}) + @GetMapping("listCompanyPaymentAccount") + @Operation(summary = "公司付款账户列表", method = "GET") + public MultiResponse listCompanyPaymentAccount(@ModelAttribute @Validated CompanyPaymentAccountListQry companyPaymentAccountListQry) { + return MultiResponse.of(companyPaymentAccountService.list(companyPaymentAccountListQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_COMPANY_PAYMENT_ACCOUNT_CREATE}) + @PostMapping("createCompanyPaymentAccount") + @Operation(summary = "创建公司付款账户", method = "POST") + public SingleResponse createCompanyPaymentAccount(@RequestBody @Validated CompanyPaymentAccountCreateCmd companyPaymentAccountCreateCmd) { + return SingleResponse.of(companyPaymentAccountService.create(companyPaymentAccountCreateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_COMPANY_PAYMENT_ACCOUNT_VIEW}) + @GetMapping("showCompanyPaymentAccount") + @Operation(summary = "公司付款账户详情", method = "GET") + public SingleResponse showCompanyPaymentAccount(@ModelAttribute @Validated CompanyPaymentAccountShowQry companyPaymentAccountShowQry) { + return SingleResponse.of(companyPaymentAccountService.show(companyPaymentAccountShowQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_COMPANY_PAYMENT_ACCOUNT_VIEW}) + @GetMapping("pageCompanyPaymentAccount") + @Operation(summary = "公司付款账户列表", method = "GET") + public PageResponse pageCompanyPaymentAccount(@ModelAttribute @Validated CompanyPaymentAccountPageQry companyPaymentAccountPageQry) { + PageDTO page = companyPaymentAccountService.page(companyPaymentAccountPageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_COMPANY_PAYMENT_ACCOUNT_UPDATE}) + @RequestMapping(value = "updateCompanyPaymentAccount", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "公司付款账户更新", method = "PATCH") + public SingleResponse updateCompanyPaymentAccount(@RequestBody @Validated CompanyPaymentAccountUpdateCmd companyPaymentAccountUpdateCmd) { + return SingleResponse.of(companyPaymentAccountService.update(companyPaymentAccountUpdateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_COMPANY_PAYMENT_ACCOUNT_DELETE}) + @DeleteMapping("destroyCompanyPaymentAccount") + @Operation(summary = "公司付款账户删除", method = "DELETE") + public Response destroyCompanyPaymentAccount(@RequestBody @Validated CompanyPaymentAccountDestroyCmd companyPaymentAccountDestroyCmd) { + companyPaymentAccountService.destroy(companyPaymentAccountDestroyCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/CostItemController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/CostItemController.java new file mode 100644 index 0000000..f92559c --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/CostItemController.java @@ -0,0 +1,85 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.biz.api.CostItemServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.CostItemListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CostItemPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CostItemShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.CostItemVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author shenyifei + */ +@Tag(name = "CostItem", description = "费用项目管理") +@RestController("operationCostItemController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class CostItemController { + + @DubboReference(version = "1.0.0") + private final CostItemServiceI costItemService; + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_COST_ITEM_VIEW}) + @GetMapping("listCostItem") + @Operation(summary = "费用项目列表", method = "GET") + public MultiResponse listCostItem(@ModelAttribute @Validated CostItemListQry costItemListQry) { + return MultiResponse.of(costItemService.list(costItemListQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_COST_ITEM_CREATE}) + @PostMapping("createCostItem") + @Operation(summary = "创建费用项目", method = "POST") + public SingleResponse createCostItem(@RequestBody @Validated CostItemCreateCmd costItemCreateCmd) { + return SingleResponse.of(costItemService.create(costItemCreateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_COST_ITEM_VIEW}) + @GetMapping("showCostItem") + @Operation(summary = "费用项目详情", method = "GET") + public SingleResponse showCostItem(@ModelAttribute @Validated CostItemShowQry costItemShowQry) { + return SingleResponse.of(costItemService.show(costItemShowQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_COST_ITEM_VIEW}) + @GetMapping("pageCostItem") + @Operation(summary = "费用项目列表", method = "GET") + public PageResponse pageCostItem(@ModelAttribute @Validated CostItemPageQry costItemPageQry) { + PageDTO page = costItemService.page(costItemPageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_COST_ITEM_UPDATE}) + @RequestMapping(value = "updateCostItem", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "费用项目更新", method = "PATCH") + public SingleResponse updateCostItem(@RequestBody @Validated CostItemUpdateCmd costItemUpdateCmd) { + return SingleResponse.of(costItemService.update(costItemUpdateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_COST_ITEM_DELETE}) + @DeleteMapping("destroyCostItem") + @Operation(summary = "费用项目删除", method = "DELETE") + public Response destroyCostItem(@RequestBody @Validated CostItemDestroyCmd costItemDestroyCmd) { + costItemService.destroy(costItemDestroyCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DealerController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DealerController.java new file mode 100644 index 0000000..3ed30ef --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DealerController.java @@ -0,0 +1,85 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.biz.api.DealerServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author shenyifei + */ +@Tag(name = "Dealer", description = "经销商表管理") +@RestController("operationDealerController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class DealerController { + + @DubboReference(version = "1.0.0") + private final DealerServiceI dealerService; + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_VIEW}) + @GetMapping("listDealer") + @Operation(summary = "经销商表列表", method = "GET") + public MultiResponse listDealer(@ModelAttribute @Validated DealerListQry dealerListQry) { + return MultiResponse.of(dealerService.list(dealerListQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_CREATE}) + @PostMapping("createDealer") + @Operation(summary = "创建经销商表", method = "POST") + public SingleResponse createDealer(@RequestBody @Validated DealerCreateCmd dealerCreateCmd) { + return SingleResponse.of(dealerService.create(dealerCreateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_VIEW}) + @GetMapping("showDealer") + @Operation(summary = "经销商表详情", method = "GET") + public SingleResponse showDealer(@ModelAttribute @Validated DealerShowQry dealerShowQry) { + return SingleResponse.of(dealerService.show(dealerShowQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_VIEW}) + @GetMapping("pageDealer") + @Operation(summary = "经销商表列表", method = "GET") + public PageResponse pageDealer(@ModelAttribute @Validated DealerPageQry dealerPageQry) { + PageDTO page = dealerService.page(dealerPageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_UPDATE}) + @RequestMapping(value = "updateDealer", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "经销商表更新", method = "PATCH") + public SingleResponse updateDealer(@RequestBody @Validated DealerUpdateCmd dealerUpdateCmd) { + return SingleResponse.of(dealerService.update(dealerUpdateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_DELETE}) + @DeleteMapping("destroyDealer") + @Operation(summary = "经销商表删除", method = "DELETE") + public Response destroyDealer(@RequestBody @Validated DealerDestroyCmd dealerDestroyCmd) { + dealerService.destroy(dealerDestroyCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DealerPaymentAccountController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DealerPaymentAccountController.java new file mode 100644 index 0000000..0ac117e --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DealerPaymentAccountController.java @@ -0,0 +1,85 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.biz.api.DealerPaymentAccountServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPaymentAccountListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPaymentAccountPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPaymentAccountShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerPaymentAccountVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author shenyifei + */ +@Tag(name = "DealerPaymentAccount", description = "经销商付款账户管理") +@RestController("operationDealerPaymentAccountController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class DealerPaymentAccountController { + + @DubboReference(version = "1.0.0") + private final DealerPaymentAccountServiceI dealerPaymentAccountService; + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_PAYMENT_ACCOUNT_VIEW}) + @GetMapping("listDealerPaymentAccount") + @Operation(summary = "经销商付款账户列表", method = "GET") + public MultiResponse listDealerPaymentAccount(@ModelAttribute @Validated DealerPaymentAccountListQry dealerPaymentAccountListQry) { + return MultiResponse.of(dealerPaymentAccountService.list(dealerPaymentAccountListQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_PAYMENT_ACCOUNT_CREATE}) + @PostMapping("createDealerPaymentAccount") + @Operation(summary = "创建经销商付款账户", method = "POST") + public SingleResponse createDealerPaymentAccount(@RequestBody @Validated DealerPaymentAccountCreateCmd dealerPaymentAccountCreateCmd) { + return SingleResponse.of(dealerPaymentAccountService.create(dealerPaymentAccountCreateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_PAYMENT_ACCOUNT_VIEW}) + @GetMapping("showDealerPaymentAccount") + @Operation(summary = "经销商付款账户详情", method = "GET") + public SingleResponse showDealerPaymentAccount(@ModelAttribute @Validated DealerPaymentAccountShowQry dealerPaymentAccountShowQry) { + return SingleResponse.of(dealerPaymentAccountService.show(dealerPaymentAccountShowQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_PAYMENT_ACCOUNT_VIEW}) + @GetMapping("pageDealerPaymentAccount") + @Operation(summary = "经销商付款账户列表", method = "GET") + public PageResponse pageDealerPaymentAccount(@ModelAttribute @Validated DealerPaymentAccountPageQry dealerPaymentAccountPageQry) { + PageDTO page = dealerPaymentAccountService.page(dealerPaymentAccountPageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_PAYMENT_ACCOUNT_UPDATE}) + @RequestMapping(value = "updateDealerPaymentAccount", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "经销商付款账户更新", method = "PATCH") + public SingleResponse updateDealerPaymentAccount(@RequestBody @Validated DealerPaymentAccountUpdateCmd dealerPaymentAccountUpdateCmd) { + return SingleResponse.of(dealerPaymentAccountService.update(dealerPaymentAccountUpdateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_PAYMENT_ACCOUNT_DELETE}) + @DeleteMapping("destroyDealerPaymentAccount") + @Operation(summary = "经销商付款账户删除", method = "DELETE") + public Response destroyDealerPaymentAccount(@RequestBody @Validated DealerPaymentAccountDestroyCmd dealerPaymentAccountDestroyCmd) { + dealerPaymentAccountService.destroy(dealerPaymentAccountDestroyCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DealerRebateCustomerController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DealerRebateCustomerController.java new file mode 100644 index 0000000..ad8fa66 --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DealerRebateCustomerController.java @@ -0,0 +1,85 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.biz.api.DealerRebateCustomerServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerRebateCustomerListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerRebateCustomerPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerRebateCustomerShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerRebateCustomerVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author shenyifei + */ +@Tag(name = "DealerRebateCustomer", description = "经销商返点客户管理") +@RestController("operationDealerRebateCustomerController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class DealerRebateCustomerController { + + @DubboReference(version = "1.0.0") + private final DealerRebateCustomerServiceI dealerRebateCustomerService; + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_REBATE_CUSTOMER_VIEW}) + @GetMapping("listDealerRebateCustomer") + @Operation(summary = "经销商返点客户列表", method = "GET") + public MultiResponse listDealerRebateCustomer(@ModelAttribute @Validated DealerRebateCustomerListQry dealerRebateCustomerListQry) { + return MultiResponse.of(dealerRebateCustomerService.list(dealerRebateCustomerListQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_REBATE_CUSTOMER_CREATE}) + @PostMapping("createDealerRebateCustomer") + @Operation(summary = "创建经销商返点客户", method = "POST") + public SingleResponse createDealerRebateCustomer(@RequestBody @Validated DealerRebateCustomerCreateCmd dealerRebateCustomerCreateCmd) { + return SingleResponse.of(dealerRebateCustomerService.create(dealerRebateCustomerCreateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_REBATE_CUSTOMER_VIEW}) + @GetMapping("showDealerRebateCustomer") + @Operation(summary = "经销商返点客户详情", method = "GET") + public SingleResponse showDealerRebateCustomer(@ModelAttribute @Validated DealerRebateCustomerShowQry dealerRebateCustomerShowQry) { + return SingleResponse.of(dealerRebateCustomerService.show(dealerRebateCustomerShowQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_REBATE_CUSTOMER_VIEW}) + @GetMapping("pageDealerRebateCustomer") + @Operation(summary = "经销商返点客户列表", method = "GET") + public PageResponse pageDealerRebateCustomer(@ModelAttribute @Validated DealerRebateCustomerPageQry dealerRebateCustomerPageQry) { + PageDTO page = dealerRebateCustomerService.page(dealerRebateCustomerPageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_REBATE_CUSTOMER_UPDATE}) + @RequestMapping(value = "updateDealerRebateCustomer", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "经销商返点客户更新", method = "PATCH") + public SingleResponse updateDealerRebateCustomer(@RequestBody @Validated DealerRebateCustomerUpdateCmd dealerRebateCustomerUpdateCmd) { + return SingleResponse.of(dealerRebateCustomerService.update(dealerRebateCustomerUpdateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_REBATE_CUSTOMER_DELETE}) + @DeleteMapping("destroyDealerRebateCustomer") + @Operation(summary = "经销商返点客户删除", method = "DELETE") + public Response destroyDealerRebateCustomer(@RequestBody @Validated DealerRebateCustomerDestroyCmd dealerRebateCustomerDestroyCmd) { + dealerRebateCustomerService.destroy(dealerRebateCustomerDestroyCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DealerWarehouseController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DealerWarehouseController.java new file mode 100644 index 0000000..4fc2ee6 --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DealerWarehouseController.java @@ -0,0 +1,85 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.biz.api.DealerWarehouseServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerWarehouseListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerWarehousePageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerWarehouseShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerWarehouseVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author shenyifei + */ +@Tag(name = "DealerWarehouse", description = "经销商仓库管理") +@RestController("operationDealerWarehouseController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class DealerWarehouseController { + + @DubboReference(version = "1.0.0") + private final DealerWarehouseServiceI dealerWarehouseService; + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_WAREHOUSE_VIEW}) + @GetMapping("listDealerWarehouse") + @Operation(summary = "经销商仓库列表", method = "GET") + public MultiResponse listDealerWarehouse(@ModelAttribute @Validated DealerWarehouseListQry dealerWarehouseListQry) { + return MultiResponse.of(dealerWarehouseService.list(dealerWarehouseListQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_WAREHOUSE_CREATE}) + @PostMapping("createDealerWarehouse") + @Operation(summary = "创建经销商仓库", method = "POST") + public SingleResponse createDealerWarehouse(@RequestBody @Validated DealerWarehouseCreateCmd dealerWarehouseCreateCmd) { + return SingleResponse.of(dealerWarehouseService.create(dealerWarehouseCreateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_WAREHOUSE_VIEW}) + @GetMapping("showDealerWarehouse") + @Operation(summary = "经销商仓库详情", method = "GET") + public SingleResponse showDealerWarehouse(@ModelAttribute @Validated DealerWarehouseShowQry dealerWarehouseShowQry) { + return SingleResponse.of(dealerWarehouseService.show(dealerWarehouseShowQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_WAREHOUSE_VIEW}) + @GetMapping("pageDealerWarehouse") + @Operation(summary = "经销商仓库列表", method = "GET") + public PageResponse pageDealerWarehouse(@ModelAttribute @Validated DealerWarehousePageQry dealerWarehousePageQry) { + PageDTO page = dealerWarehouseService.page(dealerWarehousePageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_WAREHOUSE_UPDATE}) + @RequestMapping(value = "updateDealerWarehouse", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "经销商仓库更新", method = "PATCH") + public SingleResponse updateDealerWarehouse(@RequestBody @Validated DealerWarehouseUpdateCmd dealerWarehouseUpdateCmd) { + return SingleResponse.of(dealerWarehouseService.update(dealerWarehouseUpdateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DEALER_WAREHOUSE_DELETE}) + @DeleteMapping("destroyDealerWarehouse") + @Operation(summary = "经销商仓库删除", method = "DELETE") + public Response destroyDealerWarehouse(@RequestBody @Validated DealerWarehouseDestroyCmd dealerWarehouseDestroyCmd) { + dealerWarehouseService.destroy(dealerWarehouseDestroyCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DictionaryController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DictionaryController.java new file mode 100644 index 0000000..5795a18 --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/DictionaryController.java @@ -0,0 +1,85 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.infra.api.DictionaryServiceI; +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.DictionaryListQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.DictionaryPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.DictionaryShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.DictionaryVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author shenyifei + */ +@Tag(name = "Dictionary", description = "字典管理") +@RestController("DictionaryController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class DictionaryController { + + @DubboReference(version = "1.0.0") + private final DictionaryServiceI dictionaryService; + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DICTIONARY_VIEW}) + @GetMapping("listDictionary") + @Operation(summary = "字典列表", method = "GET") + public MultiResponse listDictionary(@ModelAttribute @Validated DictionaryListQry dictionaryListQry) { + return MultiResponse.of(dictionaryService.list(dictionaryListQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DICTIONARY_CREATE}) + @PostMapping("createDictionary") + @Operation(summary = "创建字典", method = "POST") + public SingleResponse createDictionary(@RequestBody @Validated DictionaryCreateCmd dictionaryCreateCmd) { + return SingleResponse.of(dictionaryService.create(dictionaryCreateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DICTIONARY_VIEW}) + @GetMapping("showDictionary") + @Operation(summary = "字典详情", method = "GET") + public SingleResponse showDictionary(@ModelAttribute @Validated DictionaryShowQry dictionaryShowQry) { + return SingleResponse.of(dictionaryService.show(dictionaryShowQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DICTIONARY_VIEW}) + @GetMapping("pageDictionary") + @Operation(summary = "字典列表", method = "GET") + public PageResponse pageDictionary(@ModelAttribute @Validated DictionaryPageQry dictionaryPageQry) { + PageDTO page = dictionaryService.page(dictionaryPageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DICTIONARY_UPDATE}) + @RequestMapping(value = "updateDictionary", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "字典更新", method = "PATCH") + public SingleResponse updateDictionary(@RequestBody @Validated DictionaryUpdateCmd dictionaryUpdateCmd) { + return SingleResponse.of(dictionaryService.update(dictionaryUpdateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_DICTIONARY_DELETE}) + @DeleteMapping("destroyDictionary") + @Operation(summary = "字典删除", method = "DELETE") + public Response destroyDictionary(@RequestBody @Validated DictionaryDestroyCmd dictionaryDestroyCmd) { + dictionaryService.destroy(dictionaryDestroyCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/EmployeeController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/EmployeeController.java new file mode 100644 index 0000000..87ecfe9 --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/EmployeeController.java @@ -0,0 +1,194 @@ + +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckSafe; +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.collection.CollUtil; +import cn.monitor4all.logRecord.annotation.OperationLog; +import cn.monitor4all.logRecord.context.LogRecordContext; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.rbac.api.UserRoleServiceI; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.UserRoleCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.UserRoleUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.qry.UserRoleListQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.UserRoleVO; +import com.xunhong.erp.turbo.api.user.api.EmployeeServiceI; +import com.xunhong.erp.turbo.api.user.dto.cmd.*; +import com.xunhong.erp.turbo.api.user.dto.qry.EmployeeListQry; +import com.xunhong.erp.turbo.api.user.dto.qry.EmployeePageQry; +import com.xunhong.erp.turbo.api.user.dto.qry.EmployeeShowQry; +import com.xunhong.erp.turbo.api.user.dto.vo.EmployeeVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + * @author shenyifei + */ +@Tag(name = "Employee", description = "员工信息管理") +@RestController("operationEmployeeController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class EmployeeController { + + @DubboReference(version = "1.0.0") + private final EmployeeServiceI employeeService; + + @DubboReference(version = "1.0.0") + private final UserRoleServiceI userRoleService; + + @SaCheckLogin + @SaCheckSafe +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_EMPLOYEE_REST_PASSWORD}) + @PostMapping("restEmployeePassword") + @Operation(summary = "重置员工密码", method = "POST") + public Response restEmployeePassword(@RequestBody @Validated EmployeeRestPasswordCmd employeeRestPasswordCmd) { + employeeService.restPassword(employeeRestPasswordCmd); + + // 强制注销 + StpUtil.logout(employeeRestPasswordCmd.getUserId()); + return Response.buildSuccess(); + } + + @SaCheckLogin + @SaCheckSafe +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_EMPLOYEE_DISABLE}) + @PostMapping("disableEmployee") + @Operation(summary = "封禁员工", method = "POST") + @OperationLog(bizId = "#employeeVO.employeeId", bizType = "'disableEmployee'", msg = "'封禁员工:' + #employeeVO.name + '(工号:' + #employeeVO.number + ')'", operatorId = "T(cn.dev33.satoken.stp.StpUtil).getLoginIdAsLong()") + public Response disableEmployee(@RequestBody @Validated EmployeeDisableCmd employeeDisableCmd) { + EmployeeVO employeeVO = employeeService.disable(employeeDisableCmd); + + // 踢他下线 + StpUtil.kickout(employeeVO.getUserId()); + // 永久封禁 + StpUtil.disable(employeeVO.getUserId(), -1); + return Response.buildSuccess(); + } + + @SaCheckLogin + @SaCheckSafe +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_EMPLOYEE_ROLE_UPDATE}) + @PostMapping("updateEmployeeRole") + @Operation(summary = "修改员工角色", method = "POST") + @OperationLog(bizId = "#employeeVO.employeeId", bizType = "'updateEmployeeRole'", msg = "'修改员工角色:' + #employeeVO.name + '(工号:' + #employeeVO.number + ')'", extra = "#_DIFF(#oldEmployeeVO, #employeeVO)", operatorId = "T(cn.dev33.satoken.stp.StpUtil).getLoginIdAsLong()") + public Response updateEmployeeRole(@RequestBody @Validated UserRoleUpdateCmd userRoleUpdateCmd) { + userRoleService.update(userRoleUpdateCmd); + + // 强制注销 + StpUtil.logout(userRoleUpdateCmd.getUserId()); + return Response.buildSuccess(); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_EMPLOYEE_VIEW}) + @GetMapping("listEmployee") + @Operation(summary = "员工信息列表", method = "GET") + public MultiResponse listEmployee(@ModelAttribute @Validated EmployeeListQry employeeListQry) { + return MultiResponse.of(employeeService.list(employeeListQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_EMPLOYEE_CREATE}) + @PostMapping("createEmployee") + @Operation(summary = "创建员工信息", method = "POST") + @OperationLog(bizId = "#employeeVO.employeeId", bizType = "'createEmployee'", msg = "'创建员工:' + #employeeVO.name + '(工号:' + #employeeVO.number + ')'", operatorId = "T(cn.dev33.satoken.stp.StpUtil).getLoginIdAsLong()") + public SingleResponse createEmployee(@RequestBody @Validated EmployeeCreateCmd employeeCreateCmd) { + // 创建员工,注册用户,注册管理员 + EmployeeVO employeeVO = employeeService.create(employeeCreateCmd); + + // 赋予用户权限 + UserRoleCreateCmd userRoleCreateCmd = new UserRoleCreateCmd(); + userRoleCreateCmd.setRoleId(employeeCreateCmd.getRoleId()); + userRoleCreateCmd.setUserId(employeeVO.getUserId()); + List userRoleVOList = userRoleService.create(userRoleCreateCmd); + + employeeVO.setRoleIdList(userRoleVOList.stream().map(UserRoleVO::getRoleId).toList()); + LogRecordContext.putVariable("employeeVO", employeeVO); + + return SingleResponse.of(employeeVO); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_EMPLOYEE_VIEW}) + @GetMapping("showEmployee") + @Operation(summary = "员工信息详情", method = "GET") + @OperationLog(bizId = "#employeeShowQry.employeeId", bizType = "'showEmployee'", msg = "'查看员工:' + #employeeVO.name + '(工号:' + #employeeVO.number + ')'", operatorId = "T(cn.dev33.satoken.stp.StpUtil).getLoginIdAsLong()") + public SingleResponse showEmployee(@ModelAttribute @Validated EmployeeShowQry employeeShowQry) { + EmployeeVO employeeVO = employeeService.show(employeeShowQry); + + // 获取角色 + UserRoleListQry userRoleListQry = new UserRoleListQry(); + userRoleListQry.setUserId(employeeVO.getUserId()); + List userRoleVOList = userRoleService.list(userRoleListQry); + + employeeVO.setRoleIdList(userRoleVOList.stream().map(UserRoleVO::getRoleId).toList()); + LogRecordContext.putVariable("employeeVO", employeeVO); + + return SingleResponse.of(employeeVO); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_EMPLOYEE_VIEW}) + @GetMapping("pageEmployee") + @Operation(summary = "员工信息列表", method = "GET") + public PageResponse pageEmployee(@ModelAttribute @Validated EmployeePageQry employeePageQry) { + PageDTO page = employeeService.page(employeePageQry); + List userIdList = page.getRecords().stream().map(EmployeeVO::getUserId).toList(); + if (CollUtil.isNotEmpty(userIdList)) { + UserRoleListQry userRoleListQry = new UserRoleListQry(); + userRoleListQry.setUserIdList(userIdList); + List userRoleVOList = userRoleService.list(userRoleListQry); + page.getRecords().forEach(employeeVO -> employeeVO.setRoleIdList(userRoleVOList.stream().filter(userRoleVO -> userRoleVO.getUserId().equals(employeeVO.getUserId())).map(UserRoleVO::getRoleId).toList())); + + } + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_EMPLOYEE_UPDATE}) + @RequestMapping(value = "updateEmployee", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "员工信息更新", method = "PATCH") + @OperationLog(bizId = "#employeeVO.employeeId", bizType = "'updateEmployee'", msg = "'更新员工:' + #employeeVO.name + '(工号:' + #employeeVO.number + ')'", extra = "#_DIFF(#oldEmployeeVO, #employeeVO)", operatorId = "T(cn.dev33.satoken.stp.StpUtil).getLoginIdAsLong()") + public SingleResponse updateEmployee(@RequestBody @Validated EmployeeUpdateCmd employeeUpdateCmd) { + EmployeeShowQry employeeShowQry = new EmployeeShowQry(); + employeeShowQry.setEmployeeId(employeeUpdateCmd.getEmployeeId()); + LogRecordContext.putVariable("oldEmployeeVO", employeeService.show(employeeShowQry)); + + EmployeeVO employeeVO = employeeService.update(employeeUpdateCmd); + LogRecordContext.putVariable("employeeVO", employeeVO); + + return SingleResponse.of(employeeVO); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_EMPLOYEE_DELETE}) + @DeleteMapping("destroyEmployee") + @Operation(summary = "员工信息删除", method = "DELETE") + @OperationLog(bizId = "#employeeVO.employeeId", bizType = "'destroyEmployee'", msg = "'删除员工:' + #employeeVO.name + '(工号:' + #employeeVO.number + ')'", operatorId = "T(cn.dev33.satoken.stp.StpUtil).getLoginIdAsLong()") + public Response destroyEmployee(@RequestBody @Validated EmployeeDestroyCmd employeeDestroyCmd) { + EmployeeShowQry employeeShowQry = new EmployeeShowQry(); + employeeShowQry.setEmployeeId(employeeDestroyCmd.getEmployeeId()); + + EmployeeVO employeeVO = employeeService.show(employeeShowQry); + if (Objects.isNull(employeeVO)) { + return Response.buildFailure("400", "员工不存在"); + } + + LogRecordContext.putVariable("employeeVO", employeeVO); + + employeeService.destroy(employeeDestroyCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/ExtractionController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/ExtractionController.java new file mode 100644 index 0000000..5c7bc24 --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/ExtractionController.java @@ -0,0 +1,38 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.facade.api.DeepSeekServiceI; +import com.xunhong.erp.turbo.api.facade.dto.cmd.VehicleExtractionCmd; +import com.xunhong.erp.turbo.api.facade.dto.vo.VehicleExtractionVO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 聊天 + */ +@Slf4j +@Tag(name = "Extraction", description = "信息抽取") +@RestController("operationExtractionController") +@RequestMapping("/operation") +@RequiredArgsConstructor +public class ExtractionController { + + @DubboReference(version = "1.0.0") + private final DeepSeekServiceI deepSeekService; + + @SaCheckLogin + @PostMapping("/extraction/vehicle") + @Operation(summary = "智能提取物流信息", method = "POST") + public SingleResponse vehicleExtraction(@RequestBody @Validated VehicleExtractionCmd vehicleExtractionCmd) { + return SingleResponse.of(deepSeekService.vehicleExtraction(vehicleExtractionCmd)); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/GiftBoxController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/GiftBoxController.java new file mode 100644 index 0000000..788dc9b --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/GiftBoxController.java @@ -0,0 +1,85 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.biz.api.GiftBoxServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.GiftBoxListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.GiftBoxPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.GiftBoxShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.GiftBoxVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author shenyifei + */ +@Tag(name = "GiftBox", description = "礼盒管理") +@RestController("operationGiftBoxController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class GiftBoxController { + + @DubboReference(version = "1.0.0") + private final GiftBoxServiceI giftBoxService; + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_GIFT_BOX_VIEW}) + @GetMapping("listGiftBox") + @Operation(summary = "礼盒列表", method = "GET") + public MultiResponse listGiftBox(@ModelAttribute @Validated GiftBoxListQry giftBoxListQry) { + return MultiResponse.of(giftBoxService.list(giftBoxListQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_GIFT_BOX_CREATE}) + @PostMapping("createGiftBox") + @Operation(summary = "创建礼盒", method = "POST") + public SingleResponse createGiftBox(@RequestBody @Validated GiftBoxCreateCmd giftBoxCreateCmd) { + return SingleResponse.of(giftBoxService.create(giftBoxCreateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_GIFT_BOX_VIEW}) + @GetMapping("showGiftBox") + @Operation(summary = "礼盒详情", method = "GET") + public SingleResponse showGiftBox(@ModelAttribute @Validated GiftBoxShowQry giftBoxShowQry) { + return SingleResponse.of(giftBoxService.show(giftBoxShowQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_GIFT_BOX_VIEW}) + @GetMapping("pageGiftBox") + @Operation(summary = "礼盒列表", method = "GET") + public PageResponse pageGiftBox(@ModelAttribute @Validated GiftBoxPageQry giftBoxPageQry) { + PageDTO page = giftBoxService.page(giftBoxPageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_GIFT_BOX_UPDATE}) + @RequestMapping(value = "updateGiftBox", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "礼盒更新", method = "PATCH") + public SingleResponse updateGiftBox(@RequestBody @Validated GiftBoxUpdateCmd giftBoxUpdateCmd) { + return SingleResponse.of(giftBoxService.update(giftBoxUpdateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_GIFT_BOX_DELETE}) + @DeleteMapping("destroyGiftBox") + @Operation(summary = "礼盒删除", method = "DELETE") + public Response destroyGiftBox(@RequestBody @Validated GiftBoxDestroyCmd giftBoxDestroyCmd) { + giftBoxService.destroy(giftBoxDestroyCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/MaterialCategoryController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/MaterialCategoryController.java new file mode 100644 index 0000000..212c505 --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/MaterialCategoryController.java @@ -0,0 +1,99 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.hutool.core.lang.tree.Tree; +import cn.hutool.core.lang.tree.TreeNodeConfig; +import cn.hutool.core.lang.tree.TreeUtil; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.infra.api.CategoryServiceI; +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.enums.CategoryTypeEnum; +import com.xunhong.erp.turbo.api.infra.dto.qry.CategoryShowQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.CategoryTreeQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.CategoryVO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +@Tag(name = "MaterialCategory", description = "素材分类") +@RestController("operationMaterialCategoryController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class MaterialCategoryController { + @DubboReference(version = "1.0.0") + private final CategoryServiceI categoryService; + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.OPERATION_MATERIAL_CATEGORY_VIEW}, mode = SaMode.OR) + @GetMapping("/treeMaterialCategory") + @Operation(summary = "素材分类树", method = "GET") + public MultiResponse> treeMaterialCategory(@ModelAttribute @Validated CategoryTreeQry categoryTreeQry) { + List typeList = new ArrayList<>(); + typeList.add(CategoryTypeEnum.FILE_IMAGE); + typeList.add(CategoryTypeEnum.FILE_VIDEO); + categoryTreeQry.setTypeList(typeList); + + List categoryVOList = categoryService.list(categoryTreeQry); + TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); + treeNodeConfig.setWeightKey("sort"); + treeNodeConfig.setIdKey("categoryId"); + treeNodeConfig.setParentIdKey("pid"); + treeNodeConfig.setNameKey("name"); + treeNodeConfig.setChildrenKey("children"); + treeNodeConfig.setDeep(5); + + List> trees = TreeUtil.build(categoryVOList, null, treeNodeConfig, (category, tree) -> { + tree.setId(category.getCategoryId()); + tree.setParentId(category.getPid()); + tree.setWeight(category.getSort()); + tree.setName(category.getName()); + tree.putExtra("type", category.getType()); + }); + + return MultiResponse.of(trees); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.OPERATION_MATERIAL_CATEGORY_CREATE}, mode = SaMode.OR) + @PostMapping("createMaterialCategory") + @Operation(summary = "创建素材分类", method = "POST") + public SingleResponse createMaterialCategory(@RequestBody @Validated CategoryCreateCmd categoryCreateCmd) { + return SingleResponse.of(categoryService.create(categoryCreateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.OPERATION_MATERIAL_CATEGORY_UPDATE}, mode = SaMode.OR) + @RequestMapping(value = "updateMaterialCategory", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "更新素材分类", method = "PATCH") + public SingleResponse updateMaterialCategory(@RequestBody @Validated CategoryUpdateCmd categoryUpdateCmd) { + return SingleResponse.of(categoryService.update(categoryUpdateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.OPERATION_MATERIAL_CATEGORY_VIEW}, mode = SaMode.OR) + @GetMapping("/showMaterialCategory") + @Operation(summary = "素材分类", method = "GET") + public SingleResponse showMaterialCategory(@ModelAttribute @Validated CategoryShowQry categoryShowQry) { + return SingleResponse.of(categoryService.show(categoryShowQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.OPERATION_MATERIAL_CATEGORY_DELETE}, mode = SaMode.OR) + @DeleteMapping("/destroyMaterialCategory") + @Operation(summary = "删除素材分类", method = "DELETE") + public Response destroyMaterialCategory(@RequestBody @Validated CategoryDestroyCmd categoryDestroyCmd) { + categoryService.destroy(categoryDestroyCmd); + return Response.buildSuccess(); + } + +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/MaterialController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/MaterialController.java new file mode 100644 index 0000000..daf9879 --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/MaterialController.java @@ -0,0 +1,93 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.infra.api.MaterialServiceI; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialBatchAddCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.MaterialPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.MaterialShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.MaterialVO; +import com.xunhong.erp.turbo.api.user.dto.vo.OssTokenVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * 素材库 + */ +@Tag(name = "Material", description = "素材管理") +@RestController("operationMaterialController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class MaterialController { + + @DubboReference(version = "1.0.0") + private final MaterialServiceI materialService; + + @SaCheckLogin + @GetMapping(value = "/ossToken") + @Operation(summary = "获取OSS上传凭证", method = "GET") + public SingleResponse ossToken() { + return SingleResponse.of(materialService.ossToken()); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.OPERATION_MATERIAL_VIEW}, mode = SaMode.OR) + @GetMapping("/pageMaterial") + @Operation(summary = "素材内容列表", method = "GET") + public PageResponse pageMaterial(@ModelAttribute @Validated MaterialPageQry materialPageQry) { + PageDTO page = materialService.page(materialPageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.OPERATION_MATERIAL_VIEW}, mode = SaMode.OR) + @PostMapping("/createMaterial") + @Operation(summary = "创建素材内容", method = "POST") + public SingleResponse createMaterial(@RequestBody @Validated MaterialCreateCmd materialCreateCmd) { + return SingleResponse.of(materialService.create(materialCreateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.OPERATION_MATERIAL_CREATE}, mode = SaMode.OR) + @PostMapping("/batchCreateMaterial") + @Operation(summary = "创建素材内容", method = "POST") + public MultiResponse batchCreateMaterial(@RequestBody @Validated MaterialBatchAddCmd materialAddCmdList) { + return MultiResponse.of(materialService.batchCreate(materialAddCmdList)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.OPERATION_MATERIAL_VIEW}, mode = SaMode.OR) + @GetMapping("showMaterial") + @Operation(summary = "素材内容详情", method = "GET") + public SingleResponse showMaterial(@ModelAttribute @Validated MaterialShowQry materialShowQry) { + return SingleResponse.of(materialService.show(materialShowQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.OPERATION_MATERIAL_UPDATE}, mode = SaMode.OR) + @RequestMapping(value = "updateMaterial", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "素材内容更新", method = "PATCH") + public SingleResponse updateMaterial(@RequestBody @Validated MaterialUpdateCmd materialUpdateCmd) { + return SingleResponse.of(materialService.update(materialUpdateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.OPERATION_MATERIAL_DELETE}, mode = SaMode.OR) + @DeleteMapping("destroyMaterial") + @Operation(summary = "删除素材内容", method = "DELETE") + public Response destroyMaterial(@RequestBody @Validated MaterialDestroyCmd materialDestroyCmd) { + materialService.destroy(materialDestroyCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/MenuController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/MenuController.java new file mode 100644 index 0000000..532c9be --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/MenuController.java @@ -0,0 +1,93 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.lang.tree.Tree; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.rbac.api.MenuServiceI; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuDestroyCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuDragCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.constants.PermissionConstant; +import com.xunhong.erp.turbo.api.rbac.dto.qry.MenuListQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.MenuShowQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.MenuTreeQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.MenuVO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author shenyifei + */ +@Tag(name = "Menu", description = "应用菜单") +@RestController("operationMenuController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class MenuController { + @DubboReference(version = "1.0.0") + private final MenuServiceI menuService; + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_MENU_VIEW}) + @GetMapping("/treeMenu") + @Operation(summary = "菜单列表", method = "GET") + public MultiResponse> treeMenu(@ModelAttribute @Validated MenuTreeQry menuTreeQry) { + return MultiResponse.of(menuService.tree(menuTreeQry)); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_MENU_VIEW}) + @GetMapping("/listMenu") + @Operation(summary = "菜单列表", method = "GET") + public MultiResponse listMenu(@ModelAttribute @Validated MenuListQry menuListQry) { + return MultiResponse.of(menuService.list(menuListQry)); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_MENU_CREATE}) + @PostMapping("/createMenu") + @Operation(summary = "创建菜单", method = "POST") + public SingleResponse createMenu(@RequestBody @Validated MenuCreateCmd menuCreateCmd) { + return SingleResponse.of(menuService.create(menuCreateCmd)); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_MENU_VIEW}) + @GetMapping("/showMenu") + @Operation(summary = "菜单详情", method = "GET") + public SingleResponse showMenu(@ModelAttribute @Validated MenuShowQry menuShowQry) { + return SingleResponse.of(menuService.show(menuShowQry)); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_MENU_UPDATE}) + @RequestMapping(value = "/updateMenu", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "菜单更新", method = "PATCH") + public SingleResponse updateMenu(@RequestBody @Validated MenuUpdateCmd menuUpdateCmd) { + return SingleResponse.of(menuService.update(menuUpdateCmd)); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_MENU_DELETE}) + @DeleteMapping("/destroyMenu") + @Operation(summary = "菜单更新", method = "DELETE") + public Response destroyMenu(@RequestBody @Validated MenuDestroyCmd menuDestroyCmd) { + menuService.destroy(menuDestroyCmd); + return Response.buildSuccess(); + } + + @SaCheckLogin + @PostMapping("dragMenu") + @Operation(summary = "菜单拖拽", method = "POST") + public Response dragMenu(@RequestBody @Validated MenuDragCmd menuDragCmd) { + menuService.drag(menuDragCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/OcrController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/OcrController.java new file mode 100644 index 0000000..58792a2 --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/OcrController.java @@ -0,0 +1,61 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.hutool.core.date.LocalDateTimeUtil; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.facade.api.WxMaServiceI; +import com.xunhong.erp.turbo.api.facade.dto.vo.WxMaOcrBankCardVO; +import com.xunhong.erp.turbo.api.facade.dto.vo.WxMaOcrIdCardVO; +import com.xunhong.erp.turbo.file.FileService; +import com.xunhong.erp.turbo.file.config.OssProperties; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +/** + * @author shenyifei + */ +@Tag(name = "Ocr", description = "OCR识别") +@RestController("operationOcrController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class OcrController { + private final OssProperties properties; + + @DubboReference(version = "1.0.0") + private final WxMaServiceI wxMaService; + + private final FileService fileService; + + @SaCheckLogin + @PostMapping(value = "ocrIdCard", consumes = "multipart/form-data") + @Operation(summary = "OCR识别身份证", method = "POST", hidden = true) + public SingleResponse ocrIdCard(@RequestParam @Schema(title = "图片文件", requiredMode = Schema.RequiredMode.REQUIRED, type = "file") MultipartFile file) throws IOException { + String objectName = "uploads/" + LocalDateTimeUtil.format(LocalDateTimeUtil.now(), "yyMM/dd") + "/" + file.getOriginalFilename(); + fileService.upload(objectName, file.getInputStream()); + String ocrUrl = properties.getDomain() + objectName; + + return SingleResponse.of(wxMaService.ocrIdCard(ocrUrl)); + } + + @SaCheckLogin + @PostMapping(value = "ocrBankCard", consumes = "multipart/form-data") + @Operation(summary = "OCR识别银行卡", method = "POST", hidden = true) + public SingleResponse ocrBankCard(@RequestParam @Schema(title = "图片文件", requiredMode = Schema.RequiredMode.REQUIRED, type = "file") MultipartFile file) throws IOException { + String objectName = "uploads/" + LocalDateTimeUtil.format(LocalDateTimeUtil.now(), "yyMM/dd") + "/" + file.getOriginalFilename(); + fileService.upload(objectName, file.getInputStream()); + String ocrUrl = properties.getDomain() + objectName; + + return SingleResponse.of(wxMaService.ocrBankCard(ocrUrl)); + } + +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/PermissionController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/PermissionController.java new file mode 100644 index 0000000..902014f --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/PermissionController.java @@ -0,0 +1,84 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.rbac.api.PermissionServiceI; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionDestroyCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.constants.PermissionConstant; +import com.xunhong.erp.turbo.api.rbac.dto.qry.PermissionListQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.PermissionPageQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.PermissionShowQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.PermissionVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +@Tag(name = "Permission", description = "权限管理") +@RestController("operationPermissionController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class PermissionController { + + @DubboReference(version = "1.0.0") + private final PermissionServiceI permissionService; + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_PERMISSION_VIEW}) + @GetMapping("/listPermission") + @Operation(summary = "权限列表", method = "GET") + public MultiResponse listPermission(@ModelAttribute @Validated PermissionListQry permissionListQry) { + return MultiResponse.of(permissionService.list(permissionListQry)); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_PERMISSION_VIEW}) + @GetMapping("/pagePermission") + @Operation(summary = "权限分页", method = "GET") + public PageResponse pagePermission(@ModelAttribute @Validated PermissionPageQry permissionPageQry) { + PageDTO page = permissionService.page(permissionPageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_PERMISSION_CREATE}) + @PostMapping("/createPermission") + @Operation(summary = "创建权限", method = "POST") + public SingleResponse createPermission(@RequestBody @Validated PermissionCreateCmd permissionCreateCmd) { + return SingleResponse.of(permissionService.create(permissionCreateCmd)); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_PERMISSION_VIEW}) + @GetMapping("/showPermission") + @Operation(summary = "查看权限", method = "GET") + public SingleResponse showPermission(@ModelAttribute @Validated PermissionShowQry permissionShowQry) { + return SingleResponse.of(permissionService.show(permissionShowQry)); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_PERMISSION_UPDATE}) + @PostMapping("updatePermission") + @Operation(summary = "更新权限", method = "POST") + public SingleResponse updatePermission(@RequestBody @Validated PermissionUpdateCmd permissionUpdateCmd) { + return SingleResponse.of(permissionService.update(permissionUpdateCmd)); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_PERMISSION_DELETE}) + @PostMapping("destroyPermission") + @Operation(summary = "删除权限", method = "POST") + public Response destroyPermission(@RequestBody @Validated PermissionDestroyCmd permissionDestroyCmd) { + permissionService.destroy(permissionDestroyCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/PlatformController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/PlatformController.java new file mode 100644 index 0000000..1a7f871 --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/PlatformController.java @@ -0,0 +1,86 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.infra.api.PlatformServiceI; +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.PlatformListQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.PlatformPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.PlatformShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.PlatformVO; +import com.xunhong.erp.turbo.api.rbac.dto.constants.PermissionConstant; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author shenyifei + */ +@Tag(name = "Platform", description = "平台管理") +@RestController("operationPlatformController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class PlatformController { + @DubboReference(version = "1.0.0") + private final PlatformServiceI platformService; + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_PLATFORM_VIEW}) + @GetMapping("/listPlatform") + @Operation(summary = "平台列表", method = "GET") + public MultiResponse listPlatform(@ModelAttribute @Validated PlatformListQry platformListQry) { + return MultiResponse.of(platformService.list(platformListQry)); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_PLATFORM_CREATE}) + @PostMapping("/createPlatform") + @Operation(summary = "创建平台", method = "POST") + public SingleResponse createPlatform(@RequestBody @Validated PlatformCreateCmd platformCreateCmd) { + return SingleResponse.of(platformService.create(platformCreateCmd)); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_PLATFORM_VIEW}) + @GetMapping("/showPlatform") + @Operation(summary = "平台详情", method = "GET") + public SingleResponse showPlatform(@ModelAttribute @Validated PlatformShowQry platformShowQry) { + return SingleResponse.of(platformService.show(platformShowQry)); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_PLATFORM_VIEW}) + @GetMapping("/pagePlatform") + @Operation(summary = "平台列表", method = "GET") + public PageResponse pagePlatform(@ModelAttribute @Validated PlatformPageQry platformPageQry) { + PageDTO page = platformService.page(platformPageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_PLATFORM_UPDATE}) + @RequestMapping(value = "/updatePlatform", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "平台更新", method = "PATCH") + public SingleResponse updatePlatform(@RequestBody @Validated PlatformUpdateCmd platformUpdateCmd) { + return SingleResponse.of(platformService.update(platformUpdateCmd)); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_PLATFORM_DELETE}) + @DeleteMapping("/destroyPlatform") + @Operation(summary = "平台删除", method = "DELETE") + public Response destroyPlatform(@RequestBody @Validated PlatformDestroyCmd platformDestroyCmd) { + platformService.destroy(platformDestroyCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/PurchaseOrderController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/PurchaseOrderController.java new file mode 100644 index 0000000..f383ee8 --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/PurchaseOrderController.java @@ -0,0 +1,163 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckRole; +import cn.dev33.satoken.annotation.SaMode; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.biz.api.PurchaseOrderServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.*; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderCountQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.PurchaseOrderVO; +import com.xunhong.erp.turbo.api.rbac.dto.constants.RoleConstant; +import com.xunhong.erp.turbo.api.user.api.AdminServiceI; +import com.xunhong.erp.turbo.api.user.dto.qry.AdminShowQry; +import com.xunhong.erp.turbo.api.user.dto.vo.AdminVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.base.dto.UserSession; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author shenyifei + */ +@Tag(name = "PurchaseOrder", description = "采购订单管理") +@RestController("operationPurchaseOrderController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class PurchaseOrderController { + + @DubboReference(version = "1.0.0") + private final PurchaseOrderServiceI purchaseOrderService; + + @DubboReference(version = "1.0.0") + private final AdminServiceI adminService; + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_PURCHASE_ORDER_VIEW}) + @GetMapping("listPurchaseOrder") + @Operation(summary = "采购订单列表", method = "GET") + public MultiResponse listPurchaseOrder(@ModelAttribute @Validated PurchaseOrderListQry purchaseOrderListQry) { + return MultiResponse.of(purchaseOrderService.list(purchaseOrderListQry)); + } + + + // 获取某个状态的数量 + @SaCheckLogin + @GetMapping("countPurchaseOrderByState") + @Operation(summary = "获取某个状态的数量", method = "GET") + public SingleResponse countPurchaseOrderByState(@ModelAttribute @Validated PurchaseOrderCountQry purchaseOrderCountQry) { + return SingleResponse.of(purchaseOrderService.countPurchaseOrderByState(purchaseOrderCountQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_PURCHASE_ORDER_CREATE}) + @PostMapping("createPurchaseOrder") + @Operation(summary = "创建采购订单(暂存)", method = "POST") + public SingleResponse createPurchaseOrder(@RequestBody @Validated PurchaseOrderCreateCmd purchaseOrderCreateCmd) { + return SingleResponse.of(purchaseOrderService.create(purchaseOrderCreateCmd)); + } + + @SaCheckLogin + @PostMapping("submitReviewPurchaseOrder") + @Operation(summary = "采购订单提审(录入员提审)", method = "POST") + public Response submitReviewPurchaseOrder(@RequestBody @Validated PurchaseOrderSubmitReviewCmd purchaseOrderSubmitReviewCmd) { + purchaseOrderService.submitReview(purchaseOrderSubmitReviewCmd); + return Response.buildSuccess(); + } + + @SaCheckLogin + @PostMapping("withdrawReviewPurchaseOrder") + @Operation(summary = "采购订单撤回提审(录入员撤回提审)", method = "POST") + public Response withdrawReviewPurchaseOrder(@RequestBody @Validated PurchaseOrderWithdrawReviewCmd purchaseOrderWithdrawReviewCmd) { + purchaseOrderService.withdrawReview(purchaseOrderWithdrawReviewCmd); + return Response.buildSuccess(); + } + + @SaCheckLogin + @PostMapping("approvePurchaseOrder") + @Operation(summary = "采购订单审核(审核员审核)", method = "POST") + public Response approvePurchaseOrder(@RequestBody @Validated PurchaseOrderApproveCmd purchaseOrderApproveCmd) { + purchaseOrderService.approve(purchaseOrderApproveCmd); + return Response.buildSuccess(); + } + + @SaCheckLogin + @PostMapping("rejectApprovePurchaseOrder") + @Operation(summary = "采购订单驳回审核(审核员驳回审核)", method = "POST") + public Response rejectApprovePurchaseOrder(@RequestBody @Validated PurchaseOrderRejectApproveCmd purchaseOrderRejectApproveCmd) { + purchaseOrderService.rejectApprove(purchaseOrderRejectApproveCmd); + return Response.buildSuccess(); + } + + @SaCheckLogin + @PostMapping("finalApprovePurchaseOrder") + @Operation(summary = "采购订单审批(老板审批)", method = "POST") + public Response finalApprovePurchaseOrder(@RequestBody @Validated PurchaseOrderFinalApproveCmd purchaseOrderFinalApproveCmd) { + + purchaseOrderService.finalApprove(purchaseOrderFinalApproveCmd); + return Response.buildSuccess(); + } + + @SaCheckLogin + @PostMapping("rejectFinalPurchaseOrder") + @Operation(summary = "采购订单驳回审批(老板驳回审批)", method = "POST") + public Response rejectFinalPurchaseOrder(@RequestBody @Validated PurchaseOrderRejectFinalCmd purchaseOrderRejectFinalCmd) { + purchaseOrderService.rejectFinal(purchaseOrderRejectFinalCmd); + return Response.buildSuccess(); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_PURCHASE_ORDER_VIEW}) + @GetMapping("showPurchaseOrder") + @Operation(summary = "采购订单详情", method = "GET") + public SingleResponse showPurchaseOrder(@ModelAttribute @Validated PurchaseOrderShowQry purchaseOrderShowQry) { + return SingleResponse.of(purchaseOrderService.show(purchaseOrderShowQry)); + } + + @SaCheckLogin + @SaCheckRole(value = {RoleConstant.ORIGIN_ENTRY, RoleConstant.MARKET_BUYER, RoleConstant.BOSS, RoleConstant.REVIEWER, RoleConstant.SUPERADMIN}, mode = SaMode.OR) +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_PURCHASE_ORDER_VIEW}) + @GetMapping("pagePurchaseOrder") + @Operation(summary = "采购订单列表", method = "GET") + public PageResponse pagePurchaseOrder(@ModelAttribute @Validated PurchaseOrderPageQry purchaseOrderPageQry) { + String roleSlug = UserSession.USER_THREAD_LOCAL.get().getRoleSlug(); + if (roleSlug.equals(RoleConstant.ORIGIN_ENTRY) || roleSlug.equals(RoleConstant.MARKET_BUYER)) { + Long userId = UserSession.USER_THREAD_LOCAL.get().getUserId(); + AdminShowQry adminShowQry = new AdminShowQry(); + adminShowQry.setUserId(userId); + AdminVO adminVO = adminService.show(adminShowQry); + purchaseOrderPageQry.setCreatedBy(adminVO.getAdminId()); + } + + PageDTO page = purchaseOrderService.page(purchaseOrderPageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_PURCHASE_ORDER_UPDATE}) + @RequestMapping(value = "updatePurchaseOrder", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "采购订单更新", method = "PATCH") + public SingleResponse updatePurchaseOrder(@RequestBody @Validated PurchaseOrderUpdateCmd purchaseOrderUpdateCmd) { + return SingleResponse.of(purchaseOrderService.update(purchaseOrderUpdateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_PURCHASE_ORDER_DELETE}) + @DeleteMapping("destroyPurchaseOrder") + @Operation(summary = "采购订单删除", method = "DELETE") + public Response destroyPurchaseOrder(@RequestBody @Validated PurchaseOrderDestroyCmd purchaseOrderDestroyCmd) { + purchaseOrderService.destroy(purchaseOrderDestroyCmd); + return Response.buildSuccess(); + } + +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/RoleController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/RoleController.java new file mode 100644 index 0000000..4e5675d --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/RoleController.java @@ -0,0 +1,86 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.rbac.api.RoleServiceI; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleDestroyCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.constants.PermissionConstant; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleListQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RolePageQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleShowQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.RoleVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +@Tag(name = "Role", description = "应用角色管理") +@RestController("operationRoleController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class RoleController { + + @DubboReference(version = "1.0.0") + private final RoleServiceI roleService; + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_ROLE_VIEW}) + @GetMapping("/listRole") + @Operation(summary = "应用角色列表", method = "GET") + public MultiResponse listRole(@ModelAttribute @Validated RoleListQry roleListQry) { + return MultiResponse.of(roleService.listRole(roleListQry)); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_ROLE_VIEW}) + @GetMapping("/pageRole") + @Operation(summary = "应用角色分页", method = "GET") + public PageResponse pageRole(@ModelAttribute @Validated RolePageQry rolePageQry) { + PageDTO page = roleService.pageRole(rolePageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_ROLE_CREATE}) + @PostMapping("/createRole") + @Operation(summary = "创建应用角色", method = "POST") + public SingleResponse createRole(@RequestBody @Validated RoleCreateCmd roleCreateCmd) { + return SingleResponse.of(roleService.createRole(roleCreateCmd)); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_ROLE_VIEW}) + @GetMapping("showRole") + @Operation(summary = "查看应用角色", method = "GET") + public SingleResponse showRole(@ModelAttribute @Validated RoleShowQry roleShowQry) { + RoleVO roleVO = roleService.showRole(roleShowQry); + return SingleResponse.of(roleVO); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_ROLE_UPDATE}) + @PostMapping("updateRole") + @Operation(summary = "更新应用应用角色", method = "POST") + public SingleResponse updateRole(@RequestBody @Validated RoleUpdateCmd roleUpdateCmd) { + return SingleResponse.of(roleService.updateRole(roleUpdateCmd)); + } + + @SaCheckLogin + @SaCheckPermission(value = {PermissionConstant.OPERATION_ROLE_DELETE}) + @PostMapping("destroyRole") + @Operation(summary = "删除应用角色", method = "POST") + public Response destroyRole(@RequestBody @Validated RoleDestroyCmd roleDestroyCmd) { + roleService.destroyRole(roleDestroyCmd); + return Response.buildSuccess(); + } + +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/SettingController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/SettingController.java new file mode 100644 index 0000000..e50f9cd --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/SettingController.java @@ -0,0 +1,43 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.infra.api.SettingServiceI; +import com.xunhong.erp.turbo.api.infra.dto.cmd.SettingUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.SettingShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.SettingVO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author shenyifei + */ +@Tag(name = "Setting", description = "系统设置管理") +@RestController("operationSettingController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class SettingController { + + @DubboReference(version = "1.0.0") + private final SettingServiceI settingService; + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_STORE_SETTING_VIEW}) + @GetMapping("showSetting") + @Operation(summary = "系统设置详情", method = "GET") + public SingleResponse showSetting(@ModelAttribute @Validated SettingShowQry settingShowQry) { + return SingleResponse.of(settingService.show(settingShowQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_STORE_SETTING_UPDATE}) + @RequestMapping(value = "updateSetting", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "系统设置更新", method = "PATCH") + public SingleResponse updateSetting(@RequestBody @Validated SettingUpdateCmd settingUpdateCmd) { + return SingleResponse.of(settingService.update(settingUpdateCmd)); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/ShipOrderController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/ShipOrderController.java new file mode 100644 index 0000000..9027b86 --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/ShipOrderController.java @@ -0,0 +1,95 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.biz.api.ShipOrderServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderGenerateDocumentCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.ShipOrderListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.ShipOrderPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.ShipOrderShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.ShipOrderVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author shenyifei + */ +@Tag(name = "ShipOrder", description = "发货单管理") +@RestController("operationShipOrderController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class ShipOrderController { + + @DubboReference(version = "1.0.0") + private final ShipOrderServiceI shipOrderService; + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_SHIP_ORDER_VIEW}) + @GetMapping("listShipOrder") + @Operation(summary = "发货单列表", method = "GET") + public MultiResponse listShipOrder(@ModelAttribute @Validated ShipOrderListQry shipOrderListQry) { + return MultiResponse.of(shipOrderService.list(shipOrderListQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_SHIP_ORDER_CREATE}) + @PostMapping("createShipOrder") + @Operation(summary = "创建发货单", method = "POST") + public SingleResponse createShipOrder(@RequestBody @Validated ShipOrderCreateCmd shipOrderCreateCmd) { + return SingleResponse.of(shipOrderService.create(shipOrderCreateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_SHIP_ORDER_VIEW}) + @GetMapping("showShipOrder") + @Operation(summary = "发货单详情", method = "GET") + public SingleResponse showShipOrder(@ModelAttribute @Validated ShipOrderShowQry shipOrderShowQry) { + return SingleResponse.of(shipOrderService.show(shipOrderShowQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_SHIP_ORDER_VIEW}) + @GetMapping("pageShipOrder") + @Operation(summary = "发货单列表", method = "GET") + public PageResponse pageShipOrder(@ModelAttribute @Validated ShipOrderPageQry shipOrderPageQry) { + PageDTO page = shipOrderService.page(shipOrderPageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_SHIP_ORDER_UPDATE}) + @RequestMapping(value = "updateShipOrder", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "发货单更新", method = "PATCH") + public SingleResponse updateShipOrder(@RequestBody @Validated ShipOrderUpdateCmd shipOrderUpdateCmd) { + return SingleResponse.of(shipOrderService.update(shipOrderUpdateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_SHIP_ORDER_UPDATE}) + @RequestMapping(value = "generateDocumentShipOrder", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "发货单生成单据", method = "PATCH") + public Response generateDocumentShipOrder(@RequestBody @Validated ShipOrderGenerateDocumentCmd shipOrderGenerateDocumentCmd) { + shipOrderService.generateDocument(shipOrderGenerateDocumentCmd); + return Response.buildSuccess(); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_SHIP_ORDER_DELETE}) + @DeleteMapping("destroyShipOrder") + @Operation(summary = "发货单删除", method = "DELETE") + public Response destroyShipOrder(@RequestBody @Validated ShipOrderDestroyCmd shipOrderDestroyCmd) { + shipOrderService.destroy(shipOrderDestroyCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/SupplierController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/SupplierController.java new file mode 100644 index 0000000..db52548 --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/SupplierController.java @@ -0,0 +1,85 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.biz.api.SupplierServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.SupplierListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.SupplierPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.SupplierShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.SupplierVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author shenyifei + */ +@Tag(name = "Supplier", description = "供应商管理") +@RestController("operationSupplierController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class SupplierController { + + @DubboReference(version = "1.0.0") + private final SupplierServiceI supplierService; + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_SUPPLIER_VIEW}) + @GetMapping("listSupplier") + @Operation(summary = "供应商列表", method = "GET") + public MultiResponse listSupplier(@ModelAttribute @Validated SupplierListQry supplierListQry) { + return MultiResponse.of(supplierService.list(supplierListQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_SUPPLIER_CREATE}) + @PostMapping("createSupplier") + @Operation(summary = "创建供应商", method = "POST") + public SingleResponse createSupplier(@RequestBody @Validated SupplierCreateCmd supplierCreateCmd) { + return SingleResponse.of(supplierService.create(supplierCreateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_SUPPLIER_VIEW}) + @GetMapping("showSupplier") + @Operation(summary = "供应商详情", method = "GET") + public SingleResponse showSupplier(@ModelAttribute @Validated SupplierShowQry supplierShowQry) { + return SingleResponse.of(supplierService.show(supplierShowQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_SUPPLIER_VIEW}) + @GetMapping("pageSupplier") + @Operation(summary = "供应商列表", method = "GET") + public PageResponse pageSupplier(@ModelAttribute @Validated SupplierPageQry supplierPageQry) { + PageDTO page = supplierService.page(supplierPageQry); + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_SUPPLIER_UPDATE}) + @RequestMapping(value = "updateSupplier", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "供应商更新", method = "PATCH") + public SingleResponse updateSupplier(@RequestBody @Validated SupplierUpdateCmd supplierUpdateCmd) { + return SingleResponse.of(supplierService.update(supplierUpdateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_SUPPLIER_DELETE}) + @DeleteMapping("destroySupplier") + @Operation(summary = "供应商删除", method = "DELETE") + public Response destroySupplier(@RequestBody @Validated SupplierDestroyCmd supplierDestroyCmd) { + supplierService.destroy(supplierDestroyCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/UserController.java b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/UserController.java new file mode 100644 index 0000000..a5f5fd4 --- /dev/null +++ b/erp-turbo-admin/src/main/java/com/xunhong/erp/turbo/admin/controller/UserController.java @@ -0,0 +1,108 @@ +package com.xunhong.erp.turbo.admin.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckSafe; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.user.api.UserServiceI; +import com.xunhong.erp.turbo.api.user.dto.cmd.*; +import com.xunhong.erp.turbo.api.user.dto.qry.UserListQry; +import com.xunhong.erp.turbo.api.user.dto.qry.UserPageQry; +import com.xunhong.erp.turbo.api.user.dto.qry.UserShowQry; +import com.xunhong.erp.turbo.api.user.dto.vo.UserVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author shenyifei + */ +@Tag(name = "User", description = "用户管理") +@RestController("operationUserController") +@RequestMapping(value = "/operation") +@RequiredArgsConstructor +public class UserController { + @DubboReference(version = "1.0.0") + private final UserServiceI userService; + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.KHB_BUSINESS_MEMBER_VIEW}) + @GetMapping("pageUser") + @Operation(summary = "用户列表", method = "GET") + public PageResponse pageUser(@ModelAttribute @Validated UserPageQry userPageQry) { + userPageQry.setIsAdmin(Boolean.FALSE); + PageDTO page = userService.page(userPageQry); + + return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent()); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.KHB_BUSINESS_MEMBER_VIEW}) + @GetMapping("listUser") + @Operation(summary = "用户列表", method = "GET") + public MultiResponse listUser(@ModelAttribute @Validated UserListQry userListQry) { + return MultiResponse.of(userService.list(userListQry)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.KHB_BUSINESS_MEMBER_VIEW}) + @GetMapping("/showUser") + @Operation(summary = "获取用户", method = "GET") + public SingleResponse showUser(@ModelAttribute @Validated UserShowQry userShowQry) { + UserVO userVO = userService.show(userShowQry); + return SingleResponse.of(userVO); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.KHB_BUSINESS_MEMBER_UPDATE}) + @RequestMapping(value = "/updateUser", method = {RequestMethod.PATCH, RequestMethod.PUT}) + @Operation(summary = "更新用户", method = "PATCH") + public SingleResponse updateUser(@Validated @RequestBody UserUpdateCmd userUpdateCmd) { + return SingleResponse.of(userService.update(userUpdateCmd)); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.KHB_BUSINESS_MEMBER_CREATE}) + @PostMapping("/createUser") + @Operation(summary = "创建会员", method = "POST") + public SingleResponse createUser(@Validated @RequestBody UserCreateCmd userCreateCmd) { + return SingleResponse.of(userService.create(userCreateCmd)); + } + + @SaCheckLogin + @SaCheckSafe +// @SaCheckPermission(value = {PermissionConstant.KHB_BUSINESS_MEMBER_DELETE}) + @DeleteMapping("/destroyUser") + @Operation(summary = "删除用户", method = "DELETE") + public Response destroyUser(@Validated @RequestBody UserDestroyCmd userDestroyCmd) { + userService.destroy(userDestroyCmd); + return Response.buildSuccess(); + } + + /** + * 禁用 + */ + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.KHB_BUSINESS_MEMBER_DISABLE}) + @PostMapping("/disableUser") + @Operation(summary = "禁用用户", method = "POST") + public Response disableUser(@RequestBody @Validated UserDisableCmd userDisableCmd) { + userService.disable(userDisableCmd); + return Response.buildSuccess(); + } + + @SaCheckLogin +// @SaCheckPermission(value = {PermissionConstant.KHB_BUSINESS_MEMBER_ENABLE}) + @PostMapping("/enableUser") + @Operation(summary = "启用用户", method = "POST") + public Response enableUser(@RequestBody @Validated UserEnableCmd userEnableCmd) { + userService.enable(userEnableCmd); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-admin/src/main/resources/application.yml b/erp-turbo-admin/src/main/resources/application.yml new file mode 100644 index 0000000..f3f28f6 --- /dev/null +++ b/erp-turbo-admin/src/main/resources/application.yml @@ -0,0 +1,17 @@ +spring: + application: + name: @application.name@ + profiles: + active: dev + config: + import: classpath:cache.yml,classpath:rpc.yml,classpath:sa-token.yml + + oss: + endpoint: https://oss-cn-beijing.aliyuncs.com + access-secret: nQjR51pOeVggk1AgSyroj2svegAH2q + access-key: LTAI5tRk9oGxq7KYb5VtJbUm + bucket: qilincloud168 + enabled: true + +server: + port: 8083 diff --git a/erp-turbo-admin/src/main/resources/bootstrap.yml b/erp-turbo-admin/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..c93901e --- /dev/null +++ b/erp-turbo-admin/src/main/resources/bootstrap.yml @@ -0,0 +1,7 @@ +spring: + application: + name: @application.name@ + profiles: + active: dev + config: + import: classpath:base.yml,classpath:logging.yml,classpath:config.yml diff --git a/erp-turbo-admin/src/main/resources/i18n/messages.properties b/erp-turbo-admin/src/main/resources/i18n/messages.properties new file mode 100644 index 0000000..ea28719 --- /dev/null +++ b/erp-turbo-admin/src/main/resources/i18n/messages.properties @@ -0,0 +1,22 @@ +msg.200=Success +msg.500=Internal Server Error. +msg.1001=No data +msg.1002=Data saving failed +msg.100000=platform and client do not match. +msg.100001=the current account has been registered in the platform client, please do not register again. +msg.100002= +msg.50001=Obtaining the verification code succeeded +msg.50002=The verification code has expired +msg.50003=The account corresponding to the verification code does not match +msg.50004=Verification code error +validation.account=account number +validation.wechatCode=wechat code +validation.smsCode=message authentication code +validation.mobile=mobile +validation.platform=platform +validation.password=password +validation.min=length must be greater than {min} bits +validation.max=length must be less than {max} bits +validation.size=length must be between {min} ~ {max} bits +validation.regexp=format error +validation.notBlank=must not be empty \ No newline at end of file diff --git a/erp-turbo-admin/src/main/resources/i18n/messages_en.properties b/erp-turbo-admin/src/main/resources/i18n/messages_en.properties new file mode 100644 index 0000000..ea28719 --- /dev/null +++ b/erp-turbo-admin/src/main/resources/i18n/messages_en.properties @@ -0,0 +1,22 @@ +msg.200=Success +msg.500=Internal Server Error. +msg.1001=No data +msg.1002=Data saving failed +msg.100000=platform and client do not match. +msg.100001=the current account has been registered in the platform client, please do not register again. +msg.100002= +msg.50001=Obtaining the verification code succeeded +msg.50002=The verification code has expired +msg.50003=The account corresponding to the verification code does not match +msg.50004=Verification code error +validation.account=account number +validation.wechatCode=wechat code +validation.smsCode=message authentication code +validation.mobile=mobile +validation.platform=platform +validation.password=password +validation.min=length must be greater than {min} bits +validation.max=length must be less than {max} bits +validation.size=length must be between {min} ~ {max} bits +validation.regexp=format error +validation.notBlank=must not be empty \ No newline at end of file diff --git a/erp-turbo-admin/src/main/resources/i18n/messages_zh_CN.properties b/erp-turbo-admin/src/main/resources/i18n/messages_zh_CN.properties new file mode 100644 index 0000000..dcd1ed2 --- /dev/null +++ b/erp-turbo-admin/src/main/resources/i18n/messages_zh_CN.properties @@ -0,0 +1,21 @@ +msg.200=\u64CD\u4F5C\u6210\u529F +msg.500=\u7CFB\u7EDF\u5F02\u5E38 +msg.1001=\u6570\u636E\u4E3A\u7A7A +msg.1002=\u6570\u636E\u4FDD\u5B58\u5931\u8D25 +msg.100000=\u5e73\u53f0\u548c\u5ba2\u6237\u7aef\u4e0d\u5339\u914d。 +msg.100001=\u5f53\u524d\u8d26\u53f7\u5df2\u7ecf\u5728\u5e73\u53f0\u5ba2\u6237\u7aef\u6ce8\u518c,\u8bf7\u52ff\u91cd\u590d\u6ce8\u518c。 +msg.50001={0}\u83b7\u53d6\u6210\u529f +msg.50002={0}\u5df2\u8fc7\u671f +msg.50003={0}\u5bf9\u5e94\u7684\u8d26\u53f7\u4e0d\u5339\u914d +msg.50004={0}\u9519\u8bef +validation.account=\u8d26\u53f7 +validation.wechatCode=\u5fae\u4fe1 code +validation.smsCode=\u77ed\u4fe1\u9a8c\u8bc1\u7801 +validation.mobile=\u624b\u673a\u53f7\u7801 +validation.platform=\u5e73\u53f0 +validation.password=\u5bc6\u7801 +validation.min=\u957f\u5ea6\u5fc5\u987b\u5927\u4e8e {min} \u4f4d +validation.max=\u957f\u5ea6\u5fc5\u987b\u5c0f\u4e8e {max} \u4f4d +validation.size=\u957f\u5ea6\u5fc5\u987b\u4ecb\u4e8e {min} ~ {max} \u4f4d +validation.regexp=\u683c\u5f0f\u9519\u8bef +validation.notBlank=\u5fc5\u987b\u4e0d\u80fd\u4e3a\u7a7a \ No newline at end of file diff --git a/erp-turbo-auth/pom.xml b/erp-turbo-auth/pom.xml new file mode 100644 index 0000000..ad7e0e9 --- /dev/null +++ b/erp-turbo-auth/pom.xml @@ -0,0 +1,143 @@ + + + 4.0.0 + + + com.xunhong + ERPTurbo + 1.0.0-SNAPSHOT + ../pom.xml + + + erp-turbo-auth + 1.0.0-SNAPSHOT + + + erp-turbo-auth + 21 + 21 + UTF-8 + + + + + org.springframework.boot + spring-boot-starter + + + + com.xunhong + erp-turbo-base + + + + com.xunhong + erp-turbo-config + + + + com.xunhong + erp-turbo-file + + + + com.xunhong + erp-turbo-api + + + + com.xunhong + erp-turbo-rpc + + + + com.xunhong + erp-turbo-web + + + + com.xunhong + erp-turbo-sa-token + + + + com.xunhong + erp-turbo-apm + + + + com.xunhong + erp-turbo-logback + + + + com.xunhong + erp-turbo-limiter + + + + com.xunhong + erp-turbo-captcha + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + junit + junit + test + + + + + com.h2database + h2 + 1.4.200 + test + + + com.baomidou + mybatis-mate-annotation + 1.3.4 + + + + + ${application.name} + + + org.springframework.boot + spring-boot-maven-plugin + + true + + com.xunhong.erp.turbo.auth.ErpTurboAuthApplication + + + true + + ../layers/layers.xml + + + + + + + package + + repackage + + + + + + + + diff --git a/erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/ErpTurboAuthApplication.java b/erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/ErpTurboAuthApplication.java new file mode 100644 index 0000000..f5d10b1 --- /dev/null +++ b/erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/ErpTurboAuthApplication.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.auth; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * Spring Boot Starter + * + * @author shenyifei + */ +@SpringBootApplication(scanBasePackages = {"com.xunhong.erp.turbo", "com.alibaba.cola"}) +public class ErpTurboAuthApplication { + + public static void main(String[] args) { + SpringApplication.run(ErpTurboAuthApplication.class, args); + } +} diff --git a/erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/controller/CaptchaController.java b/erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/controller/CaptchaController.java new file mode 100644 index 0000000..060d9a2 --- /dev/null +++ b/erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/controller/CaptchaController.java @@ -0,0 +1,57 @@ +package com.xunhong.erp.turbo.auth.controller; + +import com.anji.captcha.model.common.ResponseModel; +import com.anji.captcha.model.vo.CaptchaVO; +import com.anji.captcha.service.CaptchaService; +import com.anji.captcha.util.StringUtils; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Tag(name = "Captcha", description = "验证码管理") +@RestController("authCaptchaController") +@RequestMapping("/auth") +@RequiredArgsConstructor +public class CaptchaController { + private final CaptchaService captchaService; + + public static String getRemoteId(HttpServletRequest request) { + String xfwd = request.getHeader("X-Forwarded-For"); + String ip = getRemoteIpFromXfwd(xfwd); + String ua = request.getHeader("user-agent"); + if (StringUtils.isNotBlank(ip)) { + return ip + ua; + } + return request.getRemoteAddr() + ua; + } + + private static String getRemoteIpFromXfwd(String xfwd) { + if (StringUtils.isNotBlank(xfwd)) { + String[] ipList = xfwd.split(","); + return StringUtils.trim(ipList[0]); + } + return null; + } + + @PostMapping("/captcha/get") + public ResponseModel get(@RequestBody CaptchaVO data, HttpServletRequest request) { + assert request.getRemoteHost() != null; + data.setBrowserInfo(getRemoteId(request)); + return captchaService.get(data); + } + + @PostMapping("/captcha/check") + public ResponseModel check(@RequestBody CaptchaVO data, HttpServletRequest request) { + data.setBrowserInfo(getRemoteId(request)); + return captchaService.check(data); + } + + @PostMapping("/captcha/verify") + public ResponseModel verify(@RequestBody CaptchaVO data, HttpServletRequest request) { + return captchaService.verification(data); + } +} diff --git a/erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/controller/ChannelController.java b/erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/controller/ChannelController.java new file mode 100644 index 0000000..ccd9705 --- /dev/null +++ b/erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/controller/ChannelController.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.auth.controller; + +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.infra.api.ChannelServiceI; +import com.xunhong.erp.turbo.api.infra.dto.qry.ChannelShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.ChannelVO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@Tag(name = "Channel", description = "渠道管理") +@RestController("authChannelController") +@RequestMapping("/auth") +@RequiredArgsConstructor +public class ChannelController { + + @DubboReference(version = "1.0.0") + private final ChannelServiceI channelService; + + @GetMapping("/selectChannelByDomain") + @Operation(summary = "根据域名获取渠道", method = "GET") + public SingleResponse selectChannelByDomain(@RequestParam(value = "domain") String domain) { + ChannelShowQry channelShowQry = new ChannelShowQry(); + channelShowQry.setDomain(domain); + return SingleResponse.of(channelService.show(channelShowQry)); + } +} diff --git a/erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/controller/UserAuthController.java b/erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/controller/UserAuthController.java new file mode 100644 index 0000000..2a9518e --- /dev/null +++ b/erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/controller/UserAuthController.java @@ -0,0 +1,301 @@ +package com.xunhong.erp.turbo.auth.controller; + +import cn.dev33.satoken.SaManager; +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.config.SaCookieConfig; +import cn.dev33.satoken.context.SaHolder; +import cn.dev33.satoken.context.model.SaCookie; +import cn.dev33.satoken.sso.processor.SaSsoServerProcessor; +import cn.dev33.satoken.sso.template.SaSsoUtil; +import cn.dev33.satoken.stp.SaTokenInfo; +import cn.dev33.satoken.stp.StpUtil; +import cn.dev33.satoken.util.SaFoxUtil; +import cn.dev33.satoken.util.SaResult; +import cn.hutool.core.util.StrUtil; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.anji.captcha.model.common.ResponseModel; +import com.anji.captcha.model.vo.CaptchaVO; +import com.anji.captcha.service.CaptchaService; +import com.xunhong.erp.turbo.api.facade.api.WxMaServiceI; +import com.xunhong.erp.turbo.api.facade.dto.qry.WxMaOpenidQry; +import com.xunhong.erp.turbo.api.facade.dto.vo.WxMaOpenidVO; +import com.xunhong.erp.turbo.api.infra.api.PlatformServiceI; +import com.xunhong.erp.turbo.api.infra.dto.qry.PlatformListQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.PlatformVO; +import com.xunhong.erp.turbo.api.rbac.api.UserPermissionServiceI; +import com.xunhong.erp.turbo.api.rbac.api.UserRoleServiceI; +import com.xunhong.erp.turbo.api.rbac.dto.qry.UserPermissionQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.UserRoleListQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.PermissionVO; +import com.xunhong.erp.turbo.api.rbac.dto.vo.UserRoleVO; +import com.xunhong.erp.turbo.api.user.api.AdminServiceI; +import com.xunhong.erp.turbo.api.user.api.UserAuthServiceI; +import com.xunhong.erp.turbo.api.user.dto.cmd.OpenSafeCmd; +import com.xunhong.erp.turbo.api.user.dto.cmd.UpdatePasswordCmd; +import com.xunhong.erp.turbo.api.user.dto.qry.AdminShowQry; +import com.xunhong.erp.turbo.api.user.dto.qry.PasswordLoginQry; +import com.xunhong.erp.turbo.api.user.dto.vo.AdminVO; +import com.xunhong.erp.turbo.api.user.dto.vo.UserAuthVO; +import com.xunhong.erp.turbo.auth.exception.UserAuthErrorCode; +import com.xunhong.erp.turbo.base.exception.BizException; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @author shenyifei + */ +@Tag(name = "UserAuth", description = "认证管理") +@RestController("authUserAuthController") +@RequestMapping("/auth") +@RequiredArgsConstructor +public class UserAuthController { + + @DubboReference(version = "1.0.0") + private final UserAuthServiceI userAuthService; + + @DubboReference(version = "1.0.0") + private final PlatformServiceI platformService; + + @DubboReference(version = "1.0.0") + private final UserPermissionServiceI userPermissionService; + + @DubboReference(version = "1.0.0") + private final UserRoleServiceI userRoleService; + + @DubboReference(version = "1.0.0") + private final WxMaServiceI wxMaService; + + private final CaptchaService captchaService; + + @DubboReference(version = "1.0.0") + private final AdminServiceI adminService; + + private static PlatformVO getPlatformVO(String redirect, List platformVOList) { + if (StrUtil.isBlankIfStr(redirect)) { + return platformVOList.getFirst(); + } + + // 已登录情况下,构建 redirectUrl + redirect = SaFoxUtil.decoderUrl(redirect); + + PlatformVO platformVO; + // 编译正则表达式以匹配URL中的域名部分 + Pattern pattern = Pattern.compile("(https?://[^/]+)"); + Matcher matcher = pattern.matcher(redirect); + // 如果找到了匹配的域名部分 + if (matcher.find()) { + String domain = matcher.group(1); + platformVO = platformVOList.stream() + .filter(merchantAppVO1 -> merchantAppVO1.getHomePage().contains(domain)) + .findFirst() + .orElse(platformVOList.getFirst()); + + } else { + platformVO = platformVOList.getFirst(); + } + return platformVO; + } + + private static void addCookie(String name, String value, int timeout) { + // 获取cookie配置信息 + SaCookieConfig cfg = SaManager.getConfig().getCookie(); + + // 创建SaCookie对象并设置相关属性 + SaCookie cookie = new SaCookie() + .setName(name) // 设置cookie名称为"merchantId" + .setValue(value) // 将商户ID转换为字符串并设置为cookie的值 + .setMaxAge(timeout) // 设置cookie的存活时间,单位为秒 + .setDomain(cfg.getDomain()) // 设置cookie的域名 + .setPath(cfg.getPath()) // 设置cookie的路径 + .setSecure(cfg.getSecure()) // 设置是否仅通过HTTPS传输cookie + .setHttpOnly(cfg.getHttpOnly()) // 设置是否禁止JavaScript访问cookie + .setSameSite(cfg.getSameSite()); // 设置SameSite属性,控制cookie的发送范围 + + // 将创建的cookie添加到HTTP响应中 + SaHolder.getResponse().addCookie(cookie); + } + + /** + * 密码登录 + * + * @param passwordLoginQry 用户密码登录请求 + * @return 返回 + */ + @PostMapping("/passwordLogin") + @Operation(summary = "账号密码登录接口", method = "POST") + public SingleResponse passwordLogin(@RequestBody @Validated PasswordLoginQry passwordLoginQry) { + checkCaptchaVerification(passwordLoginQry.getToken()); + + UserAuthVO userAuthVO = userAuthService.passwordLogin(passwordLoginQry); + + extracted(userAuthVO); + return SingleResponse.of(userAuthVO); + } + + /** + * 修改密码 + */ + @SaCheckLogin + @PostMapping("/updatePassword") + @Operation(summary = "修改密码", method = "POST") + public Response updatePassword(@RequestBody @Validated UpdatePasswordCmd updatePasswordCmd) { + checkCaptchaVerification(updatePasswordCmd.getToken()); + + userAuthService.updatePassword(updatePasswordCmd); + + return Response.buildSuccess(); + } + + /** + * 微信登录 + * + * @return 返回 + */ + @PostMapping("/wxMaCodeLogin") + @Operation(summary = "微信登录", method = "POST") + public SingleResponse wxMaCodeLogin(@RequestBody @Validated WxMaOpenidQry wxMaOpenidQry) { + WxMaOpenidVO wxMaOpenidVO = wxMaService.getOpenId(wxMaOpenidQry); + wxMaOpenidQry.setMaOpenid(wxMaOpenidVO.getOpenid()); + wxMaOpenidQry.setUnionid(wxMaOpenidVO.getUnionid()); + UserAuthVO userAuthVO = userAuthService.wxMaCodeLogin(wxMaOpenidQry); + extracted(userAuthVO); + + return SingleResponse.of(userAuthVO); + } + + /** + * 当前是否登录 + */ + @PostMapping("/sso/isLogin") + @Operation(summary = "当前是否登录", method = "POST") + public Object isLogin() { + return SaResult.data(StpUtil.isLogin()); + } + + /** + * 登出 + * + * @return 返回 + */ + @SaCheckLogin + @PostMapping("/sso/logout") + @Operation(summary = "登出", method = "POST") + public Response logout() { + SaSsoServerProcessor.instance.ssoSignout(); + addCookie("satoken", "", 0); + return Response.buildSuccess(); + } + + /** + * 返回SSO认证中心登录地址 + */ + @PostMapping("/sso/getSsoAuthUrl") + @Operation(summary = "返回SSO认证中心登录地址", method = "POST") + public SingleResponse getSsoAuthUrl(String clientLoginUrl) { + String serverAuthUrl = SaSsoUtil.buildServerAuthUrl(clientLoginUrl, ""); + return SingleResponse.of(serverAuthUrl); + } + + /** + * 获取 redirectUrl + */ + @PostMapping("/sso/getRedirectUrl") + @Operation(summary = "获取 redirectUrl", method = "POST") + public SingleResponse getRedirectUrl(String redirect) { + // 未登录情况下,返回 code=401 + if (!StpUtil.isLogin()) { + throw new BizException(UserAuthErrorCode.USER_AUTH_NOT_LOGIN); + } + + List platformVOList = platformService.list(new PlatformListQry()); + + PlatformVO platformVO = getPlatformVO(redirect, platformVOList); + + UserAuthVO userAuthVO = (UserAuthVO) StpUtil.getSession().get("userAuth"); + List userRoleVOList = userAuthVO.getUserRoleVOList(); + + // 查询用户关联的权限 + Long platformId = platformVO.getPlatformId(); + UserPermissionQry userPermissionQry = new UserPermissionQry(); + userPermissionQry.setPlatformId(platformId); + userPermissionQry.setRoleIdList(userRoleVOList.stream().map(UserRoleVO::getRoleId).toList()); + List permissionVOList = userPermissionService.list(userPermissionQry); + + StpUtil.getSession().set("platformId:" + platformId, permissionVOList); + + return SingleResponse.of(platformVO.getHomePage()); + } + + /** + * 登录后处理 + * + * @param userAuthVO 用户信息 + */ + private void extracted(UserAuthVO userAuthVO) { + // 查询用户关联的角色 + UserRoleListQry userRoleListQry = new UserRoleListQry(); + userRoleListQry.setUserId(userAuthVO.getUserId()); + List userRoleVOList = userRoleService.list(userRoleListQry); + userAuthVO.setUserRoleVOList(userRoleVOList); + + // 登录, 同端互斥 + StpUtil.login(userAuthVO.getUserId()); + StpUtil.getSession().set("userAuth", userAuthVO); + + AdminShowQry adminShowQry = new AdminShowQry(); + adminShowQry.setUserId(userAuthVO.getUserId()); + AdminVO adminVO = adminService.show(adminShowQry); + StpUtil.getSession().set("createdBy", adminVO.getAdminId()); + StpUtil.getSession().set("createdByName", adminVO.getName()); + + SaTokenInfo tokenInfo = StpUtil.getTokenInfo(); + UserAuthVO.Meta meta = new UserAuthVO.Meta(); + meta.setAccessToken(tokenInfo.getTokenValue()); + meta.setExpiresIn(tokenInfo.getTokenTimeout()); + meta.setTokenType("Bearer"); + + userAuthVO.setMeta(meta); + } + + /** + * 检查验证码验证 + * 本方法用于验证用户提交的验证码是否有效通过验证码服务的验证 + * + * @param token 验证码令牌,用于验证用户提交的验证码 + * @throws BizException 如果验证码验证失败,抛出业务异常 + */ + private void checkCaptchaVerification(String token) { + // 初始化验证码校验对象 + CaptchaVO captchaVO = new CaptchaVO(); + // 设置验证码验证令牌 + captchaVO.setCaptchaVerification(token); + // 调用验证码服务进行验证 + ResponseModel verification = captchaService.verification(captchaVO); + // 如果验证失败,抛出业务异常 + if (!verification.isSuccess()) { + throw new BizException(verification.getRepMsg(), UserAuthErrorCode.CAPTCHA_ERROR); + } + } + + @PostMapping("/openSafe") + @Operation(summary = "二次认证", method = "POST") + public Response openSafe(@RequestBody @Validated OpenSafeCmd openSafeCmd) { + openSafeCmd.setUserId(StpUtil.getLoginIdAsLong()); + userAuthService.openSafe(openSafeCmd); + + StpUtil.openSafe(600); + return Response.buildSuccess(); + } +} diff --git a/erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/controller/UserController.java b/erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/controller/UserController.java new file mode 100644 index 0000000..9d86538 --- /dev/null +++ b/erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/controller/UserController.java @@ -0,0 +1,211 @@ +package com.xunhong.erp.turbo.auth.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.lang.tree.Tree; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.api.facade.api.WxMaServiceI; +import com.xunhong.erp.turbo.api.facade.dto.cmd.WxMaPhoneBindCmd; +import com.xunhong.erp.turbo.api.facade.dto.qry.WxMaPhoneQry; +import com.xunhong.erp.turbo.api.rbac.api.UserMenuServiceI; +import com.xunhong.erp.turbo.api.rbac.api.UserRoleServiceI; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleMenuTreeQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.UserRoleListQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.UserRoleVO; +import com.xunhong.erp.turbo.api.user.api.AdminServiceI; +import com.xunhong.erp.turbo.api.user.api.EmployeeServiceI; +import com.xunhong.erp.turbo.api.user.api.UserAuthServiceI; +import com.xunhong.erp.turbo.api.user.api.UserServiceI; +import com.xunhong.erp.turbo.api.user.dto.cmd.EmployeeUpdateAvatarCmd; +import com.xunhong.erp.turbo.api.user.dto.cmd.UserUpdateCmd; +import com.xunhong.erp.turbo.api.user.dto.qry.AdminShowQry; +import com.xunhong.erp.turbo.api.user.dto.qry.EmployeeShowQry; +import com.xunhong.erp.turbo.api.user.dto.qry.UserAuthShowQry; +import com.xunhong.erp.turbo.api.user.dto.qry.UserShowQry; +import com.xunhong.erp.turbo.api.user.dto.vo.AdminVO; +import com.xunhong.erp.turbo.api.user.dto.vo.EmployeeVO; +import com.xunhong.erp.turbo.api.user.dto.vo.UserAuthVO; +import com.xunhong.erp.turbo.api.user.dto.vo.UserVO; +import com.xunhong.erp.turbo.base.dto.UserSession; +import com.xunhong.erp.turbo.file.FileService; +import com.xunhong.erp.turbo.file.config.OssProperties; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.List; +import java.util.Objects; + +/** + * @author shenyifei + */ +@Tag(name = "User", description = "用户管理") +@RestController("authUserController") +@RequestMapping(value = "/auth") +@RequiredArgsConstructor +public class UserController { + private final OssProperties properties; + + @DubboReference(version = "1.0.0") + private final AdminServiceI adminService; + + @DubboReference(version = "1.0.0") + private final UserServiceI userService; + + @DubboReference(version = "1.0.0") + private final UserMenuServiceI userMenuService; + + @DubboReference(version = "1.0.0") + private final WxMaServiceI wxMaService; + + private final FileService fileService; + + @DubboReference(version = "1.0.0") + private final UserAuthServiceI userAuthService; + + @DubboReference(version = "1.0.0") + private final EmployeeServiceI employeeService; + + @DubboReference(version = "1.0.0") + private final UserRoleServiceI userRoleService; + + @SaCheckLogin + @GetMapping(value = "/userAdmin") + @Operation(summary = "管理员详情", method = "GET") + public SingleResponse userAdmin(@ModelAttribute @Validated AdminShowQry adminShowQry) { + + Long userId = UserSession.USER_THREAD_LOCAL.get().getUserId(); + adminShowQry.setUserId(userId); + + return SingleResponse.of(adminService.show(adminShowQry)); + } + + @SaCheckLogin + @GetMapping(value = "/userEmployee") + @Operation(summary = "员工详情", method = "GET") + public SingleResponse userEmployee(@ModelAttribute @Validated EmployeeShowQry employeeShowQry) { + + Long userId = UserSession.USER_THREAD_LOCAL.get().getUserId(); + employeeShowQry.setUserId(userId); + + EmployeeVO employeeVO = employeeService.show(employeeShowQry); + + // 获取角色 + UserRoleListQry userRoleListQry = new UserRoleListQry(); + userRoleListQry.setUserId(employeeVO.getUserId()); + List userRoleVOList = userRoleService.list(userRoleListQry); + + employeeVO.setUserRoleList(userRoleVOList); + employeeVO.setRoleIdList(userRoleVOList.stream().map(UserRoleVO::getRoleId).toList()); + + return SingleResponse.of(employeeVO); + } + + // 更新员工头像 + @SaCheckLogin + @PostMapping("/userEmployeeUpdateAvatar") + @Operation(summary = "更新员工头像", method = "POST") + public Response userEmployeeUpdateAvatar(@RequestBody @Validated EmployeeUpdateAvatarCmd employeeUpdateAvatarCmd) { + employeeService.updateAvatar(employeeUpdateAvatarCmd); + return Response.buildSuccess(); + } + + + @SaCheckLogin + @GetMapping("/userInfo") + @Operation(summary = "用户信息", method = "GET") + public SingleResponse userInfo() { + UserAuthShowQry userAuthShowQry = new UserAuthShowQry(); + userAuthShowQry.setUserId(UserSession.USER_THREAD_LOCAL.get().getUserId()); + UserAuthVO userAuthVO = userAuthService.show(userAuthShowQry); + + return SingleResponse.of(userAuthVO); + } + + @SaCheckLogin + @PostMapping("/userUpdate") + @Operation(summary = "修改用户信息", method = "POST") + public Response userUpdate(@RequestBody @Validated UserUpdateCmd userUpdateCmd) { + userUpdateCmd.setUserId(UserSession.USER_THREAD_LOCAL.get().getUserId()); + userService.update(userUpdateCmd); + + return Response.buildSuccess(); + } + + @SaCheckLogin + @GetMapping("/userMenu") + @Operation(summary = "菜单列表", method = "GET") + public MultiResponse> userMenu( + @ModelAttribute @Validated RoleMenuTreeQry roleMenuTreeQry + ) { + return MultiResponse.of(userMenuService.list(roleMenuTreeQry)); + } + + /** + * 获取手机号码 + */ + @SaCheckLogin + @PostMapping("/wxMaPhone") + @Operation(summary = "绑定微信手机号码", method = "GET") + public SingleResponse wxMaPhone(@ModelAttribute @Validated WxMaPhoneQry wxMaPhoneQry) { + String phone = wxMaService.getPhone(wxMaPhoneQry); + + return SingleResponse.of(phone); + } + + /** + * 绑定微信手机号码 + */ + @SaCheckLogin + @PostMapping("/wxMaPhoneBind") + @Operation(summary = "绑定微信手机号码", method = "POST") + public Response wxMaPhoneBind(@RequestBody @Validated WxMaPhoneBindCmd wxMaPhoneBindCmd) { + String phone = wxMaService.getPhone(wxMaPhoneBindCmd); + + UserAuthVO userAuthVO = (UserAuthVO) StpUtil.getSession().get("userAuth"); + UserUpdateCmd userUpdateCmd = new UserUpdateCmd(); + userUpdateCmd.setUserId(userAuthVO.getUserId()); + userUpdateCmd.setPhone(phone); + + UserVO userVO = userAuthVO.getUserVO(); + userVO.setPhone(phone); + userAuthVO.setUserVO(userVO); + StpUtil.getSession().set("userAuth", userAuthVO); + + userService.update(userUpdateCmd); + + return Response.buildSuccess(); + } + + @SaCheckLogin + @PostMapping(value = "upload", consumes = "multipart/form-data") + @Operation(summary = "上传图片", method = "POST", hidden = true) + public SingleResponse upload(@RequestParam @Schema(title = "图片文件", requiredMode = Schema.RequiredMode.REQUIRED, type = "file") MultipartFile file) throws IOException { + String objectName = "uploads/" + LocalDateTimeUtil.format(LocalDateTimeUtil.now(), "yyMM/dd") + "/" + file.getOriginalFilename(); + fileService.upload(objectName, file.getInputStream()); + return SingleResponse.of(properties.getDomain() + objectName); + } + + /** + * 判断是否关注公众号 + */ + @SaCheckLogin + @PostMapping("/isSubscribe") + @Operation(summary = "判断是否关注公众号", method = "POST") + public SingleResponse isSubscribe() { + UserShowQry userShowQry = new UserShowQry(); + userShowQry.setUserId(UserSession.USER_THREAD_LOCAL.get().getUserId()); + UserVO userVO = userService.show(userShowQry); + + return SingleResponse.of(Objects.nonNull(userVO.getMpOpenid())); + } +} diff --git a/erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/exception/UserAuthErrorCode.java b/erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/exception/UserAuthErrorCode.java new file mode 100644 index 0000000..2e89d05 --- /dev/null +++ b/erp-turbo-auth/src/main/java/com/xunhong/erp/turbo/auth/exception/UserAuthErrorCode.java @@ -0,0 +1,42 @@ +package com.xunhong.erp.turbo.auth.exception; + +import com.xunhong.erp.turbo.base.exception.ErrorCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Getter +public enum UserAuthErrorCode implements ErrorCode { + // 未登录 + USER_AUTH_NOT_LOGIN("USER_AUTH_NOT_LOGIN", "未登录"), + + // 无应用权限 + USER_AUTH_NO_APP_PERMISSION("USER_AUTH_NO_APP_PERMISSION", "无应用权限"), + + // 无权限 + USER_AUTH_NO_PERMISSION("USER_AUTH_NO_PERMISSION", "无权限"), + + // 无权限 + USER_AUTH_NO_ROLE("USER_AUTH_NO_ROLE", "无角色"), + + // 无权限 + USER_AUTH_NO_USER("USER_AUTH_NO_USER", "无用户"), + + // 验证码错误 + CAPTCHA_ERROR("CAPTCHA_ERROR", "验证码错误"); + + + private final String code; + + private final String message; + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getMessage() { + return this.message; + } +} diff --git a/erp-turbo-auth/src/main/resources/application.yml b/erp-turbo-auth/src/main/resources/application.yml new file mode 100644 index 0000000..a6a4451 --- /dev/null +++ b/erp-turbo-auth/src/main/resources/application.yml @@ -0,0 +1,17 @@ +spring: + application: + name: @application.name@ + profiles: + active: dev + config: + import: classpath:cache.yml,classpath:rpc.yml,classpath:limiter.yml,classpath:sa-token.yml + + oss: + endpoint: https://oss-cn-beijing.aliyuncs.com + access-secret: nQjR51pOeVggk1AgSyroj2svegAH2q + access-key: LTAI5tRk9oGxq7KYb5VtJbUm + bucket: qilincloud168 + enabled: true + +server: + port: 8082 diff --git a/erp-turbo-auth/src/main/resources/bootstrap.yml b/erp-turbo-auth/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..c93901e --- /dev/null +++ b/erp-turbo-auth/src/main/resources/bootstrap.yml @@ -0,0 +1,7 @@ +spring: + application: + name: @application.name@ + profiles: + active: dev + config: + import: classpath:base.yml,classpath:logging.yml,classpath:config.yml diff --git a/erp-turbo-auth/src/main/resources/i18n/messages.properties b/erp-turbo-auth/src/main/resources/i18n/messages.properties new file mode 100644 index 0000000..ea28719 --- /dev/null +++ b/erp-turbo-auth/src/main/resources/i18n/messages.properties @@ -0,0 +1,22 @@ +msg.200=Success +msg.500=Internal Server Error. +msg.1001=No data +msg.1002=Data saving failed +msg.100000=platform and client do not match. +msg.100001=the current account has been registered in the platform client, please do not register again. +msg.100002= +msg.50001=Obtaining the verification code succeeded +msg.50002=The verification code has expired +msg.50003=The account corresponding to the verification code does not match +msg.50004=Verification code error +validation.account=account number +validation.wechatCode=wechat code +validation.smsCode=message authentication code +validation.mobile=mobile +validation.platform=platform +validation.password=password +validation.min=length must be greater than {min} bits +validation.max=length must be less than {max} bits +validation.size=length must be between {min} ~ {max} bits +validation.regexp=format error +validation.notBlank=must not be empty \ No newline at end of file diff --git a/erp-turbo-auth/src/main/resources/i18n/messages_en.properties b/erp-turbo-auth/src/main/resources/i18n/messages_en.properties new file mode 100644 index 0000000..ea28719 --- /dev/null +++ b/erp-turbo-auth/src/main/resources/i18n/messages_en.properties @@ -0,0 +1,22 @@ +msg.200=Success +msg.500=Internal Server Error. +msg.1001=No data +msg.1002=Data saving failed +msg.100000=platform and client do not match. +msg.100001=the current account has been registered in the platform client, please do not register again. +msg.100002= +msg.50001=Obtaining the verification code succeeded +msg.50002=The verification code has expired +msg.50003=The account corresponding to the verification code does not match +msg.50004=Verification code error +validation.account=account number +validation.wechatCode=wechat code +validation.smsCode=message authentication code +validation.mobile=mobile +validation.platform=platform +validation.password=password +validation.min=length must be greater than {min} bits +validation.max=length must be less than {max} bits +validation.size=length must be between {min} ~ {max} bits +validation.regexp=format error +validation.notBlank=must not be empty \ No newline at end of file diff --git a/erp-turbo-auth/src/main/resources/i18n/messages_zh_CN.properties b/erp-turbo-auth/src/main/resources/i18n/messages_zh_CN.properties new file mode 100644 index 0000000..dcd1ed2 --- /dev/null +++ b/erp-turbo-auth/src/main/resources/i18n/messages_zh_CN.properties @@ -0,0 +1,21 @@ +msg.200=\u64CD\u4F5C\u6210\u529F +msg.500=\u7CFB\u7EDF\u5F02\u5E38 +msg.1001=\u6570\u636E\u4E3A\u7A7A +msg.1002=\u6570\u636E\u4FDD\u5B58\u5931\u8D25 +msg.100000=\u5e73\u53f0\u548c\u5ba2\u6237\u7aef\u4e0d\u5339\u914d。 +msg.100001=\u5f53\u524d\u8d26\u53f7\u5df2\u7ecf\u5728\u5e73\u53f0\u5ba2\u6237\u7aef\u6ce8\u518c,\u8bf7\u52ff\u91cd\u590d\u6ce8\u518c。 +msg.50001={0}\u83b7\u53d6\u6210\u529f +msg.50002={0}\u5df2\u8fc7\u671f +msg.50003={0}\u5bf9\u5e94\u7684\u8d26\u53f7\u4e0d\u5339\u914d +msg.50004={0}\u9519\u8bef +validation.account=\u8d26\u53f7 +validation.wechatCode=\u5fae\u4fe1 code +validation.smsCode=\u77ed\u4fe1\u9a8c\u8bc1\u7801 +validation.mobile=\u624b\u673a\u53f7\u7801 +validation.platform=\u5e73\u53f0 +validation.password=\u5bc6\u7801 +validation.min=\u957f\u5ea6\u5fc5\u987b\u5927\u4e8e {min} \u4f4d +validation.max=\u957f\u5ea6\u5fc5\u987b\u5c0f\u4e8e {max} \u4f4d +validation.size=\u957f\u5ea6\u5fc5\u987b\u4ecb\u4e8e {min} ~ {max} \u4f4d +validation.regexp=\u683c\u5f0f\u9519\u8bef +validation.notBlank=\u5fc5\u987b\u4e0d\u80fd\u4e3a\u7a7a \ No newline at end of file diff --git a/erp-turbo-business/erp-turbo-biz/pom.xml b/erp-turbo-business/erp-turbo-biz/pom.xml new file mode 100644 index 0000000..c19856b --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/pom.xml @@ -0,0 +1,143 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-business + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-biz + + + erp-turbo-biz + 21 + 21 + UTF-8 + + + + + + com.alibaba.cola + cola-component-domain-starter + + + com.alibaba.cola + cola-component-exception + + + + + org.springframework.boot + spring-boot-starter + + + + com.xunhong + erp-turbo-base + + + + com.xunhong + erp-turbo-config + + + + com.xunhong + erp-turbo-file + + + + com.xunhong + erp-turbo-api + + + + com.xunhong + erp-turbo-rpc + + + + com.xunhong + erp-turbo-apm + + + + com.xunhong + erp-turbo-logback + + + + com.xunhong + erp-turbo-limiter + + + + com.xunhong + erp-turbo-datasource + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + junit + junit + test + + + + + com.h2database + h2 + 1.4.200 + test + + + com.baomidou + mybatis-mate-annotation + 1.3.4 + + + + + ${application.name} + + + org.springframework.boot + spring-boot-maven-plugin + + true + + com.xunhong.erp.turbo.biz.ErpTurboBizApplication + + + true + + ../layers/layers.xml + + + + + + package + + repackage + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/ErpTurboBizApplication.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/ErpTurboBizApplication.java new file mode 100644 index 0000000..6a96c3b --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/ErpTurboBizApplication.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.biz; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * Spring Boot Starter + * + * @author shenyifei + */ +@SpringBootApplication(scanBasePackages = {"com.xunhong.erp.turbo", "com.alibaba.cola"}) +public class ErpTurboBizApplication { + + public static void main(String[] args) { + SpringApplication.run(ErpTurboBizApplication.class, args); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/BoxBrandAssembler.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/BoxBrandAssembler.java new file mode 100644 index 0000000..9845c4d --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/BoxBrandAssembler.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.biz.app.assembler; + +import com.xunhong.erp.turbo.api.biz.dto.vo.BoxBrandVO; +import com.xunhong.erp.turbo.biz.domain.entity.BoxBrand; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface BoxBrandAssembler { + + @Mapping(target = "boxProductVOList", source = "boxProductList") + BoxBrandVO toBoxBrandVO(BoxBrand boxBrand); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/BoxProductAssembler.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/BoxProductAssembler.java new file mode 100644 index 0000000..9a3ab16 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/BoxProductAssembler.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.biz.app.assembler; + +import com.xunhong.erp.turbo.api.biz.dto.vo.BoxProductVO; +import com.xunhong.erp.turbo.biz.domain.entity.BoxProduct; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface BoxProductAssembler { + + BoxProductVO toBoxProductVO(BoxProduct boxProduct); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/CompanyAssembler.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/CompanyAssembler.java new file mode 100644 index 0000000..69d130a --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/CompanyAssembler.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.biz.app.assembler; + +import com.xunhong.erp.turbo.api.biz.dto.vo.CompanyVO; +import com.xunhong.erp.turbo.biz.domain.entity.Company; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface CompanyAssembler { + + CompanyVO toCompanyVO(Company company); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/CompanyPaymentAccountAssembler.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/CompanyPaymentAccountAssembler.java new file mode 100644 index 0000000..b6c1a36 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/CompanyPaymentAccountAssembler.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.biz.app.assembler; + +import com.xunhong.erp.turbo.api.biz.dto.vo.CompanyPaymentAccountVO; +import com.xunhong.erp.turbo.biz.domain.entity.CompanyPaymentAccount; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface CompanyPaymentAccountAssembler { + + @Mapping(target = "companyVO", source = "company") + CompanyPaymentAccountVO toCompanyPaymentAccountVO(CompanyPaymentAccount companyPaymentAccount); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/CostItemAssembler.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/CostItemAssembler.java new file mode 100644 index 0000000..acd40d0 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/CostItemAssembler.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.biz.app.assembler; + +import com.xunhong.erp.turbo.api.biz.dto.vo.CostItemVO; +import com.xunhong.erp.turbo.biz.domain.entity.CostItem; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface CostItemAssembler { + + CostItemVO toCostItemVO(CostItem costItem); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/DealerAssembler.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/DealerAssembler.java new file mode 100644 index 0000000..d50bade --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/DealerAssembler.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.biz.app.assembler; + +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerVO; +import com.xunhong.erp.turbo.biz.domain.entity.Dealer; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface DealerAssembler { + + @Mapping(target = "dealerPaymentAccountVOList", source = "dealerPaymentAccountList") + DealerVO toDealerVO(Dealer dealer); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/DealerPaymentAccountAssembler.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/DealerPaymentAccountAssembler.java new file mode 100644 index 0000000..cf24de9 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/DealerPaymentAccountAssembler.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.biz.app.assembler; + +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerPaymentAccountVO; +import com.xunhong.erp.turbo.biz.domain.entity.DealerPaymentAccount; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, uses = {DealerAssembler.class}) +public interface DealerPaymentAccountAssembler { + + @Mapping(target = "dealerVO", source = "dealer") + DealerPaymentAccountVO toDealerPaymentAccountVO(DealerPaymentAccount dealerPaymentAccount); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/DealerRebateCustomerAssembler.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/DealerRebateCustomerAssembler.java new file mode 100644 index 0000000..e418ecc --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/DealerRebateCustomerAssembler.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.biz.app.assembler; + +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerRebateCustomerVO; +import com.xunhong.erp.turbo.biz.domain.entity.DealerRebateCustomer; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface DealerRebateCustomerAssembler { + + @Mapping(target = "dealerVO", source = "dealer") + DealerRebateCustomerVO toDealerRebateCustomerVO(DealerRebateCustomer dealerRebateCustomer); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/DealerWarehouseAssembler.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/DealerWarehouseAssembler.java new file mode 100644 index 0000000..5d1c99e --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/DealerWarehouseAssembler.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.biz.app.assembler; + +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerWarehouseVO; +import com.xunhong.erp.turbo.biz.domain.entity.DealerWarehouse; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface DealerWarehouseAssembler { + + @Mapping(target = "dealerPaymentAccountVO", source = "dealerPaymentAccount") + @Mapping(target = "dealerVO", source = "dealer") + DealerWarehouseVO toDealerWarehouseVO(DealerWarehouse dealerWarehouse); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/GiftBoxAssembler.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/GiftBoxAssembler.java new file mode 100644 index 0000000..da461ce --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/GiftBoxAssembler.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.biz.app.assembler; + +import com.xunhong.erp.turbo.api.biz.dto.vo.GiftBoxVO; +import com.xunhong.erp.turbo.biz.domain.entity.GiftBox; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface GiftBoxAssembler { + + GiftBoxVO toGiftBoxVO(GiftBox giftBox); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/PurchaseOrderAssembler.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/PurchaseOrderAssembler.java new file mode 100644 index 0000000..d67efd9 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/PurchaseOrderAssembler.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.biz.app.assembler; + +import com.xunhong.erp.turbo.api.biz.dto.vo.PurchaseOrderVO; +import com.xunhong.erp.turbo.biz.domain.entity.PurchaseOrder; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface PurchaseOrderAssembler { + + @Mapping(target = "draft", ignore = true) + PurchaseOrderVO toPurchaseOrderVO(PurchaseOrder purchaseOrder); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/ShipOrderAssembler.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/ShipOrderAssembler.java new file mode 100644 index 0000000..734eeb8 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/ShipOrderAssembler.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.biz.app.assembler; + +import com.xunhong.erp.turbo.api.biz.dto.vo.ShipOrderVO; +import com.xunhong.erp.turbo.biz.domain.entity.ShipOrder; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface ShipOrderAssembler { + + ShipOrderVO toShipOrderVO(ShipOrder shipOrder); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/SupplierAssembler.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/SupplierAssembler.java new file mode 100644 index 0000000..b39be6f --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/assembler/SupplierAssembler.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.biz.app.assembler; + +import com.xunhong.erp.turbo.api.biz.dto.vo.SupplierVO; +import com.xunhong.erp.turbo.biz.domain.entity.Supplier; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface SupplierAssembler { + + SupplierVO toSupplierVO(Supplier supplier); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxBrandCreateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxBrandCreateCmdExe.java new file mode 100644 index 0000000..d34ea1d --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxBrandCreateCmdExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.BoxBrandVO; +import com.xunhong.erp.turbo.biz.app.assembler.BoxBrandAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.BoxBrand; +import com.xunhong.erp.turbo.biz.domain.gateway.BoxBrandGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class BoxBrandCreateCmdExe { + + private final BoxBrandAssembler boxBrandAssembler; + private final BoxBrandGateway boxBrandGateway; + + public BoxBrandVO execute(BoxBrandCreateCmd boxBrandCreateCmd) { + BoxBrand boxBrand = boxBrandGateway.save(boxBrandCreateCmd); + + return boxBrandAssembler.toBoxBrandVO(boxBrand); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxBrandDestroyCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxBrandDestroyCmdExe.java new file mode 100644 index 0000000..9ff1468 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxBrandDestroyCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandDestroyCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.BoxBrandGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class BoxBrandDestroyCmdExe { + private final BoxBrandGateway boxBrandGateway; + + public void execute(BoxBrandDestroyCmd boxBrandDestroyCmd) { + boxBrandGateway.destroy(boxBrandDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxBrandUpdateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxBrandUpdateCmdExe.java new file mode 100644 index 0000000..18bf0c5 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxBrandUpdateCmdExe.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.BoxBrandVO; +import com.xunhong.erp.turbo.biz.app.assembler.BoxBrandAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.BoxBrand; +import com.xunhong.erp.turbo.biz.domain.gateway.BoxBrandGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class BoxBrandUpdateCmdExe { + + private final BoxBrandAssembler boxBrandAssembler; + private final BoxBrandGateway boxBrandGateway; + + public BoxBrandVO execute(BoxBrandUpdateCmd boxBrandUpdateCmd) { + BoxBrand boxBrand = boxBrandGateway.update(boxBrandUpdateCmd); + return boxBrandAssembler.toBoxBrandVO(boxBrand); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxProductCreateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxProductCreateCmdExe.java new file mode 100644 index 0000000..3c0a573 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxProductCreateCmdExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.BoxProductVO; +import com.xunhong.erp.turbo.biz.app.assembler.BoxProductAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.BoxProduct; +import com.xunhong.erp.turbo.biz.domain.gateway.BoxProductGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class BoxProductCreateCmdExe { + + private final BoxProductAssembler boxProductAssembler; + private final BoxProductGateway boxProductGateway; + + public BoxProductVO execute(BoxProductCreateCmd boxProductCreateCmd) { + BoxProduct boxProduct = boxProductGateway.save(boxProductCreateCmd); + + return boxProductAssembler.toBoxProductVO(boxProduct); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxProductDestroyCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxProductDestroyCmdExe.java new file mode 100644 index 0000000..081dd75 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxProductDestroyCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductDestroyCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.BoxProductGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class BoxProductDestroyCmdExe { + private final BoxProductGateway boxProductGateway; + + public void execute(BoxProductDestroyCmd boxProductDestroyCmd) { + boxProductGateway.destroy(boxProductDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxProductUpdateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxProductUpdateCmdExe.java new file mode 100644 index 0000000..19b275b --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/BoxProductUpdateCmdExe.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.BoxProductVO; +import com.xunhong.erp.turbo.biz.app.assembler.BoxProductAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.BoxProduct; +import com.xunhong.erp.turbo.biz.domain.gateway.BoxProductGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class BoxProductUpdateCmdExe { + + private final BoxProductAssembler boxProductAssembler; + private final BoxProductGateway boxProductGateway; + + public BoxProductVO execute(BoxProductUpdateCmd boxProductUpdateCmd) { + BoxProduct boxProduct = boxProductGateway.update(boxProductUpdateCmd); + return boxProductAssembler.toBoxProductVO(boxProduct); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyCreateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyCreateCmdExe.java new file mode 100644 index 0000000..fcda9e4 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyCreateCmdExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.CompanyVO; +import com.xunhong.erp.turbo.biz.app.assembler.CompanyAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.Company; +import com.xunhong.erp.turbo.biz.domain.gateway.CompanyGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CompanyCreateCmdExe { + + private final CompanyAssembler companyAssembler; + private final CompanyGateway companyGateway; + + public CompanyVO execute(CompanyCreateCmd companyCreateCmd) { + Company company = companyGateway.save(companyCreateCmd); + + return companyAssembler.toCompanyVO(company); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyDestroyCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyDestroyCmdExe.java new file mode 100644 index 0000000..83d4128 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyDestroyCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyDestroyCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.CompanyGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CompanyDestroyCmdExe { + private final CompanyGateway companyGateway; + + public void execute(CompanyDestroyCmd companyDestroyCmd) { + companyGateway.destroy(companyDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyPaymentAccountCreateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyPaymentAccountCreateCmdExe.java new file mode 100644 index 0000000..a40f0d7 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyPaymentAccountCreateCmdExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.CompanyPaymentAccountVO; +import com.xunhong.erp.turbo.biz.app.assembler.CompanyPaymentAccountAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.CompanyPaymentAccount; +import com.xunhong.erp.turbo.biz.domain.gateway.CompanyPaymentAccountGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CompanyPaymentAccountCreateCmdExe { + + private final CompanyPaymentAccountAssembler companyPaymentAccountAssembler; + private final CompanyPaymentAccountGateway companyPaymentAccountGateway; + + public CompanyPaymentAccountVO execute(CompanyPaymentAccountCreateCmd companyPaymentAccountCreateCmd) { + CompanyPaymentAccount companyPaymentAccount = companyPaymentAccountGateway.save(companyPaymentAccountCreateCmd); + + return companyPaymentAccountAssembler.toCompanyPaymentAccountVO(companyPaymentAccount); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyPaymentAccountDestroyCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyPaymentAccountDestroyCmdExe.java new file mode 100644 index 0000000..5688fcd --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyPaymentAccountDestroyCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountDestroyCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.CompanyPaymentAccountGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CompanyPaymentAccountDestroyCmdExe { + private final CompanyPaymentAccountGateway companyPaymentAccountGateway; + + public void execute(CompanyPaymentAccountDestroyCmd companyPaymentAccountDestroyCmd) { + companyPaymentAccountGateway.destroy(companyPaymentAccountDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyPaymentAccountUpdateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyPaymentAccountUpdateCmdExe.java new file mode 100644 index 0000000..c860f17 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyPaymentAccountUpdateCmdExe.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.CompanyPaymentAccountVO; +import com.xunhong.erp.turbo.biz.app.assembler.CompanyPaymentAccountAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.CompanyPaymentAccount; +import com.xunhong.erp.turbo.biz.domain.gateway.CompanyPaymentAccountGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CompanyPaymentAccountUpdateCmdExe { + + private final CompanyPaymentAccountAssembler companyPaymentAccountAssembler; + private final CompanyPaymentAccountGateway companyPaymentAccountGateway; + + public CompanyPaymentAccountVO execute(CompanyPaymentAccountUpdateCmd companyPaymentAccountUpdateCmd) { + CompanyPaymentAccount companyPaymentAccount = companyPaymentAccountGateway.update(companyPaymentAccountUpdateCmd); + return companyPaymentAccountAssembler.toCompanyPaymentAccountVO(companyPaymentAccount); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyUpdateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyUpdateCmdExe.java new file mode 100644 index 0000000..c4ac86e --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CompanyUpdateCmdExe.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.CompanyVO; +import com.xunhong.erp.turbo.biz.app.assembler.CompanyAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.Company; +import com.xunhong.erp.turbo.biz.domain.gateway.CompanyGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CompanyUpdateCmdExe { + + private final CompanyAssembler companyAssembler; + private final CompanyGateway companyGateway; + + public CompanyVO execute(CompanyUpdateCmd companyUpdateCmd) { + Company company = companyGateway.update(companyUpdateCmd); + return companyAssembler.toCompanyVO(company); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CostItemCreateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CostItemCreateCmdExe.java new file mode 100644 index 0000000..634ca86 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CostItemCreateCmdExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.CostItemVO; +import com.xunhong.erp.turbo.biz.app.assembler.CostItemAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.CostItem; +import com.xunhong.erp.turbo.biz.domain.gateway.CostItemGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CostItemCreateCmdExe { + + private final CostItemAssembler costItemAssembler; + private final CostItemGateway costItemGateway; + + public CostItemVO execute(CostItemCreateCmd costItemCreateCmd) { + CostItem costItem = costItemGateway.save(costItemCreateCmd); + + return costItemAssembler.toCostItemVO(costItem); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CostItemDestroyCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CostItemDestroyCmdExe.java new file mode 100644 index 0000000..85363ca --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CostItemDestroyCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemDestroyCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.CostItemGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CostItemDestroyCmdExe { + private final CostItemGateway costItemGateway; + + public void execute(CostItemDestroyCmd costItemDestroyCmd) { + costItemGateway.destroy(costItemDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CostItemUpdateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CostItemUpdateCmdExe.java new file mode 100644 index 0000000..7cbdd86 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/CostItemUpdateCmdExe.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.CostItemVO; +import com.xunhong.erp.turbo.biz.app.assembler.CostItemAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.CostItem; +import com.xunhong.erp.turbo.biz.domain.gateway.CostItemGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CostItemUpdateCmdExe { + + private final CostItemAssembler costItemAssembler; + private final CostItemGateway costItemGateway; + + public CostItemVO execute(CostItemUpdateCmd costItemUpdateCmd) { + CostItem costItem = costItemGateway.update(costItemUpdateCmd); + return costItemAssembler.toCostItemVO(costItem); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerCreateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerCreateCmdExe.java new file mode 100644 index 0000000..e1b9227 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerCreateCmdExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.Dealer; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerCreateCmdExe { + + private final DealerAssembler dealerAssembler; + private final DealerGateway dealerGateway; + + public DealerVO execute(DealerCreateCmd dealerCreateCmd) { + Dealer dealer = dealerGateway.save(dealerCreateCmd); + + return dealerAssembler.toDealerVO(dealer); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerDestroyCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerDestroyCmdExe.java new file mode 100644 index 0000000..beb6b9a --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerDestroyCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerDestroyCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerDestroyCmdExe { + private final DealerGateway dealerGateway; + + public void execute(DealerDestroyCmd dealerDestroyCmd) { + dealerGateway.destroy(dealerDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerPaymentAccountCreateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerPaymentAccountCreateCmdExe.java new file mode 100644 index 0000000..9018171 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerPaymentAccountCreateCmdExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerPaymentAccountVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerPaymentAccountAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.DealerPaymentAccount; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerPaymentAccountGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerPaymentAccountCreateCmdExe { + + private final DealerPaymentAccountAssembler dealerPaymentAccountAssembler; + private final DealerPaymentAccountGateway dealerPaymentAccountGateway; + + public DealerPaymentAccountVO execute(DealerPaymentAccountCreateCmd dealerPaymentAccountCreateCmd) { + DealerPaymentAccount dealerPaymentAccount = dealerPaymentAccountGateway.save(dealerPaymentAccountCreateCmd); + + return dealerPaymentAccountAssembler.toDealerPaymentAccountVO(dealerPaymentAccount); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerPaymentAccountDestroyCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerPaymentAccountDestroyCmdExe.java new file mode 100644 index 0000000..2e3df46 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerPaymentAccountDestroyCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountDestroyCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerPaymentAccountGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerPaymentAccountDestroyCmdExe { + private final DealerPaymentAccountGateway dealerPaymentAccountGateway; + + public void execute(DealerPaymentAccountDestroyCmd dealerPaymentAccountDestroyCmd) { + dealerPaymentAccountGateway.destroy(dealerPaymentAccountDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerPaymentAccountUpdateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerPaymentAccountUpdateCmdExe.java new file mode 100644 index 0000000..e4dded0 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerPaymentAccountUpdateCmdExe.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerPaymentAccountVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerPaymentAccountAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.DealerPaymentAccount; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerPaymentAccountGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerPaymentAccountUpdateCmdExe { + + private final DealerPaymentAccountAssembler dealerPaymentAccountAssembler; + private final DealerPaymentAccountGateway dealerPaymentAccountGateway; + + public DealerPaymentAccountVO execute(DealerPaymentAccountUpdateCmd dealerPaymentAccountUpdateCmd) { + DealerPaymentAccount dealerPaymentAccount = dealerPaymentAccountGateway.update(dealerPaymentAccountUpdateCmd); + return dealerPaymentAccountAssembler.toDealerPaymentAccountVO(dealerPaymentAccount); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerRebateCustomerCreateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerRebateCustomerCreateCmdExe.java new file mode 100644 index 0000000..ba2b778 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerRebateCustomerCreateCmdExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerRebateCustomerVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerRebateCustomerAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.DealerRebateCustomer; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerRebateCustomerGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerRebateCustomerCreateCmdExe { + + private final DealerRebateCustomerAssembler dealerRebateCustomerAssembler; + private final DealerRebateCustomerGateway dealerRebateCustomerGateway; + + public DealerRebateCustomerVO execute(DealerRebateCustomerCreateCmd dealerRebateCustomerCreateCmd) { + DealerRebateCustomer dealerRebateCustomer = dealerRebateCustomerGateway.save(dealerRebateCustomerCreateCmd); + + return dealerRebateCustomerAssembler.toDealerRebateCustomerVO(dealerRebateCustomer); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerRebateCustomerDestroyCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerRebateCustomerDestroyCmdExe.java new file mode 100644 index 0000000..7a058d6 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerRebateCustomerDestroyCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerDestroyCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerRebateCustomerGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerRebateCustomerDestroyCmdExe { + private final DealerRebateCustomerGateway dealerRebateCustomerGateway; + + public void execute(DealerRebateCustomerDestroyCmd dealerRebateCustomerDestroyCmd) { + dealerRebateCustomerGateway.destroy(dealerRebateCustomerDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerRebateCustomerUpdateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerRebateCustomerUpdateCmdExe.java new file mode 100644 index 0000000..ed1ecde --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerRebateCustomerUpdateCmdExe.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerRebateCustomerVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerRebateCustomerAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.DealerRebateCustomer; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerRebateCustomerGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerRebateCustomerUpdateCmdExe { + + private final DealerRebateCustomerAssembler dealerRebateCustomerAssembler; + private final DealerRebateCustomerGateway dealerRebateCustomerGateway; + + public DealerRebateCustomerVO execute(DealerRebateCustomerUpdateCmd dealerRebateCustomerUpdateCmd) { + DealerRebateCustomer dealerRebateCustomer = dealerRebateCustomerGateway.update(dealerRebateCustomerUpdateCmd); + return dealerRebateCustomerAssembler.toDealerRebateCustomerVO(dealerRebateCustomer); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerUpdateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerUpdateCmdExe.java new file mode 100644 index 0000000..b77249e --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerUpdateCmdExe.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.Dealer; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerUpdateCmdExe { + + private final DealerAssembler dealerAssembler; + private final DealerGateway dealerGateway; + + public DealerVO execute(DealerUpdateCmd dealerUpdateCmd) { + Dealer dealer = dealerGateway.update(dealerUpdateCmd); + return dealerAssembler.toDealerVO(dealer); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerWarehouseCreateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerWarehouseCreateCmdExe.java new file mode 100644 index 0000000..5272590 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerWarehouseCreateCmdExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerWarehouseVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerWarehouseAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.DealerWarehouse; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerWarehouseGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerWarehouseCreateCmdExe { + + private final DealerWarehouseAssembler dealerWarehouseAssembler; + private final DealerWarehouseGateway dealerWarehouseGateway; + + public DealerWarehouseVO execute(DealerWarehouseCreateCmd dealerWarehouseCreateCmd) { + DealerWarehouse dealerWarehouse = dealerWarehouseGateway.save(dealerWarehouseCreateCmd); + + return dealerWarehouseAssembler.toDealerWarehouseVO(dealerWarehouse); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerWarehouseDestroyCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerWarehouseDestroyCmdExe.java new file mode 100644 index 0000000..5c1cf05 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerWarehouseDestroyCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseDestroyCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerWarehouseGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerWarehouseDestroyCmdExe { + private final DealerWarehouseGateway dealerWarehouseGateway; + + public void execute(DealerWarehouseDestroyCmd dealerWarehouseDestroyCmd) { + dealerWarehouseGateway.destroy(dealerWarehouseDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerWarehouseUpdateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerWarehouseUpdateCmdExe.java new file mode 100644 index 0000000..8ade597 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/DealerWarehouseUpdateCmdExe.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerWarehouseVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerWarehouseAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.DealerWarehouse; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerWarehouseGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerWarehouseUpdateCmdExe { + + private final DealerWarehouseAssembler dealerWarehouseAssembler; + private final DealerWarehouseGateway dealerWarehouseGateway; + + public DealerWarehouseVO execute(DealerWarehouseUpdateCmd dealerWarehouseUpdateCmd) { + DealerWarehouse dealerWarehouse = dealerWarehouseGateway.update(dealerWarehouseUpdateCmd); + return dealerWarehouseAssembler.toDealerWarehouseVO(dealerWarehouse); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/GiftBoxCreateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/GiftBoxCreateCmdExe.java new file mode 100644 index 0000000..60245b5 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/GiftBoxCreateCmdExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.GiftBoxVO; +import com.xunhong.erp.turbo.biz.app.assembler.GiftBoxAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.GiftBox; +import com.xunhong.erp.turbo.biz.domain.gateway.GiftBoxGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class GiftBoxCreateCmdExe { + + private final GiftBoxAssembler giftBoxAssembler; + private final GiftBoxGateway giftBoxGateway; + + public GiftBoxVO execute(GiftBoxCreateCmd giftBoxCreateCmd) { + GiftBox giftBox = giftBoxGateway.save(giftBoxCreateCmd); + + return giftBoxAssembler.toGiftBoxVO(giftBox); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/GiftBoxDestroyCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/GiftBoxDestroyCmdExe.java new file mode 100644 index 0000000..1245a18 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/GiftBoxDestroyCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxDestroyCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.GiftBoxGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class GiftBoxDestroyCmdExe { + private final GiftBoxGateway giftBoxGateway; + + public void execute(GiftBoxDestroyCmd giftBoxDestroyCmd) { + giftBoxGateway.destroy(giftBoxDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/GiftBoxUpdateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/GiftBoxUpdateCmdExe.java new file mode 100644 index 0000000..189e627 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/GiftBoxUpdateCmdExe.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.GiftBoxVO; +import com.xunhong.erp.turbo.biz.app.assembler.GiftBoxAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.GiftBox; +import com.xunhong.erp.turbo.biz.domain.gateway.GiftBoxGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class GiftBoxUpdateCmdExe { + + private final GiftBoxAssembler giftBoxAssembler; + private final GiftBoxGateway giftBoxGateway; + + public GiftBoxVO execute(GiftBoxUpdateCmd giftBoxUpdateCmd) { + GiftBox giftBox = giftBoxGateway.update(giftBoxUpdateCmd); + return giftBoxAssembler.toGiftBoxVO(giftBox); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderApproveCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderApproveCmdExe.java new file mode 100644 index 0000000..dc7f6e0 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderApproveCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.PurchaseOrderApproveCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.PurchaseOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PurchaseOrderApproveCmdExe { + + private final PurchaseOrderGateway purchaseOrderGateway; + + public void execute(PurchaseOrderApproveCmd purchaseOrderApproveCmd) { + purchaseOrderGateway.approve(purchaseOrderApproveCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderCreateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderCreateCmdExe.java new file mode 100644 index 0000000..ec5ec7c --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderCreateCmdExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.PurchaseOrderCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.PurchaseOrderVO; +import com.xunhong.erp.turbo.biz.app.assembler.PurchaseOrderAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.PurchaseOrder; +import com.xunhong.erp.turbo.biz.domain.gateway.PurchaseOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PurchaseOrderCreateCmdExe { + + private final PurchaseOrderAssembler purchaseOrderAssembler; + private final PurchaseOrderGateway purchaseOrderGateway; + + public PurchaseOrderVO execute(PurchaseOrderCreateCmd purchaseOrderCreateCmd) { + PurchaseOrder purchaseOrder = purchaseOrderGateway.save(purchaseOrderCreateCmd); + + return purchaseOrderAssembler.toPurchaseOrderVO(purchaseOrder); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderDestroyCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderDestroyCmdExe.java new file mode 100644 index 0000000..16ca9c7 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderDestroyCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.PurchaseOrderDestroyCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.PurchaseOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PurchaseOrderDestroyCmdExe { + private final PurchaseOrderGateway purchaseOrderGateway; + + public void execute(PurchaseOrderDestroyCmd purchaseOrderDestroyCmd) { + purchaseOrderGateway.destroy(purchaseOrderDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderFinalApproveCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderFinalApproveCmdExe.java new file mode 100644 index 0000000..756b225 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderFinalApproveCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.PurchaseOrderFinalApproveCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.PurchaseOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PurchaseOrderFinalApproveCmdExe { + + private final PurchaseOrderGateway purchaseOrderGateway; + + public void execute(PurchaseOrderFinalApproveCmd purchaseOrderFinalApproveCmd) { + purchaseOrderGateway.finalApprove(purchaseOrderFinalApproveCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderRejectApproveCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderRejectApproveCmdExe.java new file mode 100644 index 0000000..d0e86ff --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderRejectApproveCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.PurchaseOrderRejectApproveCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.PurchaseOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PurchaseOrderRejectApproveCmdExe { + + private final PurchaseOrderGateway purchaseOrderGateway; + + public void execute(PurchaseOrderRejectApproveCmd purchaseOrderRejectApproveCmd) { + purchaseOrderGateway.rejectApprove(purchaseOrderRejectApproveCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderRejectFinalCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderRejectFinalCmdExe.java new file mode 100644 index 0000000..d91f783 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderRejectFinalCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.PurchaseOrderRejectFinalCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.PurchaseOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PurchaseOrderRejectFinalCmdExe { + + private final PurchaseOrderGateway purchaseOrderGateway; + + public void execute(PurchaseOrderRejectFinalCmd purchaseOrderRejectFinalCmd) { + purchaseOrderGateway.rejectFinal(purchaseOrderRejectFinalCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderSubmitReviewCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderSubmitReviewCmdExe.java new file mode 100644 index 0000000..f66e57e --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderSubmitReviewCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.PurchaseOrderSubmitReviewCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.PurchaseOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PurchaseOrderSubmitReviewCmdExe { + + private final PurchaseOrderGateway purchaseOrderGateway; + + public void execute(PurchaseOrderSubmitReviewCmd purchaseOrderSubmitReviewCmd) { + purchaseOrderGateway.submitReview(purchaseOrderSubmitReviewCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderUpdateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderUpdateCmdExe.java new file mode 100644 index 0000000..f727462 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderUpdateCmdExe.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.PurchaseOrderUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.PurchaseOrderVO; +import com.xunhong.erp.turbo.biz.app.assembler.PurchaseOrderAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.PurchaseOrder; +import com.xunhong.erp.turbo.biz.domain.gateway.PurchaseOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PurchaseOrderUpdateCmdExe { + + private final PurchaseOrderAssembler purchaseOrderAssembler; + private final PurchaseOrderGateway purchaseOrderGateway; + + public PurchaseOrderVO execute(PurchaseOrderUpdateCmd purchaseOrderUpdateCmd) { + PurchaseOrder purchaseOrder = purchaseOrderGateway.update(purchaseOrderUpdateCmd); + return purchaseOrderAssembler.toPurchaseOrderVO(purchaseOrder); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderWithdrawReviewCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderWithdrawReviewCmdExe.java new file mode 100644 index 0000000..5d316cb --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/PurchaseOrderWithdrawReviewCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.PurchaseOrderWithdrawReviewCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.PurchaseOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PurchaseOrderWithdrawReviewCmdExe { + + private final PurchaseOrderGateway purchaseOrderGateway; + + public void execute(PurchaseOrderWithdrawReviewCmd purchaseOrderWithdrawReviewCmd) { + purchaseOrderGateway.withdrawReview(purchaseOrderWithdrawReviewCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/ShipOrderCreateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/ShipOrderCreateCmdExe.java new file mode 100644 index 0000000..5a60306 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/ShipOrderCreateCmdExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.ShipOrderVO; +import com.xunhong.erp.turbo.biz.app.assembler.ShipOrderAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.ShipOrder; +import com.xunhong.erp.turbo.biz.domain.gateway.ShipOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class ShipOrderCreateCmdExe { + + private final ShipOrderAssembler shipOrderAssembler; + private final ShipOrderGateway shipOrderGateway; + + public ShipOrderVO execute(ShipOrderCreateCmd shipOrderCreateCmd) { + ShipOrder shipOrder = shipOrderGateway.save(shipOrderCreateCmd); + + return shipOrderAssembler.toShipOrderVO(shipOrder); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/ShipOrderDestroyCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/ShipOrderDestroyCmdExe.java new file mode 100644 index 0000000..f2a86f6 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/ShipOrderDestroyCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderDestroyCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.ShipOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class ShipOrderDestroyCmdExe { + private final ShipOrderGateway shipOrderGateway; + + public void execute(ShipOrderDestroyCmd shipOrderDestroyCmd) { + shipOrderGateway.destroy(shipOrderDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/ShipOrderGenerateDocumentCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/ShipOrderGenerateDocumentCmdExe.java new file mode 100644 index 0000000..c945bac --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/ShipOrderGenerateDocumentCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderGenerateDocumentCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.ShipOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class ShipOrderGenerateDocumentCmdExe { + + private final ShipOrderGateway shipOrderGateway; + + public void execute(ShipOrderGenerateDocumentCmd shipOrderGenerateDocumentCmd) { + shipOrderGateway.generateDocument(shipOrderGenerateDocumentCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/ShipOrderUpdateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/ShipOrderUpdateCmdExe.java new file mode 100644 index 0000000..b2a8b80 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/ShipOrderUpdateCmdExe.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.ShipOrderVO; +import com.xunhong.erp.turbo.biz.app.assembler.ShipOrderAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.ShipOrder; +import com.xunhong.erp.turbo.biz.domain.gateway.ShipOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class ShipOrderUpdateCmdExe { + + private final ShipOrderAssembler shipOrderAssembler; + private final ShipOrderGateway shipOrderGateway; + + public ShipOrderVO execute(ShipOrderUpdateCmd shipOrderUpdateCmd) { + ShipOrder shipOrder = shipOrderGateway.update(shipOrderUpdateCmd); + return shipOrderAssembler.toShipOrderVO(shipOrder); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/SupplierCreateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/SupplierCreateCmdExe.java new file mode 100644 index 0000000..6be04cb --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/SupplierCreateCmdExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.SupplierVO; +import com.xunhong.erp.turbo.biz.app.assembler.SupplierAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.Supplier; +import com.xunhong.erp.turbo.biz.domain.gateway.SupplierGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class SupplierCreateCmdExe { + + private final SupplierAssembler supplierAssembler; + private final SupplierGateway supplierGateway; + + public SupplierVO execute(SupplierCreateCmd supplierCreateCmd) { + Supplier supplier = supplierGateway.save(supplierCreateCmd); + + return supplierAssembler.toSupplierVO(supplier); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/SupplierDestroyCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/SupplierDestroyCmdExe.java new file mode 100644 index 0000000..39f4c71 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/SupplierDestroyCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierDestroyCmd; +import com.xunhong.erp.turbo.biz.domain.gateway.SupplierGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class SupplierDestroyCmdExe { + private final SupplierGateway supplierGateway; + + public void execute(SupplierDestroyCmd supplierDestroyCmd) { + supplierGateway.destroy(supplierDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/SupplierUpdateCmdExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/SupplierUpdateCmdExe.java new file mode 100644 index 0000000..bbabf52 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/cmd/SupplierUpdateCmdExe.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.biz.app.executor.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.vo.SupplierVO; +import com.xunhong.erp.turbo.biz.app.assembler.SupplierAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.Supplier; +import com.xunhong.erp.turbo.biz.domain.gateway.SupplierGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class SupplierUpdateCmdExe { + + private final SupplierAssembler supplierAssembler; + private final SupplierGateway supplierGateway; + + public SupplierVO execute(SupplierUpdateCmd supplierUpdateCmd) { + Supplier supplier = supplierGateway.update(supplierUpdateCmd); + return supplierAssembler.toSupplierVO(supplier); + } +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxBrandListQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxBrandListQryExe.java new file mode 100644 index 0000000..eb8faa1 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxBrandListQryExe.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxBrandListQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.BoxBrandVO; +import com.xunhong.erp.turbo.biz.app.assembler.BoxBrandAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.BoxBrand; +import com.xunhong.erp.turbo.biz.domain.gateway.BoxBrandGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class BoxBrandListQryExe { + + private final BoxBrandGateway boxBrandGateway; + private final BoxBrandAssembler boxBrandAssembler; + + public List execute(BoxBrandListQry boxBrandListQry) { + List boxBrandList = boxBrandGateway.list(boxBrandListQry); + return boxBrandList.stream().map(boxBrandAssembler::toBoxBrandVO).toList(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxBrandPageQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxBrandPageQryExe.java new file mode 100644 index 0000000..0b19630 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxBrandPageQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxBrandPageQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.BoxBrandVO; +import com.xunhong.erp.turbo.biz.app.assembler.BoxBrandAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.BoxBrand; +import com.xunhong.erp.turbo.biz.domain.gateway.BoxBrandGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class BoxBrandPageQryExe { + + private final BoxBrandGateway boxBrandGateway; + private final BoxBrandAssembler boxBrandAssembler; + + public IPage execute(BoxBrandPageQry boxBrandPageQry) { + IPage page = boxBrandGateway.page(boxBrandPageQry); + return page.convert(boxBrandAssembler::toBoxBrandVO); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxBrandShowQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxBrandShowQryExe.java new file mode 100644 index 0000000..955a0bf --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxBrandShowQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxBrandShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.BoxBrandVO; +import com.xunhong.erp.turbo.biz.app.assembler.BoxBrandAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.BoxBrand; +import com.xunhong.erp.turbo.biz.domain.gateway.BoxBrandGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class BoxBrandShowQryExe { + + private final BoxBrandAssembler boxBrandAssembler; + private final BoxBrandGateway boxBrandGateway; + + public BoxBrandVO execute(BoxBrandShowQry boxBrandShowQry) { + BoxBrand boxBrand = boxBrandGateway.show(boxBrandShowQry); + + return boxBrandAssembler.toBoxBrandVO(boxBrand); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxProductListQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxProductListQryExe.java new file mode 100644 index 0000000..c9c857d --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxProductListQryExe.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxProductListQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.BoxProductVO; +import com.xunhong.erp.turbo.biz.app.assembler.BoxProductAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.BoxProduct; +import com.xunhong.erp.turbo.biz.domain.gateway.BoxProductGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class BoxProductListQryExe { + + private final BoxProductGateway boxProductGateway; + private final BoxProductAssembler boxProductAssembler; + + public List execute(BoxProductListQry boxProductListQry) { + List boxProductList = boxProductGateway.list(boxProductListQry); + return boxProductList.stream().map(boxProductAssembler::toBoxProductVO).toList(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxProductPageQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxProductPageQryExe.java new file mode 100644 index 0000000..bc90a86 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxProductPageQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxProductPageQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.BoxProductVO; +import com.xunhong.erp.turbo.biz.app.assembler.BoxProductAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.BoxProduct; +import com.xunhong.erp.turbo.biz.domain.gateway.BoxProductGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class BoxProductPageQryExe { + + private final BoxProductGateway boxProductGateway; + private final BoxProductAssembler boxProductAssembler; + + public IPage execute(BoxProductPageQry boxProductPageQry) { + IPage page = boxProductGateway.page(boxProductPageQry); + return page.convert(boxProductAssembler::toBoxProductVO); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxProductShowQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxProductShowQryExe.java new file mode 100644 index 0000000..4057360 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/BoxProductShowQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxProductShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.BoxProductVO; +import com.xunhong.erp.turbo.biz.app.assembler.BoxProductAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.BoxProduct; +import com.xunhong.erp.turbo.biz.domain.gateway.BoxProductGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class BoxProductShowQryExe { + + private final BoxProductAssembler boxProductAssembler; + private final BoxProductGateway boxProductGateway; + + public BoxProductVO execute(BoxProductShowQry boxProductShowQry) { + BoxProduct boxProduct = boxProductGateway.show(boxProductShowQry); + + return boxProductAssembler.toBoxProductVO(boxProduct); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyListQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyListQryExe.java new file mode 100644 index 0000000..446e4b8 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyListQryExe.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyListQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.CompanyVO; +import com.xunhong.erp.turbo.biz.app.assembler.CompanyAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.Company; +import com.xunhong.erp.turbo.biz.domain.gateway.CompanyGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CompanyListQryExe { + + private final CompanyGateway companyGateway; + private final CompanyAssembler companyAssembler; + + public List execute(CompanyListQry companyListQry) { + List companyList = companyGateway.list(companyListQry); + return companyList.stream().map(companyAssembler::toCompanyVO).toList(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyPageQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyPageQryExe.java new file mode 100644 index 0000000..748d979 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyPageQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPageQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.CompanyVO; +import com.xunhong.erp.turbo.biz.app.assembler.CompanyAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.Company; +import com.xunhong.erp.turbo.biz.domain.gateway.CompanyGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CompanyPageQryExe { + + private final CompanyGateway companyGateway; + private final CompanyAssembler companyAssembler; + + public IPage execute(CompanyPageQry companyPageQry) { + IPage page = companyGateway.page(companyPageQry); + return page.convert(companyAssembler::toCompanyVO); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyPaymentAccountListQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyPaymentAccountListQryExe.java new file mode 100644 index 0000000..3c0e306 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyPaymentAccountListQryExe.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPaymentAccountListQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.CompanyPaymentAccountVO; +import com.xunhong.erp.turbo.biz.app.assembler.CompanyPaymentAccountAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.CompanyPaymentAccount; +import com.xunhong.erp.turbo.biz.domain.gateway.CompanyPaymentAccountGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CompanyPaymentAccountListQryExe { + + private final CompanyPaymentAccountGateway companyPaymentAccountGateway; + private final CompanyPaymentAccountAssembler companyPaymentAccountAssembler; + + public List execute(CompanyPaymentAccountListQry companyPaymentAccountListQry) { + List companyPaymentAccountList = companyPaymentAccountGateway.list(companyPaymentAccountListQry); + return companyPaymentAccountList.stream().map(companyPaymentAccountAssembler::toCompanyPaymentAccountVO).toList(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyPaymentAccountPageQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyPaymentAccountPageQryExe.java new file mode 100644 index 0000000..7fcb17f --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyPaymentAccountPageQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPaymentAccountPageQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.CompanyPaymentAccountVO; +import com.xunhong.erp.turbo.biz.app.assembler.CompanyPaymentAccountAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.CompanyPaymentAccount; +import com.xunhong.erp.turbo.biz.domain.gateway.CompanyPaymentAccountGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CompanyPaymentAccountPageQryExe { + + private final CompanyPaymentAccountGateway companyPaymentAccountGateway; + private final CompanyPaymentAccountAssembler companyPaymentAccountAssembler; + + public IPage execute(CompanyPaymentAccountPageQry companyPaymentAccountPageQry) { + IPage page = companyPaymentAccountGateway.page(companyPaymentAccountPageQry); + return page.convert(companyPaymentAccountAssembler::toCompanyPaymentAccountVO); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyPaymentAccountShowQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyPaymentAccountShowQryExe.java new file mode 100644 index 0000000..3be0120 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyPaymentAccountShowQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPaymentAccountShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.CompanyPaymentAccountVO; +import com.xunhong.erp.turbo.biz.app.assembler.CompanyPaymentAccountAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.CompanyPaymentAccount; +import com.xunhong.erp.turbo.biz.domain.gateway.CompanyPaymentAccountGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CompanyPaymentAccountShowQryExe { + + private final CompanyPaymentAccountAssembler companyPaymentAccountAssembler; + private final CompanyPaymentAccountGateway companyPaymentAccountGateway; + + public CompanyPaymentAccountVO execute(CompanyPaymentAccountShowQry companyPaymentAccountShowQry) { + CompanyPaymentAccount companyPaymentAccount = companyPaymentAccountGateway.show(companyPaymentAccountShowQry); + + return companyPaymentAccountAssembler.toCompanyPaymentAccountVO(companyPaymentAccount); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyShowQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyShowQryExe.java new file mode 100644 index 0000000..9869cfd --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CompanyShowQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.CompanyVO; +import com.xunhong.erp.turbo.biz.app.assembler.CompanyAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.Company; +import com.xunhong.erp.turbo.biz.domain.gateway.CompanyGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CompanyShowQryExe { + + private final CompanyAssembler companyAssembler; + private final CompanyGateway companyGateway; + + public CompanyVO execute(CompanyShowQry companyShowQry) { + Company company = companyGateway.show(companyShowQry); + + return companyAssembler.toCompanyVO(company); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CostItemListQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CostItemListQryExe.java new file mode 100644 index 0000000..ae58b11 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CostItemListQryExe.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.CostItemListQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.CostItemVO; +import com.xunhong.erp.turbo.biz.app.assembler.CostItemAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.CostItem; +import com.xunhong.erp.turbo.biz.domain.gateway.CostItemGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CostItemListQryExe { + + private final CostItemGateway costItemGateway; + private final CostItemAssembler costItemAssembler; + + public List execute(CostItemListQry costItemListQry) { + List costItemList = costItemGateway.list(costItemListQry); + return costItemList.stream().map(costItemAssembler::toCostItemVO).toList(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CostItemPageQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CostItemPageQryExe.java new file mode 100644 index 0000000..11c9b53 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CostItemPageQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.qry.CostItemPageQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.CostItemVO; +import com.xunhong.erp.turbo.biz.app.assembler.CostItemAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.CostItem; +import com.xunhong.erp.turbo.biz.domain.gateway.CostItemGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CostItemPageQryExe { + + private final CostItemGateway costItemGateway; + private final CostItemAssembler costItemAssembler; + + public IPage execute(CostItemPageQry costItemPageQry) { + IPage page = costItemGateway.page(costItemPageQry); + return page.convert(costItemAssembler::toCostItemVO); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CostItemShowQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CostItemShowQryExe.java new file mode 100644 index 0000000..88a556c --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/CostItemShowQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.CostItemShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.CostItemVO; +import com.xunhong.erp.turbo.biz.app.assembler.CostItemAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.CostItem; +import com.xunhong.erp.turbo.biz.domain.gateway.CostItemGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CostItemShowQryExe { + + private final CostItemAssembler costItemAssembler; + private final CostItemGateway costItemGateway; + + public CostItemVO execute(CostItemShowQry costItemShowQry) { + CostItem costItem = costItemGateway.show(costItemShowQry); + + return costItemAssembler.toCostItemVO(costItem); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerListQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerListQryExe.java new file mode 100644 index 0000000..6da7aa5 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerListQryExe.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerListQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.Dealer; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerListQryExe { + + private final DealerGateway dealerGateway; + private final DealerAssembler dealerAssembler; + + public List execute(DealerListQry dealerListQry) { + List dealerList = dealerGateway.list(dealerListQry); + return dealerList.stream().map(dealerAssembler::toDealerVO).toList(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerPageQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerPageQryExe.java new file mode 100644 index 0000000..47becb0 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerPageQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPageQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.Dealer; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerPageQryExe { + + private final DealerGateway dealerGateway; + private final DealerAssembler dealerAssembler; + + public IPage execute(DealerPageQry dealerPageQry) { + IPage page = dealerGateway.page(dealerPageQry); + return page.convert(dealerAssembler::toDealerVO); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerPaymentAccountListQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerPaymentAccountListQryExe.java new file mode 100644 index 0000000..8551339 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerPaymentAccountListQryExe.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPaymentAccountListQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerPaymentAccountVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerPaymentAccountAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.DealerPaymentAccount; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerPaymentAccountGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerPaymentAccountListQryExe { + + private final DealerPaymentAccountGateway dealerPaymentAccountGateway; + private final DealerPaymentAccountAssembler dealerPaymentAccountAssembler; + + public List execute(DealerPaymentAccountListQry dealerPaymentAccountListQry) { + List dealerPaymentAccountList = dealerPaymentAccountGateway.list(dealerPaymentAccountListQry); + return dealerPaymentAccountList.stream().map(dealerPaymentAccountAssembler::toDealerPaymentAccountVO).toList(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerPaymentAccountPageQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerPaymentAccountPageQryExe.java new file mode 100644 index 0000000..f7a39d7 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerPaymentAccountPageQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPaymentAccountPageQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerPaymentAccountVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerPaymentAccountAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.DealerPaymentAccount; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerPaymentAccountGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerPaymentAccountPageQryExe { + + private final DealerPaymentAccountGateway dealerPaymentAccountGateway; + private final DealerPaymentAccountAssembler dealerPaymentAccountAssembler; + + public IPage execute(DealerPaymentAccountPageQry dealerPaymentAccountPageQry) { + IPage page = dealerPaymentAccountGateway.page(dealerPaymentAccountPageQry); + return page.convert(dealerPaymentAccountAssembler::toDealerPaymentAccountVO); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerPaymentAccountShowQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerPaymentAccountShowQryExe.java new file mode 100644 index 0000000..9041706 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerPaymentAccountShowQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPaymentAccountShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerPaymentAccountVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerPaymentAccountAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.DealerPaymentAccount; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerPaymentAccountGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerPaymentAccountShowQryExe { + + private final DealerPaymentAccountAssembler dealerPaymentAccountAssembler; + private final DealerPaymentAccountGateway dealerPaymentAccountGateway; + + public DealerPaymentAccountVO execute(DealerPaymentAccountShowQry dealerPaymentAccountShowQry) { + DealerPaymentAccount dealerPaymentAccount = dealerPaymentAccountGateway.show(dealerPaymentAccountShowQry); + + return dealerPaymentAccountAssembler.toDealerPaymentAccountVO(dealerPaymentAccount); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerRebateCustomerListQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerRebateCustomerListQryExe.java new file mode 100644 index 0000000..e89b441 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerRebateCustomerListQryExe.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerRebateCustomerListQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerRebateCustomerVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerRebateCustomerAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.DealerRebateCustomer; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerRebateCustomerGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerRebateCustomerListQryExe { + + private final DealerRebateCustomerGateway dealerRebateCustomerGateway; + private final DealerRebateCustomerAssembler dealerRebateCustomerAssembler; + + public List execute(DealerRebateCustomerListQry dealerRebateCustomerListQry) { + List dealerRebateCustomerList = dealerRebateCustomerGateway.list(dealerRebateCustomerListQry); + return dealerRebateCustomerList.stream().map(dealerRebateCustomerAssembler::toDealerRebateCustomerVO).toList(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerRebateCustomerPageQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerRebateCustomerPageQryExe.java new file mode 100644 index 0000000..f0bcb56 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerRebateCustomerPageQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerRebateCustomerPageQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerRebateCustomerVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerRebateCustomerAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.DealerRebateCustomer; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerRebateCustomerGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerRebateCustomerPageQryExe { + + private final DealerRebateCustomerGateway dealerRebateCustomerGateway; + private final DealerRebateCustomerAssembler dealerRebateCustomerAssembler; + + public IPage execute(DealerRebateCustomerPageQry dealerRebateCustomerPageQry) { + IPage page = dealerRebateCustomerGateway.page(dealerRebateCustomerPageQry); + return page.convert(dealerRebateCustomerAssembler::toDealerRebateCustomerVO); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerRebateCustomerShowQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerRebateCustomerShowQryExe.java new file mode 100644 index 0000000..132b1bd --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerRebateCustomerShowQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerRebateCustomerShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerRebateCustomerVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerRebateCustomerAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.DealerRebateCustomer; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerRebateCustomerGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerRebateCustomerShowQryExe { + + private final DealerRebateCustomerAssembler dealerRebateCustomerAssembler; + private final DealerRebateCustomerGateway dealerRebateCustomerGateway; + + public DealerRebateCustomerVO execute(DealerRebateCustomerShowQry dealerRebateCustomerShowQry) { + DealerRebateCustomer dealerRebateCustomer = dealerRebateCustomerGateway.show(dealerRebateCustomerShowQry); + + return dealerRebateCustomerAssembler.toDealerRebateCustomerVO(dealerRebateCustomer); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerShowQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerShowQryExe.java new file mode 100644 index 0000000..568cfbd --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerShowQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.Dealer; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerShowQryExe { + + private final DealerAssembler dealerAssembler; + private final DealerGateway dealerGateway; + + public DealerVO execute(DealerShowQry dealerShowQry) { + Dealer dealer = dealerGateway.show(dealerShowQry); + + return dealerAssembler.toDealerVO(dealer); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerWarehouseListQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerWarehouseListQryExe.java new file mode 100644 index 0000000..d552c02 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerWarehouseListQryExe.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerWarehouseListQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerWarehouseVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerWarehouseAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.DealerWarehouse; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerWarehouseGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerWarehouseListQryExe { + + private final DealerWarehouseGateway dealerWarehouseGateway; + private final DealerWarehouseAssembler dealerWarehouseAssembler; + + public List execute(DealerWarehouseListQry dealerWarehouseListQry) { + List dealerWarehouseList = dealerWarehouseGateway.list(dealerWarehouseListQry); + return dealerWarehouseList.stream().map(dealerWarehouseAssembler::toDealerWarehouseVO).toList(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerWarehousePageQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerWarehousePageQryExe.java new file mode 100644 index 0000000..2f427d8 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerWarehousePageQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerWarehousePageQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerWarehouseVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerWarehouseAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.DealerWarehouse; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerWarehouseGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerWarehousePageQryExe { + + private final DealerWarehouseGateway dealerWarehouseGateway; + private final DealerWarehouseAssembler dealerWarehouseAssembler; + + public IPage execute(DealerWarehousePageQry dealerWarehousePageQry) { + IPage page = dealerWarehouseGateway.page(dealerWarehousePageQry); + return page.convert(dealerWarehouseAssembler::toDealerWarehouseVO); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerWarehouseShowQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerWarehouseShowQryExe.java new file mode 100644 index 0000000..8dc179c --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/DealerWarehouseShowQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerWarehouseShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerWarehouseVO; +import com.xunhong.erp.turbo.biz.app.assembler.DealerWarehouseAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.DealerWarehouse; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerWarehouseGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DealerWarehouseShowQryExe { + + private final DealerWarehouseAssembler dealerWarehouseAssembler; + private final DealerWarehouseGateway dealerWarehouseGateway; + + public DealerWarehouseVO execute(DealerWarehouseShowQry dealerWarehouseShowQry) { + DealerWarehouse dealerWarehouse = dealerWarehouseGateway.show(dealerWarehouseShowQry); + + return dealerWarehouseAssembler.toDealerWarehouseVO(dealerWarehouse); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/GiftBoxListQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/GiftBoxListQryExe.java new file mode 100644 index 0000000..9b2a3ba --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/GiftBoxListQryExe.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.GiftBoxListQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.GiftBoxVO; +import com.xunhong.erp.turbo.biz.app.assembler.GiftBoxAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.GiftBox; +import com.xunhong.erp.turbo.biz.domain.gateway.GiftBoxGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class GiftBoxListQryExe { + + private final GiftBoxGateway giftBoxGateway; + private final GiftBoxAssembler giftBoxAssembler; + + public List execute(GiftBoxListQry giftBoxListQry) { + List giftBoxList = giftBoxGateway.list(giftBoxListQry); + return giftBoxList.stream().map(giftBoxAssembler::toGiftBoxVO).toList(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/GiftBoxPageQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/GiftBoxPageQryExe.java new file mode 100644 index 0000000..aeeb6b9 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/GiftBoxPageQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.qry.GiftBoxPageQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.GiftBoxVO; +import com.xunhong.erp.turbo.biz.app.assembler.GiftBoxAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.GiftBox; +import com.xunhong.erp.turbo.biz.domain.gateway.GiftBoxGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class GiftBoxPageQryExe { + + private final GiftBoxGateway giftBoxGateway; + private final GiftBoxAssembler giftBoxAssembler; + + public IPage execute(GiftBoxPageQry giftBoxPageQry) { + IPage page = giftBoxGateway.page(giftBoxPageQry); + return page.convert(giftBoxAssembler::toGiftBoxVO); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/GiftBoxShowQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/GiftBoxShowQryExe.java new file mode 100644 index 0000000..8614b51 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/GiftBoxShowQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.GiftBoxShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.GiftBoxVO; +import com.xunhong.erp.turbo.biz.app.assembler.GiftBoxAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.GiftBox; +import com.xunhong.erp.turbo.biz.domain.gateway.GiftBoxGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class GiftBoxShowQryExe { + + private final GiftBoxAssembler giftBoxAssembler; + private final GiftBoxGateway giftBoxGateway; + + public GiftBoxVO execute(GiftBoxShowQry giftBoxShowQry) { + GiftBox giftBox = giftBoxGateway.show(giftBoxShowQry); + + return giftBoxAssembler.toGiftBoxVO(giftBox); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/PurchaseOrderCountQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/PurchaseOrderCountQryExe.java new file mode 100644 index 0000000..7490de9 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/PurchaseOrderCountQryExe.java @@ -0,0 +1,23 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderCountQry; +import com.xunhong.erp.turbo.biz.domain.gateway.PurchaseOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PurchaseOrderCountQryExe { + + private final PurchaseOrderGateway purchaseOrderGateway; + + public Long execute(PurchaseOrderCountQry purchaseOrderCountQry) { + return purchaseOrderGateway.countBy(purchaseOrderCountQry); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/PurchaseOrderListQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/PurchaseOrderListQryExe.java new file mode 100644 index 0000000..e662e9a --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/PurchaseOrderListQryExe.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderListQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.PurchaseOrderVO; +import com.xunhong.erp.turbo.biz.app.assembler.PurchaseOrderAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.PurchaseOrder; +import com.xunhong.erp.turbo.biz.domain.gateway.PurchaseOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PurchaseOrderListQryExe { + + private final PurchaseOrderGateway purchaseOrderGateway; + private final PurchaseOrderAssembler purchaseOrderAssembler; + + public List execute(PurchaseOrderListQry purchaseOrderListQry) { + List purchaseOrderList = purchaseOrderGateway.list(purchaseOrderListQry); + return purchaseOrderList.stream().map(purchaseOrderAssembler::toPurchaseOrderVO).toList(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/PurchaseOrderPageQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/PurchaseOrderPageQryExe.java new file mode 100644 index 0000000..d047209 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/PurchaseOrderPageQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderPageQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.PurchaseOrderVO; +import com.xunhong.erp.turbo.biz.app.assembler.PurchaseOrderAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.PurchaseOrder; +import com.xunhong.erp.turbo.biz.domain.gateway.PurchaseOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PurchaseOrderPageQryExe { + + private final PurchaseOrderGateway purchaseOrderGateway; + private final PurchaseOrderAssembler purchaseOrderAssembler; + + public IPage execute(PurchaseOrderPageQry purchaseOrderPageQry) { + IPage page = purchaseOrderGateway.page(purchaseOrderPageQry); + return page.convert(purchaseOrderAssembler::toPurchaseOrderVO); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/PurchaseOrderShowQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/PurchaseOrderShowQryExe.java new file mode 100644 index 0000000..4fda8a4 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/PurchaseOrderShowQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.PurchaseOrderVO; +import com.xunhong.erp.turbo.biz.app.assembler.PurchaseOrderAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.PurchaseOrder; +import com.xunhong.erp.turbo.biz.domain.gateway.PurchaseOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PurchaseOrderShowQryExe { + + private final PurchaseOrderAssembler purchaseOrderAssembler; + private final PurchaseOrderGateway purchaseOrderGateway; + + public PurchaseOrderVO execute(PurchaseOrderShowQry purchaseOrderShowQry) { + PurchaseOrder purchaseOrder = purchaseOrderGateway.show(purchaseOrderShowQry); + + return purchaseOrderAssembler.toPurchaseOrderVO(purchaseOrder); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/ShipOrderListQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/ShipOrderListQryExe.java new file mode 100644 index 0000000..a6e9cc0 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/ShipOrderListQryExe.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.ShipOrderListQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.ShipOrderVO; +import com.xunhong.erp.turbo.biz.app.assembler.ShipOrderAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.ShipOrder; +import com.xunhong.erp.turbo.biz.domain.gateway.ShipOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class ShipOrderListQryExe { + + private final ShipOrderGateway shipOrderGateway; + private final ShipOrderAssembler shipOrderAssembler; + + public List execute(ShipOrderListQry shipOrderListQry) { + List shipOrderList = shipOrderGateway.list(shipOrderListQry); + return shipOrderList.stream().map(shipOrderAssembler::toShipOrderVO).toList(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/ShipOrderPageQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/ShipOrderPageQryExe.java new file mode 100644 index 0000000..71ad242 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/ShipOrderPageQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.qry.ShipOrderPageQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.ShipOrderVO; +import com.xunhong.erp.turbo.biz.app.assembler.ShipOrderAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.ShipOrder; +import com.xunhong.erp.turbo.biz.domain.gateway.ShipOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class ShipOrderPageQryExe { + + private final ShipOrderGateway shipOrderGateway; + private final ShipOrderAssembler shipOrderAssembler; + + public IPage execute(ShipOrderPageQry shipOrderPageQry) { + IPage page = shipOrderGateway.page(shipOrderPageQry); + return page.convert(shipOrderAssembler::toShipOrderVO); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/ShipOrderShowQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/ShipOrderShowQryExe.java new file mode 100644 index 0000000..d104d0f --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/ShipOrderShowQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.ShipOrderShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.ShipOrderVO; +import com.xunhong.erp.turbo.biz.app.assembler.ShipOrderAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.ShipOrder; +import com.xunhong.erp.turbo.biz.domain.gateway.ShipOrderGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class ShipOrderShowQryExe { + + private final ShipOrderAssembler shipOrderAssembler; + private final ShipOrderGateway shipOrderGateway; + + public ShipOrderVO execute(ShipOrderShowQry shipOrderShowQry) { + ShipOrder shipOrder = shipOrderGateway.show(shipOrderShowQry); + + return shipOrderAssembler.toShipOrderVO(shipOrder); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/SupplierListQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/SupplierListQryExe.java new file mode 100644 index 0000000..bd8b397 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/SupplierListQryExe.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.SupplierListQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.SupplierVO; +import com.xunhong.erp.turbo.biz.app.assembler.SupplierAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.Supplier; +import com.xunhong.erp.turbo.biz.domain.gateway.SupplierGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class SupplierListQryExe { + + private final SupplierGateway supplierGateway; + private final SupplierAssembler supplierAssembler; + + public List execute(SupplierListQry supplierListQry) { + List supplierList = supplierGateway.list(supplierListQry); + return supplierList.stream().map(supplierAssembler::toSupplierVO).toList(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/SupplierPageQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/SupplierPageQryExe.java new file mode 100644 index 0000000..9159222 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/SupplierPageQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.qry.SupplierPageQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.SupplierVO; +import com.xunhong.erp.turbo.biz.app.assembler.SupplierAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.Supplier; +import com.xunhong.erp.turbo.biz.domain.gateway.SupplierGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class SupplierPageQryExe { + + private final SupplierGateway supplierGateway; + private final SupplierAssembler supplierAssembler; + + public IPage execute(SupplierPageQry supplierPageQry) { + IPage page = supplierGateway.page(supplierPageQry); + return page.convert(supplierAssembler::toSupplierVO); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/SupplierShowQryExe.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/SupplierShowQryExe.java new file mode 100644 index 0000000..bd47b90 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/executor/query/SupplierShowQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.biz.app.executor.query; + +import com.xunhong.erp.turbo.api.biz.dto.qry.SupplierShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.SupplierVO; +import com.xunhong.erp.turbo.biz.app.assembler.SupplierAssembler; +import com.xunhong.erp.turbo.biz.domain.entity.Supplier; +import com.xunhong.erp.turbo.biz.domain.gateway.SupplierGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class SupplierShowQryExe { + + private final SupplierAssembler supplierAssembler; + private final SupplierGateway supplierGateway; + + public SupplierVO execute(SupplierShowQry supplierShowQry) { + Supplier supplier = supplierGateway.show(supplierShowQry); + + return supplierAssembler.toSupplierVO(supplier); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/BoxBrandServiceImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/BoxBrandServiceImpl.java new file mode 100644 index 0000000..58b36bb --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/BoxBrandServiceImpl.java @@ -0,0 +1,71 @@ +package com.xunhong.erp.turbo.biz.app.service; + +import com.xunhong.erp.turbo.api.biz.api.BoxBrandServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxBrandListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxBrandPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxBrandShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.BoxBrandVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.biz.app.executor.cmd.BoxBrandCreateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.BoxBrandDestroyCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.BoxBrandUpdateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.query.BoxBrandListQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.BoxBrandPageQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.BoxBrandShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Service +@DubboService(interfaceClass = BoxBrandServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class BoxBrandServiceImpl implements BoxBrandServiceI { + + private final BoxBrandCreateCmdExe boxBrandCreateCmdExe; + private final BoxBrandUpdateCmdExe boxBrandUpdateCmdExe; + private final BoxBrandPageQryExe boxBrandPageQryExe; + private final BoxBrandListQryExe boxBrandListQryExe; + private final BoxBrandShowQryExe boxBrandShowQryExe; + private final BoxBrandDestroyCmdExe boxBrandDestroyCmdExe; + + @Override + public BoxBrandVO create(BoxBrandCreateCmd boxBrandCreateCmd) { + return boxBrandCreateCmdExe.execute(boxBrandCreateCmd); + } + + @Override + public PageDTO page(BoxBrandPageQry boxBrandPageQry) { + return PageDTO.of(boxBrandPageQryExe.execute(boxBrandPageQry)); + } + + @Override + public List list(BoxBrandListQry boxBrandListQry) { + return boxBrandListQryExe.execute(boxBrandListQry); + } + + @Override + public BoxBrandVO update(BoxBrandUpdateCmd boxBrandUpdateCmd) { + return boxBrandUpdateCmdExe.execute(boxBrandUpdateCmd); + } + + @Override + public BoxBrandVO show(BoxBrandShowQry boxBrandShowQry) { + return boxBrandShowQryExe.execute(boxBrandShowQry); + } + + @Override + public void destroy(BoxBrandDestroyCmd boxBrandDestroyCmd) { + boxBrandDestroyCmdExe.execute(boxBrandDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/BoxProductServiceImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/BoxProductServiceImpl.java new file mode 100644 index 0000000..7c82138 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/BoxProductServiceImpl.java @@ -0,0 +1,71 @@ +package com.xunhong.erp.turbo.biz.app.service; + +import com.xunhong.erp.turbo.api.biz.api.BoxProductServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxProductListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxProductPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxProductShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.BoxProductVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.biz.app.executor.cmd.BoxProductCreateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.BoxProductDestroyCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.BoxProductUpdateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.query.BoxProductListQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.BoxProductPageQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.BoxProductShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Service +@DubboService(interfaceClass = BoxProductServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class BoxProductServiceImpl implements BoxProductServiceI { + + private final BoxProductCreateCmdExe boxProductCreateCmdExe; + private final BoxProductUpdateCmdExe boxProductUpdateCmdExe; + private final BoxProductPageQryExe boxProductPageQryExe; + private final BoxProductListQryExe boxProductListQryExe; + private final BoxProductShowQryExe boxProductShowQryExe; + private final BoxProductDestroyCmdExe boxProductDestroyCmdExe; + + @Override + public BoxProductVO create(BoxProductCreateCmd boxProductCreateCmd) { + return boxProductCreateCmdExe.execute(boxProductCreateCmd); + } + + @Override + public PageDTO page(BoxProductPageQry boxProductPageQry) { + return PageDTO.of(boxProductPageQryExe.execute(boxProductPageQry)); + } + + @Override + public List list(BoxProductListQry boxProductListQry) { + return boxProductListQryExe.execute(boxProductListQry); + } + + @Override + public BoxProductVO update(BoxProductUpdateCmd boxProductUpdateCmd) { + return boxProductUpdateCmdExe.execute(boxProductUpdateCmd); + } + + @Override + public BoxProductVO show(BoxProductShowQry boxProductShowQry) { + return boxProductShowQryExe.execute(boxProductShowQry); + } + + @Override + public void destroy(BoxProductDestroyCmd boxProductDestroyCmd) { + boxProductDestroyCmdExe.execute(boxProductDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/CompanyPaymentAccountServiceImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/CompanyPaymentAccountServiceImpl.java new file mode 100644 index 0000000..3ef93bd --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/CompanyPaymentAccountServiceImpl.java @@ -0,0 +1,71 @@ +package com.xunhong.erp.turbo.biz.app.service; + +import com.xunhong.erp.turbo.api.biz.api.CompanyPaymentAccountServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPaymentAccountListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPaymentAccountPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPaymentAccountShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.CompanyPaymentAccountVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.biz.app.executor.cmd.CompanyPaymentAccountCreateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.CompanyPaymentAccountDestroyCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.CompanyPaymentAccountUpdateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.query.CompanyPaymentAccountListQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.CompanyPaymentAccountPageQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.CompanyPaymentAccountShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Service +@DubboService(interfaceClass = CompanyPaymentAccountServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class CompanyPaymentAccountServiceImpl implements CompanyPaymentAccountServiceI { + + private final CompanyPaymentAccountCreateCmdExe companyPaymentAccountCreateCmdExe; + private final CompanyPaymentAccountUpdateCmdExe companyPaymentAccountUpdateCmdExe; + private final CompanyPaymentAccountPageQryExe companyPaymentAccountPageQryExe; + private final CompanyPaymentAccountListQryExe companyPaymentAccountListQryExe; + private final CompanyPaymentAccountShowQryExe companyPaymentAccountShowQryExe; + private final CompanyPaymentAccountDestroyCmdExe companyPaymentAccountDestroyCmdExe; + + @Override + public CompanyPaymentAccountVO create(CompanyPaymentAccountCreateCmd companyPaymentAccountCreateCmd) { + return companyPaymentAccountCreateCmdExe.execute(companyPaymentAccountCreateCmd); + } + + @Override + public PageDTO page(CompanyPaymentAccountPageQry companyPaymentAccountPageQry) { + return PageDTO.of(companyPaymentAccountPageQryExe.execute(companyPaymentAccountPageQry)); + } + + @Override + public List list(CompanyPaymentAccountListQry companyPaymentAccountListQry) { + return companyPaymentAccountListQryExe.execute(companyPaymentAccountListQry); + } + + @Override + public CompanyPaymentAccountVO update(CompanyPaymentAccountUpdateCmd companyPaymentAccountUpdateCmd) { + return companyPaymentAccountUpdateCmdExe.execute(companyPaymentAccountUpdateCmd); + } + + @Override + public CompanyPaymentAccountVO show(CompanyPaymentAccountShowQry companyPaymentAccountShowQry) { + return companyPaymentAccountShowQryExe.execute(companyPaymentAccountShowQry); + } + + @Override + public void destroy(CompanyPaymentAccountDestroyCmd companyPaymentAccountDestroyCmd) { + companyPaymentAccountDestroyCmdExe.execute(companyPaymentAccountDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/CompanyServiceImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/CompanyServiceImpl.java new file mode 100644 index 0000000..d2418ad --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/CompanyServiceImpl.java @@ -0,0 +1,71 @@ +package com.xunhong.erp.turbo.biz.app.service; + +import com.xunhong.erp.turbo.api.biz.api.CompanyServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.CompanyVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.biz.app.executor.cmd.CompanyCreateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.CompanyDestroyCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.CompanyUpdateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.query.CompanyListQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.CompanyPageQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.CompanyShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Service +@DubboService(interfaceClass = CompanyServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class CompanyServiceImpl implements CompanyServiceI { + + private final CompanyCreateCmdExe companyCreateCmdExe; + private final CompanyUpdateCmdExe companyUpdateCmdExe; + private final CompanyPageQryExe companyPageQryExe; + private final CompanyListQryExe companyListQryExe; + private final CompanyShowQryExe companyShowQryExe; + private final CompanyDestroyCmdExe companyDestroyCmdExe; + + @Override + public CompanyVO create(CompanyCreateCmd companyCreateCmd) { + return companyCreateCmdExe.execute(companyCreateCmd); + } + + @Override + public PageDTO page(CompanyPageQry companyPageQry) { + return PageDTO.of(companyPageQryExe.execute(companyPageQry)); + } + + @Override + public List list(CompanyListQry companyListQry) { + return companyListQryExe.execute(companyListQry); + } + + @Override + public CompanyVO update(CompanyUpdateCmd companyUpdateCmd) { + return companyUpdateCmdExe.execute(companyUpdateCmd); + } + + @Override + public CompanyVO show(CompanyShowQry companyShowQry) { + return companyShowQryExe.execute(companyShowQry); + } + + @Override + public void destroy(CompanyDestroyCmd companyDestroyCmd) { + companyDestroyCmdExe.execute(companyDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/CostItemServiceImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/CostItemServiceImpl.java new file mode 100644 index 0000000..8102b56 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/CostItemServiceImpl.java @@ -0,0 +1,71 @@ +package com.xunhong.erp.turbo.biz.app.service; + +import com.xunhong.erp.turbo.api.biz.api.CostItemServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.CostItemListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CostItemPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CostItemShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.CostItemVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.biz.app.executor.cmd.CostItemCreateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.CostItemDestroyCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.CostItemUpdateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.query.CostItemListQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.CostItemPageQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.CostItemShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Service +@DubboService(interfaceClass = CostItemServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class CostItemServiceImpl implements CostItemServiceI { + + private final CostItemCreateCmdExe costItemCreateCmdExe; + private final CostItemUpdateCmdExe costItemUpdateCmdExe; + private final CostItemPageQryExe costItemPageQryExe; + private final CostItemListQryExe costItemListQryExe; + private final CostItemShowQryExe costItemShowQryExe; + private final CostItemDestroyCmdExe costItemDestroyCmdExe; + + @Override + public CostItemVO create(CostItemCreateCmd costItemCreateCmd) { + return costItemCreateCmdExe.execute(costItemCreateCmd); + } + + @Override + public PageDTO page(CostItemPageQry costItemPageQry) { + return PageDTO.of(costItemPageQryExe.execute(costItemPageQry)); + } + + @Override + public List list(CostItemListQry costItemListQry) { + return costItemListQryExe.execute(costItemListQry); + } + + @Override + public CostItemVO update(CostItemUpdateCmd costItemUpdateCmd) { + return costItemUpdateCmdExe.execute(costItemUpdateCmd); + } + + @Override + public CostItemVO show(CostItemShowQry costItemShowQry) { + return costItemShowQryExe.execute(costItemShowQry); + } + + @Override + public void destroy(CostItemDestroyCmd costItemDestroyCmd) { + costItemDestroyCmdExe.execute(costItemDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/DealerPaymentAccountServiceImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/DealerPaymentAccountServiceImpl.java new file mode 100644 index 0000000..546341b --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/DealerPaymentAccountServiceImpl.java @@ -0,0 +1,71 @@ +package com.xunhong.erp.turbo.biz.app.service; + +import com.xunhong.erp.turbo.api.biz.api.DealerPaymentAccountServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPaymentAccountListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPaymentAccountPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPaymentAccountShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerPaymentAccountVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.biz.app.executor.cmd.DealerPaymentAccountCreateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.DealerPaymentAccountDestroyCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.DealerPaymentAccountUpdateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.query.DealerPaymentAccountListQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.DealerPaymentAccountPageQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.DealerPaymentAccountShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Service +@DubboService(interfaceClass = DealerPaymentAccountServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class DealerPaymentAccountServiceImpl implements DealerPaymentAccountServiceI { + + private final DealerPaymentAccountCreateCmdExe dealerPaymentAccountCreateCmdExe; + private final DealerPaymentAccountUpdateCmdExe dealerPaymentAccountUpdateCmdExe; + private final DealerPaymentAccountPageQryExe dealerPaymentAccountPageQryExe; + private final DealerPaymentAccountListQryExe dealerPaymentAccountListQryExe; + private final DealerPaymentAccountShowQryExe dealerPaymentAccountShowQryExe; + private final DealerPaymentAccountDestroyCmdExe dealerPaymentAccountDestroyCmdExe; + + @Override + public DealerPaymentAccountVO create(DealerPaymentAccountCreateCmd dealerPaymentAccountCreateCmd) { + return dealerPaymentAccountCreateCmdExe.execute(dealerPaymentAccountCreateCmd); + } + + @Override + public PageDTO page(DealerPaymentAccountPageQry dealerPaymentAccountPageQry) { + return PageDTO.of(dealerPaymentAccountPageQryExe.execute(dealerPaymentAccountPageQry)); + } + + @Override + public List list(DealerPaymentAccountListQry dealerPaymentAccountListQry) { + return dealerPaymentAccountListQryExe.execute(dealerPaymentAccountListQry); + } + + @Override + public DealerPaymentAccountVO update(DealerPaymentAccountUpdateCmd dealerPaymentAccountUpdateCmd) { + return dealerPaymentAccountUpdateCmdExe.execute(dealerPaymentAccountUpdateCmd); + } + + @Override + public DealerPaymentAccountVO show(DealerPaymentAccountShowQry dealerPaymentAccountShowQry) { + return dealerPaymentAccountShowQryExe.execute(dealerPaymentAccountShowQry); + } + + @Override + public void destroy(DealerPaymentAccountDestroyCmd dealerPaymentAccountDestroyCmd) { + dealerPaymentAccountDestroyCmdExe.execute(dealerPaymentAccountDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/DealerRebateCustomerServiceImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/DealerRebateCustomerServiceImpl.java new file mode 100644 index 0000000..9c59e55 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/DealerRebateCustomerServiceImpl.java @@ -0,0 +1,71 @@ +package com.xunhong.erp.turbo.biz.app.service; + +import com.xunhong.erp.turbo.api.biz.api.DealerRebateCustomerServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerRebateCustomerListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerRebateCustomerPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerRebateCustomerShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerRebateCustomerVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.biz.app.executor.cmd.DealerRebateCustomerCreateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.DealerRebateCustomerDestroyCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.DealerRebateCustomerUpdateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.query.DealerRebateCustomerListQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.DealerRebateCustomerPageQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.DealerRebateCustomerShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Service +@DubboService(interfaceClass = DealerRebateCustomerServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class DealerRebateCustomerServiceImpl implements DealerRebateCustomerServiceI { + + private final DealerRebateCustomerCreateCmdExe dealerRebateCustomerCreateCmdExe; + private final DealerRebateCustomerUpdateCmdExe dealerRebateCustomerUpdateCmdExe; + private final DealerRebateCustomerPageQryExe dealerRebateCustomerPageQryExe; + private final DealerRebateCustomerListQryExe dealerRebateCustomerListQryExe; + private final DealerRebateCustomerShowQryExe dealerRebateCustomerShowQryExe; + private final DealerRebateCustomerDestroyCmdExe dealerRebateCustomerDestroyCmdExe; + + @Override + public DealerRebateCustomerVO create(DealerRebateCustomerCreateCmd dealerRebateCustomerCreateCmd) { + return dealerRebateCustomerCreateCmdExe.execute(dealerRebateCustomerCreateCmd); + } + + @Override + public PageDTO page(DealerRebateCustomerPageQry dealerRebateCustomerPageQry) { + return PageDTO.of(dealerRebateCustomerPageQryExe.execute(dealerRebateCustomerPageQry)); + } + + @Override + public List list(DealerRebateCustomerListQry dealerRebateCustomerListQry) { + return dealerRebateCustomerListQryExe.execute(dealerRebateCustomerListQry); + } + + @Override + public DealerRebateCustomerVO update(DealerRebateCustomerUpdateCmd dealerRebateCustomerUpdateCmd) { + return dealerRebateCustomerUpdateCmdExe.execute(dealerRebateCustomerUpdateCmd); + } + + @Override + public DealerRebateCustomerVO show(DealerRebateCustomerShowQry dealerRebateCustomerShowQry) { + return dealerRebateCustomerShowQryExe.execute(dealerRebateCustomerShowQry); + } + + @Override + public void destroy(DealerRebateCustomerDestroyCmd dealerRebateCustomerDestroyCmd) { + dealerRebateCustomerDestroyCmdExe.execute(dealerRebateCustomerDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/DealerServiceImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/DealerServiceImpl.java new file mode 100644 index 0000000..b5bdb80 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/DealerServiceImpl.java @@ -0,0 +1,71 @@ +package com.xunhong.erp.turbo.biz.app.service; + +import com.xunhong.erp.turbo.api.biz.api.DealerServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.biz.app.executor.cmd.DealerCreateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.DealerDestroyCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.DealerUpdateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.query.DealerListQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.DealerPageQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.DealerShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Service +@DubboService(interfaceClass = DealerServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class DealerServiceImpl implements DealerServiceI { + + private final DealerCreateCmdExe dealerCreateCmdExe; + private final DealerUpdateCmdExe dealerUpdateCmdExe; + private final DealerPageQryExe dealerPageQryExe; + private final DealerListQryExe dealerListQryExe; + private final DealerShowQryExe dealerShowQryExe; + private final DealerDestroyCmdExe dealerDestroyCmdExe; + + @Override + public DealerVO create(DealerCreateCmd dealerCreateCmd) { + return dealerCreateCmdExe.execute(dealerCreateCmd); + } + + @Override + public PageDTO page(DealerPageQry dealerPageQry) { + return PageDTO.of(dealerPageQryExe.execute(dealerPageQry)); + } + + @Override + public List list(DealerListQry dealerListQry) { + return dealerListQryExe.execute(dealerListQry); + } + + @Override + public DealerVO update(DealerUpdateCmd dealerUpdateCmd) { + return dealerUpdateCmdExe.execute(dealerUpdateCmd); + } + + @Override + public DealerVO show(DealerShowQry dealerShowQry) { + return dealerShowQryExe.execute(dealerShowQry); + } + + @Override + public void destroy(DealerDestroyCmd dealerDestroyCmd) { + dealerDestroyCmdExe.execute(dealerDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/DealerWarehouseServiceImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/DealerWarehouseServiceImpl.java new file mode 100644 index 0000000..ba6316c --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/DealerWarehouseServiceImpl.java @@ -0,0 +1,71 @@ +package com.xunhong.erp.turbo.biz.app.service; + +import com.xunhong.erp.turbo.api.biz.api.DealerWarehouseServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerWarehouseListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerWarehousePageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerWarehouseShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerWarehouseVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.biz.app.executor.cmd.DealerWarehouseCreateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.DealerWarehouseDestroyCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.DealerWarehouseUpdateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.query.DealerWarehouseListQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.DealerWarehousePageQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.DealerWarehouseShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Service +@DubboService(interfaceClass = DealerWarehouseServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class DealerWarehouseServiceImpl implements DealerWarehouseServiceI { + + private final DealerWarehouseCreateCmdExe dealerWarehouseCreateCmdExe; + private final DealerWarehouseUpdateCmdExe dealerWarehouseUpdateCmdExe; + private final DealerWarehousePageQryExe dealerWarehousePageQryExe; + private final DealerWarehouseListQryExe dealerWarehouseListQryExe; + private final DealerWarehouseShowQryExe dealerWarehouseShowQryExe; + private final DealerWarehouseDestroyCmdExe dealerWarehouseDestroyCmdExe; + + @Override + public DealerWarehouseVO create(DealerWarehouseCreateCmd dealerWarehouseCreateCmd) { + return dealerWarehouseCreateCmdExe.execute(dealerWarehouseCreateCmd); + } + + @Override + public PageDTO page(DealerWarehousePageQry dealerWarehousePageQry) { + return PageDTO.of(dealerWarehousePageQryExe.execute(dealerWarehousePageQry)); + } + + @Override + public List list(DealerWarehouseListQry dealerWarehouseListQry) { + return dealerWarehouseListQryExe.execute(dealerWarehouseListQry); + } + + @Override + public DealerWarehouseVO update(DealerWarehouseUpdateCmd dealerWarehouseUpdateCmd) { + return dealerWarehouseUpdateCmdExe.execute(dealerWarehouseUpdateCmd); + } + + @Override + public DealerWarehouseVO show(DealerWarehouseShowQry dealerWarehouseShowQry) { + return dealerWarehouseShowQryExe.execute(dealerWarehouseShowQry); + } + + @Override + public void destroy(DealerWarehouseDestroyCmd dealerWarehouseDestroyCmd) { + dealerWarehouseDestroyCmdExe.execute(dealerWarehouseDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/GiftBoxServiceImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/GiftBoxServiceImpl.java new file mode 100644 index 0000000..a6b45ab --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/GiftBoxServiceImpl.java @@ -0,0 +1,71 @@ +package com.xunhong.erp.turbo.biz.app.service; + +import com.xunhong.erp.turbo.api.biz.api.GiftBoxServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.GiftBoxListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.GiftBoxPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.GiftBoxShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.GiftBoxVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.biz.app.executor.cmd.GiftBoxCreateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.GiftBoxDestroyCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.GiftBoxUpdateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.query.GiftBoxListQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.GiftBoxPageQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.GiftBoxShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Service +@DubboService(interfaceClass = GiftBoxServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class GiftBoxServiceImpl implements GiftBoxServiceI { + + private final GiftBoxCreateCmdExe giftBoxCreateCmdExe; + private final GiftBoxUpdateCmdExe giftBoxUpdateCmdExe; + private final GiftBoxPageQryExe giftBoxPageQryExe; + private final GiftBoxListQryExe giftBoxListQryExe; + private final GiftBoxShowQryExe giftBoxShowQryExe; + private final GiftBoxDestroyCmdExe giftBoxDestroyCmdExe; + + @Override + public GiftBoxVO create(GiftBoxCreateCmd giftBoxCreateCmd) { + return giftBoxCreateCmdExe.execute(giftBoxCreateCmd); + } + + @Override + public PageDTO page(GiftBoxPageQry giftBoxPageQry) { + return PageDTO.of(giftBoxPageQryExe.execute(giftBoxPageQry)); + } + + @Override + public List list(GiftBoxListQry giftBoxListQry) { + return giftBoxListQryExe.execute(giftBoxListQry); + } + + @Override + public GiftBoxVO update(GiftBoxUpdateCmd giftBoxUpdateCmd) { + return giftBoxUpdateCmdExe.execute(giftBoxUpdateCmd); + } + + @Override + public GiftBoxVO show(GiftBoxShowQry giftBoxShowQry) { + return giftBoxShowQryExe.execute(giftBoxShowQry); + } + + @Override + public void destroy(GiftBoxDestroyCmd giftBoxDestroyCmd) { + giftBoxDestroyCmdExe.execute(giftBoxDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/PurchaseOrderServiceImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/PurchaseOrderServiceImpl.java new file mode 100644 index 0000000..65c519e --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/PurchaseOrderServiceImpl.java @@ -0,0 +1,111 @@ +package com.xunhong.erp.turbo.biz.app.service; + +import com.xunhong.erp.turbo.api.biz.api.PurchaseOrderServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.*; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderCountQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.PurchaseOrderVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.biz.app.executor.cmd.*; +import com.xunhong.erp.turbo.biz.app.executor.query.PurchaseOrderCountQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.PurchaseOrderListQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.PurchaseOrderPageQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.PurchaseOrderShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Service +@DubboService(interfaceClass = PurchaseOrderServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class PurchaseOrderServiceImpl implements PurchaseOrderServiceI { + + private final PurchaseOrderCreateCmdExe purchaseOrderCreateCmdExe; + private final PurchaseOrderUpdateCmdExe purchaseOrderUpdateCmdExe; + private final PurchaseOrderPageQryExe purchaseOrderPageQryExe; + private final PurchaseOrderListQryExe purchaseOrderListQryExe; + private final PurchaseOrderShowQryExe purchaseOrderShowQryExe; + private final PurchaseOrderDestroyCmdExe purchaseOrderDestroyCmdExe; + private final PurchaseOrderApproveCmdExe purchaseOrderApproveCmdExe; + private final PurchaseOrderSubmitReviewCmdExe purchaseOrderSubmitReviewCmdExe; + private final PurchaseOrderWithdrawReviewCmdExe purchaseOrderWithdrawReviewCmdExe; + private final PurchaseOrderRejectApproveCmdExe purchaseOrderRejectApproveCmdExe; + private final PurchaseOrderFinalApproveCmdExe purchaseOrderFinalApproveCmdExe; + private final PurchaseOrderRejectFinalCmdExe purchaseOrderRejectFinalCmdExe; + private final PurchaseOrderCountQryExe purchaseOrderCountQryExe; + + @Override + public PurchaseOrderVO create(PurchaseOrderCreateCmd purchaseOrderCreateCmd) { + return purchaseOrderCreateCmdExe.execute(purchaseOrderCreateCmd); + } + + @Override + public PageDTO page(PurchaseOrderPageQry purchaseOrderPageQry) { + return PageDTO.of(purchaseOrderPageQryExe.execute(purchaseOrderPageQry)); + } + + @Override + public List list(PurchaseOrderListQry purchaseOrderListQry) { + return purchaseOrderListQryExe.execute(purchaseOrderListQry); + } + + @Override + public PurchaseOrderVO update(PurchaseOrderUpdateCmd purchaseOrderUpdateCmd) { + return purchaseOrderUpdateCmdExe.execute(purchaseOrderUpdateCmd); + } + + @Override + public PurchaseOrderVO show(PurchaseOrderShowQry purchaseOrderShowQry) { + return purchaseOrderShowQryExe.execute(purchaseOrderShowQry); + } + + @Override + public void destroy(PurchaseOrderDestroyCmd purchaseOrderDestroyCmd) { + purchaseOrderDestroyCmdExe.execute(purchaseOrderDestroyCmd); + } + + @Override + public void approve(PurchaseOrderApproveCmd purchaseOrderApproveCmd) { + purchaseOrderApproveCmdExe.execute(purchaseOrderApproveCmd); + } + + @Override + public void submitReview(PurchaseOrderSubmitReviewCmd purchaseOrderSubmitReviewCmd) { + purchaseOrderSubmitReviewCmdExe.execute(purchaseOrderSubmitReviewCmd); + } + + @Override + public void withdrawReview(PurchaseOrderWithdrawReviewCmd purchaseOrderWithdrawReviewCmd) { + purchaseOrderWithdrawReviewCmdExe.execute(purchaseOrderWithdrawReviewCmd); + } + + @Override + public void rejectApprove(PurchaseOrderRejectApproveCmd purchaseOrderRejectApproveCmd) { + purchaseOrderRejectApproveCmdExe.execute(purchaseOrderRejectApproveCmd); + } + + @Override + public void finalApprove(PurchaseOrderFinalApproveCmd purchaseOrderFinalApproveCmd) { + purchaseOrderFinalApproveCmdExe.execute(purchaseOrderFinalApproveCmd); + } + + @Override + public void rejectFinal(PurchaseOrderRejectFinalCmd purchaseOrderRejectFinalCmd) { + purchaseOrderRejectFinalCmdExe.execute(purchaseOrderRejectFinalCmd); + } + + @Override + public Long countPurchaseOrderByState(PurchaseOrderCountQry purchaseOrderCountQry) { + return purchaseOrderCountQryExe.execute(purchaseOrderCountQry); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/ShipOrderServiceImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/ShipOrderServiceImpl.java new file mode 100644 index 0000000..be6b308 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/ShipOrderServiceImpl.java @@ -0,0 +1,79 @@ +package com.xunhong.erp.turbo.biz.app.service; + +import com.xunhong.erp.turbo.api.biz.api.ShipOrderServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderGenerateDocumentCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.ShipOrderListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.ShipOrderPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.ShipOrderShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.ShipOrderVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.biz.app.executor.cmd.ShipOrderCreateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.ShipOrderDestroyCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.ShipOrderGenerateDocumentCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.ShipOrderUpdateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.query.ShipOrderListQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.ShipOrderPageQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.ShipOrderShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Service +@DubboService(interfaceClass = ShipOrderServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class ShipOrderServiceImpl implements ShipOrderServiceI { + + private final ShipOrderCreateCmdExe shipOrderCreateCmdExe; + private final ShipOrderUpdateCmdExe shipOrderUpdateCmdExe; + private final ShipOrderPageQryExe shipOrderPageQryExe; + private final ShipOrderListQryExe shipOrderListQryExe; + private final ShipOrderShowQryExe shipOrderShowQryExe; + private final ShipOrderDestroyCmdExe shipOrderDestroyCmdExe; + private final ShipOrderGenerateDocumentCmdExe shipOrderGenerateDocumentCmdExe; + + @Override + public ShipOrderVO create(ShipOrderCreateCmd shipOrderCreateCmd) { + return shipOrderCreateCmdExe.execute(shipOrderCreateCmd); + } + + @Override + public PageDTO page(ShipOrderPageQry shipOrderPageQry) { + return PageDTO.of(shipOrderPageQryExe.execute(shipOrderPageQry)); + } + + @Override + public List list(ShipOrderListQry shipOrderListQry) { + return shipOrderListQryExe.execute(shipOrderListQry); + } + + @Override + public ShipOrderVO update(ShipOrderUpdateCmd shipOrderUpdateCmd) { + return shipOrderUpdateCmdExe.execute(shipOrderUpdateCmd); + } + + @Override + public ShipOrderVO show(ShipOrderShowQry shipOrderShowQry) { + return shipOrderShowQryExe.execute(shipOrderShowQry); + } + + @Override + public void destroy(ShipOrderDestroyCmd shipOrderDestroyCmd) { + shipOrderDestroyCmdExe.execute(shipOrderDestroyCmd); + } + + @Override + public void generateDocument(ShipOrderGenerateDocumentCmd shipOrderGenerateDocumentCmd) { + shipOrderGenerateDocumentCmdExe.execute(shipOrderGenerateDocumentCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/SupplierServiceImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/SupplierServiceImpl.java new file mode 100644 index 0000000..93f19a3 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/app/service/SupplierServiceImpl.java @@ -0,0 +1,71 @@ +package com.xunhong.erp.turbo.biz.app.service; + +import com.xunhong.erp.turbo.api.biz.api.SupplierServiceI; +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.SupplierListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.SupplierPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.SupplierShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.SupplierVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.biz.app.executor.cmd.SupplierCreateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.SupplierDestroyCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.cmd.SupplierUpdateCmdExe; +import com.xunhong.erp.turbo.biz.app.executor.query.SupplierListQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.SupplierPageQryExe; +import com.xunhong.erp.turbo.biz.app.executor.query.SupplierShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Service +@DubboService(interfaceClass = SupplierServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class SupplierServiceImpl implements SupplierServiceI { + + private final SupplierCreateCmdExe supplierCreateCmdExe; + private final SupplierUpdateCmdExe supplierUpdateCmdExe; + private final SupplierPageQryExe supplierPageQryExe; + private final SupplierListQryExe supplierListQryExe; + private final SupplierShowQryExe supplierShowQryExe; + private final SupplierDestroyCmdExe supplierDestroyCmdExe; + + @Override + public SupplierVO create(SupplierCreateCmd supplierCreateCmd) { + return supplierCreateCmdExe.execute(supplierCreateCmd); + } + + @Override + public PageDTO page(SupplierPageQry supplierPageQry) { + return PageDTO.of(supplierPageQryExe.execute(supplierPageQry)); + } + + @Override + public List list(SupplierListQry supplierListQry) { + return supplierListQryExe.execute(supplierListQry); + } + + @Override + public SupplierVO update(SupplierUpdateCmd supplierUpdateCmd) { + return supplierUpdateCmdExe.execute(supplierUpdateCmd); + } + + @Override + public SupplierVO show(SupplierShowQry supplierShowQry) { + return supplierShowQryExe.execute(supplierShowQry); + } + + @Override + public void destroy(SupplierDestroyCmd supplierDestroyCmd) { + supplierDestroyCmdExe.execute(supplierDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/BoxBrand.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/BoxBrand.java new file mode 100644 index 0000000..82603c5 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/BoxBrand.java @@ -0,0 +1,55 @@ +package com.xunhong.erp.turbo.biz.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class BoxBrand extends DTO { + + /** + * 品牌ID + */ + private Long brandId; + + /** + * 品牌名称 + */ + private String name; + + /** + * 品牌图片URL + */ + private String image; + + /** + * 备注 + */ + private String remark; + + /** + * 状态:1_启用;0_禁用 + */ + private Boolean status; + + /** + * 产品列表 + */ + private List boxProductList; + + /** + * 创建时间 + */ + private LocalDateTime createdAt; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/BoxProduct.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/BoxProduct.java new file mode 100644 index 0000000..78a1932 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/BoxProduct.java @@ -0,0 +1,71 @@ +package com.xunhong.erp.turbo.biz.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.biz.dto.enums.BoxProductSpecTypeEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class BoxProduct extends DTO { + + /** + * 产品ID + */ + private Long productId; + + /** + * 纸箱名称 + */ + private String name; + + /** + * 重量(kg) + */ + private BigDecimal weight; + + /** + * 成本价 + */ + private BigDecimal costPrice; + + /** + * 销售价 + */ + private BigDecimal salePrice; + + /** + * 规格:1_2粒装;2_4粒装 + */ + private BoxProductSpecTypeEnum specType; + + /** + * 品牌ID + */ + private Long brandId; + + /** + * 备注 + */ + private String remark; + + /** + * 状态:1_启用;0_禁用 + */ + private Boolean status; + + /** + * 创建时间 + */ + private LocalDateTime createdAt; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/Company.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/Company.java new file mode 100644 index 0000000..b1aacdc --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/Company.java @@ -0,0 +1,64 @@ +package com.xunhong.erp.turbo.biz.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class Company extends DTO { + + /** + * 公司ID + */ + private Long companyId; + + /** + * 公司名称 + */ + private String name; + + /** + * 税号 + */ + private String taxNumber; + + /** + * 联系人 + */ + private String contactPerson; + + /** + * 联系电话 + */ + private String contactPhone; + + /** + * 发货地址 + */ + private String address; + + /** + * 备注 + */ + private String remark; + + /** + * 状态:1_启用;0_禁用; + */ + private Boolean status; + + /** + * 创建时间 + */ + private LocalDateTime createdAt; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/CompanyPaymentAccount.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/CompanyPaymentAccount.java new file mode 100644 index 0000000..2325ec4 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/CompanyPaymentAccount.java @@ -0,0 +1,89 @@ +package com.xunhong.erp.turbo.biz.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.biz.dto.enums.CompanyPaymentAccountCategoryEnum; +import com.xunhong.erp.turbo.api.biz.dto.enums.CompanyPaymentAccountTypeEnum; +import com.xunhong.erp.turbo.api.biz.dto.enums.CompanyPaymentPublicAccountTypeEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class CompanyPaymentAccount extends DTO { + + /** + * 账户ID + */ + private Long accountId; + + /** + * 公司ID + */ + private Long companyId; + + /** + * 账户类别:1_对公账户;2_私人账户 + */ + private CompanyPaymentAccountCategoryEnum accountCategory; + + /** + * 账户类型:1_银行卡;2_支付宝;3_微信 + */ + private CompanyPaymentAccountTypeEnum accountType; + + /** + * 银行名称 + */ + private String bankName; + + /** + * 支行名称 + */ + private String branchName; + + /** + * 对公账户类型:1_基本户;2_一般户;3_专用账户;4_临时户 + */ + private CompanyPaymentPublicAccountTypeEnum publicAccountType; + + /** + * 开户公司名称、支付宝昵称、微信号 + */ + private String accountName; + + /** + * 银行账号、支付宝账号、微信账号 + */ + private String accountNumber; + + /** + * 是否主付款账户:0_否;1_是 + */ + private Boolean isPrimary; + + /** + * 备注 + */ + private String remark; + + /** + * 状态:1_启用;2_禁用; + */ + private Boolean status; + + /** + * 创建时间 + */ + private LocalDateTime createdAt; + + private Company company; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/CostItem.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/CostItem.java new file mode 100644 index 0000000..7df40b8 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/CostItem.java @@ -0,0 +1,66 @@ +package com.xunhong.erp.turbo.biz.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.biz.dto.enums.CostItemCostTypeEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class CostItem extends DTO { + + /** + * 项目ID + */ + private Long itemId; + + /** + * 费用类型:1_包装材料;2_人工费用;3_其他费用;4_固定费用 + */ + private CostItemCostTypeEnum costType; + + /** + * 项目名称 + */ + private String name; + + /** + * 单位 + */ + private String unit; + + /** + * 单价 + */ + private BigDecimal price; + + /** + * 是否在录入时显示 + */ + private Boolean showInEntry; + + /** + * 备注 + */ + private String remark; + + /** + * 状态:1_启用;0_禁用 + */ + private Boolean status; + + /** + * 创建时间 + */ + private LocalDateTime createdAt; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/Dealer.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/Dealer.java new file mode 100644 index 0000000..414ff9f --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/Dealer.java @@ -0,0 +1,102 @@ +package com.xunhong.erp.turbo.biz.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.biz.dto.enums.DealerTypeEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class Dealer extends DTO { + + /** + * 经销商ID + */ + private Long dealerId; + + /** + * 经销商简称 + */ + private String shortName; + + /** + * 经销商全称 + */ + private String fullName; + + /** + * 经销商类型:1_市场;2_超市; + */ + private DealerTypeEnum dealerType; + + /** + * 是否开启分成 + */ + private Boolean enableShare; + + /** + * 分成比例 + */ + private BigDecimal shareRatio; + + /** + * 运费是否作为成本 + */ + private Boolean freightCostFlag; + + /** + * 草帘是否作为成本 + */ + private Boolean strawMatCostFlag; + + /** + * 发货单合计金额是否含包装费 + */ + private Boolean includePackingFlag; + + /** + * 单据类型:delivery-发货单, purchase-采购底单, cost-成本单 + */ + private String documentTypes; + + /** + * 应收金额 + */ + private BigDecimal receivable; + + /** + * 备注 + */ + private String remark; + + /** + * 状态:1_启用;0_禁用; + */ + private Boolean status; + + /** + * 发货模板 + */ + private String deliveryTemplate; + + /** + * 创建时间 + */ + private LocalDateTime createdAt; + + /** + * 经销商账户列表 + */ + private List dealerPaymentAccountList; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/DealerPaymentAccount.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/DealerPaymentAccount.java new file mode 100644 index 0000000..b5215f6 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/DealerPaymentAccount.java @@ -0,0 +1,78 @@ +package com.xunhong.erp.turbo.biz.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class DealerPaymentAccount extends DTO { + + /** + * 账户ID + */ + private Long accountId; + + /** + * 经销商ID + */ + private Long dealerId; + + /** + * 公司名称 + */ + private String companyName; + + /** + * 税号 + */ + private String taxNumber; + + /** + * 银行账号 + */ + private String bankAccount; + + /** + * 单位地址 + */ + private String companyAddress; + + /** + * 电话 + */ + private String phone; + + /** + * 开户行 + */ + private String openingBank; + + /** + * 状态 + */ + private Boolean status; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private LocalDateTime createdAt; + + /** + * 关联的经销商信息 + */ + private Dealer dealer; +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/DealerRebateCustomer.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/DealerRebateCustomer.java new file mode 100644 index 0000000..d211157 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/DealerRebateCustomer.java @@ -0,0 +1,51 @@ +package com.xunhong.erp.turbo.biz.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class DealerRebateCustomer extends DTO { + + /** + * 客户ID + */ + private Long customerId; + + /** + * 经销商ID + */ + private Long dealerId; + + /** + * 客户名称 + */ + private String name; + + /** + * 状态:1_启用;0_禁用; + */ + private Boolean status; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private LocalDateTime createdAt; + + private Dealer dealer; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/DealerWarehouse.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/DealerWarehouse.java new file mode 100644 index 0000000..78a7939 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/DealerWarehouse.java @@ -0,0 +1,83 @@ +package com.xunhong.erp.turbo.biz.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class DealerWarehouse extends DTO { + + /** + * 仓库ID + */ + private Long warehouseId; + + /** + * 经销商ID + */ + private Long dealerId; + + /** + * 经销商账户ID + */ + private Long accountId; + + /** + * 仓库名称 + */ + private String name; + + /** + * 仓库地址 + */ + private String address; + + /** + * 联系人 + */ + private String contactPerson; + + /** + * 联系电话 + */ + private String contactPhone; + + /** + * 收货人姓名 + */ + private String receiverName; + + /** + * 收货人电话 + */ + private String receiverPhone; + + /** + * 状态:1_启用;0_禁用; + */ + private Boolean status; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private LocalDateTime createdAt; + + private Dealer dealer; + + private DealerPaymentAccount dealerPaymentAccount; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/GiftBox.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/GiftBox.java new file mode 100644 index 0000000..9404927 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/GiftBox.java @@ -0,0 +1,60 @@ +package com.xunhong.erp.turbo.biz.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class GiftBox extends DTO { + + /** + * 礼盒ID + */ + private Long boxId; + + /** + * 礼盒名称 + */ + private String name; + + /** + * 成本价 + */ + private BigDecimal costPrice; + + /** + * 重量(kg) + */ + private BigDecimal weight; + + /** + * 售价 + */ + private BigDecimal salePrice; + + /** + * 备注 + */ + private String remark; + + /** + * 状态:1_启用;0_禁用 + */ + private Boolean status; + + /** + * 创建时间 + */ + private LocalDateTime createdAt; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/PurchaseOrder.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/PurchaseOrder.java new file mode 100644 index 0000000..6e2b634 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/PurchaseOrder.java @@ -0,0 +1,148 @@ +package com.xunhong.erp.turbo.biz.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.biz.dto.common.*; +import com.xunhong.erp.turbo.api.biz.dto.enums.PurchaseOrderPricingMethodEnum; +import com.xunhong.erp.turbo.api.biz.dto.enums.PurchaseOrderStateEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class PurchaseOrder extends DTO { + + /** + * 订单ID + */ + private Long orderId; + + /** + * 订单编号 + */ + private String orderSn; + + /** + * 步骤标识 + */ + private Integer active; + + /** + * 产地负责人 + */ + private String originPrincipal; + + /** + * 报价方式:1_按毛重报价;2_按净重报价; + */ + private PurchaseOrderPricingMethodEnum pricingMethod; + + /** + * 销售金额 + */ + private BigDecimal saleAmount; + + /** + * 包装费 + */ + private BigDecimal packageFee; + + /** + * 平均单价(元/斤) + */ + private BigDecimal avgUnitPrice; + + /** + * 是否返点 + */ + private Boolean rebate; + + /** + * 毛重(斤) + */ + private BigDecimal grossWeight; + + /** + * 净重(斤) + */ + private BigDecimal netWeight; + + /** + * 成本合计 + */ + private BigDecimal totalCost; + + /** + * 运费 + */ + private BigDecimal freightCharge; + + /** + * 瓜农数量 + */ + private Integer supplierCount; + + /** + * 订单状态: 0-草稿, 1-待审核, 2-待老板审核, 3-已发货(待付款), 4-已付款, 5-已完结 + */ + private PurchaseOrderStateEnum state; + + /** + * 备注 + */ + private String remark; + + /** + * 创建人ID + */ + private Long createdBy; + + /** + * 创建人姓名 + */ + private String createdByName; + + /** + * 创建时间 + */ + private LocalDateTime createdAt; + + /** + * 采购订单供应商信息 + */ + private List orderSupplierList; + + /** + * 采购订单运输信息 + */ + private OrderVehicle orderVehicle; + + /** + * 采购单销售公司 + */ + private OrderCompany orderCompany; + + /** + * 采购订单经销商信息 + */ + private OrderDealer orderDealer; + + /** + * 采购订单包装箱信息 + */ + private List orderCostList; + + /** + * 采购订单返点信息 + */ + private OrderRebate orderRebate; +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/ShipOrder.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/ShipOrder.java new file mode 100644 index 0000000..0772e91 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/ShipOrder.java @@ -0,0 +1,199 @@ +package com.xunhong.erp.turbo.biz.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.biz.dto.common.ShipOrderItem; +import com.xunhong.erp.turbo.api.biz.dto.common.ShipOrderPackage; +import com.xunhong.erp.turbo.api.biz.dto.enums.ShipOrderStateEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class ShipOrder extends DTO { + + /** + * 发货单ID + */ + private Long shipOrderId; + + /** + * 采购单ID + */ + private Long purchaseOrderId; + + /** + * 发货单编号 + */ + private String orderSn; + + /** + * 经销商ID + */ + private Long dealerId; + + /** + * 经销商名称 + */ + private String dealerName; + + /** + * 仓库ID + */ + private String warehouseId; + + /** + * 仓库名称 + */ + private String warehouseName; + + /** + * 车次号 + */ + private String vehicleNo; + + /** + * 发货地址 + */ + private String shippingAddress; + + /** + * 收货地址 + */ + private String receivingAddress; + + /** + * 发货日期 + */ + private LocalDate shippingDate; + + /** + * 预计到仓时间 + */ + private LocalDate estimatedArrivalDate; + + /** + * 西瓜品级 + */ + private String watermelonGrade; + + /** + * 司机姓名 + */ + private String driverName; + + /** + * 司机手机号码 + */ + private String driverPhone; + + /** + * 车牌号码 + */ + private String licensePlate; + + /** + * 运费欠款(元) + */ + private BigDecimal freightDebt; + + /** + * 草帘欠款(元) + */ + private BigDecimal strawMatDebt; + + /** + * 商标费(元) + */ + private BigDecimal trademarkFee; + + /** + * 人工费(元) + */ + private BigDecimal laborFee; + + /** + * 纸箱费(元) + */ + private BigDecimal cartonFee; + + /** + * 打码费(元) + */ + private BigDecimal codingFee; + + /** + * 计提费(元) + */ + private BigDecimal provisionFee; + + /** + * 合计金额(元) + */ + private BigDecimal totalAmount; + + /** + * 瓜农姓名逗号隔开 + */ + private String farmerInfo; + + /** + * 发货单据 + */ + private String shipDocument; + + /** + * 采购底单 + */ + private String purchaseDocument; + + /** + * 成本单据 + */ + private String costDocument; + + /** + * 发货单状态:1_待回款;2_部分回款;3_已回款;4_拒收完结;5_已完结; + */ + private ShipOrderStateEnum state; + + /** + * 备注 + */ + private String remark; + + /** + * 创建人ID + */ + private Long createdBy; + + /** + * 创建人姓名 + */ + private String createdByName; + + /** + * 创建时间 + */ + private LocalDateTime createdAt; + + /** + * 发货单明细 + */ + private List shipOrderItemList; + + /** + * 发货单子项表 + */ + private List shipOrderPackageList; +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/Supplier.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/Supplier.java new file mode 100644 index 0000000..70d5751 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/entity/Supplier.java @@ -0,0 +1,64 @@ +package com.xunhong.erp.turbo.biz.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class Supplier extends DTO { + + /** + * 供应商ID + */ + private Long supplierId; + + /** + * 姓名 + */ + private String name; + + /** + * 身份证号 + */ + private String idCard; + + /** + * 手机号 + */ + private String phone; + + /** + * 银行卡号 + */ + private String bankCard; + + /** + * 微信收款码URL + */ + private String wechatQr; + + /** + * 备注 + */ + private String remark; + + /** + * 状态:1_启用;0_禁用; + */ + private Boolean status; + + /** + * 创建时间 + */ + private LocalDateTime createdAt; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/BoxBrandGateway.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/BoxBrandGateway.java new file mode 100644 index 0000000..aa221c3 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/BoxBrandGateway.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxBrandListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxBrandPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxBrandShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.BoxBrand; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface BoxBrandGateway { + BoxBrand save(BoxBrandCreateCmd boxBrandCreateCmd); + + IPage page(BoxBrandPageQry boxBrandPageQry); + + List list(BoxBrandListQry boxBrandListQry); + + BoxBrand update(BoxBrandUpdateCmd boxBrandUpdateCmd); + + BoxBrand show(BoxBrandShowQry boxBrandShowQry); + + void destroy(BoxBrandDestroyCmd boxBrandDestroyCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/BoxProductGateway.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/BoxProductGateway.java new file mode 100644 index 0000000..656822c --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/BoxProductGateway.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxProductListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxProductPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxProductShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.BoxProduct; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface BoxProductGateway { + BoxProduct save(BoxProductCreateCmd boxProductCreateCmd); + + IPage page(BoxProductPageQry boxProductPageQry); + + List list(BoxProductListQry boxProductListQry); + + BoxProduct update(BoxProductUpdateCmd boxProductUpdateCmd); + + BoxProduct show(BoxProductShowQry boxProductShowQry); + + void destroy(BoxProductDestroyCmd boxProductDestroyCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/CompanyGateway.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/CompanyGateway.java new file mode 100644 index 0000000..4da9065 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/CompanyGateway.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.Company; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface CompanyGateway { + Company save(CompanyCreateCmd companyCreateCmd); + + IPage page(CompanyPageQry companyPageQry); + + List list(CompanyListQry companyListQry); + + Company update(CompanyUpdateCmd companyUpdateCmd); + + Company show(CompanyShowQry companyShowQry); + + void destroy(CompanyDestroyCmd companyDestroyCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/CompanyPaymentAccountGateway.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/CompanyPaymentAccountGateway.java new file mode 100644 index 0000000..2e07c5b --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/CompanyPaymentAccountGateway.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPaymentAccountListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPaymentAccountPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPaymentAccountShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.CompanyPaymentAccount; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface CompanyPaymentAccountGateway { + CompanyPaymentAccount save(CompanyPaymentAccountCreateCmd companyPaymentAccountCreateCmd); + + IPage page(CompanyPaymentAccountPageQry companyPaymentAccountPageQry); + + List list(CompanyPaymentAccountListQry companyPaymentAccountListQry); + + CompanyPaymentAccount update(CompanyPaymentAccountUpdateCmd companyPaymentAccountUpdateCmd); + + CompanyPaymentAccount show(CompanyPaymentAccountShowQry companyPaymentAccountShowQry); + + void destroy(CompanyPaymentAccountDestroyCmd companyPaymentAccountDestroyCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/CostItemGateway.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/CostItemGateway.java new file mode 100644 index 0000000..275bc37 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/CostItemGateway.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.CostItemListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CostItemPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CostItemShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.CostItem; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface CostItemGateway { + CostItem save(CostItemCreateCmd costItemCreateCmd); + + IPage page(CostItemPageQry costItemPageQry); + + List list(CostItemListQry costItemListQry); + + CostItem update(CostItemUpdateCmd costItemUpdateCmd); + + CostItem show(CostItemShowQry costItemShowQry); + + void destroy(CostItemDestroyCmd costItemDestroyCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/DealerGateway.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/DealerGateway.java new file mode 100644 index 0000000..f27ede4 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/DealerGateway.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.Dealer; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface DealerGateway { + Dealer save(DealerCreateCmd dealerCreateCmd); + + IPage page(DealerPageQry dealerPageQry); + + List list(DealerListQry dealerListQry); + + Dealer update(DealerUpdateCmd dealerUpdateCmd); + + Dealer show(DealerShowQry dealerShowQry); + + void destroy(DealerDestroyCmd dealerDestroyCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/DealerPaymentAccountGateway.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/DealerPaymentAccountGateway.java new file mode 100644 index 0000000..ceaefa8 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/DealerPaymentAccountGateway.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPaymentAccountListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPaymentAccountPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPaymentAccountShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.DealerPaymentAccount; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface DealerPaymentAccountGateway { + DealerPaymentAccount save(DealerPaymentAccountCreateCmd dealerPaymentAccountCreateCmd); + + IPage page(DealerPaymentAccountPageQry dealerPaymentAccountPageQry); + + List list(DealerPaymentAccountListQry dealerPaymentAccountListQry); + + DealerPaymentAccount update(DealerPaymentAccountUpdateCmd dealerPaymentAccountUpdateCmd); + + DealerPaymentAccount show(DealerPaymentAccountShowQry dealerPaymentAccountShowQry); + + void destroy(DealerPaymentAccountDestroyCmd dealerPaymentAccountDestroyCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/DealerRebateCustomerGateway.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/DealerRebateCustomerGateway.java new file mode 100644 index 0000000..03fa6c1 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/DealerRebateCustomerGateway.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerRebateCustomerListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerRebateCustomerPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerRebateCustomerShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.DealerRebateCustomer; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface DealerRebateCustomerGateway { + DealerRebateCustomer save(DealerRebateCustomerCreateCmd dealerRebateCustomerCreateCmd); + + IPage page(DealerRebateCustomerPageQry dealerRebateCustomerPageQry); + + List list(DealerRebateCustomerListQry dealerRebateCustomerListQry); + + DealerRebateCustomer update(DealerRebateCustomerUpdateCmd dealerRebateCustomerUpdateCmd); + + DealerRebateCustomer show(DealerRebateCustomerShowQry dealerRebateCustomerShowQry); + + void destroy(DealerRebateCustomerDestroyCmd dealerRebateCustomerDestroyCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/DealerWarehouseGateway.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/DealerWarehouseGateway.java new file mode 100644 index 0000000..1fe07d4 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/DealerWarehouseGateway.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerWarehouseListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerWarehousePageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerWarehouseShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.DealerWarehouse; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface DealerWarehouseGateway { + DealerWarehouse save(DealerWarehouseCreateCmd dealerWarehouseCreateCmd); + + IPage page(DealerWarehousePageQry dealerWarehousePageQry); + + List list(DealerWarehouseListQry dealerWarehouseListQry); + + DealerWarehouse update(DealerWarehouseUpdateCmd dealerWarehouseUpdateCmd); + + DealerWarehouse show(DealerWarehouseShowQry dealerWarehouseShowQry); + + void destroy(DealerWarehouseDestroyCmd dealerWarehouseDestroyCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/GiftBoxGateway.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/GiftBoxGateway.java new file mode 100644 index 0000000..2717f68 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/GiftBoxGateway.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.GiftBoxListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.GiftBoxPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.GiftBoxShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.GiftBox; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface GiftBoxGateway { + GiftBox save(GiftBoxCreateCmd giftBoxCreateCmd); + + IPage page(GiftBoxPageQry giftBoxPageQry); + + List list(GiftBoxListQry giftBoxListQry); + + GiftBox update(GiftBoxUpdateCmd giftBoxUpdateCmd); + + GiftBox show(GiftBoxShowQry giftBoxShowQry); + + void destroy(GiftBoxDestroyCmd giftBoxDestroyCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/PurchaseOrderGateway.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/PurchaseOrderGateway.java new file mode 100644 index 0000000..4cdf119 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/PurchaseOrderGateway.java @@ -0,0 +1,42 @@ +package com.xunhong.erp.turbo.biz.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.cmd.*; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderCountQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.PurchaseOrder; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface PurchaseOrderGateway { + PurchaseOrder save(PurchaseOrderCreateCmd purchaseOrderCreateCmd); + + IPage page(PurchaseOrderPageQry purchaseOrderPageQry); + + List list(PurchaseOrderListQry purchaseOrderListQry); + + PurchaseOrder update(PurchaseOrderUpdateCmd purchaseOrderUpdateCmd); + + PurchaseOrder show(PurchaseOrderShowQry purchaseOrderShowQry); + + void destroy(PurchaseOrderDestroyCmd purchaseOrderDestroyCmd); + + void approve(PurchaseOrderApproveCmd purchaseOrderApproveCmd); + + void submitReview(PurchaseOrderSubmitReviewCmd purchaseOrderSubmitReviewCmd); + + void withdrawReview(PurchaseOrderWithdrawReviewCmd purchaseOrderWithdrawReviewCmd); + + void rejectApprove(PurchaseOrderRejectApproveCmd purchaseOrderRejectApproveCmd); + + void finalApprove(PurchaseOrderFinalApproveCmd purchaseOrderFinalApproveCmd); + + void rejectFinal(PurchaseOrderRejectFinalCmd purchaseOrderRejectFinalCmd); + + Long countBy(PurchaseOrderCountQry purchaseOrderCountQry); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/ShipOrderGateway.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/ShipOrderGateway.java new file mode 100644 index 0000000..b267369 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/ShipOrderGateway.java @@ -0,0 +1,33 @@ +package com.xunhong.erp.turbo.biz.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderGenerateDocumentCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.ShipOrderListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.ShipOrderPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.ShipOrderShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.ShipOrder; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface ShipOrderGateway { + ShipOrder save(ShipOrderCreateCmd shipOrderCreateCmd); + + IPage page(ShipOrderPageQry shipOrderPageQry); + + List list(ShipOrderListQry shipOrderListQry); + + ShipOrder update(ShipOrderUpdateCmd shipOrderUpdateCmd); + + ShipOrder show(ShipOrderShowQry shipOrderShowQry); + + void destroy(ShipOrderDestroyCmd shipOrderDestroyCmd); + + void generateDocument(ShipOrderGenerateDocumentCmd shipOrderGenerateDocumentCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/SupplierGateway.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/SupplierGateway.java new file mode 100644 index 0000000..940eb51 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/domain/gateway/SupplierGateway.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.SupplierListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.SupplierPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.SupplierShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.Supplier; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface SupplierGateway { + Supplier save(SupplierCreateCmd supplierCreateCmd); + + IPage page(SupplierPageQry supplierPageQry); + + List list(SupplierListQry supplierListQry); + + Supplier update(SupplierUpdateCmd supplierUpdateCmd); + + Supplier show(SupplierShowQry supplierShowQry); + + void destroy(SupplierDestroyCmd supplierDestroyCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/BoxBrandConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/BoxBrandConvert.java new file mode 100644 index 0000000..e560141 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/BoxBrandConvert.java @@ -0,0 +1,35 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandUpdateCmd; +import com.xunhong.erp.turbo.biz.domain.entity.BoxBrand; +import com.xunhong.erp.turbo.biz.infrastructure.entity.BoxBrandDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface BoxBrandConvert { + + @Mapping(target = "boxProductList", source = "boxProductDOList") + BoxBrand toBoxBrand(BoxBrandDO boxBrandDO); + + @Mapping(target = "boxProductDOList", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + BoxBrandDO toBoxBrandDO(BoxBrandCreateCmd boxBrandCreateCmd); + + @Mapping(target = "boxProductDOList", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + void toBoxBrandDO(@MappingTarget BoxBrandDO boxBrandDO, BoxBrandUpdateCmd boxBrandUpdateCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/BoxProductConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/BoxProductConvert.java new file mode 100644 index 0000000..f52d5b0 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/BoxProductConvert.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductUpdateCmd; +import com.xunhong.erp.turbo.biz.domain.entity.BoxProduct; +import com.xunhong.erp.turbo.biz.infrastructure.entity.BoxProductDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface BoxProductConvert { + + BoxProduct toBoxProduct(BoxProductDO boxProductDO); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + BoxProductDO toBoxProductDO(BoxProductCreateCmd boxProductCreateCmd); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + void toBoxProductDO(@MappingTarget BoxProductDO boxProductDO, BoxProductUpdateCmd boxProductUpdateCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/CompanyConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/CompanyConvert.java new file mode 100644 index 0000000..14b877b --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/CompanyConvert.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyUpdateCmd; +import com.xunhong.erp.turbo.biz.domain.entity.Company; +import com.xunhong.erp.turbo.biz.infrastructure.entity.CompanyDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface CompanyConvert { + + Company toCompany(CompanyDO companyDO); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + CompanyDO toCompanyDO(CompanyCreateCmd companyCreateCmd); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + void toCompanyDO(@MappingTarget CompanyDO companyDO, CompanyUpdateCmd companyUpdateCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/CompanyPaymentAccountConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/CompanyPaymentAccountConvert.java new file mode 100644 index 0000000..026ef1e --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/CompanyPaymentAccountConvert.java @@ -0,0 +1,35 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountUpdateCmd; +import com.xunhong.erp.turbo.biz.domain.entity.CompanyPaymentAccount; +import com.xunhong.erp.turbo.biz.infrastructure.entity.CompanyPaymentAccountDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface CompanyPaymentAccountConvert { + + @Mapping(target = "company", source = "companyDO") + CompanyPaymentAccount toCompanyPaymentAccount(CompanyPaymentAccountDO companyPaymentAccountDO); + + @Mapping(target = "companyDO", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + CompanyPaymentAccountDO toCompanyPaymentAccountDO(CompanyPaymentAccountCreateCmd companyPaymentAccountCreateCmd); + + @Mapping(target = "companyDO", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + void toCompanyPaymentAccountDO(@MappingTarget CompanyPaymentAccountDO companyPaymentAccountDO, CompanyPaymentAccountUpdateCmd companyPaymentAccountUpdateCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/CostItemConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/CostItemConvert.java new file mode 100644 index 0000000..ece15a7 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/CostItemConvert.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemUpdateCmd; +import com.xunhong.erp.turbo.biz.domain.entity.CostItem; +import com.xunhong.erp.turbo.biz.infrastructure.entity.CostItemDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface CostItemConvert { + + CostItem toCostItem(CostItemDO costItemDO); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + CostItemDO toCostItemDO(CostItemCreateCmd costItemCreateCmd); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + void toCostItemDO(@MappingTarget CostItemDO costItemDO, CostItemUpdateCmd costItemUpdateCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/DealerConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/DealerConvert.java new file mode 100644 index 0000000..8adc3ad --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/DealerConvert.java @@ -0,0 +1,35 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerUpdateCmd; +import com.xunhong.erp.turbo.biz.domain.entity.Dealer; +import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface DealerConvert { + + @Mapping(target = "dealerPaymentAccountList", source = "dealerPaymentAccountDOList") + Dealer toDealer(DealerDO dealerDO); + + @Mapping(target = "dealerPaymentAccountDOList", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + DealerDO toDealerDO(DealerCreateCmd dealerCreateCmd); + + @Mapping(target = "dealerPaymentAccountDOList", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + void toDealerDO(@MappingTarget DealerDO dealerDO, DealerUpdateCmd dealerUpdateCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/DealerPaymentAccountConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/DealerPaymentAccountConvert.java new file mode 100644 index 0000000..ba7b48e --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/DealerPaymentAccountConvert.java @@ -0,0 +1,35 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountUpdateCmd; +import com.xunhong.erp.turbo.biz.domain.entity.DealerPaymentAccount; +import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerPaymentAccountDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, uses = {DealerConvert.class}) +public interface DealerPaymentAccountConvert { + + @Mapping(target = "dealer", source = "dealerDO") + DealerPaymentAccount toDealerPaymentAccount(DealerPaymentAccountDO dealerPaymentAccountDO); + + @Mapping(target = "dealerDO", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + DealerPaymentAccountDO toDealerPaymentAccountDO(DealerPaymentAccountCreateCmd dealerPaymentAccountCreateCmd); + + @Mapping(target = "dealerDO", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + void toDealerPaymentAccountDO(@MappingTarget DealerPaymentAccountDO dealerPaymentAccountDO, DealerPaymentAccountUpdateCmd dealerPaymentAccountUpdateCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/DealerRebateCustomerConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/DealerRebateCustomerConvert.java new file mode 100644 index 0000000..bbe178e --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/DealerRebateCustomerConvert.java @@ -0,0 +1,35 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerUpdateCmd; +import com.xunhong.erp.turbo.biz.domain.entity.DealerRebateCustomer; +import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerRebateCustomerDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface DealerRebateCustomerConvert { + + @Mapping(target = "dealer", source = "dealerDO") + DealerRebateCustomer toDealerRebateCustomer(DealerRebateCustomerDO dealerRebateCustomerDO); + + @Mapping(target = "dealerDO", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + DealerRebateCustomerDO toDealerRebateCustomerDO(DealerRebateCustomerCreateCmd dealerRebateCustomerCreateCmd); + + @Mapping(target = "dealerDO", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + void toDealerRebateCustomerDO(@MappingTarget DealerRebateCustomerDO dealerRebateCustomerDO, DealerRebateCustomerUpdateCmd dealerRebateCustomerUpdateCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/DealerWarehouseConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/DealerWarehouseConvert.java new file mode 100644 index 0000000..0040be5 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/DealerWarehouseConvert.java @@ -0,0 +1,38 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseUpdateCmd; +import com.xunhong.erp.turbo.biz.domain.entity.DealerWarehouse; +import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerWarehouseDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface DealerWarehouseConvert { + + @Mapping(target = "dealerPaymentAccount", source = "dealerPaymentAccountDO") + @Mapping(target = "dealer", source = "dealerDO") + DealerWarehouse toDealerWarehouse(DealerWarehouseDO dealerWarehouseDO); + + @Mapping(target = "dealerPaymentAccountDO", ignore = true) + @Mapping(target = "dealerDO", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + DealerWarehouseDO toDealerWarehouseDO(DealerWarehouseCreateCmd dealerWarehouseCreateCmd); + + @Mapping(target = "dealerPaymentAccountDO", ignore = true) + @Mapping(target = "dealerDO", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + void toDealerWarehouseDO(@MappingTarget DealerWarehouseDO dealerWarehouseDO, DealerWarehouseUpdateCmd dealerWarehouseUpdateCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/GiftBoxConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/GiftBoxConvert.java new file mode 100644 index 0000000..9f91248 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/GiftBoxConvert.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxUpdateCmd; +import com.xunhong.erp.turbo.biz.domain.entity.GiftBox; +import com.xunhong.erp.turbo.biz.infrastructure.entity.GiftBoxDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface GiftBoxConvert { + + GiftBox toGiftBox(GiftBoxDO giftBoxDO); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + GiftBoxDO toGiftBoxDO(GiftBoxCreateCmd giftBoxCreateCmd); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + void toGiftBoxDO(@MappingTarget GiftBoxDO giftBoxDO, GiftBoxUpdateCmd giftBoxUpdateCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderCompanyConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderCompanyConvert.java new file mode 100644 index 0000000..b72a8ea --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderCompanyConvert.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.common.OrderCompany; +import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderCompanyDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface OrderCompanyConvert { + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + OrderCompanyDO toOrderCompanyDO(OrderCompany orderCompany); + + OrderCompany toOrderCompany(OrderCompanyDO orderCompanyDO); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderCostConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderCostConvert.java new file mode 100644 index 0000000..cd10f53 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderCostConvert.java @@ -0,0 +1,28 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.common.OrderCost; +import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderCostDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +import java.util.List; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface OrderCostConvert { + @Mapping(target = "orderCostId", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + OrderCostDO toOrderCostDO(OrderCost orderCost); + + List toOrderCostDOList(List orderCostList); + + List toOrderCostList(List orderCostDOList); + + OrderCost toOrderCost(OrderCostDO orderCostDO); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderDealerConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderDealerConvert.java new file mode 100644 index 0000000..1f93292 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderDealerConvert.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.common.OrderDealer; +import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderDealerDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface OrderDealerConvert { + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + OrderDealerDO toOrderDealerDO(OrderDealer orderDealer); + + OrderDealer toOrderDealer(OrderDealerDO orderDealerDO); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderPackageConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderPackageConvert.java new file mode 100644 index 0000000..dd897d3 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderPackageConvert.java @@ -0,0 +1,28 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.common.OrderPackage; +import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderPackageDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +import java.util.List; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface OrderPackageConvert { + @Mapping(target = "orderPackageId", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + OrderPackageDO toOrderPackageDO(OrderPackage orderPackage); + + List toOrderPackageDOList(List orderPackageList); + + List toOrderPackageList(List orderPackageDOList); + + OrderPackage toOrderPackage(OrderPackageDO orderPackageDO); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderRebateConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderRebateConvert.java new file mode 100644 index 0000000..95b3e88 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderRebateConvert.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.common.OrderRebate; +import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderRebateDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface OrderRebateConvert { + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + OrderRebateDO toOrderRebateDO(OrderRebate orderRebate); + + OrderRebate toOrderRebate(OrderRebateDO orderRebateDO); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderSupplierConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderSupplierConvert.java new file mode 100644 index 0000000..84011fb --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderSupplierConvert.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.common.OrderSupplier; +import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderSupplierDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +import java.util.List; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, uses = {OrderPackageConvert.class}) +public interface OrderSupplierConvert { + @Mapping(target = "orderPackageDOList", source = "orderPackageList") + @Mapping(target = "orderSupplierId", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + OrderSupplierDO toOrderSupplierDO(OrderSupplier orderSupplier); + + List toOrderSupplierDOList(List orderSupplierList); + + List toOrderSupplierList(List orderSupplierDOList); + + @Mapping(target = "orderPackageList", source = "orderPackageDOList") + OrderSupplier toOrderSupplier(OrderSupplierDO orderSupplierDO); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderVehicleConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderVehicleConvert.java new file mode 100644 index 0000000..ee6a6bf --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/OrderVehicleConvert.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.common.OrderVehicle; +import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderVehicleDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, uses = {OrderDealerConvert.class}) +public interface OrderVehicleConvert { + @Mapping(target = "vehicleId", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + OrderVehicleDO toOrderVehicleDO(OrderVehicle orderVehicle); + + OrderVehicle toOrderVehicle(OrderVehicleDO orderVehicleDO); +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/PurchaseOrderConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/PurchaseOrderConvert.java new file mode 100644 index 0000000..980651c --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/PurchaseOrderConvert.java @@ -0,0 +1,52 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.PurchaseOrderCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.PurchaseOrderUpdateCmd; +import com.xunhong.erp.turbo.biz.domain.entity.PurchaseOrder; +import com.xunhong.erp.turbo.biz.infrastructure.entity.PurchaseOrderDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, uses = {OrderVehicleConvert.class, OrderSupplierConvert.class, OrderCostConvert.class, OrderPackageConvert.class, OrderDealerConvert.class, OrderRebateConvert.class, OrderCompanyConvert.class}) +public interface PurchaseOrderConvert { + + @Mapping(target = "orderRebate", source = "orderRebateDO") + @Mapping(target = "orderCompany", source = "orderCompanyDO") + @Mapping(target = "orderDealer", source = "orderDealerDO") + @Mapping(target = "orderCostList", source = "orderCostDOList") + @Mapping(target = "orderSupplierList", source = "orderSupplierDOList") + @Mapping(target = "orderVehicle", source = "orderVehicleDO") + PurchaseOrder toPurchaseOrder(PurchaseOrderDO purchaseOrderDO); + + @Mapping(target = "orderDealerDO", ignore = true) + @Mapping(target = "orderCostDOList", ignore = true) + @Mapping(target = "orderSn", ignore = true) + @Mapping(target = "orderVehicleDO", ignore = true) + @Mapping(target = "orderSupplierDOList", ignore = true) + @Mapping(target = "state", ignore = true) + @Mapping(target = "orderId", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + PurchaseOrderDO toPurchaseOrderDO(PurchaseOrderCreateCmd purchaseOrderCreateCmd); + + @Mapping(target = "orderDealerDO", ignore = true) + @Mapping(target = "orderCostDOList", ignore = true) + @Mapping(target = "orderVehicleDO", ignore = true) + @Mapping(target = "orderSupplierDOList", ignore = true) + @Mapping(target = "orderSn", ignore = true) + @Mapping(target = "state", ignore = true) + @Mapping(target = "createdByName", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + void toPurchaseOrderDO(@MappingTarget PurchaseOrderDO purchaseOrderDO, PurchaseOrderUpdateCmd purchaseOrderUpdateCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/ShipOrderConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/ShipOrderConvert.java new file mode 100644 index 0000000..45c8a83 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/ShipOrderConvert.java @@ -0,0 +1,100 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderGenerateDocumentCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderUpdateCmd; +import com.xunhong.erp.turbo.biz.domain.entity.ShipOrder; +import com.xunhong.erp.turbo.biz.infrastructure.entity.ShipOrderDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface ShipOrderConvert { + + @Mapping(target = "shipOrderPackageList", source = "shipOrderPackageDOList") + @Mapping(target = "shipOrderItemList", source = "shipOrderItemDOList") + ShipOrder toShipOrder(ShipOrderDO shipOrderDO); + + @Mapping(target = "warehouseName", ignore = true) + @Mapping(target = "warehouseId", ignore = true) + @Mapping(target = "vehicleNo", ignore = true) + @Mapping(target = "state", ignore = true) + @Mapping(target = "shipDocument", ignore = true) + @Mapping(target = "purchaseDocument", ignore = true) + @Mapping(target = "dealerName", ignore = true) + @Mapping(target = "dealerId", ignore = true) + @Mapping(target = "costDocument", ignore = true) + @Mapping(target = "shipOrderPackageDOList", ignore = true) + @Mapping(target = "shipOrderItemDOList", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + ShipOrderDO toShipOrderDO(ShipOrderCreateCmd shipOrderCreateCmd); + + @Mapping(target = "warehouseName", ignore = true) + @Mapping(target = "warehouseId", ignore = true) + @Mapping(target = "vehicleNo", ignore = true) + @Mapping(target = "trademarkFee", ignore = true) + @Mapping(target = "totalAmount", ignore = true) + @Mapping(target = "strawMatDebt", ignore = true) + @Mapping(target = "state", ignore = true) + @Mapping(target = "shippingDate", ignore = true) + @Mapping(target = "receivingAddress", ignore = true) + @Mapping(target = "purchaseOrderId", ignore = true) + @Mapping(target = "provisionFee", ignore = true) + @Mapping(target = "orderSn", ignore = true) + @Mapping(target = "licensePlate", ignore = true) + @Mapping(target = "laborFee", ignore = true) + @Mapping(target = "freightDebt", ignore = true) + @Mapping(target = "farmerInfo", ignore = true) + @Mapping(target = "driverPhone", ignore = true) + @Mapping(target = "driverName", ignore = true) + @Mapping(target = "dealerName", ignore = true) + @Mapping(target = "dealerId", ignore = true) + @Mapping(target = "codingFee", ignore = true) + @Mapping(target = "cartonFee", ignore = true) + @Mapping(target = "shipOrderPackageDOList", ignore = true) + @Mapping(target = "shipOrderItemDOList", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + void toShipOrderDO(@MappingTarget ShipOrderDO shipOrderDO, ShipOrderUpdateCmd shipOrderUpdateCmd); + + @Mapping(target = "warehouseName", ignore = true) + @Mapping(target = "warehouseId", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "vehicleNo", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "trademarkFee", ignore = true) + @Mapping(target = "totalAmount", ignore = true) + @Mapping(target = "strawMatDebt", ignore = true) + @Mapping(target = "state", ignore = true) + @Mapping(target = "shippingDate", ignore = true) + @Mapping(target = "shipOrderPackageDOList", ignore = true) + @Mapping(target = "shipOrderItemDOList", ignore = true) + @Mapping(target = "receivingAddress", ignore = true) + @Mapping(target = "purchaseOrderId", ignore = true) + @Mapping(target = "provisionFee", ignore = true) + @Mapping(target = "orderSn", ignore = true) + @Mapping(target = "licensePlate", ignore = true) + @Mapping(target = "laborFee", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "freightDebt", ignore = true) + @Mapping(target = "farmerInfo", ignore = true) + @Mapping(target = "driverPhone", ignore = true) + @Mapping(target = "driverName", ignore = true) + @Mapping(target = "dealerName", ignore = true) + @Mapping(target = "dealerId", ignore = true) + @Mapping(target = "createdAt", ignore = true) + @Mapping(target = "codingFee", ignore = true) + @Mapping(target = "cartonFee", ignore = true) + void toShipOrderDO(@MappingTarget ShipOrderDO shipOrderDO, ShipOrderGenerateDocumentCmd shipOrderGenerateDocumentCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/SupplierConvert.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/SupplierConvert.java new file mode 100644 index 0000000..a086e66 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/convert/SupplierConvert.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.biz.infrastructure.convert; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierUpdateCmd; +import com.xunhong.erp.turbo.biz.domain.entity.Supplier; +import com.xunhong.erp.turbo.biz.infrastructure.entity.SupplierDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface SupplierConvert { + + Supplier toSupplier(SupplierDO supplierDO); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + SupplierDO toSupplierDO(SupplierCreateCmd supplierCreateCmd); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + void toSupplierDO(@MappingTarget SupplierDO supplierDO, SupplierUpdateCmd supplierUpdateCmd); +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/BoxBrandDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/BoxBrandDO.java new file mode 100644 index 0000000..90b03f1 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/BoxBrandDO.java @@ -0,0 +1,55 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "box_brand") +@EqualsAndHashCode(callSuper = true) +public class BoxBrandDO extends BaseDO { + + /** + * 品牌ID + */ + @TableId(value = "brand_id", type = IdType.ASSIGN_ID) + private Long brandId; + + /** + * 品牌名称 + */ + @TableField(value = "name") + private String name; + + /** + * 品牌图片URL + */ + @TableField(value = "image") + private String image; + + /** + * 备注 + */ + @TableField(value = "remark") + private String remark; + + /** + * 状态:1_启用;0_禁用 + */ + @TableField(value = "status") + private Boolean status; + + @TableField(exist = false) + private List boxProductDOList; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/BoxProductDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/BoxProductDO.java new file mode 100644 index 0000000..ed40ae4 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/BoxProductDO.java @@ -0,0 +1,77 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.api.biz.dto.enums.BoxProductSpecTypeEnum; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "box_product") +@EqualsAndHashCode(callSuper = true) +public class BoxProductDO extends BaseDO { + + /** + * 产品ID + */ + @TableId(value = "product_id", type = IdType.ASSIGN_ID) + private Long productId; + + /** + * 纸箱名称 + */ + @TableField(value = "name") + private String name; + + /** + * 重量(kg) + */ + @TableField(value = "weight") + private BigDecimal weight; + + /** + * 成本价 + */ + @TableField(value = "cost_price") + private BigDecimal costPrice; + + /** + * 销售价 + */ + @TableField(value = "sale_price") + private BigDecimal salePrice; + + /** + * 规格:1_2粒装;2_4粒装 + */ + @TableField(value = "spec_type") + private BoxProductSpecTypeEnum specType; + + /** + * 品牌ID + */ + @TableField(value = "brand_id") + private Long brandId; + + /** + * 备注 + */ + @TableField(value = "remark") + private String remark; + + /** + * 状态:1_启用;0_禁用 + */ + @TableField(value = "status") + private Boolean status; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/CompanyDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/CompanyDO.java new file mode 100644 index 0000000..6d32e05 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/CompanyDO.java @@ -0,0 +1,68 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "company") +@EqualsAndHashCode(callSuper = true) +public class CompanyDO extends BaseDO { + + /** + * 公司ID + */ + @TableId(value = "company_id", type = IdType.ASSIGN_ID) + private Long companyId; + + /** + * 公司名称 + */ + @TableField(value = "name") + private String name; + + /** + * 税号 + */ + @TableField(value = "tax_number") + private String taxNumber; + + /** + * 联系人 + */ + @TableField(value = "contact_person") + private String contactPerson; + + /** + * 联系电话 + */ + @TableField(value = "contact_phone") + private String contactPhone; + + /** + * 发货地址 + */ + @TableField(value = "address") + private String address; + + /** + * 备注 + */ + @TableField(value = "remark") + private String remark; + + /** + * 状态:1_启用;0_禁用; + */ + @TableField(value = "status") + private Boolean status; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/CompanyPaymentAccountDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/CompanyPaymentAccountDO.java new file mode 100644 index 0000000..10e1219 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/CompanyPaymentAccountDO.java @@ -0,0 +1,106 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.api.biz.dto.enums.CompanyPaymentAccountCategoryEnum; +import com.xunhong.erp.turbo.api.biz.dto.enums.CompanyPaymentAccountTypeEnum; +import com.xunhong.erp.turbo.api.biz.dto.enums.CompanyPaymentPublicAccountTypeEnum; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "company_payment_account") +@EqualsAndHashCode(callSuper = true) +public class CompanyPaymentAccountDO extends BaseDO { + + /** + * 账户ID + */ + @TableId(value = "account_id", type = IdType.ASSIGN_ID) + private Long accountId; + + /** + * 公司ID + */ + @TableField(value = "company_id") + private Long companyId; + + /** + * 账户类别:1_对公账户;2_私人账户 + */ + @TableField(value = "account_category") + private CompanyPaymentAccountCategoryEnum accountCategory; + + /** + * 账户类型:1_银行卡;2_支付宝;3_微信 + */ + @TableField(value = "account_type") + private CompanyPaymentAccountTypeEnum accountType; + + /** + * 银行名称 + */ + @TableField(value = "bank_name") + private String bankName; + + /** + * 支行名称 + */ + @TableField(value = "branch_name") + private String branchName; + + /** + * 对公账户类型:1_基本户;2_一般户;3_专用账户;4_临时户 + */ + @TableField(value = "public_account_type") + private CompanyPaymentPublicAccountTypeEnum publicAccountType; + + /** + * 开户公司名称、支付宝昵称、微信号 + */ + @TableField(value = "account_name") + private String accountName; + + /** + * 银行账号、支付宝账号、微信账号 + */ + @TableField(value = "account_number") + private String accountNumber; + + /** + * 是否主付款账户:0_否;1_是 + */ + @TableField(value = "is_primary") + private Boolean isPrimary; + + /** + * 备注 + */ + @TableField(value = "remark") + private String remark; + + /** + * 状态:1_启用;2_禁用; + */ + @TableField(value = "status") + private Boolean status; + + /** + * 创建时间 + */ + @TableField(value = "created_at") + private LocalDateTime createdAt; + + @TableField(exist = false) + private CompanyDO companyDO; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/CostItemDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/CostItemDO.java new file mode 100644 index 0000000..1f266d6 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/CostItemDO.java @@ -0,0 +1,71 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.api.biz.dto.enums.CostItemCostTypeEnum; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "cost_item") +@EqualsAndHashCode(callSuper = true) +public class CostItemDO extends BaseDO { + + /** + * 项目ID + */ + @TableId(value = "item_id", type = IdType.ASSIGN_ID) + private Long itemId; + + /** + * 费用类型:1_包装材料;2_人工费用;3_其他费用;4_固定费用 + */ + @TableField(value = "cost_type") + private CostItemCostTypeEnum costType; + + /** + * 项目名称 + */ + @TableField(value = "name") + private String name; + + /** + * 单位 + */ + @TableField(value = "unit") + private String unit; + + /** + * 单价 + */ + @TableField(value = "price") + private BigDecimal price; + + /** + * 是否在录入时显示 + */ + @TableField(value = "show_in_entry") + private Boolean showInEntry; + + /** + * 备注 + */ + @TableField(value = "remark") + private String remark; + + /** + * 状态:1_启用;0_禁用 + */ + @TableField(value = "status") + private Boolean status; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/DealerDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/DealerDO.java new file mode 100644 index 0000000..faed8fb --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/DealerDO.java @@ -0,0 +1,113 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.api.biz.dto.enums.DealerTypeEnum; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "dealer") +@EqualsAndHashCode(callSuper = true) +public class DealerDO extends BaseDO { + + /** + * 经销商ID + */ + @TableId(value = "dealer_id", type = IdType.ASSIGN_ID) + private Long dealerId; + + /** + * 经销商简称 + */ + @TableField(value = "short_name") + private String shortName; + + /** + * 经销商全称 + */ + @TableField(value = "full_name") + private String fullName; + + /** + * 经销商类型:1_市场;2_超市; + */ + @TableField(value = "dealer_type") + private DealerTypeEnum dealerType; + + /** + * 是否开启分成 + */ + @TableField(value = "enable_share") + private Boolean enableShare; + + /** + * 分成比例 + */ + @TableField(value = "share_ratio") + private BigDecimal shareRatio; + + /** + * 运费是否作为成本 + */ + @TableField(value = "freight_cost_flag") + private Boolean freightCostFlag; + + /** + * 草帘是否作为成本 + */ + @TableField(value = "straw_mat_cost_flag") + private Boolean strawMatCostFlag; + + /** + * 发货单合计金额是否含包装费 + */ + @TableField(value = "include_packing_flag") + private Boolean includePackingFlag; + + /** + * 单据类型:delivery-发货单, purchase-采购底单, cost-成本单 + */ + @TableField(value = "document_types") + private String documentTypes; + + /** + * 应收金额 + */ + @TableField(value = "receivable") + private BigDecimal receivable; + + /** + * 备注 + */ + @TableField(value = "remark") + private String remark; + + /** + * 状态:1_启用;0_禁用; + */ + @TableField(value = "status") + private Boolean status; + + /** + * 发货单模板 + */ + @TableField(value = "delivery_template") + private String deliveryTemplate; + + /** + * 付款账户列表 + */ + @TableField(exist = false) + private List dealerPaymentAccountDOList; +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/DealerPaymentAccountDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/DealerPaymentAccountDO.java new file mode 100644 index 0000000..2150ade --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/DealerPaymentAccountDO.java @@ -0,0 +1,83 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "dealer_payment_account") +@EqualsAndHashCode(callSuper = true) +public class DealerPaymentAccountDO extends BaseDO { + + /** + * 账户ID + */ + @TableId(value = "account_id", type = IdType.ASSIGN_ID) + private Long accountId; + + /** + * 经销商ID + */ + @TableField(value = "dealer_id") + private Long dealerId; + + /** + * 公司名称 + */ + @TableField(value = "company_name") + private String companyName; + + /** + * 税号 + */ + @TableField(value = "tax_number") + private String taxNumber; + + /** + * 银行账号 + */ + @TableField(value = "bank_account") + private String bankAccount; + + /** + * 单位地址 + */ + @TableField(value = "company_address") + private String companyAddress; + + /** + * 电话 + */ + @TableField(value = "phone") + private String phone; + + /** + * 开户行 + */ + @TableField(value = "opening_bank") + private String openingBank; + + /** + * 备注 + */ + @TableField(value = "remark") + private String remark; + + /** + * 状态:1_启用;0_禁用; + */ + @TableField(value = "status") + private Boolean status; + + @TableField(exist = false) + private DealerDO dealerDO; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/DealerRebateCustomerDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/DealerRebateCustomerDO.java new file mode 100644 index 0000000..3cc678d --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/DealerRebateCustomerDO.java @@ -0,0 +1,52 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "dealer_rebate_customer") +@EqualsAndHashCode(callSuper = true) +public class DealerRebateCustomerDO extends BaseDO { + + /** + * 客户ID + */ + @TableId(value = "customer_id", type = IdType.ASSIGN_ID) + private Long customerId; + + /** + * 经销商ID + */ + @TableField(value = "dealer_id") + private Long dealerId; + + /** + * 客户名称 + */ + @TableField(value = "name") + private String name; + + /** + * 状态:1_启用;0_禁用; + */ + @TableField(value = "status") + private Boolean status; + + /** + * 备注 + */ + @TableField(value = "remark") + private String remark; + + @TableField(exist = false) + private DealerDO dealerDO; +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/DealerWarehouseDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/DealerWarehouseDO.java new file mode 100644 index 0000000..4d00099 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/DealerWarehouseDO.java @@ -0,0 +1,91 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "dealer_warehouse") +@EqualsAndHashCode(callSuper = true) +public class DealerWarehouseDO extends BaseDO { + + /** + * 仓库ID + */ + @TableId(value = "warehouse_id", type = IdType.ASSIGN_ID) + private Long warehouseId; + + /** + * 经销商ID + */ + @TableField(value = "dealer_id") + private Long dealerId; + + /** + * 经销商账户ID + */ + @TableField(value = "account_id") + private Long accountId; + + /** + * 仓库名称 + */ + @TableField(value = "name") + private String name; + + /** + * 仓库地址 + */ + @TableField(value = "address") + private String address; + + /** + * 联系人 + */ + @TableField(value = "contact_person") + private String contactPerson; + + /** + * 联系电话 + */ + @TableField(value = "contact_phone") + private String contactPhone; + + /** + * 收货人姓名 + */ + @TableField(value = "receiver_name") + private String receiverName; + + /** + * 收货人电话 + */ + @TableField(value = "receiver_phone") + private String receiverPhone; + + /** + * 状态:1_启用;0_禁用; + */ + @TableField(value = "status") + private Boolean status; + + /** + * 备注 + */ + @TableField(value = "remark") + private String remark; + + @TableField(exist = false) + private DealerDO dealerDO; + + @TableField(exist = false) + private DealerPaymentAccountDO dealerPaymentAccountDO; +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/GiftBoxDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/GiftBoxDO.java new file mode 100644 index 0000000..4ba2768 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/GiftBoxDO.java @@ -0,0 +1,64 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "gift_box") +@EqualsAndHashCode(callSuper = true) +public class GiftBoxDO extends BaseDO { + + /** + * 礼盒ID + */ + @TableId(value = "box_id", type = IdType.ASSIGN_ID) + private Long boxId; + + /** + * 礼盒名称 + */ + @TableField(value = "name") + private String name; + + /** + * 成本价 + */ + @TableField(value = "cost_price") + private BigDecimal costPrice; + + /** + * 重量(kg) + */ + @TableField(value = "weight") + private BigDecimal weight; + + /** + * 售价 + */ + @TableField(value = "sale_price") + private BigDecimal salePrice; + + /** + * 备注 + */ + @TableField(value = "remark") + private String remark; + + /** + * 状态:1_启用;0_禁用 + */ + @TableField(value = "status") + private Boolean status; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderCompanyDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderCompanyDO.java new file mode 100644 index 0000000..0ea07b0 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderCompanyDO.java @@ -0,0 +1,106 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "order_company") +@EqualsAndHashCode(callSuper = true) +public class OrderCompanyDO extends BaseDO { + + /** + * 记录ID + */ + @TableId(value = "order_company_id", type = IdType.ASSIGN_ID) + private Long orderCompanyId; + + /** + * 订单ID + */ + @TableField(value = "order_id") + private Long orderId; + + /** + * 公司ID + */ + @TableField(value = "company_id") + private Long companyId; + + /** + * 公司名称 + */ + @TableField(value = "name") + private String name; + + /** + * 税号 + */ + @TableField(value = "tax_number") + private String taxNumber; + + /** + * 联系人 + */ + @TableField(value = "contact_person") + private String contactPerson; + + /** + * 联系电话 + */ + @TableField(value = "contact_phone") + private String contactPhone; + + /** + * 发货地址 + */ + @TableField(value = "address") + private String address; + + /** + * 账户ID + */ + @TableField(value = "account_id") + private Long accountId; + + /** + * 银行名称 + */ + @TableField(value = "bank_name") + private String bankName; + + /** + * 支行名称 + */ + @TableField(value = "branch_name") + private String branchName; + + /** + * 账户名称 + */ + @TableField(value = "account_name") + private String accountName; + + /** + * 银行账号 + */ + @TableField(value = "account_number") + private String accountNumber; + + /** + * 创建时间 + */ + @TableField(value = "created_at") + private LocalDateTime createdAt; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderCostDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderCostDO.java new file mode 100644 index 0000000..47fb9f4 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderCostDO.java @@ -0,0 +1,84 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.api.biz.dto.enums.CostItemCostTypeEnum; +import com.xunhong.erp.turbo.api.biz.dto.enums.OrderCostPayerTypeEnum; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "order_cost") +@EqualsAndHashCode(callSuper = true) +public class OrderCostDO extends BaseDO { + + /** + * 记录ID + */ + @TableId(value = "order_cost_id", type = IdType.ASSIGN_ID) + private Long orderCostId; + + /** + * 订单ID + */ + @TableField(value = "order_id") + private Long orderId; + + /** + * 成本项目ID + */ + @TableField(value = "item_id") + private Long itemId; + + /** + * 成本项目名称 + */ + @TableField(value = "name") + private String name; + + /** + * 单价 + */ + @TableField(value = "price") + private BigDecimal price; + + /** + * 单位 + */ + @TableField(value = "unit") + private String unit; + + /** + * 数量 + */ + @TableField(value = "count") + private Integer count; + + /** + * 付款方类型:1-我方,2-对方 + */ + @TableField(value = "payer_type") + private OrderCostPayerTypeEnum payerType; + + /** + * 负责人 + */ + @TableField(value = "principal") + private String principal; + + /** + * 费用类型:1_包装材料;2_人工费用;3_其他费用;4_固定费用 + */ + @TableField(value = "cost_type") + private CostItemCostTypeEnum costType; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderDealerDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderDealerDO.java new file mode 100644 index 0000000..d0f3904 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderDealerDO.java @@ -0,0 +1,174 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.api.biz.dto.enums.DealerTypeEnum; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "order_dealer") +@EqualsAndHashCode(callSuper = true) +public class OrderDealerDO extends BaseDO { + + /** + * 记录ID + */ + @TableId(value = "order_dealer_id", type = IdType.ASSIGN_ID) + private Long orderDealerId; + + /** + * 订单ID + */ + @TableField(value = "order_id") + private Long orderId; + + /** + * 经销商ID + */ + @TableField(value = "dealer_id") + private Long dealerId; + + /** + * 经销商简称 + */ + @TableField(value = "short_name") + private String shortName; + + /** + * 经销商类型:1_市场;2_超市; + */ + @TableField(value = "dealer_type") + private DealerTypeEnum dealerType; + + + /** + * 是否开启分成 + */ + @TableField(value = "enable_share") + private Boolean enableShare; + + /** + * 分成比例 + */ + @TableField(value = "share_ratio") + private BigDecimal shareRatio; + + /** + * 运费是否作为成本 + */ + @TableField(value = "freight_cost_flag") + private Boolean freightCostFlag; + + /** + * 草帘是否作为成本 + */ + @TableField(value = "straw_mat_cost_flag") + private Boolean strawMatCostFlag; + + /** + * 发货单合计金额是否含包装费 + */ + @TableField(value = "include_packing_flag") + private Boolean includePackingFlag; + + /** + * 单据类型:delivery-发货单, purchase-采购底单, cost-成本单 + */ + @TableField(value = "document_types") + private String documentTypes; + + /** + * 账户ID + */ + @TableField(value = "account_id") + private Long accountId; + + /** + * 公司名称 + */ + @TableField(value = "company_name") + private String companyName; + + /** + * 税号 + */ + @TableField(value = "tax_number") + private String taxNumber; + + /** + * 银行账号 + */ + @TableField(value = "bank_account") + private String bankAccount; + + /** + * 单位地址 + */ + @TableField(value = "company_address") + private String companyAddress; + + /** + * 电话 + */ + @TableField(value = "phone") + private String phone; + + /** + * 开户行 + */ + @TableField(value = "opening_bank") + private String openingBank; + + /** + * 仓库ID + */ + @TableField(value = "warehouse_id") + private Long warehouseId; + + /** + * 仓库名称 + */ + @TableField(value = "warehouse_name") + private String warehouseName; + + /** + * 仓库地址 + */ + @TableField(value = "warehouse_address") + private String warehouseAddress; + + /** + * 联系人 + */ + @TableField(value = "contact_person") + private String contactPerson; + + /** + * 联系电话 + */ + @TableField(value = "contact_phone") + private String contactPhone; + + /** + * 收货人姓名 + */ + @TableField(value = "receiver_name") + private String receiverName; + + /** + * 收货人电话 + */ + @TableField(value = "receiver_phone") + private String receiverPhone; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderPackageDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderPackageDO.java new file mode 100644 index 0000000..4efee03 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderPackageDO.java @@ -0,0 +1,95 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.api.biz.dto.enums.OrderPackageBoxTypeEnum; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "order_package") +@EqualsAndHashCode(callSuper = true) +public class OrderPackageDO extends BaseDO { + + /** + * 记录ID + */ + @TableId(value = "order_package_id", type = IdType.ASSIGN_ID) + private Long orderPackageId; + + /** + * 供应商记录ID + */ + @TableField(value = "order_supplier_id") + private Long orderSupplierId; + + /** + * 箱子品牌ID + */ + @TableField(value = "box_brand_id") + private Long boxBrandId; + + /** + * 箱子品牌名称 + */ + @TableField(value = "box_brand_name") + private String boxBrandName; + + /** + * 箱子分类ID + */ + @TableField(value = "box_category_id") + private String boxCategoryId; + + /** + * 箱子产品ID + */ + @TableField(value = "box_product_id") + private Long boxProductId; + + /** + * 箱子产品名称 + */ + @TableField(value = "box_product_name") + private String boxProductName; + + /** + * 单个箱子重量(kg) + */ + @TableField(value = "box_product_weight") + private BigDecimal boxProductWeight; + + /** + * 箱子数量 + */ + @TableField(value = "box_count") + private Integer boxCount; + + /** + * 成本单价(元/个) + */ + @TableField(value = "box_cost_price") + private BigDecimal boxCostPrice; + + /** + * 销售单价(元/个) + */ + @TableField(value = "box_sale_price") + private BigDecimal boxSalePrice; + + /** + * 箱子类型:1_本次使用;2_额外运输;3_已使用额外运输;4_车上剩余; + */ + @TableField(value = "box_type") + private OrderPackageBoxTypeEnum boxType; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderRebateDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderRebateDO.java new file mode 100644 index 0000000..7fc54c8 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderRebateDO.java @@ -0,0 +1,75 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.api.biz.dto.enums.OrderRebateCalcMethodEnum; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * 采购单返点客户表 + */ +@Data +@TableName("order_rebate") +@EqualsAndHashCode(callSuper = true) +public class OrderRebateDO extends BaseDO { + + /** + * 记录ID + */ + @TableId(value = "order_rebate_id", type = IdType.NONE) + private Long orderRebateId; + + /** + * 订单ID + */ + @TableField("order_id") + private Long orderId; + + /** + * 客户ID + */ + @TableField("customer_id") + private Long customerId; + + /** + * 经销商ID + */ + @TableField("dealer_id") + private Long dealerId; + + /** + * 客户名称 + */ + @TableField("name") + private String name; + + /** + * 返点计算方式:1_按净重计算;2_固定金额; + */ + @TableField("calc_method") + private OrderRebateCalcMethodEnum calcMethod; + + /** + * 返点净重 + */ + @TableField("net_weight") + private BigDecimal netWeight; + + /** + * 返点单价 + */ + @TableField("unit_price") + private BigDecimal unitPrice; + + /** + * 返点金额 + */ + @TableField("amount") + private BigDecimal amount; +} diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderSupplierDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderSupplierDO.java new file mode 100644 index 0000000..fde145d --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderSupplierDO.java @@ -0,0 +1,164 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "order_supplier", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +public class OrderSupplierDO extends BaseDO { + + /** + * 记录ID + */ + @TableId(value = "order_supplier_id", type = IdType.ASSIGN_ID) + private Long orderSupplierId; + + /** + * 订单ID + */ + @TableField(value = "order_id") + private Long orderId; + + /** + * 供应商ID + */ + @TableField(value = "supplier_id") + private Long supplierId; + + /** + * 供应商姓名 + */ + @TableField(value = "name") + private String name; + + /** + * 身份证号 + */ + @TableField(value = "id_card") + private String idCard; + + /** + * 银行卡号 + */ + @TableField(value = "bank_card") + private String bankCard; + + /** + * 手机号 + */ + @TableField(value = "phone") + private String phone; + + /** + * 微信二维码 + */ + @TableField(value = "wechat_qr") + private String wechatQr; + + /** + * 是否最后一家 + */ + @TableField(value = "is_last") + private Boolean isLast; + + /** + * 空磅是否包含纸箱 + */ + @TableField(value = "is_paper") + private Boolean isPaper; + + /** + * 空车重量(kg) + */ + @TableField(value = "empty_weight") + private BigDecimal emptyWeight; + + /** + * 总重量(kg) + */ + @TableField(value = "total_weight") + private BigDecimal totalWeight; + + /** + * 毛重(kg) + */ + @TableField(value = "gross_weight") + private BigDecimal grossWeight; + + /** + * 净重(kg) + */ + @TableField(value = "net_weight") + private BigDecimal netWeight; + + /** + * 采购单价(元/斤) + */ + @TableField(value = "purchase_price") + private BigDecimal purchasePrice; + + /** + * 销售单价(元/斤) + */ + @TableField(value = "sale_price") + private BigDecimal salePrice; + + /** + * 发票金额 + */ + @TableField(value = "invoice_amount") + private BigDecimal invoiceAmount; + + /** + * 空车照片 + */ + @TableField(value = "empty_weight_img") + private String emptyWeightImg; + + /** + * 满载照片 + */ + @TableField(value = "total_weight_img") + private String totalWeightImg; + + /** + * 是否上传票证 + */ + @TableField(value = "invoice_upload") + private Boolean invoiceUpload; + + /** + * 发票 + */ + @TableField(value = "invoice_img", typeHandler = JacksonTypeHandler.class) + private List invoiceImg; + + /** + * 是否上传合同 + */ + @TableField(value = "contract_upload") + private Boolean contractUpload; + + /** + * 合同 + */ + @TableField(value = "contract_img", typeHandler = JacksonTypeHandler.class) + private List contractImg; + + @TableField(exist = false) + private List orderPackageDOList; +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderVehicleDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderVehicleDO.java new file mode 100644 index 0000000..8ca23df --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/OrderVehicleDO.java @@ -0,0 +1,114 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.api.biz.dto.enums.OrderVehiclePriceTypeEnum; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "order_vehicle") +@EqualsAndHashCode(callSuper = true) +public class OrderVehicleDO extends BaseDO { + + /** + * 记录ID + */ + @TableId(value = "vehicle_id", type = IdType.ASSIGN_ID) + private Long vehicleId; + + /** + * 订单ID + */ + @TableField(value = "order_id") + private Long orderId; + + /** + * 车货编码 + */ + @TableField(value = "vehicle_no") + private String vehicleNo; + + /** + * 车牌号 + */ + @TableField(value = "plate") + private String plate; + + /** + * 司机姓名 + */ + @TableField(value = "driver") + private String driver; + + /** + * 司机电话 + */ + @TableField(value = "phone") + private String phone; + + /** + * 出发地 + */ + @TableField(value = "origin") + private String origin; + + /** + * 目的地 + */ + @TableField(value = "destination") + private String destination; + + /** + * 运费类型:1-主运费;2-短驳费; + */ + @TableField(value = "price_type") + private OrderVehiclePriceTypeEnum priceType; + + /** + * 运输价格 + */ + @TableField(value = "price") + private BigDecimal price; + + /** + * 经销商ID + */ + @TableField(value = "dealer_id") + private Long dealerId; + + /** + * 经销商名称 + */ + @TableField(value = "dealer_name") + private String dealerName; + + /** + * 是否开启草帘 + */ + @TableField(value = "open_straw_curtain") + private Boolean openStrawCurtain; + + /** + * 草帘费用 + */ + @TableField(value = "straw_curtain_price") + private BigDecimal strawCurtainPrice; + + /** + * 采购日期 + */ + @TableField(value = "delivery_time") + private LocalDate deliveryTime; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/PurchaseOrderDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/PurchaseOrderDO.java new file mode 100644 index 0000000..b98b1ec --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/PurchaseOrderDO.java @@ -0,0 +1,150 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.api.biz.dto.enums.PurchaseOrderPricingMethodEnum; +import com.xunhong.erp.turbo.api.biz.dto.enums.PurchaseOrderStateEnum; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "purchase_order") +@EqualsAndHashCode(callSuper = true) +public class PurchaseOrderDO extends BaseDO { + + /** + * 订单ID + */ + @TableId(value = "order_id", type = IdType.ASSIGN_ID) + private Long orderId; + + /** + * 订单编号 + */ + @TableField(value = "order_sn") + private String orderSn; + + /** + * 步骤标识 + */ + @TableField(value = "active") + private Integer active; + + /** + * 产地负责人 + */ + @TableField(value = "origin_principal") + private String originPrincipal; + + /** + * 报价方式:1_按毛重报价;2_按净重报价; + */ + @TableField(value = "pricing_method") + private PurchaseOrderPricingMethodEnum pricingMethod; + + /** + * 销售金额 + */ + @TableField(value = "sale_amount") + private BigDecimal saleAmount; + + /** + * 包装费 + */ + @TableField(value = "package_fee") + private BigDecimal packageFee; + + /** + * 平均单价(元/斤) + */ + @TableField(value = "avg_unit_price") + private BigDecimal avgUnitPrice; + + /** + * 是否返点 + */ + @TableField(value = "rebate") + private Boolean rebate; + + /** + * 毛重(斤) + */ + @TableField(value = "gross_weight") + private BigDecimal grossWeight; + + /** + * 净重(斤) + */ + @TableField(value = "net_weight") + private BigDecimal netWeight; + + /** + * 成本合计 + */ + @TableField(value = "total_cost") + private BigDecimal totalCost; + + /** + * 运费 + */ + @TableField(value = "freight_charge") + private BigDecimal freightCharge; + + /** + * 瓜农数量 + */ + @TableField(value = "supplier_count") + private Integer supplierCount; + + /** + * 订单状态: 0-草稿, 1-待审核, 2-待老板审核, 3-已发货(待付款), 4-已付款, 5-已完结 + */ + @TableField(value = "state") + private PurchaseOrderStateEnum state; + + /** + * 备注 + */ + @TableField(value = "remark") + private String remark; + + /** + * 创建人ID + */ + @TableField(value = "created_by") + private Long createdBy; + + /** + * 创建人姓名 + */ + @TableField(value = "created_by_name") + private String createdByName; + + @TableField(exist = false) + private OrderVehicleDO orderVehicleDO; + + @TableField(exist = false) + private OrderDealerDO orderDealerDO; + + @TableField(exist = false) + private OrderCompanyDO orderCompanyDO; + + @TableField(exist = false) + private OrderRebateDO orderRebateDO; + + @TableField(exist = false) + private List orderSupplierDOList; + + @TableField(exist = false) + private List orderCostDOList; +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/ShipOrderDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/ShipOrderDO.java new file mode 100644 index 0000000..ea9dc4f --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/ShipOrderDO.java @@ -0,0 +1,230 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.api.biz.dto.enums.ShipOrderStateEnum; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "ship_order") +@EqualsAndHashCode(callSuper = true) +public class ShipOrderDO extends BaseDO { + + /** + * 发货单ID + */ + @TableId(value = "ship_order_id", type = IdType.ASSIGN_ID) + private Long shipOrderId; + + /** + * 采购单ID + */ + @TableField(value = "purchase_order_id") + private Long purchaseOrderId; + + /** + * 发货单编号 + */ + @TableField(value = "order_sn") + private String orderSn; + + /** + * 经销商ID + */ + @TableField(value = "dealer_id") + private Long dealerId; + + /** + * 经销商名称 + */ + @TableField(value = "dealer_name") + private String dealerName; + + /** + * 仓库ID + */ + @TableField(value = "warehouse_id") + private Long warehouseId; + + /** + * 仓库名称 + */ + @TableField(value = "warehouse_name") + private String warehouseName; + + /** + * 车次号 + */ + @TableField(value = "vehicle_no") + private String vehicleNo; + + /** + * 发货地址 + */ + @TableField(value = "shipping_address") + private String shippingAddress; + + /** + * 收货地址 + */ + @TableField(value = "receiving_address") + private String receivingAddress; + + /** + * 发货日期 + */ + @TableField(value = "shipping_date") + private LocalDate shippingDate; + + /** + * 预计到仓时间 + */ + @TableField(value = "estimated_arrival_date") + private LocalDate estimatedArrivalDate; + + /** + * 西瓜品级 + */ + @TableField(value = "watermelon_grade") + private String watermelonGrade; + + /** + * 司机姓名 + */ + @TableField(value = "driver_name") + private String driverName; + + + /** + * 司机手机号码 + */ + @TableField(value = "driver_phone") + private String driverPhone; + + /** + * 车牌号码 + */ + @TableField(value = "license_plate") + private String licensePlate; + + /** + * 运费欠款(元) + */ + @TableField(value = "freight_debt") + private BigDecimal freightDebt; + + /** + * 草帘欠款(元) + */ + @TableField(value = "straw_mat_debt") + private BigDecimal strawMatDebt; + + /** + * 商标费(元) + */ + @TableField(value = "trademark_fee") + private BigDecimal trademarkFee; + + /** + * 人工费(元) + */ + @TableField(value = "labor_fee") + private BigDecimal laborFee; + + /** + * 纸箱费(元) + */ + @TableField(value = "carton_fee") + private BigDecimal cartonFee; + + /** + * 打码费(元) + */ + @TableField(value = "coding_fee") + private BigDecimal codingFee; + + /** + * 计提费(元) + */ + @TableField(value = "provision_fee") + private BigDecimal provisionFee; + + /** + * 合计金额(元) + */ + @TableField(value = "total_amount") + private BigDecimal totalAmount; + + /** + * 瓜农姓名逗号隔开 + */ + @TableField(value = "farmer_info") + private String farmerInfo; + + /** + * 发货单状态:1_待回款;2_部分回款;3_已回款;4_拒收完结;5_已完结; + */ + @TableField(value = "state") + private ShipOrderStateEnum state; + + /** + * 发货单据 + */ + @TableField(value = "shop_document") + private String shipDocument; + + /** + * 采购底单 + */ + @TableField(value = "purchase_document") + private String purchaseDocument; + + /** + * 成本单据 + */ + @TableField(value = "cost_document") + private String costDocument; + + /** + * 备注 + */ + @TableField(value = "remark") + private String remark; + + /** + * 创建人ID + */ + @TableField(value = "created_by") + private Long createdBy; + + /** + * 创建人姓名 + */ + @TableField(value = "created_by_name") + private String createdByName; + + /** + * 发货单包材 + */ + @TableField(exist = false) + private List shipOrderPackageDOList; + + /** + * 发货单明细 + */ + @TableField(exist = false) + private List shipOrderItemDOList; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/ShipOrderItemDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/ShipOrderItemDO.java new file mode 100644 index 0000000..3f3c0e1 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/ShipOrderItemDO.java @@ -0,0 +1,70 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "ship_order_item") +@EqualsAndHashCode(callSuper = true) +public class ShipOrderItemDO extends BaseDO { + + /** + * 发货单子项ID + */ + @TableId(value = "item_id", type = IdType.ASSIGN_ID) + private Long itemId; + + /** + * 发货单ID + */ + @TableField(value = "ship_order_id") + private Long shipOrderId; + + /** + * 毛重(斤) + */ + @TableField(value = "gross_weight") + private BigDecimal grossWeight; + + /** + * 箱重(斤) + */ + @TableField(value = "box_weight") + private BigDecimal boxWeight; + + /** + * 净重(斤) + */ + @TableField(value = "net_weight") + private BigDecimal netWeight; + + /** + * 单价(元) + */ + @TableField(value = "unit_price") + private BigDecimal unitPrice; + + /** + * 总金额(元) + */ + @TableField(value = "total_amount") + private BigDecimal totalAmount; + + /** + * 西瓜品级 + */ + @TableField(value = "watermelon_grade") + private String watermelonGrade; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/ShipOrderPackageDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/ShipOrderPackageDO.java new file mode 100644 index 0000000..10b15b8 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/ShipOrderPackageDO.java @@ -0,0 +1,76 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "ship_order_package") +@EqualsAndHashCode(callSuper = true) +public class ShipOrderPackageDO extends BaseDO { + + /** + * 发货单子项ID + */ + @TableId(value = "order_package_id", type = IdType.ASSIGN_ID) + private Long orderPackageId; + + /** + * 发货单ID + */ + @TableField(value = "ship_order_id") + private Long shipOrderId; + + /** + * 箱型 + */ + @TableField(value = "box_category") + private String boxCategory; + + /** + * 箱号 + */ + @TableField(value = "box_product") + private String boxProduct; + + /** + * 数量 + */ + @TableField(value = "quantity") + private Integer quantity; + + /** + * 单价(元) + */ + @TableField(value = "unit_price") + private BigDecimal unitPrice; + + /** + * 金额(元) + */ + @TableField(value = "item_amount") + private BigDecimal itemAmount; + + /** + * 单重(斤) + */ + @TableField(value = "single_weight") + private BigDecimal singleWeight; + + /** + * 总重(斤) + */ + @TableField(value = "total_weight") + private BigDecimal totalWeight; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/SupplierDO.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/SupplierDO.java new file mode 100644 index 0000000..bea424f --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/entity/SupplierDO.java @@ -0,0 +1,68 @@ +package com.xunhong.erp.turbo.biz.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "supplier") +@EqualsAndHashCode(callSuper = true) +public class SupplierDO extends BaseDO { + + /** + * 供应商ID + */ + @TableId(value = "supplier_id", type = IdType.ASSIGN_ID) + private Long supplierId; + + /** + * 姓名 + */ + @TableField(value = "name") + private String name; + + /** + * 身份证号 + */ + @TableField(value = "id_card") + private String idCard; + + /** + * 手机号 + */ + @TableField(value = "phone") + private String phone; + + /** + * 银行卡号 + */ + @TableField(value = "bank_card") + private String bankCard; + + /** + * 微信收款码URL + */ + @TableField(value = "wechat_qr") + private String wechatQr; + + /** + * 备注 + */ + @TableField(value = "remark") + private String remark; + + /** + * 状态:1_启用;0_禁用; + */ + @TableField(value = "status") + private Boolean status; + +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/BoxBrandGatewayImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/BoxBrandGatewayImpl.java new file mode 100644 index 0000000..8630663 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/BoxBrandGatewayImpl.java @@ -0,0 +1,114 @@ +package com.xunhong.erp.turbo.biz.infrastructure.gateway; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxBrandListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxBrandPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxBrandShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.BoxBrand; +import com.xunhong.erp.turbo.biz.domain.gateway.BoxBrandGateway; +import com.xunhong.erp.turbo.biz.infrastructure.convert.BoxBrandConvert; +import com.xunhong.erp.turbo.biz.infrastructure.entity.BoxBrandDO; +import com.xunhong.erp.turbo.biz.infrastructure.entity.BoxProductDO; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.BoxBrandMapper; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.BoxProductMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Objects; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class BoxBrandGatewayImpl implements BoxBrandGateway { + private final BoxBrandMapper boxBrandMapper; + private final BoxBrandConvert boxBrandConvert; + + private final BoxProductMapper boxProductMapper; + + @Override + public BoxBrand save(BoxBrandCreateCmd boxBrandCreateCmd) { + BoxBrandDO boxBrandDO = boxBrandConvert.toBoxBrandDO(boxBrandCreateCmd); + boxBrandMapper.insert(boxBrandDO); + + return boxBrandConvert.toBoxBrand(boxBrandDO); + } + + @Override + public IPage page(BoxBrandPageQry boxBrandPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(BoxBrandDO.class); + queryWrapper.orderByDesc(BoxBrandDO::getCreatedAt); + + IPage page = new Page<>(boxBrandPageQry.getPageIndex(), boxBrandPageQry.getPageSize()); + page = boxBrandMapper.selectPage(page, queryWrapper); + + return page.convert(boxBrandConvert::toBoxBrand); + } + + @Override + public List list(BoxBrandListQry boxBrandListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(BoxBrandDO.class); + queryWrapper.eq(Objects.nonNull(boxBrandListQry.getStatus()), BoxBrandDO::getStatus, boxBrandListQry.getStatus()); + queryWrapper.orderByDesc(BoxBrandDO::getCreatedAt); + List boxBrandDOList = boxBrandMapper.selectList(queryWrapper); + + if (Objects.nonNull(boxBrandListQry.getWithProduct()) && boxBrandListQry.getWithProduct()) { + List brandIdList = boxBrandDOList.stream().map(BoxBrandDO::getBrandId).toList(); + if (CollUtil.isNotEmpty(brandIdList)) { + LambdaQueryWrapper queryWrapper1 = Wrappers.lambdaQuery(BoxProductDO.class); + queryWrapper1.in(BoxProductDO::getBrandId, brandIdList); + queryWrapper1.orderByDesc(BoxProductDO::getCreatedAt); + List boxProductDOList = boxProductMapper.selectList(queryWrapper1); + boxBrandDOList.forEach(boxBrandDO -> { + boxBrandDO.setBoxProductDOList(boxProductDOList.stream().filter(boxProductDO -> boxProductDO.getBrandId().equals(boxBrandDO.getBrandId())).toList()); + }); + } + } + + return boxBrandDOList.stream().map(boxBrandConvert::toBoxBrand).toList(); + } + + @Override + public BoxBrand update(BoxBrandUpdateCmd boxBrandUpdateCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(BoxBrandDO.class); + queryWrapper.eq(BoxBrandDO::getBrandId, boxBrandUpdateCmd.getBrandId()); + queryWrapper.last("limit 1"); + + BoxBrandDO boxBrandDO = boxBrandMapper.selectOne(queryWrapper); + + boxBrandConvert.toBoxBrandDO(boxBrandDO, boxBrandUpdateCmd); + boxBrandMapper.updateById(boxBrandDO); + + return boxBrandConvert.toBoxBrand(boxBrandDO); + } + + @Override + public BoxBrand show(BoxBrandShowQry boxBrandShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(BoxBrandDO.class); + queryWrapper.eq(BoxBrandDO::getBrandId, boxBrandShowQry.getBrandId()); + queryWrapper.last("limit 1"); + + BoxBrandDO boxBrandDO = boxBrandMapper.selectOne(queryWrapper); + return boxBrandConvert.toBoxBrand(boxBrandDO); + } + + @Override + public void destroy(BoxBrandDestroyCmd boxBrandDestroyCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(BoxBrandDO.class); + queryWrapper.eq(BoxBrandDO::getBrandId, boxBrandDestroyCmd.getBrandId()); + queryWrapper.last("limit 1"); + + BoxBrandDO boxBrandDO = boxBrandMapper.selectOne(queryWrapper); + boxBrandDO.deleteById(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/BoxProductGatewayImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/BoxProductGatewayImpl.java new file mode 100644 index 0000000..15ad3de --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/BoxProductGatewayImpl.java @@ -0,0 +1,100 @@ +package com.xunhong.erp.turbo.biz.infrastructure.gateway; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxProductListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxProductPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxProductShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.BoxProduct; +import com.xunhong.erp.turbo.biz.domain.gateway.BoxProductGateway; +import com.xunhong.erp.turbo.biz.infrastructure.convert.BoxProductConvert; +import com.xunhong.erp.turbo.biz.infrastructure.entity.BoxProductDO; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.BoxProductMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Objects; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class BoxProductGatewayImpl implements BoxProductGateway { + private final BoxProductMapper boxProductMapper; + private final BoxProductConvert boxProductConvert; + + @Override + public BoxProduct save(BoxProductCreateCmd boxProductCreateCmd) { + BoxProductDO boxProductDO = boxProductConvert.toBoxProductDO(boxProductCreateCmd); + boxProductMapper.insert(boxProductDO); + + return boxProductConvert.toBoxProduct(boxProductDO); + } + + @Override + public IPage page(BoxProductPageQry boxProductPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(BoxProductDO.class); + queryWrapper.like(StrUtil.isNotBlank(boxProductPageQry.getName()), BoxProductDO::getName, boxProductPageQry.getName()); + queryWrapper.like(StrUtil.isNotBlank(boxProductPageQry.getRemark()), BoxProductDO::getRemark, boxProductPageQry.getRemark()); + queryWrapper.eq(Objects.nonNull(boxProductPageQry.getStatus()), BoxProductDO::getStatus, boxProductPageQry.getStatus()); + queryWrapper.eq(Objects.nonNull(boxProductPageQry.getBrandId()), BoxProductDO::getBrandId, boxProductPageQry.getBrandId()); + queryWrapper.eq(Objects.nonNull(boxProductPageQry.getSpecType()), BoxProductDO::getSpecType, boxProductPageQry.getSpecType()); + + queryWrapper.orderByDesc(BoxProductDO::getCreatedAt); + + IPage page = new Page<>(boxProductPageQry.getPageIndex(), boxProductPageQry.getPageSize()); + page = boxProductMapper.selectPage(page, queryWrapper); + + return page.convert(boxProductConvert::toBoxProduct); + } + + @Override + public List list(BoxProductListQry boxProductListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(BoxProductDO.class); + List boxProductDOList = boxProductMapper.selectList(queryWrapper); + return boxProductDOList.stream().map(boxProductConvert::toBoxProduct).toList(); + } + + @Override + public BoxProduct update(BoxProductUpdateCmd boxProductUpdateCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(BoxProductDO.class); + queryWrapper.eq(BoxProductDO::getProductId, boxProductUpdateCmd.getProductId()); + queryWrapper.last("limit 1"); + + BoxProductDO boxProductDO = boxProductMapper.selectOne(queryWrapper); + + boxProductConvert.toBoxProductDO(boxProductDO, boxProductUpdateCmd); + boxProductMapper.updateById(boxProductDO); + + return boxProductConvert.toBoxProduct(boxProductDO); + } + + @Override + public BoxProduct show(BoxProductShowQry boxProductShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(BoxProductDO.class); + queryWrapper.eq(BoxProductDO::getProductId, boxProductShowQry.getProductId()); + queryWrapper.last("limit 1"); + + BoxProductDO boxProductDO = boxProductMapper.selectOne(queryWrapper); + return boxProductConvert.toBoxProduct(boxProductDO); + } + + @Override + public void destroy(BoxProductDestroyCmd boxProductDestroyCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(BoxProductDO.class); + queryWrapper.eq(BoxProductDO::getProductId, boxProductDestroyCmd.getProductId()); + queryWrapper.last("limit 1"); + + BoxProductDO boxProductDO = boxProductMapper.selectOne(queryWrapper); + boxProductDO.deleteById(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/CompanyGatewayImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/CompanyGatewayImpl.java new file mode 100644 index 0000000..d54dd9b --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/CompanyGatewayImpl.java @@ -0,0 +1,99 @@ +package com.xunhong.erp.turbo.biz.infrastructure.gateway; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.Company; +import com.xunhong.erp.turbo.biz.domain.gateway.CompanyGateway; +import com.xunhong.erp.turbo.biz.infrastructure.convert.CompanyConvert; +import com.xunhong.erp.turbo.biz.infrastructure.entity.CompanyDO; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.CompanyMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Objects; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class CompanyGatewayImpl implements CompanyGateway { + private final CompanyMapper companyMapper; + private final CompanyConvert companyConvert; + + @Override + public Company save(CompanyCreateCmd companyCreateCmd) { + CompanyDO companyDO = companyConvert.toCompanyDO(companyCreateCmd); + companyMapper.insert(companyDO); + + return companyConvert.toCompany(companyDO); + } + + @Override + public IPage page(CompanyPageQry companyPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CompanyDO.class); + queryWrapper.like(StrUtil.isNotBlank(companyPageQry.getName()), CompanyDO::getName, companyPageQry.getName()); + queryWrapper.like(StrUtil.isNotBlank(companyPageQry.getTaxNumber()), CompanyDO::getTaxNumber, companyPageQry.getTaxNumber()); + queryWrapper.like(StrUtil.isNotBlank(companyPageQry.getRemark()), CompanyDO::getRemark, companyPageQry.getRemark()); + queryWrapper.eq(Objects.nonNull(companyPageQry.getStatus()), CompanyDO::getStatus, companyPageQry.getStatus()); + + queryWrapper.orderByDesc(CompanyDO::getCreatedAt); + + IPage page = new Page<>(companyPageQry.getPageIndex(), companyPageQry.getPageSize()); + page = companyMapper.selectPage(page, queryWrapper); + + return page.convert(companyConvert::toCompany); + } + + @Override + public List list(CompanyListQry companyListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CompanyDO.class); + List companyDOList = companyMapper.selectList(queryWrapper); + return companyDOList.stream().map(companyConvert::toCompany).toList(); + } + + @Override + public Company update(CompanyUpdateCmd companyUpdateCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CompanyDO.class); + queryWrapper.eq(CompanyDO::getCompanyId, companyUpdateCmd.getCompanyId()); + queryWrapper.last("limit 1"); + + CompanyDO companyDO = companyMapper.selectOne(queryWrapper); + + companyConvert.toCompanyDO(companyDO, companyUpdateCmd); + companyMapper.updateById(companyDO); + + return companyConvert.toCompany(companyDO); + } + + @Override + public Company show(CompanyShowQry companyShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CompanyDO.class); + queryWrapper.eq(CompanyDO::getCompanyId, companyShowQry.getCompanyId()); + queryWrapper.last("limit 1"); + + CompanyDO companyDO = companyMapper.selectOne(queryWrapper); + return companyConvert.toCompany(companyDO); + } + + @Override + public void destroy(CompanyDestroyCmd companyDestroyCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CompanyDO.class); + queryWrapper.eq(CompanyDO::getCompanyId, companyDestroyCmd.getCompanyId()); + queryWrapper.last("limit 1"); + + CompanyDO companyDO = companyMapper.selectOne(queryWrapper); + companyDO.deleteById(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/CompanyPaymentAccountGatewayImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/CompanyPaymentAccountGatewayImpl.java new file mode 100644 index 0000000..1b45d80 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/CompanyPaymentAccountGatewayImpl.java @@ -0,0 +1,121 @@ +package com.xunhong.erp.turbo.biz.infrastructure.gateway; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPaymentAccountListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPaymentAccountPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPaymentAccountShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.CompanyPaymentAccount; +import com.xunhong.erp.turbo.biz.domain.gateway.CompanyPaymentAccountGateway; +import com.xunhong.erp.turbo.biz.infrastructure.convert.CompanyPaymentAccountConvert; +import com.xunhong.erp.turbo.biz.infrastructure.entity.CompanyDO; +import com.xunhong.erp.turbo.biz.infrastructure.entity.CompanyPaymentAccountDO; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.CompanyMapper; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.CompanyPaymentAccountMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class CompanyPaymentAccountGatewayImpl implements CompanyPaymentAccountGateway { + private final CompanyPaymentAccountMapper companyPaymentAccountMapper; + private final CompanyPaymentAccountConvert companyPaymentAccountConvert; + + private final CompanyMapper companyMapper; + + @Override + public CompanyPaymentAccount save(CompanyPaymentAccountCreateCmd companyPaymentAccountCreateCmd) { + CompanyPaymentAccountDO companyPaymentAccountDO = companyPaymentAccountConvert.toCompanyPaymentAccountDO(companyPaymentAccountCreateCmd); + companyPaymentAccountMapper.insert(companyPaymentAccountDO); + + return companyPaymentAccountConvert.toCompanyPaymentAccount(companyPaymentAccountDO); + } + + @Override + public IPage page(CompanyPaymentAccountPageQry companyPaymentAccountPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CompanyPaymentAccountDO.class); + queryWrapper.like(StrUtil.isNotBlank(companyPaymentAccountPageQry.getAccountName()), CompanyPaymentAccountDO::getAccountName, companyPaymentAccountPageQry.getAccountName()); + queryWrapper.eq(Objects.nonNull(companyPaymentAccountPageQry.getAccountCategory()), CompanyPaymentAccountDO::getAccountCategory, companyPaymentAccountPageQry.getAccountCategory()); + queryWrapper.eq(Objects.nonNull(companyPaymentAccountPageQry.getCompanyId()), CompanyPaymentAccountDO::getCompanyId, companyPaymentAccountPageQry.getCompanyId()); + queryWrapper.orderByDesc(CompanyPaymentAccountDO::getCreatedAt); + + IPage page = new Page<>(companyPaymentAccountPageQry.getPageIndex(), companyPaymentAccountPageQry.getPageSize()); + page = companyPaymentAccountMapper.selectPage(page, queryWrapper); + + return page.convert(companyPaymentAccountConvert::toCompanyPaymentAccount); + } + + @Override + public List list(CompanyPaymentAccountListQry companyPaymentAccountListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CompanyPaymentAccountDO.class); + queryWrapper.like(StrUtil.isNotBlank(companyPaymentAccountListQry.getAccountName()), CompanyPaymentAccountDO::getAccountName, companyPaymentAccountListQry.getAccountName()); + queryWrapper.eq(Objects.nonNull(companyPaymentAccountListQry.getAccountCategory()), CompanyPaymentAccountDO::getAccountCategory, companyPaymentAccountListQry.getAccountCategory()); + queryWrapper.eq(Objects.nonNull(companyPaymentAccountListQry.getCompanyId()), CompanyPaymentAccountDO::getCompanyId, companyPaymentAccountListQry.getCompanyId()); + queryWrapper.eq(Objects.nonNull(companyPaymentAccountListQry.getStatus()), CompanyPaymentAccountDO::getStatus, companyPaymentAccountListQry.getStatus()); + queryWrapper.orderByDesc(CompanyPaymentAccountDO::getCreatedAt); + List companyPaymentAccountDOList = companyPaymentAccountMapper.selectList(queryWrapper); + + List companyIdList = companyPaymentAccountDOList.stream().map(CompanyPaymentAccountDO::getCompanyId).toList(); + + if (CollUtil.isNotEmpty(companyIdList)) { + LambdaQueryWrapper queryWrapper1 = Wrappers.lambdaQuery(CompanyDO.class); + queryWrapper1.in(CompanyDO::getCompanyId, companyIdList); + List companyDOList = companyMapper.selectList(queryWrapper1); + Map companyDOMap = companyDOList.stream().collect(Collectors.toMap(CompanyDO::getCompanyId, Function.identity())); + companyPaymentAccountDOList.forEach(companyPaymentAccountDO -> companyPaymentAccountDO.setCompanyDO(companyDOMap.get(companyPaymentAccountDO.getCompanyId()))); + } + + return companyPaymentAccountDOList.stream().map(companyPaymentAccountConvert::toCompanyPaymentAccount).toList(); + } + + @Override + public CompanyPaymentAccount update(CompanyPaymentAccountUpdateCmd companyPaymentAccountUpdateCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CompanyPaymentAccountDO.class); + queryWrapper.eq(CompanyPaymentAccountDO::getAccountId, companyPaymentAccountUpdateCmd.getAccountId()); + queryWrapper.last("limit 1"); + + CompanyPaymentAccountDO companyPaymentAccountDO = companyPaymentAccountMapper.selectOne(queryWrapper); + + companyPaymentAccountConvert.toCompanyPaymentAccountDO(companyPaymentAccountDO, companyPaymentAccountUpdateCmd); + companyPaymentAccountMapper.updateById(companyPaymentAccountDO); + + return companyPaymentAccountConvert.toCompanyPaymentAccount(companyPaymentAccountDO); + } + + @Override + public CompanyPaymentAccount show(CompanyPaymentAccountShowQry companyPaymentAccountShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CompanyPaymentAccountDO.class); + queryWrapper.eq(CompanyPaymentAccountDO::getAccountId, companyPaymentAccountShowQry.getAccountId()); + queryWrapper.last("limit 1"); + + CompanyPaymentAccountDO companyPaymentAccountDO = companyPaymentAccountMapper.selectOne(queryWrapper); + return companyPaymentAccountConvert.toCompanyPaymentAccount(companyPaymentAccountDO); + } + + @Override + public void destroy(CompanyPaymentAccountDestroyCmd companyPaymentAccountDestroyCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CompanyPaymentAccountDO.class); + queryWrapper.eq(CompanyPaymentAccountDO::getAccountId, companyPaymentAccountDestroyCmd.getAccountId()); + queryWrapper.last("limit 1"); + + CompanyPaymentAccountDO companyPaymentAccountDO = companyPaymentAccountMapper.selectOne(queryWrapper); + companyPaymentAccountDO.deleteById(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/CostItemGatewayImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/CostItemGatewayImpl.java new file mode 100644 index 0000000..3472992 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/CostItemGatewayImpl.java @@ -0,0 +1,101 @@ +package com.xunhong.erp.turbo.biz.infrastructure.gateway; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.CostItemListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CostItemPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CostItemShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.CostItem; +import com.xunhong.erp.turbo.biz.domain.gateway.CostItemGateway; +import com.xunhong.erp.turbo.biz.infrastructure.convert.CostItemConvert; +import com.xunhong.erp.turbo.biz.infrastructure.entity.CostItemDO; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.CostItemMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Objects; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class CostItemGatewayImpl implements CostItemGateway { + private final CostItemMapper costItemMapper; + private final CostItemConvert costItemConvert; + + @Override + public CostItem save(CostItemCreateCmd costItemCreateCmd) { + CostItemDO costItemDO = costItemConvert.toCostItemDO(costItemCreateCmd); + costItemMapper.insert(costItemDO); + + return costItemConvert.toCostItem(costItemDO); + } + + @Override + public IPage page(CostItemPageQry costItemPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CostItemDO.class); + queryWrapper.like(StrUtil.isNotBlank(costItemPageQry.getName()), CostItemDO::getName, costItemPageQry.getName()); + queryWrapper.like(StrUtil.isNotBlank(costItemPageQry.getRemark()), CostItemDO::getRemark, costItemPageQry.getRemark()); + queryWrapper.eq(Objects.nonNull(costItemPageQry.getStatus()), CostItemDO::getStatus, costItemPageQry.getStatus()); + queryWrapper.eq(Objects.nonNull(costItemPageQry.getCostType()), CostItemDO::getCostType, costItemPageQry.getCostType()); + queryWrapper.orderByDesc(CostItemDO::getCreatedAt); + + IPage page = new Page<>(costItemPageQry.getPageIndex(), costItemPageQry.getPageSize()); + page = costItemMapper.selectPage(page, queryWrapper); + + return page.convert(costItemConvert::toCostItem); + } + + @Override + public List list(CostItemListQry costItemListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CostItemDO.class); + queryWrapper.eq(Objects.nonNull(costItemListQry.getShowInEntry()), CostItemDO::getStatus, costItemListQry.getShowInEntry()); + queryWrapper.eq(Objects.nonNull(costItemListQry.getStatus()), CostItemDO::getStatus, costItemListQry.getStatus()); + queryWrapper.eq(Objects.nonNull(costItemListQry.getCostType()), CostItemDO::getCostType, costItemListQry.getCostType()); + List costItemDOList = costItemMapper.selectList(queryWrapper); + return costItemDOList.stream().map(costItemConvert::toCostItem).toList(); + } + + @Override + public CostItem update(CostItemUpdateCmd costItemUpdateCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CostItemDO.class); + queryWrapper.eq(CostItemDO::getItemId, costItemUpdateCmd.getItemId()); + queryWrapper.last("limit 1"); + + CostItemDO costItemDO = costItemMapper.selectOne(queryWrapper); + + costItemConvert.toCostItemDO(costItemDO, costItemUpdateCmd); + costItemMapper.updateById(costItemDO); + + return costItemConvert.toCostItem(costItemDO); + } + + @Override + public CostItem show(CostItemShowQry costItemShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CostItemDO.class); + queryWrapper.eq(CostItemDO::getItemId, costItemShowQry.getItemId()); + queryWrapper.last("limit 1"); + + CostItemDO costItemDO = costItemMapper.selectOne(queryWrapper); + return costItemConvert.toCostItem(costItemDO); + } + + @Override + public void destroy(CostItemDestroyCmd costItemDestroyCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CostItemDO.class); + queryWrapper.eq(CostItemDO::getItemId, costItemDestroyCmd.getItemId()); + queryWrapper.last("limit 1"); + + CostItemDO costItemDO = costItemMapper.selectOne(queryWrapper); + costItemDO.deleteById(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/DealerGatewayImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/DealerGatewayImpl.java new file mode 100644 index 0000000..81b574e --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/DealerGatewayImpl.java @@ -0,0 +1,124 @@ +package com.xunhong.erp.turbo.biz.infrastructure.gateway; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.Dealer; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerGateway; +import com.xunhong.erp.turbo.biz.infrastructure.convert.DealerConvert; +import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerDO; +import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerPaymentAccountDO; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.DealerMapper; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.DealerPaymentAccountMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class DealerGatewayImpl implements DealerGateway { + private final DealerMapper dealerMapper; + private final DealerConvert dealerConvert; + + private final DealerPaymentAccountMapper dealerPaymentAccountMapper; + + @Override + public Dealer save(DealerCreateCmd dealerCreateCmd) { + DealerDO dealerDO = dealerConvert.toDealerDO(dealerCreateCmd); + dealerMapper.insert(dealerDO); + + return dealerConvert.toDealer(dealerDO); + } + + @Override + public IPage page(DealerPageQry dealerPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerDO.class); + queryWrapper.like(StrUtil.isNotBlank(dealerPageQry.getShortName()), DealerDO::getShortName, dealerPageQry.getShortName()); + queryWrapper.like(StrUtil.isNotBlank(dealerPageQry.getFullName()), DealerDO::getFullName, dealerPageQry.getFullName()); + queryWrapper.like(StrUtil.isNotBlank(dealerPageQry.getRemark()), DealerDO::getRemark, dealerPageQry.getRemark()); + queryWrapper.eq(Objects.nonNull(dealerPageQry.getDealerType()), DealerDO::getDealerType, dealerPageQry.getDealerType()); + queryWrapper.eq(Objects.nonNull(dealerPageQry.getStatus()), DealerDO::getStatus, dealerPageQry.getStatus()); + + queryWrapper.orderByDesc(DealerDO::getCreatedAt); + + IPage page = new Page<>(dealerPageQry.getPageIndex(), dealerPageQry.getPageSize()); + page = dealerMapper.selectPage(page, queryWrapper); + + List dealerIdList = page.getRecords().stream().map(DealerDO::getDealerId).toList(); + if (CollUtil.isNotEmpty(dealerIdList)) { + LambdaQueryWrapper queryWrapper1 = Wrappers.lambdaQuery(DealerPaymentAccountDO.class); + queryWrapper1.in(DealerPaymentAccountDO::getDealerId, dealerIdList); + List dealerPaymentAccountDOList = dealerPaymentAccountMapper.selectList(queryWrapper1); + Map> dealerPaymentAccountDOMap = dealerPaymentAccountDOList.stream().collect(Collectors.groupingBy(DealerPaymentAccountDO::getDealerId)); + + page.getRecords().forEach(dealerDO -> { + dealerDO.setDealerPaymentAccountDOList(dealerPaymentAccountDOMap.get(dealerDO.getDealerId())); + }); + } + + return page.convert(dealerConvert::toDealer); + } + + @Override + public List list(DealerListQry dealerListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerDO.class); + queryWrapper.like(StrUtil.isNotBlank(dealerListQry.getShortName()), DealerDO::getShortName, dealerListQry.getShortName()); + queryWrapper.eq(Objects.nonNull(dealerListQry.getStatus()), DealerDO::getStatus, dealerListQry.getStatus()); + queryWrapper.eq(Objects.nonNull(dealerListQry.getDealerType()), DealerDO::getDealerType, dealerListQry.getDealerType()); + + queryWrapper.orderByDesc(DealerDO::getCreatedAt); + List dealerDOList = dealerMapper.selectList(queryWrapper); + return dealerDOList.stream().map(dealerConvert::toDealer).toList(); + } + + @Override + public Dealer update(DealerUpdateCmd dealerUpdateCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerDO.class); + queryWrapper.eq(DealerDO::getDealerId, dealerUpdateCmd.getDealerId()); + queryWrapper.last("limit 1"); + + DealerDO dealerDO = dealerMapper.selectOne(queryWrapper); + + dealerConvert.toDealerDO(dealerDO, dealerUpdateCmd); + dealerMapper.updateById(dealerDO); + + return dealerConvert.toDealer(dealerDO); + } + + @Override + public Dealer show(DealerShowQry dealerShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerDO.class); + queryWrapper.eq(DealerDO::getDealerId, dealerShowQry.getDealerId()); + queryWrapper.last("limit 1"); + + DealerDO dealerDO = dealerMapper.selectOne(queryWrapper); + return dealerConvert.toDealer(dealerDO); + } + + @Override + public void destroy(DealerDestroyCmd dealerDestroyCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerDO.class); + queryWrapper.eq(DealerDO::getDealerId, dealerDestroyCmd.getDealerId()); + queryWrapper.last("limit 1"); + + DealerDO dealerDO = dealerMapper.selectOne(queryWrapper); + dealerDO.deleteById(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/DealerPaymentAccountGatewayImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/DealerPaymentAccountGatewayImpl.java new file mode 100644 index 0000000..86645b9 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/DealerPaymentAccountGatewayImpl.java @@ -0,0 +1,156 @@ +package com.xunhong.erp.turbo.biz.infrastructure.gateway; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPaymentAccountListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPaymentAccountPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPaymentAccountShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.DealerPaymentAccount; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerPaymentAccountGateway; +import com.xunhong.erp.turbo.biz.infrastructure.convert.DealerPaymentAccountConvert; +import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerDO; +import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerPaymentAccountDO; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.DealerMapper; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.DealerPaymentAccountMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class DealerPaymentAccountGatewayImpl implements DealerPaymentAccountGateway { + private final DealerPaymentAccountMapper dealerPaymentAccountMapper; + private final DealerMapper dealerMapper; + private final DealerPaymentAccountConvert dealerPaymentAccountConvert; + + @Override + public DealerPaymentAccount save(DealerPaymentAccountCreateCmd dealerPaymentAccountCreateCmd) { + DealerPaymentAccountDO dealerPaymentAccountDO = dealerPaymentAccountConvert.toDealerPaymentAccountDO(dealerPaymentAccountCreateCmd); + dealerPaymentAccountMapper.insert(dealerPaymentAccountDO); + + return dealerPaymentAccountConvert.toDealerPaymentAccount(dealerPaymentAccountDO); + } + + @Override + public IPage page(DealerPaymentAccountPageQry dealerPaymentAccountPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerPaymentAccountDO.class); + queryWrapper.eq(Objects.nonNull(dealerPaymentAccountPageQry.getDealerId()), DealerPaymentAccountDO::getDealerId, dealerPaymentAccountPageQry.getDealerId()); + queryWrapper.orderByDesc(DealerPaymentAccountDO::getCreatedAt); + + IPage page = new Page<>(dealerPaymentAccountPageQry.getPageIndex(), dealerPaymentAccountPageQry.getPageSize()); + page = dealerPaymentAccountMapper.selectPage(page, queryWrapper); + + List dealerIdList = page.getRecords().stream().map(DealerPaymentAccountDO::getDealerId).toList(); + if (CollUtil.isNotEmpty(dealerIdList)) { + LambdaQueryWrapper queryWrapper1 = Wrappers.lambdaQuery(DealerDO.class); + queryWrapper1.in(DealerDO::getDealerId, dealerIdList); + List dealerDOList = dealerMapper.selectList(queryWrapper1); + Map dealerDOMap = dealerDOList.stream().collect(Collectors.toMap(DealerDO::getDealerId, Function.identity())); + page.getRecords().forEach(dealerPaymentAccountDO -> dealerPaymentAccountDO.setDealerDO(dealerDOMap.get(dealerPaymentAccountDO.getDealerId()))); + } + + return page.convert(dealerPaymentAccountConvert::toDealerPaymentAccount); + } + + @Override + public List list(DealerPaymentAccountListQry dealerPaymentAccountListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerPaymentAccountDO.class); + queryWrapper.eq(Objects.nonNull(dealerPaymentAccountListQry.getDealerId()), DealerPaymentAccountDO::getDealerId, dealerPaymentAccountListQry.getDealerId()); + if (StrUtil.isNotBlank(dealerPaymentAccountListQry.getKeyword())) { + // 先根据经销商名称查询经销商ID列表 + LambdaQueryWrapper dealerQueryWrapper = Wrappers.lambdaQuery(DealerDO.class); + dealerQueryWrapper.like(DealerDO::getFullName, dealerPaymentAccountListQry.getKeyword()) + .or() + .like(DealerDO::getShortName, dealerPaymentAccountListQry.getKeyword()); + List dealerDOList = dealerMapper.selectList(dealerQueryWrapper); + List dealerIds = dealerDOList.stream().map(DealerDO::getDealerId).toList(); + + queryWrapper.and(wrapper -> wrapper + .like(DealerPaymentAccountDO::getCompanyName, dealerPaymentAccountListQry.getKeyword()) + .or() + .like(DealerPaymentAccountDO::getBankAccount, dealerPaymentAccountListQry.getKeyword()) + .or(wrapper2 -> { + if (!dealerIds.isEmpty()) { + wrapper2.in(DealerPaymentAccountDO::getDealerId, dealerIds); + } else { + // 如果没有匹配的经销商ID,则添加一个永远不成立的条件 + wrapper2.eq(DealerPaymentAccountDO::getDealerId, -1L); + } + })); + } + queryWrapper.orderByDesc(DealerPaymentAccountDO::getDealerId); + queryWrapper.orderByDesc(DealerPaymentAccountDO::getCreatedAt); + List dealerPaymentAccountDOList = dealerPaymentAccountMapper.selectList(queryWrapper); + + // 查询相关的经销商信息 + Set dealerIds = dealerPaymentAccountDOList.stream() + .map(DealerPaymentAccountDO::getDealerId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + if (!dealerIds.isEmpty()) { + LambdaQueryWrapper dealerQueryWrapper = Wrappers.lambdaQuery(DealerDO.class); + dealerQueryWrapper.in(DealerDO::getDealerId, dealerIds); + List dealerDOList = dealerMapper.selectList(dealerQueryWrapper); + Map dealerDOMap = dealerDOList.stream().collect(Collectors.toMap(DealerDO::getDealerId, Function.identity())); + dealerPaymentAccountDOList.forEach(dealerPaymentAccountDO -> dealerPaymentAccountDO.setDealerDO(dealerDOMap.get(dealerPaymentAccountDO.getDealerId()))); + } + + return dealerPaymentAccountDOList.stream().map(dealerPaymentAccountConvert::toDealerPaymentAccount).toList(); + } + + @Override + public DealerPaymentAccount update(DealerPaymentAccountUpdateCmd dealerPaymentAccountUpdateCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerPaymentAccountDO.class); + queryWrapper.eq(DealerPaymentAccountDO::getAccountId, dealerPaymentAccountUpdateCmd.getAccountId()); + queryWrapper.last("limit 1"); + + DealerPaymentAccountDO dealerPaymentAccountDO = dealerPaymentAccountMapper.selectOne(queryWrapper); + + dealerPaymentAccountConvert.toDealerPaymentAccountDO(dealerPaymentAccountDO, dealerPaymentAccountUpdateCmd); + dealerPaymentAccountMapper.updateById(dealerPaymentAccountDO); + + return dealerPaymentAccountConvert.toDealerPaymentAccount(dealerPaymentAccountDO); + } + + @Override + public DealerPaymentAccount show(DealerPaymentAccountShowQry dealerPaymentAccountShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerPaymentAccountDO.class); + queryWrapper.eq(DealerPaymentAccountDO::getAccountId, dealerPaymentAccountShowQry.getAccountId()); + queryWrapper.last("limit 1"); + + DealerPaymentAccountDO dealerPaymentAccountDO = dealerPaymentAccountMapper.selectOne(queryWrapper); + + if (Objects.nonNull(dealerPaymentAccountDO)) { + dealerPaymentAccountDO.setDealerDO(dealerMapper.selectById(dealerPaymentAccountDO.getDealerId())); + } + + return dealerPaymentAccountConvert.toDealerPaymentAccount(dealerPaymentAccountDO); + } + + @Override + public void destroy(DealerPaymentAccountDestroyCmd dealerPaymentAccountDestroyCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerPaymentAccountDO.class); + queryWrapper.eq(DealerPaymentAccountDO::getAccountId, dealerPaymentAccountDestroyCmd.getAccountId()); + queryWrapper.last("limit 1"); + + DealerPaymentAccountDO dealerPaymentAccountDO = dealerPaymentAccountMapper.selectOne(queryWrapper); + dealerPaymentAccountDO.deleteById(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/DealerRebateCustomerGatewayImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/DealerRebateCustomerGatewayImpl.java new file mode 100644 index 0000000..58f7f8b --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/DealerRebateCustomerGatewayImpl.java @@ -0,0 +1,121 @@ +package com.xunhong.erp.turbo.biz.infrastructure.gateway; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerRebateCustomerListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerRebateCustomerPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerRebateCustomerShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.DealerRebateCustomer; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerRebateCustomerGateway; +import com.xunhong.erp.turbo.biz.infrastructure.convert.DealerRebateCustomerConvert; +import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerDO; +import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerRebateCustomerDO; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.DealerMapper; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.DealerRebateCustomerMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class DealerRebateCustomerGatewayImpl implements DealerRebateCustomerGateway { + private final DealerRebateCustomerMapper dealerRebateCustomerMapper; + private final DealerMapper dealerMapper; + private final DealerRebateCustomerConvert dealerRebateCustomerConvert; + + @Override + public DealerRebateCustomer save(DealerRebateCustomerCreateCmd dealerRebateCustomerCreateCmd) { + DealerRebateCustomerDO dealerRebateCustomerDO = dealerRebateCustomerConvert.toDealerRebateCustomerDO(dealerRebateCustomerCreateCmd); + dealerRebateCustomerMapper.insert(dealerRebateCustomerDO); + + return dealerRebateCustomerConvert.toDealerRebateCustomer(dealerRebateCustomerDO); + } + + @Override + public IPage page(DealerRebateCustomerPageQry dealerRebateCustomerPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerRebateCustomerDO.class); + queryWrapper.eq(Objects.nonNull(dealerRebateCustomerPageQry.getDealerId()), DealerRebateCustomerDO::getDealerId, dealerRebateCustomerPageQry.getDealerId()); + queryWrapper.like(StrUtil.isNotBlank(dealerRebateCustomerPageQry.getName()), DealerRebateCustomerDO::getName, dealerRebateCustomerPageQry.getName()); + queryWrapper.eq(Objects.nonNull(dealerRebateCustomerPageQry.getStatus()), DealerRebateCustomerDO::getStatus, dealerRebateCustomerPageQry.getStatus()); + queryWrapper.orderByDesc(DealerRebateCustomerDO::getCreatedAt); + + IPage page = new Page<>(dealerRebateCustomerPageQry.getPageIndex(), dealerRebateCustomerPageQry.getPageSize()); + page = dealerRebateCustomerMapper.selectPage(page, queryWrapper); + + List dealerIdList = page.getRecords().stream().map(DealerRebateCustomerDO::getDealerId).toList(); + if (CollUtil.isNotEmpty(dealerIdList)) { + LambdaQueryWrapper queryWrapper1 = Wrappers.lambdaQuery(DealerDO.class); + queryWrapper1.in(DealerDO::getDealerId, dealerIdList); + List dealerDOList = dealerMapper.selectList(queryWrapper1); + Map dealerDOMap = dealerDOList.stream().collect(Collectors.toMap(DealerDO::getDealerId, Function.identity())); + page.getRecords().forEach(dealerRebateCustomerDO -> dealerRebateCustomerDO.setDealerDO(dealerDOMap.get(dealerRebateCustomerDO.getDealerId()))); + } + + return page.convert(dealerRebateCustomerConvert::toDealerRebateCustomer); + } + + @Override + public List list(DealerRebateCustomerListQry dealerRebateCustomerListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerRebateCustomerDO.class); + queryWrapper.eq(Objects.nonNull(dealerRebateCustomerListQry.getDealerId()), DealerRebateCustomerDO::getDealerId, dealerRebateCustomerListQry.getDealerId()); + queryWrapper.like(StrUtil.isNotBlank(dealerRebateCustomerListQry.getName()), DealerRebateCustomerDO::getName, dealerRebateCustomerListQry.getName()); + queryWrapper.eq(Objects.nonNull(dealerRebateCustomerListQry.getStatus()), DealerRebateCustomerDO::getStatus, dealerRebateCustomerListQry.getStatus()); + + queryWrapper.orderByDesc(DealerRebateCustomerDO::getCreatedAt); + List dealerRebateCustomerDOList = dealerRebateCustomerMapper.selectList(queryWrapper); + return dealerRebateCustomerDOList.stream().map(dealerRebateCustomerConvert::toDealerRebateCustomer).toList(); + } + + @Override + public DealerRebateCustomer update(DealerRebateCustomerUpdateCmd dealerRebateCustomerUpdateCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerRebateCustomerDO.class); + queryWrapper.eq(DealerRebateCustomerDO::getCustomerId, dealerRebateCustomerUpdateCmd.getCustomerId()); + queryWrapper.last("limit 1"); + + DealerRebateCustomerDO dealerRebateCustomerDO = dealerRebateCustomerMapper.selectOne(queryWrapper); + + dealerRebateCustomerConvert.toDealerRebateCustomerDO(dealerRebateCustomerDO, dealerRebateCustomerUpdateCmd); + dealerRebateCustomerMapper.updateById(dealerRebateCustomerDO); + + return dealerRebateCustomerConvert.toDealerRebateCustomer(dealerRebateCustomerDO); + } + + @Override + public DealerRebateCustomer show(DealerRebateCustomerShowQry dealerRebateCustomerShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerRebateCustomerDO.class); + queryWrapper.eq(DealerRebateCustomerDO::getCustomerId, dealerRebateCustomerShowQry.getCustomerId()); + queryWrapper.last("limit 1"); + + DealerRebateCustomerDO dealerRebateCustomerDO = dealerRebateCustomerMapper.selectOne(queryWrapper); + if (Objects.nonNull(dealerRebateCustomerDO)) { + dealerRebateCustomerDO.setDealerDO(dealerMapper.selectById(dealerRebateCustomerDO.getDealerId())); + } + return dealerRebateCustomerConvert.toDealerRebateCustomer(dealerRebateCustomerDO); + } + + @Override + public void destroy(DealerRebateCustomerDestroyCmd dealerRebateCustomerDestroyCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerRebateCustomerDO.class); + queryWrapper.eq(DealerRebateCustomerDO::getCustomerId, dealerRebateCustomerDestroyCmd.getCustomerId()); + queryWrapper.last("limit 1"); + + DealerRebateCustomerDO dealerRebateCustomerDO = dealerRebateCustomerMapper.selectOne(queryWrapper); + dealerRebateCustomerDO.deleteById(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/DealerWarehouseGatewayImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/DealerWarehouseGatewayImpl.java new file mode 100644 index 0000000..3f9af46 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/DealerWarehouseGatewayImpl.java @@ -0,0 +1,133 @@ +package com.xunhong.erp.turbo.biz.infrastructure.gateway; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerWarehouseListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerWarehousePageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerWarehouseShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.DealerWarehouse; +import com.xunhong.erp.turbo.biz.domain.gateway.DealerWarehouseGateway; +import com.xunhong.erp.turbo.biz.infrastructure.convert.DealerWarehouseConvert; +import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerDO; +import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerPaymentAccountDO; +import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerWarehouseDO; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.DealerMapper; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.DealerPaymentAccountMapper; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.DealerWarehouseMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class DealerWarehouseGatewayImpl implements DealerWarehouseGateway { + private final DealerWarehouseMapper dealerWarehouseMapper; + private final DealerMapper dealerMapper; + private final DealerPaymentAccountMapper dealerPaymentAccountMapper; + private final DealerWarehouseConvert dealerWarehouseConvert; + + @Override + public DealerWarehouse save(DealerWarehouseCreateCmd dealerWarehouseCreateCmd) { + DealerWarehouseDO dealerWarehouseDO = dealerWarehouseConvert.toDealerWarehouseDO(dealerWarehouseCreateCmd); + dealerWarehouseMapper.insert(dealerWarehouseDO); + + return dealerWarehouseConvert.toDealerWarehouse(dealerWarehouseDO); + } + + @Override + public IPage page(DealerWarehousePageQry dealerWarehousePageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerWarehouseDO.class); + queryWrapper.eq(Objects.nonNull(dealerWarehousePageQry.getDealerId()), DealerWarehouseDO::getDealerId, dealerWarehousePageQry.getDealerId()); + queryWrapper.eq(Objects.nonNull(dealerWarehousePageQry.getAccountId()), DealerWarehouseDO::getAccountId, dealerWarehousePageQry.getAccountId()); + queryWrapper.eq(Objects.nonNull(dealerWarehousePageQry.getStatus()), DealerWarehouseDO::getStatus, dealerWarehousePageQry.getStatus()); + queryWrapper.orderByDesc(DealerWarehouseDO::getCreatedAt); + + IPage page = new Page<>(dealerWarehousePageQry.getPageIndex(), dealerWarehousePageQry.getPageSize()); + page = dealerWarehouseMapper.selectPage(page, queryWrapper); + + List dealerIdList = page.getRecords().stream().map(DealerWarehouseDO::getDealerId).toList(); + if (CollUtil.isNotEmpty(dealerIdList)) { + LambdaQueryWrapper queryWrapper1 = Wrappers.lambdaQuery(DealerDO.class); + queryWrapper1.in(DealerDO::getDealerId, dealerIdList); + List dealerDOList = dealerMapper.selectList(queryWrapper1); + Map dealerDOMap = dealerDOList.stream().collect(Collectors.toMap(DealerDO::getDealerId, Function.identity())); + page.getRecords().forEach(dealerWarehouseDO -> dealerWarehouseDO.setDealerDO(dealerDOMap.get(dealerWarehouseDO.getDealerId()))); + } + + List accountIdList = page.getRecords().stream().map(DealerWarehouseDO::getAccountId).toList(); + if (CollUtil.isNotEmpty(accountIdList)) { + LambdaQueryWrapper queryWrapper2 = Wrappers.lambdaQuery(DealerPaymentAccountDO.class); + queryWrapper2.in(DealerPaymentAccountDO::getAccountId, accountIdList); + List dealerPaymentAccountDOList = dealerPaymentAccountMapper.selectList(queryWrapper2); + Map dealerPaymentAccountDOMap = dealerPaymentAccountDOList.stream().collect(Collectors.toMap(DealerPaymentAccountDO::getAccountId, Function.identity())); + page.getRecords().forEach(dealerWarehouseDO -> dealerWarehouseDO.setDealerPaymentAccountDO(dealerPaymentAccountDOMap.get(dealerWarehouseDO.getAccountId()))); + } + + return page.convert(dealerWarehouseConvert::toDealerWarehouse); + } + + @Override + public List list(DealerWarehouseListQry dealerWarehouseListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerWarehouseDO.class); + queryWrapper.eq(Objects.nonNull(dealerWarehouseListQry.getDealerId()), DealerWarehouseDO::getDealerId, dealerWarehouseListQry.getDealerId()); + queryWrapper.eq(Objects.nonNull(dealerWarehouseListQry.getAccountId()), DealerWarehouseDO::getAccountId, dealerWarehouseListQry.getAccountId()); + queryWrapper.eq(Objects.nonNull(dealerWarehouseListQry.getStatus()), DealerWarehouseDO::getStatus, dealerWarehouseListQry.getStatus()); + queryWrapper.orderByDesc(DealerWarehouseDO::getCreatedAt); + List dealerWarehouseDOList = dealerWarehouseMapper.selectList(queryWrapper); + return dealerWarehouseDOList.stream().map(dealerWarehouseConvert::toDealerWarehouse).toList(); + } + + @Override + public DealerWarehouse update(DealerWarehouseUpdateCmd dealerWarehouseUpdateCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerWarehouseDO.class); + queryWrapper.eq(DealerWarehouseDO::getWarehouseId, dealerWarehouseUpdateCmd.getWarehouseId()); + queryWrapper.last("limit 1"); + + DealerWarehouseDO dealerWarehouseDO = dealerWarehouseMapper.selectOne(queryWrapper); + + dealerWarehouseConvert.toDealerWarehouseDO(dealerWarehouseDO, dealerWarehouseUpdateCmd); + dealerWarehouseMapper.updateById(dealerWarehouseDO); + + return dealerWarehouseConvert.toDealerWarehouse(dealerWarehouseDO); + } + + @Override + public DealerWarehouse show(DealerWarehouseShowQry dealerWarehouseShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerWarehouseDO.class); + queryWrapper.eq(DealerWarehouseDO::getWarehouseId, dealerWarehouseShowQry.getWarehouseId()); + queryWrapper.last("limit 1"); + + DealerWarehouseDO dealerWarehouseDO = dealerWarehouseMapper.selectOne(queryWrapper); + if (Objects.nonNull(dealerWarehouseDO)) { + dealerWarehouseDO.setDealerDO(dealerMapper.selectById(dealerWarehouseDO.getDealerId())); + dealerWarehouseDO.setDealerPaymentAccountDO(dealerPaymentAccountMapper.selectById(dealerWarehouseDO.getAccountId())); + } + + return dealerWarehouseConvert.toDealerWarehouse(dealerWarehouseDO); + } + + @Override + public void destroy(DealerWarehouseDestroyCmd dealerWarehouseDestroyCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DealerWarehouseDO.class); + queryWrapper.eq(DealerWarehouseDO::getWarehouseId, dealerWarehouseDestroyCmd.getWarehouseId()); + queryWrapper.last("limit 1"); + + DealerWarehouseDO dealerWarehouseDO = dealerWarehouseMapper.selectOne(queryWrapper); + dealerWarehouseDO.deleteById(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/GiftBoxGatewayImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/GiftBoxGatewayImpl.java new file mode 100644 index 0000000..4bf2bd2 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/GiftBoxGatewayImpl.java @@ -0,0 +1,97 @@ +package com.xunhong.erp.turbo.biz.infrastructure.gateway; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.GiftBoxListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.GiftBoxPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.GiftBoxShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.GiftBox; +import com.xunhong.erp.turbo.biz.domain.gateway.GiftBoxGateway; +import com.xunhong.erp.turbo.biz.infrastructure.convert.GiftBoxConvert; +import com.xunhong.erp.turbo.biz.infrastructure.entity.GiftBoxDO; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.GiftBoxMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Objects; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class GiftBoxGatewayImpl implements GiftBoxGateway { + private final GiftBoxMapper giftBoxMapper; + private final GiftBoxConvert giftBoxConvert; + + @Override + public GiftBox save(GiftBoxCreateCmd giftBoxCreateCmd) { + GiftBoxDO giftBoxDO = giftBoxConvert.toGiftBoxDO(giftBoxCreateCmd); + giftBoxMapper.insert(giftBoxDO); + + return giftBoxConvert.toGiftBox(giftBoxDO); + } + + @Override + public IPage page(GiftBoxPageQry giftBoxPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(GiftBoxDO.class); + queryWrapper.like(StrUtil.isNotBlank(giftBoxPageQry.getName()), GiftBoxDO::getName, giftBoxPageQry.getName()); + queryWrapper.like(StrUtil.isNotBlank(giftBoxPageQry.getRemark()), GiftBoxDO::getRemark, giftBoxPageQry.getRemark()); + queryWrapper.eq(Objects.nonNull(giftBoxPageQry.getStatus()), GiftBoxDO::getStatus, giftBoxPageQry.getStatus()); + queryWrapper.orderByDesc(GiftBoxDO::getCreatedAt); + + IPage page = new Page<>(giftBoxPageQry.getPageIndex(), giftBoxPageQry.getPageSize()); + page = giftBoxMapper.selectPage(page, queryWrapper); + + return page.convert(giftBoxConvert::toGiftBox); + } + + @Override + public List list(GiftBoxListQry giftBoxListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(GiftBoxDO.class); + List giftBoxDOList = giftBoxMapper.selectList(queryWrapper); + return giftBoxDOList.stream().map(giftBoxConvert::toGiftBox).toList(); + } + + @Override + public GiftBox update(GiftBoxUpdateCmd giftBoxUpdateCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(GiftBoxDO.class); + queryWrapper.eq(GiftBoxDO::getBoxId, giftBoxUpdateCmd.getBoxId()); + queryWrapper.last("limit 1"); + + GiftBoxDO giftBoxDO = giftBoxMapper.selectOne(queryWrapper); + + giftBoxConvert.toGiftBoxDO(giftBoxDO, giftBoxUpdateCmd); + giftBoxMapper.updateById(giftBoxDO); + + return giftBoxConvert.toGiftBox(giftBoxDO); + } + + @Override + public GiftBox show(GiftBoxShowQry giftBoxShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(GiftBoxDO.class); + queryWrapper.eq(GiftBoxDO::getBoxId, giftBoxShowQry.getBoxId()); + queryWrapper.last("limit 1"); + + GiftBoxDO giftBoxDO = giftBoxMapper.selectOne(queryWrapper); + return giftBoxConvert.toGiftBox(giftBoxDO); + } + + @Override + public void destroy(GiftBoxDestroyCmd giftBoxDestroyCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(GiftBoxDO.class); + queryWrapper.eq(GiftBoxDO::getBoxId, giftBoxDestroyCmd.getBoxId()); + queryWrapper.last("limit 1"); + + GiftBoxDO giftBoxDO = giftBoxMapper.selectOne(queryWrapper); + giftBoxDO.deleteById(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/PurchaseOrderGatewayImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/PurchaseOrderGatewayImpl.java new file mode 100644 index 0000000..7b2a4c6 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/PurchaseOrderGatewayImpl.java @@ -0,0 +1,836 @@ +package com.xunhong.erp.turbo.biz.infrastructure.gateway; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.biz.dto.cmd.*; +import com.xunhong.erp.turbo.api.biz.dto.common.*; +import com.xunhong.erp.turbo.api.biz.dto.enums.CostItemCostTypeEnum; +import com.xunhong.erp.turbo.api.biz.dto.enums.PurchaseOrderStateEnum; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderCountQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.PurchaseOrder; +import com.xunhong.erp.turbo.biz.domain.gateway.PurchaseOrderGateway; +import com.xunhong.erp.turbo.biz.infrastructure.convert.*; +import com.xunhong.erp.turbo.biz.infrastructure.entity.*; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.*; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class PurchaseOrderGatewayImpl implements PurchaseOrderGateway { + private final PurchaseOrderMapper purchaseOrderMapper; + private final PurchaseOrderConvert purchaseOrderConvert; + + private final OrderVehicleMapper orderVehicleMapper; + private final OrderVehicleConvert orderVehicleConvert; + + private final OrderSupplierMapper orderSupplierMapper; + private final OrderSupplierConvert orderSupplierConvert; + + private final OrderCostMapper orderCostMapper; + private final OrderCostConvert orderCostConvert; + + private final OrderPackageMapper orderPackageMapper; + private final OrderPackageConvert orderPackageConvert; + + private final OrderDealerMapper orderDealerMapper; + private final OrderDealerConvert orderDealerConvert; + + private final OrderCompanyMapper orderCompanyMapper; + private final OrderCompanyConvert orderCompanyConvert; + + private final OrderRebateMapper orderRebateMapper; + private final OrderRebateConvert orderRebateConvert; + + private final ShipOrderMapper shipOrderMapper; + private final ShipOrderItemMapper shipOrderItemMapper; + private final ShipOrderPackageMapper shipOrderPackageMapper; + + @Override + @Transactional + public PurchaseOrder save(PurchaseOrderCreateCmd purchaseOrderCreateCmd) { + PurchaseOrderDO purchaseOrderDO = purchaseOrderConvert.toPurchaseOrderDO(purchaseOrderCreateCmd); + purchaseOrderDO.setState(PurchaseOrderStateEnum.DRAFT); + purchaseOrderDO.setOrderSn("CG" + generateShipOrderSn()); + purchaseOrderMapper.insert(purchaseOrderDO); + + // 订单运输信息 + OrderVehicle orderVehicle = purchaseOrderCreateCmd.getOrderVehicle(); + orderVehicle.setOrderId(purchaseOrderDO.getOrderId()); + OrderVehicleDO orderVehicleDO = orderVehicleConvert.toOrderVehicleDO(orderVehicle); + orderVehicleMapper.insert(orderVehicleDO); + + // 订单经销商信息 + OrderDealer orderDealer = purchaseOrderCreateCmd.getOrderDealer(); + orderDealer.setOrderId(purchaseOrderDO.getOrderId()); + OrderDealerDO orderDealerDO = orderDealerConvert.toOrderDealerDO(orderDealer); + orderDealerMapper.insert(orderDealerDO); + + // 订单供应商信息 + purchaseOrderCreateCmd.getOrderSupplierList().forEach(orderSupplier -> { + orderSupplier.setOrderId(purchaseOrderDO.getOrderId()); + OrderSupplierDO orderSupplierDO = orderSupplierConvert.toOrderSupplierDO(orderSupplier); + orderSupplierMapper.insert(orderSupplierDO); + + // 订单包材信息 + orderSupplier.getOrderPackageList().forEach(orderPackage -> { + orderPackage.setOrderSupplierId(orderSupplierDO.getOrderSupplierId()); + OrderPackageDO orderPackageDO = orderPackageConvert.toOrderPackageDO(orderPackage); + orderPackageMapper.insert(orderPackageDO); + }); + }); + + // 订单费用信息 + purchaseOrderCreateCmd.getOrderCostList().forEach(orderCost -> { + orderCost.setOrderId(purchaseOrderDO.getOrderId()); + orderCostMapper.insert(orderCostConvert.toOrderCostDO(orderCost)); + }); + + return purchaseOrderConvert.toPurchaseOrder(purchaseOrderDO); + } + + @Override + public IPage page(PurchaseOrderPageQry purchaseOrderPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(PurchaseOrderDO.class); + queryWrapper.like(StrUtil.isNotBlank(purchaseOrderPageQry.getOrderSn()), PurchaseOrderDO::getOrderSn, purchaseOrderPageQry.getOrderSn()); + queryWrapper.eq(Objects.nonNull(purchaseOrderPageQry.getState()), PurchaseOrderDO::getState, purchaseOrderPageQry.getState()); + queryWrapper.eq(Objects.nonNull(purchaseOrderPageQry.getCreatedBy()), PurchaseOrderDO::getCreatedBy, purchaseOrderPageQry.getCreatedBy()); + + String vehicleNo = purchaseOrderPageQry.getVehicleNo(); + if (StrUtil.isNotBlank(vehicleNo)) { + LambdaQueryWrapper queryWrapper1 = Wrappers.lambdaQuery(OrderVehicleDO.class); + queryWrapper1.like(OrderVehicleDO::getVehicleNo, vehicleNo); + List orderVehicleDOList = orderVehicleMapper.selectList(queryWrapper1); + if (CollUtil.isNotEmpty(orderVehicleDOList)) { + queryWrapper.in(PurchaseOrderDO::getOrderId, orderVehicleDOList.stream().map(OrderVehicleDO::getOrderId).toList()); + } else { + // 如果没有匹配的订单,则添加一个永远不成立的条件 + queryWrapper.eq(PurchaseOrderDO::getOrderId, -1L); + } + } + + if (Objects.nonNull(purchaseOrderPageQry.getDealerId()) || Objects.nonNull(purchaseOrderPageQry.getDealerPaymentAccountId())) { + LambdaQueryWrapper queryWrapper1 = Wrappers.lambdaQuery(OrderDealerDO.class); + queryWrapper1.eq(Objects.nonNull(purchaseOrderPageQry.getDealerId()), OrderDealerDO::getDealerId, purchaseOrderPageQry.getDealerId()); + queryWrapper1.eq(Objects.nonNull(purchaseOrderPageQry.getDealerPaymentAccountId()), OrderDealerDO::getAccountId, purchaseOrderPageQry.getDealerPaymentAccountId()); + List orderDealerDOList = orderDealerMapper.selectList(queryWrapper1); + + if (CollUtil.isNotEmpty(orderDealerDOList)) { + queryWrapper.in(PurchaseOrderDO::getOrderId, orderDealerDOList.stream().map(OrderDealerDO::getOrderId).toList()); + } else { + // 如果没有匹配的订单,则添加一个永远不成立条件 + queryWrapper.eq(PurchaseOrderDO::getOrderId, -1L); + } + } + + queryWrapper.orderByDesc(PurchaseOrderDO::getCreatedAt); + + IPage page = new Page<>(purchaseOrderPageQry.getPageIndex(), purchaseOrderPageQry.getPageSize()); + page = purchaseOrderMapper.selectPage(page, queryWrapper); + + List orderIdList = page.getRecords().stream().map(PurchaseOrderDO::getOrderId).toList(); + if (CollUtil.isNotEmpty(orderIdList)) { + List orderVehicleDOList = orderVehicleMapper.selectList(Wrappers.lambdaQuery(OrderVehicleDO.class).in(OrderVehicleDO::getOrderId, orderIdList)); + Map orderVehicleDOMap = orderVehicleDOList.stream().collect(Collectors.toMap(OrderVehicleDO::getOrderId, Function.identity())); + + List orderSupplierDOList = orderSupplierMapper.selectList(Wrappers.lambdaQuery(OrderSupplierDO.class).in(OrderSupplierDO::getOrderId, orderIdList)); + + page.getRecords().forEach(purchaseOrderDO -> { + purchaseOrderDO.setOrderVehicleDO(orderVehicleDOMap.get(purchaseOrderDO.getOrderId())); + purchaseOrderDO.setOrderSupplierDOList(orderSupplierDOList.stream().filter(orderSupplierDO -> orderSupplierDO.getOrderId().equals(purchaseOrderDO.getOrderId())).toList()); + }); + } + + return page.convert(purchaseOrderConvert::toPurchaseOrder); + } + + @Override + public List list(PurchaseOrderListQry purchaseOrderListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(PurchaseOrderDO.class); + List purchaseOrderDOList = purchaseOrderMapper.selectList(queryWrapper); + return purchaseOrderDOList.stream().map(purchaseOrderConvert::toPurchaseOrder).toList(); + } + + @Override + @Transactional + public PurchaseOrder update(PurchaseOrderUpdateCmd purchaseOrderUpdateCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(PurchaseOrderDO.class); + queryWrapper.eq(PurchaseOrderDO::getOrderId, purchaseOrderUpdateCmd.getOrderId()); + queryWrapper.last("limit 1"); + + PurchaseOrderDO purchaseOrderDO = purchaseOrderMapper.selectOne(queryWrapper); + + purchaseOrderConvert.toPurchaseOrderDO(purchaseOrderDO, purchaseOrderUpdateCmd); + purchaseOrderMapper.updateById(purchaseOrderDO); + + // 更新车辆信息 + OrderVehicle orderVehicle = purchaseOrderUpdateCmd.getOrderVehicle(); + OrderVehicleDO orderVehicleDO = orderVehicleConvert.toOrderVehicleDO(orderVehicle); + orderVehicleDO.setOrderId(purchaseOrderDO.getOrderId()); + orderVehicleMapper.updateById(orderVehicleDO); + + // 更新经销商信息 + OrderDealer orderDealer = purchaseOrderUpdateCmd.getOrderDealer(); + orderDealer.setOrderId(purchaseOrderDO.getOrderId()); + OrderDealerDO orderDealerDO = orderDealerConvert.toOrderDealerDO(orderDealer); + // 先尝试更新,如果不存在则插入 + if (orderDealerDO.getOrderDealerId() != null) { + orderDealerMapper.updateById(orderDealerDO); + } else { + LambdaQueryWrapper dealerQueryWrapper = Wrappers.lambdaQuery(OrderDealerDO.class); + dealerQueryWrapper.eq(OrderDealerDO::getOrderId, purchaseOrderDO.getOrderId()); + OrderDealerDO existingDealer = orderDealerMapper.selectOne(dealerQueryWrapper); + if (existingDealer != null) { + orderDealerDO.setOrderDealerId(existingDealer.getOrderDealerId()); + orderDealerMapper.updateById(orderDealerDO); + } else { + orderDealerMapper.insert(orderDealerDO); + } + } + + // 更新供应商信息(精细化处理) + // 获取现有的供应商列表 + LambdaQueryWrapper supplierQueryWrapper = Wrappers.lambdaQuery(OrderSupplierDO.class); + supplierQueryWrapper.eq(OrderSupplierDO::getOrderId, purchaseOrderDO.getOrderId()); + List existingSuppliers = orderSupplierMapper.selectList(supplierQueryWrapper); + + // 获取更新的供应商列表 + List updatedSuppliers = purchaseOrderUpdateCmd.getOrderSupplierList(); + + // 将现有供应商映射到ID字典中便于查找 + Map existingSupplierMap = existingSuppliers.stream() + .collect(Collectors.toMap(OrderSupplierDO::getOrderSupplierId, Function.identity())); + + // 收集需要更新和新增的供应商 + List suppliersToInsert = new ArrayList<>(); + List suppliersToUpdate = new ArrayList<>(); + + for (OrderSupplier updatedSupplier : updatedSuppliers) { + updatedSupplier.setOrderId(purchaseOrderDO.getOrderId()); + OrderSupplierDO supplierDO = orderSupplierConvert.toOrderSupplierDO(updatedSupplier); + + if (updatedSupplier.getOrderSupplierId() != null && existingSupplierMap.containsKey(updatedSupplier.getOrderSupplierId())) { + // 更新已存在的供应商 + supplierDO.setOrderSupplierId(updatedSupplier.getOrderSupplierId()); + suppliersToUpdate.add(supplierDO); + // 从现有映射中移除,剩下的就是需要删除的 + existingSupplierMap.remove(updatedSupplier.getOrderSupplierId()); + } else { + // 新增供应商 + suppliersToInsert.add(supplierDO); + } + } + + // 删除不再需要的供应商 + existingSupplierMap.values().forEach(supplier -> supplier.deleteById()); + + // 执行更新操作 + suppliersToUpdate.forEach(orderSupplierMapper::updateById); + + // 执行插入操作 + suppliersToInsert.forEach(orderSupplierMapper::insert); + + // 处理包材信息(对更新和新增的供应商) + List allAffectedSuppliers = new ArrayList<>(); + allAffectedSuppliers.addAll(suppliersToUpdate); + allAffectedSuppliers.addAll(suppliersToInsert); + + for (OrderSupplierDO supplierDO : allAffectedSuppliers) { + // 查找对应的更新数据 + OrderSupplier updatedSupplier = updatedSuppliers.stream() + .filter(s -> (s.getOrderSupplierId() != null && s.getOrderSupplierId().equals(supplierDO.getOrderSupplierId())) + || (s.getOrderSupplierId() == null && supplierDO.getOrderSupplierId() != null + && s.getSupplierId().equals(supplierDO.getSupplierId()))) + .findFirst() + .orElse(null); + + if (updatedSupplier != null && updatedSupplier.getOrderPackageList() != null && !updatedSupplier.getOrderPackageList().isEmpty()) { + // 删除旧的包材信息 + LambdaQueryWrapper packageDeleteWrapper = Wrappers.lambdaQuery(OrderPackageDO.class); + packageDeleteWrapper.eq(OrderPackageDO::getOrderSupplierId, supplierDO.getOrderSupplierId()); + orderPackageMapper.delete(packageDeleteWrapper); + + // 插入新的包材信息 + for (OrderPackage orderPackage : updatedSupplier.getOrderPackageList()) { + orderPackage.setOrderSupplierId(supplierDO.getOrderSupplierId()); + OrderPackageDO orderPackageDO = orderPackageConvert.toOrderPackageDO(orderPackage); + orderPackageMapper.insert(orderPackageDO); + } + } else if (updatedSupplier != null) { + // 如果更新的数据中包材列表为空,则删除所有包材信息 + LambdaQueryWrapper packageDeleteWrapper = Wrappers.lambdaQuery(OrderPackageDO.class); + packageDeleteWrapper.eq(OrderPackageDO::getOrderSupplierId, supplierDO.getOrderSupplierId()); + orderPackageMapper.delete(packageDeleteWrapper); + } + } + + // 更新费用信息(精细化处理) + // 获取现有的费用列表 + LambdaQueryWrapper costQueryWrapper = Wrappers.lambdaQuery(OrderCostDO.class); + costQueryWrapper.eq(OrderCostDO::getOrderId, purchaseOrderDO.getOrderId()); + List existingCosts = orderCostMapper.selectList(costQueryWrapper); + + // 获取更新的费用列表 + List updatedCosts = purchaseOrderUpdateCmd.getOrderCostList(); + + // 将现有费用映射到ID字典中便于查找 + Map existingCostMap = existingCosts.stream() + .collect(Collectors.toMap(OrderCostDO::getOrderCostId, Function.identity())); + + // 收集需要更新和新增的费用 + List costsToInsert = new ArrayList<>(); + List costsToUpdate = new ArrayList<>(); + + for (OrderCost updatedCost : updatedCosts) { + updatedCost.setOrderId(purchaseOrderDO.getOrderId()); + OrderCostDO costDO = orderCostConvert.toOrderCostDO(updatedCost); + + if (updatedCost.getOrderCostId() != null && existingCostMap.containsKey(updatedCost.getOrderCostId())) { + // 更新已存在的费用 + costDO.setOrderCostId(updatedCost.getOrderCostId()); + costsToUpdate.add(costDO); + // 从现有映射中移除,剩下的就是需要删除的 + existingCostMap.remove(updatedCost.getOrderCostId()); + } else { + // 新增费用 + costsToInsert.add(costDO); + } + } + + // 删除不再需要的费用 + existingCostMap.values().forEach(cost -> cost.deleteById()); + + // 执行更新操作 + costsToUpdate.forEach(orderCostMapper::updateById); + + // 执行插入操作 + costsToInsert.forEach(orderCostMapper::insert); + + return purchaseOrderConvert.toPurchaseOrder(purchaseOrderDO); + } + + @Override + public PurchaseOrder show(PurchaseOrderShowQry purchaseOrderShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(PurchaseOrderDO.class); + queryWrapper.eq(PurchaseOrderDO::getOrderId, purchaseOrderShowQry.getOrderId()); + queryWrapper.last("limit 1"); + + PurchaseOrderDO purchaseOrderDO = purchaseOrderMapper.selectOne(queryWrapper); + + if (Objects.nonNull(purchaseOrderDO)) { + LambdaQueryWrapper queryWrapper2 = Wrappers.lambdaQuery(OrderVehicleDO.class); + queryWrapper2.eq(OrderVehicleDO::getOrderId, purchaseOrderDO.getOrderId()); + OrderVehicleDO orderVehicleDO = orderVehicleMapper.selectOne(queryWrapper2); + purchaseOrderDO.setOrderVehicleDO(orderVehicleDO); + + LambdaQueryWrapper queryWrapper3 = Wrappers.lambdaQuery(OrderDealerDO.class); + queryWrapper3.eq(OrderDealerDO::getOrderId, purchaseOrderDO.getOrderId()); + OrderDealerDO orderDealerDO = orderDealerMapper.selectOne(queryWrapper3); + + purchaseOrderDO.setOrderDealerDO(orderDealerDO); + + // 查询公司信息 + LambdaQueryWrapper companyQueryWrapper = Wrappers.lambdaQuery(OrderCompanyDO.class); + companyQueryWrapper.eq(OrderCompanyDO::getOrderId, purchaseOrderDO.getOrderId()); + OrderCompanyDO orderCompanyDO = orderCompanyMapper.selectOne(companyQueryWrapper); + purchaseOrderDO.setOrderCompanyDO(orderCompanyDO); + + // 查询返点信息 + LambdaQueryWrapper rebateQueryWrapper = Wrappers.lambdaQuery(OrderRebateDO.class); + rebateQueryWrapper.eq(OrderRebateDO::getOrderId, purchaseOrderDO.getOrderId()); + OrderRebateDO orderRebateDO = orderRebateMapper.selectOne(rebateQueryWrapper); + purchaseOrderDO.setOrderRebateDO(orderRebateDO); + + List orderSupplierDOList = orderSupplierMapper.selectList(Wrappers.lambdaQuery(OrderSupplierDO.class).eq(OrderSupplierDO::getOrderId, purchaseOrderDO.getOrderId())); + List orderSupplierIdList = orderSupplierDOList.stream().map(OrderSupplierDO::getOrderSupplierId).toList(); + if (CollUtil.isNotEmpty(orderSupplierIdList)) { + LambdaQueryWrapper queryWrapper1 = Wrappers.lambdaQuery(OrderPackageDO.class); + queryWrapper1.in(OrderPackageDO::getOrderSupplierId, orderSupplierIdList); + List orderPackageDOList = orderPackageMapper.selectList(queryWrapper1); + + orderSupplierDOList.forEach(orderSupplierDO -> { + orderSupplierDO.setOrderPackageDOList(orderPackageDOList.stream().filter(orderPackageDO -> orderPackageDO.getOrderSupplierId().equals(orderSupplierDO.getOrderSupplierId())).toList()); + }); + + } + purchaseOrderDO.setOrderSupplierDOList(orderSupplierDOList); + + LambdaQueryWrapper queryWrapper1 = Wrappers.lambdaQuery(OrderCostDO.class); + queryWrapper1.eq(OrderCostDO::getOrderId, purchaseOrderDO.getOrderId()); + List orderCostDOList = orderCostMapper.selectList(queryWrapper1); + purchaseOrderDO.setOrderCostDOList(orderCostDOList); + } + + return purchaseOrderConvert.toPurchaseOrder(purchaseOrderDO); + } + + @Override + public void destroy(PurchaseOrderDestroyCmd purchaseOrderDestroyCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(PurchaseOrderDO.class); + queryWrapper.eq(PurchaseOrderDO::getOrderId, purchaseOrderDestroyCmd.getOrderId()); + queryWrapper.last("limit 1"); + + PurchaseOrderDO purchaseOrderDO = purchaseOrderMapper.selectOne(queryWrapper); + purchaseOrderDO.deleteById(); + } + + @Override + @Transactional + public void approve(PurchaseOrderApproveCmd purchaseOrderApproveCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(PurchaseOrderDO.class); + queryWrapper.eq(PurchaseOrderDO::getOrderId, purchaseOrderApproveCmd.getOrderId()); + queryWrapper.last("limit 1"); + + PurchaseOrderDO purchaseOrderDO = purchaseOrderMapper.selectOne(queryWrapper); + purchaseOrderDO.setPricingMethod(purchaseOrderApproveCmd.getPricingMethod()); + + if (!purchaseOrderApproveCmd.getDraft()) { + purchaseOrderDO.setState(PurchaseOrderStateEnum.WAITING_BOSS_APPROVE); + } + + purchaseOrderMapper.updateById(purchaseOrderDO); + + // 更新车辆信息 + OrderVehicle orderVehicle = purchaseOrderApproveCmd.getOrderVehicle(); + OrderVehicleDO orderVehicleDO = orderVehicleConvert.toOrderVehicleDO(orderVehicle); + orderVehicleDO.setVehicleId(orderVehicle.getVehicleId()); + orderVehicleDO.setOrderId(purchaseOrderDO.getOrderId()); + orderVehicleMapper.updateById(orderVehicleDO); + + // 更新经销商信息 + OrderDealer orderDealer = purchaseOrderApproveCmd.getOrderDealer(); + orderDealer.setOrderId(purchaseOrderDO.getOrderId()); + OrderDealerDO orderDealerDO = orderDealerConvert.toOrderDealerDO(orderDealer); + // 先尝试更新,如果不存在则插入 + if (orderDealerDO.getOrderDealerId() != null) { + orderDealerMapper.updateById(orderDealerDO); + } else { + LambdaQueryWrapper dealerQueryWrapper = Wrappers.lambdaQuery(OrderDealerDO.class); + dealerQueryWrapper.eq(OrderDealerDO::getOrderId, purchaseOrderDO.getOrderId()); + OrderDealerDO existingDealer = orderDealerMapper.selectOne(dealerQueryWrapper); + if (existingDealer != null) { + orderDealerDO.setOrderDealerId(existingDealer.getOrderDealerId()); + orderDealerMapper.updateById(orderDealerDO); + } else { + orderDealerMapper.insert(orderDealerDO); + } + } + + OrderCompany orderCompany = purchaseOrderApproveCmd.getOrderCompany(); + if (Objects.nonNull(orderCompany)) { + orderCompany.setOrderId(purchaseOrderDO.getOrderId()); + OrderCompanyDO orderCompanyDO = orderCompanyConvert.toOrderCompanyDO(orderCompany); + // 先尝试更新,如果不存在则插入 + if (orderCompanyDO.getOrderCompanyId() != null) { + orderCompanyMapper.updateById(orderCompanyDO); + } else { + LambdaQueryWrapper companyQueryWrapper = Wrappers.lambdaQuery(OrderCompanyDO.class); + companyQueryWrapper.eq(OrderCompanyDO::getOrderId, purchaseOrderDO.getOrderId()); + OrderCompanyDO existingCompany = orderCompanyMapper.selectOne(companyQueryWrapper); + if (existingCompany != null) { + orderCompanyDO.setOrderCompanyId(existingCompany.getOrderCompanyId()); + orderCompanyMapper.updateById(orderCompanyDO); + } else { + orderCompanyMapper.insert(orderCompanyDO); + } + } + } + + // 更新供应商信息(直接更新,因为不存在条数更新) + purchaseOrderApproveCmd.getOrderSupplierList().forEach(orderSupplier -> { + orderSupplier.setOrderId(purchaseOrderDO.getOrderId()); + OrderSupplierDO orderSupplierDO = orderSupplierConvert.toOrderSupplierDO(orderSupplier); + orderSupplierDO.setOrderSupplierId(orderSupplier.getOrderSupplierId()); + + // 直接更新包材信息(因为包材信息条数也不会变) + if (orderSupplier.getOrderPackageList() != null && !orderSupplier.getOrderPackageList().isEmpty()) { + orderSupplier.getOrderPackageList().forEach(orderPackage -> { + orderPackage.setOrderSupplierId(orderSupplierDO.getOrderSupplierId()); + OrderPackageDO orderPackageDO = orderPackageConvert.toOrderPackageDO(orderPackage); + orderPackageDO.setOrderPackageId(orderPackage.getOrderPackageId()); + orderPackageMapper.updateById(orderPackageDO); + }); + } + + // 更新供应商信息 + orderSupplierMapper.updateById(orderSupplierDO); + }); + + OrderRebate orderRebate = purchaseOrderApproveCmd.getOrderRebate(); + if (Objects.nonNull(orderRebate)) { + orderRebate.setOrderId(purchaseOrderDO.getOrderId()); + OrderRebateDO orderRebateDO = orderRebateConvert.toOrderRebateDO(orderRebate); + // 先尝试更新,如果不存在则插入 + if (orderRebateDO.getOrderRebateId() != null) { + orderRebateMapper.updateById(orderRebateDO); + } else { + LambdaQueryWrapper rebateQueryWrapper = Wrappers.lambdaQuery(OrderRebateDO.class); + rebateQueryWrapper.eq(OrderRebateDO::getOrderId, purchaseOrderDO.getOrderId()); + OrderRebateDO existingRebate = orderRebateMapper.selectOne(rebateQueryWrapper); + if (existingRebate != null) { + orderRebateDO.setOrderRebateId(existingRebate.getOrderRebateId()); + orderRebateMapper.updateById(orderRebateDO); + } else { + orderRebateMapper.insert(orderRebateDO); + } + } + } + + + // 更新费用信息(精细化处理) + // 获取现有的费用列表 + LambdaQueryWrapper costQueryWrapper = Wrappers.lambdaQuery(OrderCostDO.class); + costQueryWrapper.eq(OrderCostDO::getOrderId, purchaseOrderDO.getOrderId()); + List existingCosts = orderCostMapper.selectList(costQueryWrapper); + + // 获取更新的费用列表 + List updatedCosts = purchaseOrderApproveCmd.getOrderCostList(); + + // 将现有费用映射到ID字典中便于查找 + Map existingCostMap = existingCosts.stream() + .collect(Collectors.toMap(OrderCostDO::getOrderCostId, Function.identity())); + + // 收集需要更新和新增的费用 + List costsToInsert = new ArrayList<>(); + List costsToUpdate = new ArrayList<>(); + + for (OrderCost updatedCost : updatedCosts) { + updatedCost.setOrderId(purchaseOrderDO.getOrderId()); + OrderCostDO costDO = orderCostConvert.toOrderCostDO(updatedCost); + + if (updatedCost.getOrderCostId() != null && existingCostMap.containsKey(updatedCost.getOrderCostId())) { + // 更新已存在的费用 + costDO.setOrderCostId(updatedCost.getOrderCostId()); + costsToUpdate.add(costDO); + // 从现有映射中移除,剩下的就是需要删除的 + existingCostMap.remove(updatedCost.getOrderCostId()); + } else { + // 新增费用 + costsToInsert.add(costDO); + } + } + + // 删除不再需要的费用 + existingCostMap.values().forEach(cost -> cost.deleteById()); + + // 执行更新操作 + costsToUpdate.forEach(orderCostMapper::updateById); + + // 执行插入操作 + costsToInsert.forEach(orderCostMapper::insert); + } + + @Override + @Transactional + public void submitReview(PurchaseOrderSubmitReviewCmd purchaseOrderSubmitReviewCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(PurchaseOrderDO.class); + queryWrapper.eq(PurchaseOrderDO::getOrderId, purchaseOrderSubmitReviewCmd.getOrderId()); + queryWrapper.last("limit 1"); + + PurchaseOrderDO purchaseOrderDO = purchaseOrderMapper.selectOne(queryWrapper); + purchaseOrderDO.setState(PurchaseOrderStateEnum.WAITING_AUDIT); + purchaseOrderMapper.updateById(purchaseOrderDO); + } + + @Override + @Transactional + public void withdrawReview(PurchaseOrderWithdrawReviewCmd purchaseOrderWithdrawReviewCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(PurchaseOrderDO.class); + queryWrapper.eq(PurchaseOrderDO::getOrderId, purchaseOrderWithdrawReviewCmd.getOrderId()); + queryWrapper.last("limit 1"); + + PurchaseOrderDO purchaseOrderDO = purchaseOrderMapper.selectOne(queryWrapper); + purchaseOrderDO.setState(PurchaseOrderStateEnum.DRAFT); + purchaseOrderMapper.updateById(purchaseOrderDO); + } + + @Override + @Transactional + public void rejectApprove(PurchaseOrderRejectApproveCmd purchaseOrderRejectApproveCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(PurchaseOrderDO.class); + queryWrapper.eq(PurchaseOrderDO::getOrderId, purchaseOrderRejectApproveCmd.getOrderId()); + queryWrapper.last("limit 1"); + + PurchaseOrderDO purchaseOrderDO = purchaseOrderMapper.selectOne(queryWrapper); + purchaseOrderDO.setState(PurchaseOrderStateEnum.DRAFT); + purchaseOrderMapper.updateById(purchaseOrderDO); + } + + @Override + @Transactional + public void finalApprove(PurchaseOrderFinalApproveCmd purchaseOrderFinalApproveCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(PurchaseOrderDO.class); + queryWrapper.eq(PurchaseOrderDO::getOrderId, purchaseOrderFinalApproveCmd.getOrderId()); + queryWrapper.last("limit 1"); + + PurchaseOrderDO purchaseOrderDO = purchaseOrderMapper.selectOne(queryWrapper); + purchaseOrderDO.setState(PurchaseOrderStateEnum.SHIPPING); + + // 自动生成发货单 purchaseOrderDO 生成 shipOrder,orderPackage 变成 shipOrderPackage(按照报价价格分组插入),orderSupplier 变成shipOrderItem(按照规格分组插入) + // 1. 创建发货单 + ShipOrderDO shipOrderDO = new ShipOrderDO(); + shipOrderDO.setPurchaseOrderId(purchaseOrderDO.getOrderId()); + shipOrderDO.setOrderSn("FH" + generateShipOrderSn()); // 生成发货单编号 + + // 从车辆信息中获取相关信息 + OrderVehicleDO orderVehicleDO = orderVehicleMapper.selectOne( + Wrappers.lambdaQuery(OrderVehicleDO.class) + .eq(OrderVehicleDO::getOrderId, purchaseOrderDO.getOrderId()) + ); + + if (orderVehicleDO != null) { + shipOrderDO.setLicensePlate(orderVehicleDO.getPlate()); + shipOrderDO.setDriverName(orderVehicleDO.getDriver()); + shipOrderDO.setDriverPhone(orderVehicleDO.getPhone()); + shipOrderDO.setShippingDate(orderVehicleDO.getDeliveryTime()); + shipOrderDO.setFreightDebt(orderVehicleDO.getPrice()); + if (orderVehicleDO.getOpenStrawCurtain()) { + shipOrderDO.setStrawMatDebt(orderVehicleDO.getStrawCurtainPrice()); + } + shipOrderDO.setDealerId(orderVehicleDO.getDealerId()); + shipOrderDO.setDealerName(orderVehicleDO.getDealerName()); + shipOrderDO.setVehicleNo(orderVehicleDO.getVehicleNo()); + } + + // 从经销商信息中获取相关信息 + OrderDealerDO orderDealerDO = orderDealerMapper.selectOne( + Wrappers.lambdaQuery(OrderDealerDO.class) + .eq(OrderDealerDO::getOrderId, purchaseOrderDO.getOrderId()) + ); + + if (orderDealerDO != null) { + shipOrderDO.setReceivingAddress(orderDealerDO.getWarehouseAddress()); + } + + // 设置其他基本信息 + shipOrderDO.setCreatedBy(purchaseOrderFinalApproveCmd.getCreatedBy()); + shipOrderDO.setCreatedByName(purchaseOrderFinalApproveCmd.getCreatedByName()); + + // 4. 从OrderCostDO中提取人工费、商标费等费用信息 + List orderCostDOList = orderCostMapper.selectList( + Wrappers.lambdaQuery(OrderCostDO.class) + .eq(OrderCostDO::getOrderId, purchaseOrderDO.getOrderId()) + ); + + // 计算人工费总额 + BigDecimal totalLaborFee = orderCostDOList.stream() + .filter(cost -> CostItemCostTypeEnum.HUMAN_COST.getType() == cost.getCostType().getType()) + .map(cost -> { + if (cost.getPrice() != null && cost.getCount() != null) { + return cost.getPrice().multiply(BigDecimal.valueOf(cost.getCount())); + } + return BigDecimal.ZERO; + }) + .reduce(BigDecimal.ZERO, BigDecimal::add); + shipOrderDO.setLaborFee(totalLaborFee); + + // 计算商标费总额 + BigDecimal totalTrademarkFee = orderCostDOList.stream() + .filter(cost -> "商标费".equals(cost.getName())) + .map(cost -> { + if (cost.getPrice() != null && cost.getCount() != null) { + return cost.getPrice().multiply(BigDecimal.valueOf(cost.getCount())); + } + return BigDecimal.ZERO; + }) + .reduce(BigDecimal.ZERO, BigDecimal::add); + shipOrderDO.setTrademarkFee(totalTrademarkFee); + + // 计算打码费总额 + BigDecimal totalCodingFee = orderCostDOList.stream() + .filter(cost -> "打码费".equals(cost.getName())) + .map(cost -> { + if (cost.getPrice() != null && cost.getCount() != null) { + return cost.getPrice().multiply(BigDecimal.valueOf(cost.getCount())); + } + return BigDecimal.ZERO; + }) + .reduce(BigDecimal.ZERO, BigDecimal::add); + shipOrderDO.setTrademarkFee(totalCodingFee); + + shipOrderDO.setCodingFee(totalTrademarkFee); + + // 2. 处理包材信息,转换为发货单包材信息(按照boxCategoryId和boxProductName分组) + List orderSupplierDOList = orderSupplierMapper.selectList( + Wrappers.lambdaQuery(OrderSupplierDO.class) + .eq(OrderSupplierDO::getOrderId, purchaseOrderDO.getOrderId()) + ); + + // 收集所有的包材信息 + List orderSupplierIdList = orderSupplierDOList.stream() + .map(OrderSupplierDO::getOrderSupplierId) + .toList(); + + List orderPackageDOList = new ArrayList<>(); + if (CollUtil.isNotEmpty(orderSupplierIdList)) { + orderPackageDOList = orderPackageMapper.selectList( + Wrappers.lambdaQuery(OrderPackageDO.class) + .in(OrderPackageDO::getOrderSupplierId, orderSupplierIdList) + ); + } + // 计算纸箱费总额 + BigDecimal totalCartonFee = orderPackageDOList.stream() + .map(p -> { + if (p.getBoxSalePrice() != null && p.getBoxCount() != null) { + return p.getBoxSalePrice().multiply(BigDecimal.valueOf(p.getBoxCount())); + } + return BigDecimal.ZERO; + }) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + shipOrderDO.setCartonFee(totalCartonFee); + + // 插入发货单 + shipOrderMapper.insert(shipOrderDO); + + // 按boxCategoryId和boxProductName分组包材信息 + Map> packageGroupByKey = orderPackageDOList.stream() + .collect(Collectors.groupingBy(p -> p.getBoxCategoryId() + "_" + p.getBoxProductName())); + + // 创建发货单包材信息 + for (Map.Entry> entry : packageGroupByKey.entrySet()) { + List packages = entry.getValue(); + + // 合并相同类型的包材信息 + ShipOrderPackageDO shipOrderPackageDO = new ShipOrderPackageDO(); + shipOrderPackageDO.setShipOrderId(shipOrderDO.getShipOrderId()); + + // 使用第一个包材的信息作为基础 + OrderPackageDO firstPackage = packages.get(0); + shipOrderPackageDO.setBoxCategory(firstPackage.getBoxCategoryId()); + shipOrderPackageDO.setBoxProduct(firstPackage.getBoxProductName()); + + // 使用第一个包材的销售价格作为单价 + shipOrderPackageDO.setUnitPrice(firstPackage.getBoxSalePrice()); + + // 计算总数量 + int totalQuantity = packages.stream() + .mapToInt(OrderPackageDO::getBoxCount) + .sum(); + shipOrderPackageDO.setQuantity(totalQuantity); + + // 计算总金额 + BigDecimal unitPrice = firstPackage.getBoxSalePrice() != null ? firstPackage.getBoxSalePrice() : BigDecimal.ZERO; + BigDecimal totalAmount = unitPrice.multiply(BigDecimal.valueOf(totalQuantity)); + shipOrderPackageDO.setItemAmount(totalAmount); + + shipOrderPackageDO.setSingleWeight(shipOrderPackageDO.getTotalWeight().divide(shipOrderPackageDO.getUnitPrice(), 2, RoundingMode.HALF_UP)); + + // 计算总重量(如果有) + BigDecimal totalWeight = packages.stream() + .map(p -> { + if (p.getBoxProductWeight() != null && p.getBoxCount() != null) { + return p.getBoxProductWeight().multiply(BigDecimal.valueOf(p.getBoxCount())); + } + return BigDecimal.ZERO; + }) + .reduce(BigDecimal.ZERO, BigDecimal::add); + shipOrderPackageDO.setTotalWeight(totalWeight); + + shipOrderPackageMapper.insert(shipOrderPackageDO); + } + + // 3. 处理供应商信息,转换为发货单项信息(按照规格分组) + // 按销售单价分组供应商信息 + Map> supplierGroupByPrice = orderSupplierDOList.stream() + .collect(Collectors.groupingBy(OrderSupplierDO::getSalePrice)); + + // 创建发货单项信息 + for (Map.Entry> entry : supplierGroupByPrice.entrySet()) { + List suppliers = entry.getValue(); + + // 合并相同价格的供应商信息 + ShipOrderItemDO shipOrderItemDO = new ShipOrderItemDO(); + shipOrderItemDO.setShipOrderId(shipOrderDO.getShipOrderId()); + + // 计算总毛重 + BigDecimal totalGrossWeight = suppliers.stream() + .map(OrderSupplierDO::getGrossWeight) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + shipOrderItemDO.setGrossWeight(totalGrossWeight); + + // 计算总箱重(这里假设箱重需要另外计算) + BigDecimal totalBoxWeight = BigDecimal.ZERO; + shipOrderItemDO.setBoxWeight(totalBoxWeight); + + // 计算总净重 + BigDecimal totalNetWeight = suppliers.stream() + .map(OrderSupplierDO::getNetWeight) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + shipOrderItemDO.setNetWeight(totalNetWeight); + + // 设置单价 + BigDecimal salePrice = entry.getKey(); + shipOrderItemDO.setUnitPrice(salePrice); + + // 计算总金额 + if (salePrice != null) { + BigDecimal totalAmount = salePrice.multiply(totalNetWeight); + shipOrderItemDO.setTotalAmount(totalAmount); + } + + // 设置西瓜品级(这里使用第一个供应商的品级) + if (!suppliers.isEmpty()) { + shipOrderItemDO.setWatermelonGrade(suppliers.get(0).getName()); + } + + shipOrderItemMapper.insert(shipOrderItemDO); + } + + purchaseOrderMapper.updateById(purchaseOrderDO); + } + + /** + * 生成发货单编号 + * + * @return 发货单编号 + */ + private String generateShipOrderSn() { + // 生成类似 SO20251105001 格式的编号 + return java.time.LocalDate.now().format(java.time.format.DateTimeFormatter.BASIC_ISO_DATE) + + String.format("%03d", System.currentTimeMillis() % 1000); + } + + @Override + @Transactional + public void rejectFinal(PurchaseOrderRejectFinalCmd purchaseOrderRejectFinalCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(PurchaseOrderDO.class); + queryWrapper.eq(PurchaseOrderDO::getOrderId, purchaseOrderRejectFinalCmd.getOrderId()); + queryWrapper.last("limit 1"); + + PurchaseOrderDO purchaseOrderDO = purchaseOrderMapper.selectOne(queryWrapper); + purchaseOrderDO.setState(PurchaseOrderStateEnum.WAITING_AUDIT); + purchaseOrderMapper.updateById(purchaseOrderDO); + } + + @Override + public Long countBy(PurchaseOrderCountQry purchaseOrderCountQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(PurchaseOrderDO.class); + queryWrapper.eq(PurchaseOrderDO::getCreatedBy, purchaseOrderCountQry.getCreatedBy()); + queryWrapper.eq(PurchaseOrderDO::getState, purchaseOrderCountQry.getState()); + return purchaseOrderMapper.selectCount(queryWrapper); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/ShipOrderGatewayImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/ShipOrderGatewayImpl.java new file mode 100644 index 0000000..c056e21 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/ShipOrderGatewayImpl.java @@ -0,0 +1,132 @@ +package com.xunhong.erp.turbo.biz.infrastructure.gateway; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderGenerateDocumentCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.common.ShipOrderItem; +import com.xunhong.erp.turbo.api.biz.dto.qry.ShipOrderListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.ShipOrderPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.ShipOrderShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.ShipOrder; +import com.xunhong.erp.turbo.biz.domain.gateway.ShipOrderGateway; +import com.xunhong.erp.turbo.biz.infrastructure.convert.ShipOrderConvert; +import com.xunhong.erp.turbo.biz.infrastructure.entity.ShipOrderDO; +import com.xunhong.erp.turbo.biz.infrastructure.entity.ShipOrderItemDO; +import com.xunhong.erp.turbo.biz.infrastructure.entity.ShipOrderPackageDO; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.ShipOrderItemMapper; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.ShipOrderMapper; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.ShipOrderPackageMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Objects; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class ShipOrderGatewayImpl implements ShipOrderGateway { + private final ShipOrderMapper shipOrderMapper; + private final ShipOrderConvert shipOrderConvert; + + private final ShipOrderItemMapper shipOrderItemMapper; + private final ShipOrderPackageMapper shipOrderPackageMapper; + + @Override + public ShipOrder save(ShipOrderCreateCmd shipOrderCreateCmd) { + ShipOrderDO shipOrderDO = shipOrderConvert.toShipOrderDO(shipOrderCreateCmd); + shipOrderMapper.insert(shipOrderDO); + + return shipOrderConvert.toShipOrder(shipOrderDO); + } + + @Override + public IPage page(ShipOrderPageQry shipOrderPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(ShipOrderDO.class); + queryWrapper.orderByDesc(ShipOrderDO::getCreatedAt); + + IPage page = new Page<>(shipOrderPageQry.getPageIndex(), shipOrderPageQry.getPageSize()); + page = shipOrderMapper.selectPage(page, queryWrapper); + + return page.convert(shipOrderConvert::toShipOrder); + } + + @Override + public List list(ShipOrderListQry shipOrderListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(ShipOrderDO.class); + List shipOrderDOList = shipOrderMapper.selectList(queryWrapper); + return shipOrderDOList.stream().map(shipOrderConvert::toShipOrder).toList(); + } + + @Override + public ShipOrder update(ShipOrderUpdateCmd shipOrderUpdateCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(ShipOrderDO.class); + queryWrapper.eq(ShipOrderDO::getShipOrderId, shipOrderUpdateCmd.getShipOrderId()); + queryWrapper.last("limit 1"); + + ShipOrderDO shipOrderDO = shipOrderMapper.selectOne(queryWrapper); + + shipOrderConvert.toShipOrderDO(shipOrderDO, shipOrderUpdateCmd); + shipOrderMapper.updateById(shipOrderDO); + + return shipOrderConvert.toShipOrder(shipOrderDO); + } + + @Override + public ShipOrder show(ShipOrderShowQry shipOrderShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(ShipOrderDO.class); + queryWrapper.eq(Objects.nonNull(shipOrderShowQry.getShipOrderId()), ShipOrderDO::getShipOrderId, shipOrderShowQry.getShipOrderId()); + queryWrapper.eq(Objects.nonNull(shipOrderShowQry.getPurchaseOrderId()), ShipOrderDO::getPurchaseOrderId, shipOrderShowQry.getPurchaseOrderId()); + + queryWrapper.last("limit 1"); + + ShipOrderDO shipOrderDO = shipOrderMapper.selectOne(queryWrapper); + + if (Objects.nonNull(shipOrderDO)) { + shipOrderDO.setShipOrderItemDOList(shipOrderItemMapper.selectList(Wrappers.lambdaQuery(ShipOrderItemDO.class).eq(ShipOrderItemDO::getShipOrderId, shipOrderDO.getShipOrderId()))); + shipOrderDO.setShipOrderPackageDOList(shipOrderPackageMapper.selectList(Wrappers.lambdaQuery(ShipOrderPackageDO.class).eq(ShipOrderPackageDO::getShipOrderId, shipOrderDO.getShipOrderId()))); + } + + return shipOrderConvert.toShipOrder(shipOrderDO); + } + + @Override + public void destroy(ShipOrderDestroyCmd shipOrderDestroyCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(ShipOrderDO.class); + queryWrapper.eq(ShipOrderDO::getShipOrderId, shipOrderDestroyCmd.getShipOrderId()); + queryWrapper.last("limit 1"); + + ShipOrderDO shipOrderDO = shipOrderMapper.selectOne(queryWrapper); + shipOrderDO.deleteById(); + } + + @Override + public void generateDocument(ShipOrderGenerateDocumentCmd shipOrderGenerateDocumentCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(ShipOrderDO.class); + queryWrapper.eq(ShipOrderDO::getShipOrderId, shipOrderGenerateDocumentCmd.getShipOrderId()); + queryWrapper.select(ShipOrderDO::getShipOrderId, ShipOrderDO::getPurchaseOrderId); + queryWrapper.last("limit 1"); + + ShipOrderDO shipOrderDO = shipOrderMapper.selectOne(queryWrapper); + + // 更新订单明细 + for (ShipOrderItem shipOrderItem : shipOrderGenerateDocumentCmd.getShipOrderItemList()) { + LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(ShipOrderItemDO.class); + updateWrapper.eq(ShipOrderItemDO::getShipOrderId, shipOrderDO.getShipOrderId()); + updateWrapper.set(ShipOrderItemDO::getWatermelonGrade, shipOrderItem.getWatermelonGrade()); + shipOrderItemMapper.update(null, updateWrapper); + } + + shipOrderConvert.toShipOrderDO(shipOrderDO, shipOrderGenerateDocumentCmd); + shipOrderMapper.updateById(shipOrderDO); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/SupplierGatewayImpl.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/SupplierGatewayImpl.java new file mode 100644 index 0000000..44b09dd --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/gateway/SupplierGatewayImpl.java @@ -0,0 +1,102 @@ +package com.xunhong.erp.turbo.biz.infrastructure.gateway; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.SupplierListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.SupplierPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.SupplierShowQry; +import com.xunhong.erp.turbo.biz.domain.entity.Supplier; +import com.xunhong.erp.turbo.biz.domain.gateway.SupplierGateway; +import com.xunhong.erp.turbo.biz.infrastructure.convert.SupplierConvert; +import com.xunhong.erp.turbo.biz.infrastructure.entity.SupplierDO; +import com.xunhong.erp.turbo.biz.infrastructure.mapper.SupplierMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Objects; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class SupplierGatewayImpl implements SupplierGateway { + private final SupplierMapper supplierMapper; + private final SupplierConvert supplierConvert; + + @Override + public Supplier save(SupplierCreateCmd supplierCreateCmd) { + SupplierDO supplierDO = supplierConvert.toSupplierDO(supplierCreateCmd); + supplierMapper.insert(supplierDO); + + return supplierConvert.toSupplier(supplierDO); + } + + @Override + public IPage page(SupplierPageQry supplierPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(SupplierDO.class); + queryWrapper.like(Objects.nonNull(supplierPageQry.getName()), SupplierDO::getName, supplierPageQry.getName()); + queryWrapper.like(Objects.nonNull(supplierPageQry.getIdCard()), SupplierDO::getIdCard, supplierPageQry.getIdCard()); + queryWrapper.like(Objects.nonNull(supplierPageQry.getPhone()), SupplierDO::getPhone, supplierPageQry.getPhone()); + queryWrapper.like(Objects.nonNull(supplierPageQry.getBankCard()), SupplierDO::getBankCard, supplierPageQry.getBankCard()); + queryWrapper.eq(Objects.nonNull(supplierPageQry.getStatus()), SupplierDO::getStatus, supplierPageQry.getStatus()); + queryWrapper.orderByDesc(SupplierDO::getCreatedAt); + + IPage page = new Page<>(supplierPageQry.getPageIndex(), supplierPageQry.getPageSize()); + page = supplierMapper.selectPage(page, queryWrapper); + + return page.convert(supplierConvert::toSupplier); + } + + @Override + public List list(SupplierListQry supplierListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(SupplierDO.class); + queryWrapper.eq(Objects.nonNull(supplierListQry.getSupplierId()), SupplierDO::getSupplierId, supplierListQry.getSupplierId()); + queryWrapper.like(Objects.nonNull(supplierListQry.getName()), SupplierDO::getName, supplierListQry.getName()); + queryWrapper.eq(Objects.nonNull(supplierListQry.getStatus()), SupplierDO::getStatus, supplierListQry.getStatus()); + queryWrapper.orderByDesc(SupplierDO::getCreatedAt); + List supplierDOList = supplierMapper.selectList(queryWrapper); + return supplierDOList.stream().map(supplierConvert::toSupplier).toList(); + } + + @Override + public Supplier update(SupplierUpdateCmd supplierUpdateCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(SupplierDO.class); + queryWrapper.eq(SupplierDO::getSupplierId, supplierUpdateCmd.getSupplierId()); + queryWrapper.last("limit 1"); + + SupplierDO supplierDO = supplierMapper.selectOne(queryWrapper); + + supplierConvert.toSupplierDO(supplierDO, supplierUpdateCmd); + supplierMapper.updateById(supplierDO); + + return supplierConvert.toSupplier(supplierDO); + } + + @Override + public Supplier show(SupplierShowQry supplierShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(SupplierDO.class); + queryWrapper.eq(SupplierDO::getSupplierId, supplierShowQry.getSupplierId()); + queryWrapper.last("limit 1"); + + SupplierDO supplierDO = supplierMapper.selectOne(queryWrapper); + return supplierConvert.toSupplier(supplierDO); + } + + @Override + public void destroy(SupplierDestroyCmd supplierDestroyCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(SupplierDO.class); + queryWrapper.eq(SupplierDO::getSupplierId, supplierDestroyCmd.getSupplierId()); + queryWrapper.last("limit 1"); + + SupplierDO supplierDO = supplierMapper.selectOne(queryWrapper); + supplierDO.deleteById(); + } +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/BoxBrandMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/BoxBrandMapper.java new file mode 100644 index 0000000..d535364 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/BoxBrandMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.BoxBrandDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface BoxBrandMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/BoxProductMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/BoxProductMapper.java new file mode 100644 index 0000000..d16327b --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/BoxProductMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.BoxProductDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface BoxProductMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/CompanyMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/CompanyMapper.java new file mode 100644 index 0000000..2d4b2dd --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/CompanyMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.CompanyDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface CompanyMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/CompanyPaymentAccountMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/CompanyPaymentAccountMapper.java new file mode 100644 index 0000000..44410d6 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/CompanyPaymentAccountMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.CompanyPaymentAccountDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface CompanyPaymentAccountMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/CostItemMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/CostItemMapper.java new file mode 100644 index 0000000..48310d8 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/CostItemMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.CostItemDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface CostItemMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/DealerMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/DealerMapper.java new file mode 100644 index 0000000..5862f91 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/DealerMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface DealerMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/DealerPaymentAccountMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/DealerPaymentAccountMapper.java new file mode 100644 index 0000000..ad7d93b --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/DealerPaymentAccountMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerPaymentAccountDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface DealerPaymentAccountMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/DealerRebateCustomerMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/DealerRebateCustomerMapper.java new file mode 100644 index 0000000..8b94195 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/DealerRebateCustomerMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerRebateCustomerDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface DealerRebateCustomerMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/DealerWarehouseMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/DealerWarehouseMapper.java new file mode 100644 index 0000000..82c39e8 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/DealerWarehouseMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerWarehouseDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface DealerWarehouseMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/GiftBoxMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/GiftBoxMapper.java new file mode 100644 index 0000000..6d11f37 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/GiftBoxMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.GiftBoxDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface GiftBoxMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderCompanyMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderCompanyMapper.java new file mode 100644 index 0000000..70a1bfd --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderCompanyMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderCompanyDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface OrderCompanyMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderCostMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderCostMapper.java new file mode 100644 index 0000000..d55f318 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderCostMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderCostDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface OrderCostMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderDealerMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderDealerMapper.java new file mode 100644 index 0000000..7b8aadc --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderDealerMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderDealerDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface OrderDealerMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderPackageMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderPackageMapper.java new file mode 100644 index 0000000..78f3b6c --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderPackageMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderPackageDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface OrderPackageMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderRebateMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderRebateMapper.java new file mode 100644 index 0000000..1801393 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderRebateMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderRebateDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface OrderRebateMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderSupplierMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderSupplierMapper.java new file mode 100644 index 0000000..79bce7f --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderSupplierMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderSupplierDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface OrderSupplierMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderVehicleMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderVehicleMapper.java new file mode 100644 index 0000000..c83effa --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/OrderVehicleMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderVehicleDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface OrderVehicleMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/PurchaseOrderMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/PurchaseOrderMapper.java new file mode 100644 index 0000000..d88e26b --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/PurchaseOrderMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.PurchaseOrderDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface PurchaseOrderMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/ShipOrderItemMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/ShipOrderItemMapper.java new file mode 100644 index 0000000..842ded1 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/ShipOrderItemMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.ShipOrderItemDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface ShipOrderItemMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/ShipOrderMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/ShipOrderMapper.java new file mode 100644 index 0000000..db3471e --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/ShipOrderMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.ShipOrderDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface ShipOrderMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/ShipOrderPackageMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/ShipOrderPackageMapper.java new file mode 100644 index 0000000..3a3684e --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/ShipOrderPackageMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.ShipOrderPackageDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface ShipOrderPackageMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/SupplierMapper.java b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/SupplierMapper.java new file mode 100644 index 0000000..bbe511d --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/java/com/xunhong/erp/turbo/biz/infrastructure/mapper/SupplierMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.biz.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.biz.infrastructure.entity.SupplierDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface SupplierMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/application.yml b/erp-turbo-business/erp-turbo-biz/src/main/resources/application.yml new file mode 100644 index 0000000..6d4e22b --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/application.yml @@ -0,0 +1,14 @@ +spring: + profiles: + active: dev + application: + name: @application.name@ + config: + import: classpath:cache.yml,classpath:datasource.yml,classpath:rpc.yml,classpath:sa-token.yml + +logging: + level: + com.xunhong.erp.turbo.third.mapper: debug + +server: + port: 8089 diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/bootstrap.yml b/erp-turbo-business/erp-turbo-biz/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..914c581 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/bootstrap.yml @@ -0,0 +1,7 @@ +spring: + profiles: + active: dev + application: + name: @application.name@ + config: + import: classpath:base.yml,classpath:logging.yml,classpath:config.yml diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/i18n/messages.properties b/erp-turbo-business/erp-turbo-biz/src/main/resources/i18n/messages.properties new file mode 100644 index 0000000..ea28719 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/i18n/messages.properties @@ -0,0 +1,22 @@ +msg.200=Success +msg.500=Internal Server Error. +msg.1001=No data +msg.1002=Data saving failed +msg.100000=platform and client do not match. +msg.100001=the current account has been registered in the platform client, please do not register again. +msg.100002= +msg.50001=Obtaining the verification code succeeded +msg.50002=The verification code has expired +msg.50003=The account corresponding to the verification code does not match +msg.50004=Verification code error +validation.account=account number +validation.wechatCode=wechat code +validation.smsCode=message authentication code +validation.mobile=mobile +validation.platform=platform +validation.password=password +validation.min=length must be greater than {min} bits +validation.max=length must be less than {max} bits +validation.size=length must be between {min} ~ {max} bits +validation.regexp=format error +validation.notBlank=must not be empty \ No newline at end of file diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/i18n/messages_en.properties b/erp-turbo-business/erp-turbo-biz/src/main/resources/i18n/messages_en.properties new file mode 100644 index 0000000..ea28719 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/i18n/messages_en.properties @@ -0,0 +1,22 @@ +msg.200=Success +msg.500=Internal Server Error. +msg.1001=No data +msg.1002=Data saving failed +msg.100000=platform and client do not match. +msg.100001=the current account has been registered in the platform client, please do not register again. +msg.100002= +msg.50001=Obtaining the verification code succeeded +msg.50002=The verification code has expired +msg.50003=The account corresponding to the verification code does not match +msg.50004=Verification code error +validation.account=account number +validation.wechatCode=wechat code +validation.smsCode=message authentication code +validation.mobile=mobile +validation.platform=platform +validation.password=password +validation.min=length must be greater than {min} bits +validation.max=length must be less than {max} bits +validation.size=length must be between {min} ~ {max} bits +validation.regexp=format error +validation.notBlank=must not be empty \ No newline at end of file diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/i18n/messages_zh_CN.properties b/erp-turbo-business/erp-turbo-biz/src/main/resources/i18n/messages_zh_CN.properties new file mode 100644 index 0000000..dcd1ed2 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/i18n/messages_zh_CN.properties @@ -0,0 +1,21 @@ +msg.200=\u64CD\u4F5C\u6210\u529F +msg.500=\u7CFB\u7EDF\u5F02\u5E38 +msg.1001=\u6570\u636E\u4E3A\u7A7A +msg.1002=\u6570\u636E\u4FDD\u5B58\u5931\u8D25 +msg.100000=\u5e73\u53f0\u548c\u5ba2\u6237\u7aef\u4e0d\u5339\u914d。 +msg.100001=\u5f53\u524d\u8d26\u53f7\u5df2\u7ecf\u5728\u5e73\u53f0\u5ba2\u6237\u7aef\u6ce8\u518c,\u8bf7\u52ff\u91cd\u590d\u6ce8\u518c。 +msg.50001={0}\u83b7\u53d6\u6210\u529f +msg.50002={0}\u5df2\u8fc7\u671f +msg.50003={0}\u5bf9\u5e94\u7684\u8d26\u53f7\u4e0d\u5339\u914d +msg.50004={0}\u9519\u8bef +validation.account=\u8d26\u53f7 +validation.wechatCode=\u5fae\u4fe1 code +validation.smsCode=\u77ed\u4fe1\u9a8c\u8bc1\u7801 +validation.mobile=\u624b\u673a\u53f7\u7801 +validation.platform=\u5e73\u53f0 +validation.password=\u5bc6\u7801 +validation.min=\u957f\u5ea6\u5fc5\u987b\u5927\u4e8e {min} \u4f4d +validation.max=\u957f\u5ea6\u5fc5\u987b\u5c0f\u4e8e {max} \u4f4d +validation.size=\u957f\u5ea6\u5fc5\u987b\u4ecb\u4e8e {min} ~ {max} \u4f4d +validation.regexp=\u683c\u5f0f\u9519\u8bef +validation.notBlank=\u5fc5\u987b\u4e0d\u80fd\u4e3a\u7a7a \ No newline at end of file diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/BoxBrandMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/BoxBrandMapper.xml new file mode 100644 index 0000000..02046b9 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/BoxBrandMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/BoxProductMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/BoxProductMapper.xml new file mode 100644 index 0000000..2278bf5 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/BoxProductMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/CompanyMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/CompanyMapper.xml new file mode 100644 index 0000000..5ce5485 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/CompanyMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/CompanyPaymentAccountMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/CompanyPaymentAccountMapper.xml new file mode 100644 index 0000000..1c31cb8 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/CompanyPaymentAccountMapper.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/CostItemMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/CostItemMapper.xml new file mode 100644 index 0000000..c7b9f6d --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/CostItemMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/DealerMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/DealerMapper.xml new file mode 100644 index 0000000..97c2b4e --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/DealerMapper.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/DealerPaymentAccountMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/DealerPaymentAccountMapper.xml new file mode 100644 index 0000000..3385d79 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/DealerPaymentAccountMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/DealerRebateCustomerMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/DealerRebateCustomerMapper.xml new file mode 100644 index 0000000..3209cc6 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/DealerRebateCustomerMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/DealerWarehouseMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/DealerWarehouseMapper.xml new file mode 100644 index 0000000..bdfc5dd --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/DealerWarehouseMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/GiftBoxMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/GiftBoxMapper.xml new file mode 100644 index 0000000..ba78bbd --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/GiftBoxMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderCompanyMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderCompanyMapper.xml new file mode 100644 index 0000000..1e46ad2 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderCompanyMapper.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderCostMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderCostMapper.xml new file mode 100644 index 0000000..d7a3c2c --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderCostMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderDealerMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderDealerMapper.xml new file mode 100644 index 0000000..0c50703 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderDealerMapper.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderPackageMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderPackageMapper.xml new file mode 100644 index 0000000..aa4593c --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderPackageMapper.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderRebateMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderRebateMapper.xml new file mode 100644 index 0000000..02ead0a --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderRebateMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderSupplierMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderSupplierMapper.xml new file mode 100644 index 0000000..993ef90 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderSupplierMapper.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderVehicleMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderVehicleMapper.xml new file mode 100644 index 0000000..441a5ca --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/OrderVehicleMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/PurchaseOrderMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/PurchaseOrderMapper.xml new file mode 100644 index 0000000..13e313c --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/PurchaseOrderMapper.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/ShipOrderItemMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/ShipOrderItemMapper.xml new file mode 100644 index 0000000..d1039b1 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/ShipOrderItemMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/ShipOrderMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/ShipOrderMapper.xml new file mode 100644 index 0000000..9b32a8e --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/ShipOrderMapper.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/ShipOrderPackageMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/ShipOrderPackageMapper.xml new file mode 100644 index 0000000..e6a4c00 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/ShipOrderPackageMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/SupplierMapper.xml b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/SupplierMapper.xml new file mode 100644 index 0000000..2554b87 --- /dev/null +++ b/erp-turbo-business/erp-turbo-biz/src/main/resources/mapper/SupplierMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-facade/pom.xml b/erp-turbo-business/erp-turbo-facade/pom.xml new file mode 100644 index 0000000..f73fb05 --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/pom.xml @@ -0,0 +1,151 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-business + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-facade + + + erp-turbo-facade + 21 + 21 + UTF-8 + + + + + + com.alibaba.cola + cola-component-domain-starter + + + com.alibaba.cola + cola-component-exception + + + + + org.springframework.boot + spring-boot-starter + + + + com.xunhong + erp-turbo-base + + + + com.xunhong + erp-turbo-config + + + + com.xunhong + erp-turbo-file + + + + com.xunhong + erp-turbo-api + + + + com.xunhong + erp-turbo-rpc + + + + com.xunhong + erp-turbo-apm + + + + com.xunhong + erp-turbo-logback + + + + com.xunhong + erp-turbo-limiter + + + + com.xunhong + erp-turbo-datasource + + + + com.xunhong + erp-turbo-weixin + + + + com.xunhong + erp-turbo-ai + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + junit + junit + test + + + + + com.h2database + h2 + 1.4.200 + test + + + com.baomidou + mybatis-mate-annotation + 1.3.4 + + + + + ${application.name} + + + org.springframework.boot + spring-boot-maven-plugin + + true + + com.xunhong.erp.turbo.facade.ErpTurboFacadeApplication + + + true + + ../layers/layers.xml + + + + + + package + + repackage + + + + + + + diff --git a/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/ErpTurboFacadeApplication.java b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/ErpTurboFacadeApplication.java new file mode 100644 index 0000000..2ffbba7 --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/ErpTurboFacadeApplication.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.facade; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * Spring Boot Starter + * + * @author shenyifei + */ +@SpringBootApplication(scanBasePackages = {"com.xunhong.erp.turbo", "com.alibaba.cola"}) +public class ErpTurboFacadeApplication { + + public static void main(String[] args) { + SpringApplication.run(ErpTurboFacadeApplication.class, args); + } +} diff --git a/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/adapter/web/controller/WxMaController.java b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/adapter/web/controller/WxMaController.java new file mode 100644 index 0000000..6197ff6 --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/adapter/web/controller/WxMaController.java @@ -0,0 +1,88 @@ +package com.xunhong.erp.turbo.facade.adapter.web.controller; + +import com.xunhong.erp.turbo.api.facade.api.WxMaServiceI; +import com.xunhong.erp.turbo.api.facade.dto.cmd.WxMaCallbackCmd; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.web.bind.annotation.*; + +/** + * 微信小程序回调 + */ +@Slf4j +@Tag(name = "WxMa", description = "微信小程序") +@RestController("facadeWxMaController") +@RequiredArgsConstructor +@RequestMapping(value = "/facade/wx/ma") +public class WxMaController { + + @DubboReference(version = "1.0.0") + private final WxMaServiceI wxMaService; + + /** + * 验证消息的确来自微信服务器 + */ + @GetMapping("{appId}/event") + @Operation(summary = "验证消息的确来自微信服务器", method = "GET", hidden = true) + public Object callback( + @PathVariable("appId") String appId, + @RequestParam("signature") String signature, + @RequestParam("timestamp") String timestamp, + @RequestParam("nonce") String nonce, + @RequestParam("echostr") String echostr + ) { + log.info( + "\n接收微信请求:[appId=[{}], signature=[{}], timestamp=[{}], nonce=[{}], echostr=[{}] ", + appId, signature, timestamp, nonce, echostr); + + if (StringUtils.isAnyBlank(signature, timestamp, nonce, echostr)) { + throw new IllegalArgumentException("请求参数非法,请核实!"); + } + + WxMaCallbackCmd wxMpCallbackCmd = new WxMaCallbackCmd(); + wxMpCallbackCmd.setAppId(appId); + wxMpCallbackCmd.setTimestamp(timestamp); + wxMpCallbackCmd.setNonce(nonce); + wxMpCallbackCmd.setSignature(signature); + wxMpCallbackCmd.setEchostr(echostr); + return wxMaService.callback(wxMpCallbackCmd); + } + + @PostMapping("{appId}/event") + @Operation(summary = "微信消息回调", method = "POST", hidden = true) + public Object callback( + @RequestBody(required = false) String requestBody, + @PathVariable("appId") String appId, + @RequestParam("signature") String signature, + @RequestParam("timestamp") String timestamp, + @RequestParam("nonce") String nonce, + @RequestParam("openid") String openid, + @RequestParam("encrypt_type") String encType, + @RequestParam("msg_signature") String msgSignature + ) { + log.info( + "\n接收微信请求:[appId=[{}], openid=[{}], signature=[{}], encType=[{}], msgSignature=[{}]," + + " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ", + appId, openid, signature, encType, msgSignature, timestamp, nonce, requestBody); + + + if (StringUtils.isAnyBlank(signature, timestamp, nonce)) { + throw new IllegalArgumentException("请求参数非法,请核实!"); + } + + WxMaCallbackCmd wxMpCallbackCmd = new WxMaCallbackCmd(); + wxMpCallbackCmd.setAppId(appId); + wxMpCallbackCmd.setOpenid(openid); + wxMpCallbackCmd.setRequestBody(requestBody); + wxMpCallbackCmd.setTimestamp(timestamp); + wxMpCallbackCmd.setNonce(nonce); + wxMpCallbackCmd.setSignature(signature); + wxMpCallbackCmd.setEncType(encType); + wxMpCallbackCmd.setMsgSignature(msgSignature); + return wxMaService.callback(wxMpCallbackCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/adapter/web/controller/WxMpController.java b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/adapter/web/controller/WxMpController.java new file mode 100644 index 0000000..6bc891a --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/adapter/web/controller/WxMpController.java @@ -0,0 +1,88 @@ +package com.xunhong.erp.turbo.facade.adapter.web.controller; + +import com.xunhong.erp.turbo.api.facade.api.WxMpServiceI; +import com.xunhong.erp.turbo.api.facade.dto.cmd.WxMpCallbackCmd; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.web.bind.annotation.*; + +/** + * 微信公众号回调 + */ +@Slf4j +@Tag(name = "WxMp", description = "微信公众号") +@RestController("facadeWxMpController") +@RequiredArgsConstructor +@RequestMapping(value = "/facade/wx/mp") +public class WxMpController { + + @DubboReference(version = "1.0.0") + private final WxMpServiceI wxMpService; + + /** + * 验证消息的确来自微信服务器 + */ + @GetMapping("{appId}/event") + @Operation(summary = "验证消息的确来自微信服务器", method = "GET", hidden = true) + public Object callback( + @PathVariable("appId") String appId, + @RequestParam("signature") String signature, + @RequestParam("timestamp") String timestamp, + @RequestParam("nonce") String nonce, + @RequestParam("echostr") String echostr + ) { + log.info( + "\n接收微信请求:[appId=[{}], signature=[{}], timestamp=[{}], nonce=[{}], echostr=[{}] ", + appId, signature, timestamp, nonce, echostr); + + if (StringUtils.isAnyBlank(signature, timestamp, nonce, echostr)) { + throw new IllegalArgumentException("请求参数非法,请核实!"); + } + + WxMpCallbackCmd wxMpCallbackCmd = new WxMpCallbackCmd(); + wxMpCallbackCmd.setAppId(appId); + wxMpCallbackCmd.setTimestamp(timestamp); + wxMpCallbackCmd.setNonce(nonce); + wxMpCallbackCmd.setSignature(signature); + wxMpCallbackCmd.setEchostr(echostr); + return wxMpService.callback(wxMpCallbackCmd); + } + + @PostMapping("{appId}/event") + @Operation(summary = "微信消息回调", method = "POST", hidden = true) + public Object callback( + @RequestBody(required = false) String requestBody, + @PathVariable("appId") String appId, + @RequestParam("signature") String signature, + @RequestParam("timestamp") String timestamp, + @RequestParam("nonce") String nonce, + @RequestParam("openid") String openid, + @RequestParam("encrypt_type") String encType, + @RequestParam("msg_signature") String msgSignature + ) { + log.info( + "\n接收微信请求:[appId=[{}], openid=[{}], signature=[{}], encType=[{}], msgSignature=[{}]," + + " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ", + appId, openid, signature, encType, msgSignature, timestamp, nonce, requestBody); + + + if (StringUtils.isAnyBlank(signature, timestamp, nonce)) { + throw new IllegalArgumentException("请求参数非法,请核实!"); + } + + WxMpCallbackCmd wxMpCallbackCmd = new WxMpCallbackCmd(); + wxMpCallbackCmd.setAppId(appId); + wxMpCallbackCmd.setOpenid(openid); + wxMpCallbackCmd.setRequestBody(requestBody); + wxMpCallbackCmd.setTimestamp(timestamp); + wxMpCallbackCmd.setNonce(nonce); + wxMpCallbackCmd.setSignature(signature); + wxMpCallbackCmd.setEncType(encType); + wxMpCallbackCmd.setMsgSignature(msgSignature); + return wxMpService.callback(wxMpCallbackCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/VehicleExtractionCmdExe.java b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/VehicleExtractionCmdExe.java new file mode 100644 index 0000000..dc60c51 --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/VehicleExtractionCmdExe.java @@ -0,0 +1,51 @@ +package com.xunhong.erp.turbo.facade.app.executor.cmd; + +import com.alibaba.fastjson2.JSONObject; +import com.xunhong.erp.turbo.api.facade.dto.cmd.VehicleExtractionCmd; +import com.xunhong.erp.turbo.api.facade.dto.vo.VehicleExtractionVO; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.ai.chat.messages.SystemMessage; +import org.springframework.ai.chat.messages.UserMessage; +import org.springframework.ai.chat.model.ChatResponse; +import org.springframework.ai.chat.prompt.Prompt; +import org.springframework.ai.deepseek.DeepSeekChatModel; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class VehicleExtractionCmdExe { + + private final DeepSeekChatModel deepSeekChatModel; + + @SneakyThrows + public VehicleExtractionVO execute(VehicleExtractionCmd vehicleExtractionCmd) { + SystemMessage systemMessage = SystemMessage.builder().text("# 角色\n" + + "你是物流信息处理助手,可以快速提取和整理运单中的关键信息(车牌号、司机、电话、出发地、目的地、运费)。\n" + + "\n" + + "# 限制\n" + + "只做信息提取,如果没有可提取的数据请返回 {}\n" + + "\n" + + "## 输入示例\n" + + "15号装车 9米6高栏 兴仁拉纸箱\n" + + "五合镇附近——湖北襄阳\n" + + "豫RFC220\n" + + "13937795142\n" + + "吨位 18-19吨\n" + + "运费:7000元\n" + + "工作上班时间,12小时内卸完货结运费,如遇雨天延迟装货不补运费\n" + + "\n" + + "## 输出示例\n" + + "{\"plate\":\"豫RFC220\",\"driver\":null,\"phone\":\"13937795142\",\"origin\":\"五合镇附近\",\"destination\":\"湖北襄阳\",\"price\":\"7000\"}").build(); + + UserMessage userMessage = UserMessage.builder().text(vehicleExtractionCmd.getMessage()).build(); + Prompt prompt = Prompt.builder().messages(List.of(systemMessage, userMessage)).build(); + ChatResponse chatResponse = deepSeekChatModel.call(prompt); + + return JSONObject.parseObject(chatResponse.getResult().getOutput().getText(), VehicleExtractionVO.class); + } +} diff --git a/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMaCallbackCmdExe.java b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMaCallbackCmdExe.java new file mode 100644 index 0000000..8560164 --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMaCallbackCmdExe.java @@ -0,0 +1,34 @@ +package com.xunhong.erp.turbo.facade.app.executor.cmd; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import com.xunhong.erp.turbo.api.facade.dto.cmd.WxMaCallbackCmd; +import com.xunhong.erp.turbo.api.infra.api.SettingServiceI; +import com.xunhong.erp.turbo.facade.app.executor.common.WxCmdExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class WxMaCallbackCmdExe extends WxCmdExe { + + @DubboReference(version = "1.0.0") + private final SettingServiceI settingService; + + public String execute(WxMaCallbackCmd wxMaCallbackCmd) { + WxMaService wxMaService = getWxMaService(settingService); + + boolean checkSignature = wxMaService.checkSignature(wxMaCallbackCmd.getTimestamp(), wxMaCallbackCmd.getNonce(), wxMaCallbackCmd.getSignature()); + if (!checkSignature) { + return "非法请求"; + } + + if (wxMaCallbackCmd.getEchostr() != null) { + return wxMaCallbackCmd.getEchostr(); + } + + return ""; + } +} diff --git a/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMaNotifyCmdExe.java b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMaNotifyCmdExe.java new file mode 100644 index 0000000..07d2451 --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMaNotifyCmdExe.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.facade.app.executor.cmd; + +import com.xunhong.erp.turbo.api.facade.dto.cmd.WxCpNotifyCmd; +import com.xunhong.erp.turbo.facade.app.executor.common.WxCmdExe; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.cp.api.WxCpGroupRobotService; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class WxMaNotifyCmdExe extends WxCmdExe { + + @SneakyThrows + public void execute(WxCpNotifyCmd wxCpNotifyCmd) { + WxCpGroupRobotService wxCpGroupRobotService = getWxCpGroupRobotService(wxCpNotifyCmd.getWebhookKey()); + wxCpGroupRobotService.sendMarkdown(wxCpNotifyCmd.getContent()); + } +} diff --git a/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMaOcrBankCardCmdExe.java b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMaOcrBankCardCmdExe.java new file mode 100644 index 0000000..86640a3 --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMaOcrBankCardCmdExe.java @@ -0,0 +1,34 @@ +package com.xunhong.erp.turbo.facade.app.executor.cmd; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import com.xunhong.erp.turbo.api.facade.dto.vo.WxMaOcrBankCardVO; +import com.xunhong.erp.turbo.api.infra.api.SettingServiceI; +import com.xunhong.erp.turbo.facade.app.executor.common.WxCmdExe; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import me.chanjar.weixin.common.bean.ocr.WxOcrBankCardResult; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Component +@RequiredArgsConstructor +public class WxMaOcrBankCardCmdExe extends WxCmdExe { + + @DubboReference(version = "1.0.0") + private final SettingServiceI settingService; + + @SneakyThrows + public WxMaOcrBankCardVO execute(String ocrUrl) { + WxMaService wxMaService = getWxMaService(settingService); + WxOcrBankCardResult wxOcrBankCardResult = wxMaService.getOcrService().bankCard(ocrUrl); + String number = wxOcrBankCardResult.getNumber(); + WxMaOcrBankCardVO wxMaOcrBankCardVO = new WxMaOcrBankCardVO(); + wxMaOcrBankCardVO.setNumber(number); + wxMaOcrBankCardVO.setOcrUrl(ocrUrl); + + return wxMaOcrBankCardVO; + } +} diff --git a/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMaOcrIdCardCmdExe.java b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMaOcrIdCardCmdExe.java new file mode 100644 index 0000000..a318d27 --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMaOcrIdCardCmdExe.java @@ -0,0 +1,35 @@ +package com.xunhong.erp.turbo.facade.app.executor.cmd; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import com.xunhong.erp.turbo.api.facade.dto.vo.WxMaOcrIdCardVO; +import com.xunhong.erp.turbo.api.infra.api.SettingServiceI; +import com.xunhong.erp.turbo.facade.app.executor.common.WxCmdExe; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import me.chanjar.weixin.common.bean.ocr.WxOcrIdCardResult; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Component +@RequiredArgsConstructor +public class WxMaOcrIdCardCmdExe extends WxCmdExe { + + @DubboReference(version = "1.0.0") + private final SettingServiceI settingService; + + @SneakyThrows + public WxMaOcrIdCardVO execute(String ocrUrl) { + WxMaService wxMaService = getWxMaService(settingService); + WxOcrIdCardResult wxOcrIdCardResult = wxMaService.getOcrService().idCard(ocrUrl); + String name = wxOcrIdCardResult.getName(); + String idCard = wxOcrIdCardResult.getId(); + WxMaOcrIdCardVO wxMaOcrIdCardVO = new WxMaOcrIdCardVO(); + wxMaOcrIdCardVO.setName(name); + wxMaOcrIdCardVO.setIdCard(idCard); + wxMaOcrIdCardVO.setOcrUrl(ocrUrl); + return wxMaOcrIdCardVO; + } +} diff --git a/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMpCallbackCmdExe.java b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMpCallbackCmdExe.java new file mode 100644 index 0000000..f6f4c13 --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxMpCallbackCmdExe.java @@ -0,0 +1,105 @@ +package com.xunhong.erp.turbo.facade.app.executor.cmd; + +import com.xunhong.erp.turbo.api.facade.dto.cmd.WxMpCallbackCmd; +import com.xunhong.erp.turbo.api.infra.api.SettingServiceI; +import com.xunhong.erp.turbo.facade.app.executor.common.WxCmdExe; +import com.xunhong.erp.turbo.facade.app.executor.handler.SubscribeHandler; +import com.xunhong.erp.turbo.facade.app.executor.handler.UnsubscribeHandler; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.mp.api.WxMpMessageRouter; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Component; + +import static me.chanjar.weixin.common.api.WxConsts.EventType.SUBSCRIBE; +import static me.chanjar.weixin.common.api.WxConsts.XmlMsgType.EVENT; +import static me.chanjar.weixin.cp.constant.WxCpConsts.SchoolContactChangeType.UNSUBSCRIBE; + +@Slf4j +@Component +@RequiredArgsConstructor +public class WxMpCallbackCmdExe extends WxCmdExe { + + @DubboReference(version = "1.0.0") + private final SettingServiceI settingService; + + private final SubscribeHandler subscribeHandler; + + private final UnsubscribeHandler unsubscribeHandler; + + private WxMpMessageRouter router; + + public String execute(WxMpCallbackCmd wxMpCallbackCmd) { + WxMpService wxMpService = getWxMpService(settingService); + + boolean checkSignature = wxMpService.checkSignature(wxMpCallbackCmd.getTimestamp(), wxMpCallbackCmd.getNonce(), wxMpCallbackCmd.getSignature()); + if (!checkSignature) { + return "非法请求"; + } + + if (wxMpCallbackCmd.getEchostr() != null) { + return wxMpCallbackCmd.getEchostr(); + } + + this.refreshRouter(wxMpService); + + String out = null; + String encType = wxMpCallbackCmd.getEncType(); + if (encType == null) { + // 明文传输的消息 + WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(wxMpCallbackCmd.getRequestBody()); + WxMpXmlOutMessage outMessage = this.route(inMessage); + if (outMessage == null) { + return ""; + } + + out = outMessage.toXml(); + } else if ("aes".equals(encType)) { + // aes加密的消息 + WxMpXmlMessage inMessage = WxMpXmlMessage.fromEncryptedXml( + wxMpCallbackCmd.getRequestBody(), + wxMpService.getWxMpConfigStorage(), + wxMpCallbackCmd.getTimestamp(), + wxMpCallbackCmd.getNonce(), + wxMpCallbackCmd.getMsgSignature() + ); + + log.debug("\n消息解密后内容为:\n{} ", inMessage.toString()); + WxMpXmlOutMessage outMessage = this.route(inMessage); + if (outMessage == null) { + return ""; + } + + out = outMessage.toEncryptedXml(wxMpService.getWxMpConfigStorage()); + } + + log.debug("\n组装回复信息:{}", out); + + return out; + } + + public WxMpXmlOutMessage route(WxMpXmlMessage message) { + try { + return this.router.route(message); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + + return null; + } + + + private void refreshRouter(WxMpService wxMpService) { + final WxMpMessageRouter newRouter = new WxMpMessageRouter(wxMpService); + + // 关注事件 + newRouter.rule().async(false).msgType(EVENT).event(SUBSCRIBE).handler(this.subscribeHandler).end(); + // 取消关注事件 + newRouter.rule().async(false).msgType(EVENT).event(UNSUBSCRIBE).handler(this.unsubscribeHandler).end(); + + this.router = newRouter; + } +} diff --git a/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxPhoneBindCmdExe.java b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxPhoneBindCmdExe.java new file mode 100644 index 0000000..116b20f --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/cmd/WxPhoneBindCmdExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.facade.app.executor.cmd; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; +import com.xunhong.erp.turbo.api.facade.dto.qry.WxMaPhoneQry; +import com.xunhong.erp.turbo.api.infra.api.SettingServiceI; +import com.xunhong.erp.turbo.facade.app.executor.common.WxCmdExe; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Component +@RequiredArgsConstructor +public class WxPhoneBindCmdExe extends WxCmdExe { + + @DubboReference(version = "1.0.0") + private final SettingServiceI settingService; + + @SneakyThrows + public String execute(WxMaPhoneQry wxMaPhoneQry) { + WxMaService wxMaService = getWxMaService(settingService); + WxMaPhoneNumberInfo phoneNumber = wxMaService.getUserService().getPhoneNumber(wxMaPhoneQry.getCode()); + return phoneNumber.getPhoneNumber(); + } +} diff --git a/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/common/WxCmdExe.java b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/common/WxCmdExe.java new file mode 100644 index 0000000..03f9a8c --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/common/WxCmdExe.java @@ -0,0 +1,113 @@ +package com.xunhong.erp.turbo.facade.app.executor.common; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; +import cn.binarywang.wx.miniapp.config.impl.WxMaRedissonConfigImpl; +import cn.hutool.extra.spring.SpringUtil; +import com.github.binarywang.wxpay.config.WxPayConfig; +import com.github.binarywang.wxpay.service.WxPayService; +import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl; +import com.xunhong.erp.turbo.api.infra.api.SettingServiceI; +import com.xunhong.erp.turbo.api.infra.dto.common.*; +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; +import com.xunhong.erp.turbo.api.infra.dto.qry.SettingShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.SettingVO; +import me.chanjar.weixin.cp.api.WxCpGroupRobotService; +import me.chanjar.weixin.cp.api.impl.WxCpGroupRobotServiceImpl; +import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl; +import me.chanjar.weixin.cp.config.impl.WxCpRedissonConfigImpl; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl; +import me.chanjar.weixin.mp.config.impl.WxMpRedissonConfigImpl; +import org.redisson.api.RedissonClient; + +import java.nio.charset.StandardCharsets; + +/** + * @author shenyifei + */ +public class WxCmdExe { + + public WxMaService getWxMaService(SettingServiceI settingService) { + SettingShowQry settingShowQry = new SettingShowQry(); + settingShowQry.setSettingKey(SettingKeyEnum.WX_MA_CONFIG); + SettingVO settingVO = settingService.show(settingShowQry); + WxMaConfigValue wxMaConfigValue = (WxMaConfigValue) settingVO.getSettingValue(); + + RedissonClient redissonClient = SpringUtil.getBean(RedissonClient.class); + WxMaRedissonConfigImpl wxMaRedissonConfig = new WxMaRedissonConfigImpl(redissonClient); + wxMaRedissonConfig.setAppid(wxMaConfigValue.getAppId()); + wxMaRedissonConfig.setSecret(wxMaConfigValue.getAppSecret()); + + SettingShowQry settingShowQry1 = new SettingShowQry(); + settingShowQry1.setSettingKey(SettingKeyEnum.WX_MA_MESSAGE_PUSH_CONFIG); + SettingVO settingVO1 = settingService.show(settingShowQry1); + WxMaMessagePushConfigValue wxMaMessagePushConfigValue = (WxMaMessagePushConfigValue) settingVO1.getSettingValue(); + wxMaRedissonConfig.setToken(wxMaMessagePushConfigValue.getToken()); + wxMaRedissonConfig.setAesKey(wxMaMessagePushConfigValue.getEncodingAESKey()); + + WxMaServiceImpl wxMaService = new WxMaServiceImpl(); + wxMaService.setWxMaConfig(wxMaRedissonConfig); + + return wxMaService; + } + + public WxMpService getWxMpService(SettingServiceI settingService) { + SettingShowQry settingShowQry = new SettingShowQry(); + settingShowQry.setSettingKey(SettingKeyEnum.WX_MP_CONFIG); + SettingVO settingVO = settingService.show(settingShowQry); + WxMpConfigValue wxMpConfigValue = (WxMpConfigValue) settingVO.getSettingValue(); + + RedissonClient redissonClient = SpringUtil.getBean(RedissonClient.class); + WxMpRedissonConfigImpl wxMpRedissonConfig = new WxMpRedissonConfigImpl(redissonClient); + wxMpRedissonConfig.setAppId(wxMpConfigValue.getAppId()); + wxMpRedissonConfig.setSecret(wxMpConfigValue.getAppSecret()); + + SettingShowQry settingShowQry1 = new SettingShowQry(); + settingShowQry1.setSettingKey(SettingKeyEnum.WX_MP_MESSAGE_PUSH_CONFIG); + SettingVO settingVO1 = settingService.show(settingShowQry1); + WxMpMessagePushConfigValue wxMpMessagePushConfigValue = (WxMpMessagePushConfigValue) settingVO1.getSettingValue(); + wxMpRedissonConfig.setToken(wxMpMessagePushConfigValue.getToken()); + wxMpRedissonConfig.setAesKey(wxMpMessagePushConfigValue.getEncodingAESKey()); + + WxMpServiceImpl wxMpService = new WxMpServiceImpl(); + wxMpService.setWxMpConfigStorage(wxMpRedissonConfig); + + return wxMpService; + } + + + public WxPayService getWxPayService(SettingServiceI settingService) { + SettingShowQry settingShowQry = new SettingShowQry(); + settingShowQry.setSettingKey(SettingKeyEnum.WX_PAY_CONFIG); + SettingVO settingVO = settingService.show(settingShowQry); + + WxPayConfigValue wxPayConfigValue = (WxPayConfigValue) settingVO.getSettingValue(); + + WxPayConfig wxPayConfig = new WxPayConfig(); + wxPayConfig.setAppId(wxPayConfigValue.getAppId()); + wxPayConfig.setMchId(wxPayConfigValue.getMchId()); + wxPayConfig.setApiV3Key(wxPayConfigValue.getApiV3Key()); + wxPayConfig.setCertSerialNo(wxPayConfigValue.getCertSerialNo()); + wxPayConfig.setPrivateCertContent(wxPayConfigValue.getPrivateCertString().getBytes(StandardCharsets.UTF_8)); + wxPayConfig.setPrivateKeyContent(wxPayConfigValue.getPrivateKeyString().getBytes(StandardCharsets.UTF_8)); + wxPayConfig.setPublicKeyId(wxPayConfigValue.getPublicKeyId()); + wxPayConfig.setPublicKeyContent(wxPayConfigValue.getPublicKeyString().getBytes(StandardCharsets.UTF_8)); + wxPayConfig.setNotifyUrl(wxPayConfigValue.getNotifyUrl()); + + WxPayServiceImpl wxPayService = new WxPayServiceImpl(); + wxPayService.setConfig(wxPayConfig); + + return wxPayService; + } + + public WxCpGroupRobotService getWxCpGroupRobotService(String webhookKey) { + RedissonClient redissonClient = SpringUtil.getBean(RedissonClient.class); + WxCpRedissonConfigImpl wxCpRedissonConfig = new WxCpRedissonConfigImpl(redissonClient); + wxCpRedissonConfig.setWebhookKey(webhookKey); + + WxCpServiceImpl wxCpService = new WxCpServiceImpl(); + wxCpService.setWxCpConfigStorage(wxCpRedissonConfig); + return new WxCpGroupRobotServiceImpl(wxCpService); + } +} diff --git a/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/handler/SubscribeHandler.java b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/handler/SubscribeHandler.java new file mode 100644 index 0000000..0697d81 --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/handler/SubscribeHandler.java @@ -0,0 +1,74 @@ +package com.xunhong.erp.turbo.facade.app.executor.handler; + +import com.xunhong.erp.turbo.api.facade.dto.qry.WxMaOpenidQry; +import com.xunhong.erp.turbo.api.user.api.UserAuthServiceI; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.session.WxSessionManager; +import me.chanjar.weixin.mp.api.WxMpMessageHandler; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import me.chanjar.weixin.mp.bean.result.WxMpUser; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Slf4j +@Component +@RequiredArgsConstructor +public class SubscribeHandler implements WxMpMessageHandler { + + @DubboReference(version = "1.0.0") + private final UserAuthServiceI userAuthService; + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMpXmlMessage, Map context, WxMpService wxMpService, + WxSessionManager sessionManager) throws WxErrorException { + + log.info("新关注用户 OPENID: {}", wxMpXmlMessage.getFromUser()); + + // 获取微信用户基本信息 + WxMpUser userWxInfo = wxMpService.getUserService().userInfo(wxMpXmlMessage.getFromUser(), null); + + if (userWxInfo != null) { + log.info("用户基本信息: {}", userWxInfo); + + WxMaOpenidQry wxMaOpenidQry = new WxMaOpenidQry(); + wxMaOpenidQry.setMpOpenid(userWxInfo.getOpenId()); + wxMaOpenidQry.setUnionid(userWxInfo.getUnionId()); + userAuthService.wxMaCodeLogin(wxMaOpenidQry); + } + + WxMpXmlOutMessage responseResult = null; + try { + responseResult = handleSpecial(wxMpXmlMessage); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + + if (responseResult != null) { + return responseResult; + } + + try { + return WxMpXmlOutMessage.TEXT().content("感谢关注") + .fromUser(wxMpXmlMessage.getToUser()).toUser(wxMpXmlMessage.getFromUser()) + .build(); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + + return null; + } + + /** + * 处理特殊请求,比如如果是扫码进来的,可以做相应处理 + */ + protected WxMpXmlOutMessage handleSpecial(WxMpXmlMessage wxMessage) throws Exception { + //TODO + return null; + } +} diff --git a/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/handler/UnsubscribeHandler.java b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/handler/UnsubscribeHandler.java new file mode 100644 index 0000000..009e70b --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/handler/UnsubscribeHandler.java @@ -0,0 +1,37 @@ +package com.xunhong.erp.turbo.facade.app.executor.handler; + +import com.xunhong.erp.turbo.api.user.api.UserServiceI; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.session.WxSessionManager; +import me.chanjar.weixin.mp.api.WxMpMessageHandler; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import me.chanjar.weixin.mp.bean.result.WxMpUser; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Slf4j +@Component +@RequiredArgsConstructor +public class UnsubscribeHandler implements WxMpMessageHandler { + + @DubboReference(version = "1.0.0") + private final UserServiceI userService; + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMpXmlMessage, Map map, WxMpService wxMpService, WxSessionManager wxSessionManager) throws WxErrorException { + log.info("取消关注用户 OPENID: {}", wxMpXmlMessage.getFromUser()); + + // 获取微信用户基本信息 + WxMpUser userWxInfo = wxMpService.getUserService().userInfo(wxMpXmlMessage.getFromUser(), null); + + log.info("取消关注用户信息: {}", userWxInfo); + + return null; + } +} diff --git a/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/query/WxOpenidQryExe.java b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/query/WxOpenidQryExe.java new file mode 100644 index 0000000..dea3a1d --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/executor/query/WxOpenidQryExe.java @@ -0,0 +1,34 @@ +package com.xunhong.erp.turbo.facade.app.executor.query; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; +import com.xunhong.erp.turbo.api.facade.dto.qry.WxMaOpenidQry; +import com.xunhong.erp.turbo.api.facade.dto.vo.WxMaOpenidVO; +import com.xunhong.erp.turbo.api.infra.api.SettingServiceI; +import com.xunhong.erp.turbo.facade.app.executor.common.WxCmdExe; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Component +@RequiredArgsConstructor +public class WxOpenidQryExe extends WxCmdExe { + + @DubboReference(version = "1.0.0") + private final SettingServiceI settingService; + + @SneakyThrows + public WxMaOpenidVO execute(WxMaOpenidQry wxMaOpenidQry) { + WxMaService wxMaService = getWxMaService(settingService); + WxMaJscode2SessionResult wxMaJscode2SessionResult = wxMaService.jsCode2SessionInfo(wxMaOpenidQry.getCode()); + + WxMaOpenidVO wxMaOpenidVO = new WxMaOpenidVO(); + wxMaOpenidVO.setOpenid(wxMaJscode2SessionResult.getOpenid()); + wxMaOpenidVO.setUnionid(wxMaJscode2SessionResult.getUnionid()); + return wxMaOpenidVO; + } +} diff --git a/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/service/DeepSeekServiceImpl.java b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/service/DeepSeekServiceImpl.java new file mode 100644 index 0000000..54c3fd4 --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/service/DeepSeekServiceImpl.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.facade.app.service; + +import com.xunhong.erp.turbo.api.facade.api.DeepSeekServiceI; +import com.xunhong.erp.turbo.api.facade.dto.cmd.VehicleExtractionCmd; +import com.xunhong.erp.turbo.api.facade.dto.vo.VehicleExtractionVO; +import com.xunhong.erp.turbo.facade.app.executor.cmd.VehicleExtractionCmdExe; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +@Service +@DubboService(interfaceClass = DeepSeekServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class DeepSeekServiceImpl implements DeepSeekServiceI { + + private final VehicleExtractionCmdExe vehicleExtractionCmdExe; + + @Override + public VehicleExtractionVO vehicleExtraction(VehicleExtractionCmd vehicleExtractionCmd) { + return vehicleExtractionCmdExe.execute(vehicleExtractionCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/service/WxCpServiceImpl.java b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/service/WxCpServiceImpl.java new file mode 100644 index 0000000..cabb62f --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/service/WxCpServiceImpl.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.facade.app.service; + +import com.xunhong.erp.turbo.api.facade.api.WxCpServiceI; +import com.xunhong.erp.turbo.api.facade.api.WxMpServiceI; +import com.xunhong.erp.turbo.api.facade.dto.cmd.WxCpNotifyCmd; +import com.xunhong.erp.turbo.facade.app.executor.cmd.WxMaNotifyCmdExe; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +@Service +@DubboService(interfaceClass = WxMpServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class WxCpServiceImpl implements WxCpServiceI { + + private final WxMaNotifyCmdExe wxMaNotifyCmdExe; + + @Override + public void notify(WxCpNotifyCmd wxCpNotifyCmd) { + wxMaNotifyCmdExe.execute(wxCpNotifyCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/service/WxMaServiceImpl.java b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/service/WxMaServiceImpl.java new file mode 100644 index 0000000..5fe0f02 --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/service/WxMaServiceImpl.java @@ -0,0 +1,54 @@ +package com.xunhong.erp.turbo.facade.app.service; + +import com.xunhong.erp.turbo.api.facade.api.WxMaServiceI; +import com.xunhong.erp.turbo.api.facade.dto.cmd.WxMaCallbackCmd; +import com.xunhong.erp.turbo.api.facade.dto.qry.WxMaOpenidQry; +import com.xunhong.erp.turbo.api.facade.dto.qry.WxMaPhoneQry; +import com.xunhong.erp.turbo.api.facade.dto.vo.WxMaOcrBankCardVO; +import com.xunhong.erp.turbo.api.facade.dto.vo.WxMaOcrIdCardVO; +import com.xunhong.erp.turbo.api.facade.dto.vo.WxMaOpenidVO; +import com.xunhong.erp.turbo.facade.app.executor.cmd.WxMaCallbackCmdExe; +import com.xunhong.erp.turbo.facade.app.executor.cmd.WxMaOcrBankCardCmdExe; +import com.xunhong.erp.turbo.facade.app.executor.cmd.WxMaOcrIdCardCmdExe; +import com.xunhong.erp.turbo.facade.app.executor.cmd.WxPhoneBindCmdExe; +import com.xunhong.erp.turbo.facade.app.executor.query.WxOpenidQryExe; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +@Service +@DubboService(interfaceClass = WxMaServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class WxMaServiceImpl implements WxMaServiceI { + + private final WxOpenidQryExe wxMaOpenidQryExe; + private final WxPhoneBindCmdExe wxMaPhoneBindCmdExe; + private final WxMaCallbackCmdExe wxMaCallbackCmdExe; + private final WxMaOcrIdCardCmdExe wxMaOcrIdCardCmdExe; + private final WxMaOcrBankCardCmdExe wxMaOcrBankCardCmdExe; + + @Override + public String callback(WxMaCallbackCmd wxMaCallbackCmd) { + return wxMaCallbackCmdExe.execute(wxMaCallbackCmd); + } + + @Override + public WxMaOpenidVO getOpenId(WxMaOpenidQry wxMaOpenidQry) { + return wxMaOpenidQryExe.execute(wxMaOpenidQry); + } + + @Override + public String getPhone(WxMaPhoneQry wxMaPhoneQry) { + return wxMaPhoneBindCmdExe.execute(wxMaPhoneQry); + } + + @Override + public WxMaOcrIdCardVO ocrIdCard(String ocrUrl) { + return wxMaOcrIdCardCmdExe.execute(ocrUrl); + } + + @Override + public WxMaOcrBankCardVO ocrBankCard(String ocrUrl) { + return wxMaOcrBankCardCmdExe.execute(ocrUrl); + } +} diff --git a/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/service/WxMpServiceImpl.java b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/service/WxMpServiceImpl.java new file mode 100644 index 0000000..0592cec --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/java/com/xunhong/erp/turbo/facade/app/service/WxMpServiceImpl.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.facade.app.service; + +import com.xunhong.erp.turbo.api.facade.api.WxMpServiceI; +import com.xunhong.erp.turbo.api.facade.dto.cmd.WxMpCallbackCmd; +import com.xunhong.erp.turbo.facade.app.executor.cmd.WxMpCallbackCmdExe; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +@Service +@DubboService(interfaceClass = WxMpServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class WxMpServiceImpl implements WxMpServiceI { + + private final WxMpCallbackCmdExe wxMpCallbackCmdExe; + + @Override + public String callback(WxMpCallbackCmd wxMpCallbackCmd) { + return wxMpCallbackCmdExe.execute(wxMpCallbackCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-facade/src/main/resources/application.yml b/erp-turbo-business/erp-turbo-facade/src/main/resources/application.yml new file mode 100644 index 0000000..6d4e22b --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/resources/application.yml @@ -0,0 +1,14 @@ +spring: + profiles: + active: dev + application: + name: @application.name@ + config: + import: classpath:cache.yml,classpath:datasource.yml,classpath:rpc.yml,classpath:sa-token.yml + +logging: + level: + com.xunhong.erp.turbo.third.mapper: debug + +server: + port: 8089 diff --git a/erp-turbo-business/erp-turbo-facade/src/main/resources/bootstrap.yml b/erp-turbo-business/erp-turbo-facade/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..0482155 --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/resources/bootstrap.yml @@ -0,0 +1,7 @@ +spring: + profiles: + active: dev + application: + name: @application.name@ + config: + import: classpath:base.yml,classpath:logging.yml,classpath:config.yml,classpath:openapi.yml diff --git a/erp-turbo-business/erp-turbo-facade/src/main/resources/i18n/messages.properties b/erp-turbo-business/erp-turbo-facade/src/main/resources/i18n/messages.properties new file mode 100644 index 0000000..ea28719 --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/resources/i18n/messages.properties @@ -0,0 +1,22 @@ +msg.200=Success +msg.500=Internal Server Error. +msg.1001=No data +msg.1002=Data saving failed +msg.100000=platform and client do not match. +msg.100001=the current account has been registered in the platform client, please do not register again. +msg.100002= +msg.50001=Obtaining the verification code succeeded +msg.50002=The verification code has expired +msg.50003=The account corresponding to the verification code does not match +msg.50004=Verification code error +validation.account=account number +validation.wechatCode=wechat code +validation.smsCode=message authentication code +validation.mobile=mobile +validation.platform=platform +validation.password=password +validation.min=length must be greater than {min} bits +validation.max=length must be less than {max} bits +validation.size=length must be between {min} ~ {max} bits +validation.regexp=format error +validation.notBlank=must not be empty \ No newline at end of file diff --git a/erp-turbo-business/erp-turbo-facade/src/main/resources/i18n/messages_en.properties b/erp-turbo-business/erp-turbo-facade/src/main/resources/i18n/messages_en.properties new file mode 100644 index 0000000..ea28719 --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/resources/i18n/messages_en.properties @@ -0,0 +1,22 @@ +msg.200=Success +msg.500=Internal Server Error. +msg.1001=No data +msg.1002=Data saving failed +msg.100000=platform and client do not match. +msg.100001=the current account has been registered in the platform client, please do not register again. +msg.100002= +msg.50001=Obtaining the verification code succeeded +msg.50002=The verification code has expired +msg.50003=The account corresponding to the verification code does not match +msg.50004=Verification code error +validation.account=account number +validation.wechatCode=wechat code +validation.smsCode=message authentication code +validation.mobile=mobile +validation.platform=platform +validation.password=password +validation.min=length must be greater than {min} bits +validation.max=length must be less than {max} bits +validation.size=length must be between {min} ~ {max} bits +validation.regexp=format error +validation.notBlank=must not be empty \ No newline at end of file diff --git a/erp-turbo-business/erp-turbo-facade/src/main/resources/i18n/messages_zh_CN.properties b/erp-turbo-business/erp-turbo-facade/src/main/resources/i18n/messages_zh_CN.properties new file mode 100644 index 0000000..dcd1ed2 --- /dev/null +++ b/erp-turbo-business/erp-turbo-facade/src/main/resources/i18n/messages_zh_CN.properties @@ -0,0 +1,21 @@ +msg.200=\u64CD\u4F5C\u6210\u529F +msg.500=\u7CFB\u7EDF\u5F02\u5E38 +msg.1001=\u6570\u636E\u4E3A\u7A7A +msg.1002=\u6570\u636E\u4FDD\u5B58\u5931\u8D25 +msg.100000=\u5e73\u53f0\u548c\u5ba2\u6237\u7aef\u4e0d\u5339\u914d。 +msg.100001=\u5f53\u524d\u8d26\u53f7\u5df2\u7ecf\u5728\u5e73\u53f0\u5ba2\u6237\u7aef\u6ce8\u518c,\u8bf7\u52ff\u91cd\u590d\u6ce8\u518c。 +msg.50001={0}\u83b7\u53d6\u6210\u529f +msg.50002={0}\u5df2\u8fc7\u671f +msg.50003={0}\u5bf9\u5e94\u7684\u8d26\u53f7\u4e0d\u5339\u914d +msg.50004={0}\u9519\u8bef +validation.account=\u8d26\u53f7 +validation.wechatCode=\u5fae\u4fe1 code +validation.smsCode=\u77ed\u4fe1\u9a8c\u8bc1\u7801 +validation.mobile=\u624b\u673a\u53f7\u7801 +validation.platform=\u5e73\u53f0 +validation.password=\u5bc6\u7801 +validation.min=\u957f\u5ea6\u5fc5\u987b\u5927\u4e8e {min} \u4f4d +validation.max=\u957f\u5ea6\u5fc5\u987b\u5c0f\u4e8e {max} \u4f4d +validation.size=\u957f\u5ea6\u5fc5\u987b\u4ecb\u4e8e {min} ~ {max} \u4f4d +validation.regexp=\u683c\u5f0f\u9519\u8bef +validation.notBlank=\u5fc5\u987b\u4e0d\u80fd\u4e3a\u7a7a \ No newline at end of file diff --git a/erp-turbo-business/erp-turbo-infra/pom.xml b/erp-turbo-business/erp-turbo-infra/pom.xml new file mode 100644 index 0000000..8a3063f --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/pom.xml @@ -0,0 +1,141 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-business + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-infra + + + erp-turbo-infra + 21 + 21 + UTF-8 + + + + + + com.alibaba.cola + cola-component-domain-starter + + + com.alibaba.cola + cola-component-exception + + + + + org.springframework.boot + spring-boot-starter + + + + com.xunhong + erp-turbo-base + + + + com.xunhong + erp-turbo-config + + + + com.xunhong + erp-turbo-file + + + + com.xunhong + erp-turbo-api + + + + com.xunhong + erp-turbo-rpc + + + + com.xunhong + erp-turbo-apm + + + + com.xunhong + erp-turbo-logback + + + + com.xunhong + erp-turbo-limiter + + + + com.xunhong + erp-turbo-datasource + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + junit + junit + test + + + + + com.h2database + h2 + 1.4.200 + test + + + com.baomidou + mybatis-mate-annotation + 1.3.4 + + + + + ${application.name} + + + org.springframework.boot + spring-boot-maven-plugin + + true + + com.xunhong.erp.turbo.infra.ErpTurboInfraApplication + + + true + + ../layers/layers.xml + + + + + + package + + repackage + + + + + + + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/ErpTurboInfraApplication.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/ErpTurboInfraApplication.java new file mode 100644 index 0000000..1031a2e --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/ErpTurboInfraApplication.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.infra; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * Spring Boot Starter + * + * @author shenyifei + */ +@SpringBootApplication(scanBasePackages = {"com.xunhong.erp.turbo", "com.alibaba.cola"}) +public class ErpTurboInfraApplication { + + public static void main(String[] args) { + SpringApplication.run(ErpTurboInfraApplication.class, args); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/AgreementAssembler.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/AgreementAssembler.java new file mode 100644 index 0000000..0c8eb1a --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/AgreementAssembler.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.infra.app.assembler; + +import com.xunhong.erp.turbo.api.infra.dto.vo.AgreementVO; +import com.xunhong.erp.turbo.infra.domain.entity.Agreement; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface AgreementAssembler { + + AgreementVO toAgreementVO(Agreement agreement); +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/CategoryAssembler.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/CategoryAssembler.java new file mode 100644 index 0000000..d70b6b1 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/CategoryAssembler.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.infra.app.assembler; + +import com.xunhong.erp.turbo.api.infra.dto.vo.CategoryVO; +import com.xunhong.erp.turbo.infra.domain.entity.Category; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface CategoryAssembler { + + @Mapping(target = "count", ignore = true) + @Mapping(target = "children", ignore = true) + CategoryVO toCategoryVO(Category category); +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/ChannelAssembler.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/ChannelAssembler.java new file mode 100644 index 0000000..7efbe1a --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/ChannelAssembler.java @@ -0,0 +1,11 @@ +package com.xunhong.erp.turbo.infra.app.assembler; + +import com.xunhong.erp.turbo.api.infra.dto.vo.ChannelVO; +import com.xunhong.erp.turbo.infra.domain.entity.Channel; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface ChannelAssembler { + ChannelVO toChannelVO(Channel channel); +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/DictionaryAssembler.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/DictionaryAssembler.java new file mode 100644 index 0000000..38584ed --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/DictionaryAssembler.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.infra.app.assembler; + +import com.xunhong.erp.turbo.api.infra.dto.vo.DictionaryVO; +import com.xunhong.erp.turbo.infra.domain.entity.Dictionary; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface DictionaryAssembler { + + DictionaryVO toDictionaryVO(Dictionary dictionary); +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/MaterialAssembler.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/MaterialAssembler.java new file mode 100644 index 0000000..fb7bde5 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/MaterialAssembler.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.infra.app.assembler; + +import com.xunhong.erp.turbo.api.infra.dto.vo.MaterialVO; +import com.xunhong.erp.turbo.infra.domain.entity.Material; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface MaterialAssembler { + + @Mapping(target = "categoryVO", source = "category") + @Mapping(target = "url", ignore = true) + MaterialVO toMaterialVO(Material material); +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/PlatformAssembler.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/PlatformAssembler.java new file mode 100644 index 0000000..2045e76 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/PlatformAssembler.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.infra.app.assembler; + +import com.xunhong.erp.turbo.api.infra.dto.vo.PlatformVO; +import com.xunhong.erp.turbo.infra.domain.entity.Platform; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface PlatformAssembler { + + PlatformVO toPlatformVO(Platform platform); +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/SettingAssembler.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/SettingAssembler.java new file mode 100644 index 0000000..efa2119 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/assembler/SettingAssembler.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.infra.app.assembler; + +import com.xunhong.erp.turbo.api.infra.dto.vo.SettingVO; +import com.xunhong.erp.turbo.infra.domain.entity.Setting; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface SettingAssembler { + + SettingVO toSettingVO(Setting setting); +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/AgreementCreateCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/AgreementCreateCmdExe.java new file mode 100644 index 0000000..5949c0e --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/AgreementCreateCmdExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.vo.AgreementVO; +import com.xunhong.erp.turbo.infra.app.assembler.AgreementAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Agreement; +import com.xunhong.erp.turbo.infra.domain.gateway.AgreementGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class AgreementCreateCmdExe { + + private final AgreementAssembler agreementAssembler; + private final AgreementGateway agreementGateway; + + public AgreementVO execute(AgreementCreateCmd agreementCreateCmd) { + Agreement agreement = agreementGateway.save(agreementCreateCmd); + + return agreementAssembler.toAgreementVO(agreement); + } +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/AgreementDestroyCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/AgreementDestroyCmdExe.java new file mode 100644 index 0000000..a12115c --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/AgreementDestroyCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementDestroyCmd; +import com.xunhong.erp.turbo.infra.domain.gateway.AgreementGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class AgreementDestroyCmdExe { + private final AgreementGateway agreementGateway; + + public void execute(AgreementDestroyCmd agreementDestroyCmd) { + agreementGateway.destroy(agreementDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/AgreementUpdateCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/AgreementUpdateCmdExe.java new file mode 100644 index 0000000..8f7a14d --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/AgreementUpdateCmdExe.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.vo.AgreementVO; +import com.xunhong.erp.turbo.infra.app.assembler.AgreementAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Agreement; +import com.xunhong.erp.turbo.infra.domain.gateway.AgreementGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class AgreementUpdateCmdExe { + + private final AgreementAssembler agreementAssembler; + private final AgreementGateway agreementGateway; + + public AgreementVO execute(AgreementUpdateCmd agreementUpdateCmd) { + Agreement agreement = agreementGateway.update(agreementUpdateCmd); + return agreementAssembler.toAgreementVO(agreement); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/CategoryCreateCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/CategoryCreateCmdExe.java new file mode 100644 index 0000000..35e08b6 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/CategoryCreateCmdExe.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + + +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.vo.CategoryVO; +import com.xunhong.erp.turbo.infra.app.assembler.CategoryAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Category; +import com.xunhong.erp.turbo.infra.domain.gateway.CategoryGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +@RequiredArgsConstructor +public class CategoryCreateCmdExe { + private final CategoryAssembler categoryAssembler; + + private final CategoryGateway categoryGateway; + + public CategoryVO execute(CategoryCreateCmd categoryCreateCmd) { + Category category = categoryGateway.save(categoryCreateCmd); + return categoryAssembler.toCategoryVO(category); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/CategoryDestroyCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/CategoryDestroyCmdExe.java new file mode 100644 index 0000000..d5cc119 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/CategoryDestroyCmdExe.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + + +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryDestroyCmd; +import com.xunhong.erp.turbo.infra.domain.gateway.CategoryGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +@RequiredArgsConstructor +public class CategoryDestroyCmdExe { + private final CategoryGateway categoryGateway; + + public void execute(CategoryDestroyCmd categoryDestroyCmd) { + categoryGateway.destroy(categoryDestroyCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/CategoryUpdateCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/CategoryUpdateCmdExe.java new file mode 100644 index 0000000..8cf87c1 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/CategoryUpdateCmdExe.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + + +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.vo.CategoryVO; +import com.xunhong.erp.turbo.infra.app.assembler.CategoryAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Category; +import com.xunhong.erp.turbo.infra.domain.gateway.CategoryGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +@RequiredArgsConstructor +public class CategoryUpdateCmdExe { + private final CategoryAssembler categoryAssembler; + + private final CategoryGateway categoryGateway; + + public CategoryVO execute(CategoryUpdateCmd categoryUpdateCmd) { + Category category = categoryGateway.update(categoryUpdateCmd); + return categoryAssembler.toCategoryVO(category); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/ChannelCreateCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/ChannelCreateCmdExe.java new file mode 100644 index 0000000..e301c79 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/ChannelCreateCmdExe.java @@ -0,0 +1,23 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.vo.ChannelVO; +import com.xunhong.erp.turbo.infra.app.assembler.ChannelAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Channel; +import com.xunhong.erp.turbo.infra.domain.gateway.ChannelGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class ChannelCreateCmdExe { + private final ChannelGateway channelGateway; + private final ChannelAssembler channelAssembler; + + public ChannelVO execute(ChannelCreateCmd channelCreateCmd) { + Channel channel = channelGateway.save(channelCreateCmd); + return channelAssembler.toChannelVO(channel); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/ChannelDestroyCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/ChannelDestroyCmdExe.java new file mode 100644 index 0000000..bcb7969 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/ChannelDestroyCmdExe.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelDestroyCmd; +import com.xunhong.erp.turbo.infra.domain.gateway.ChannelGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class ChannelDestroyCmdExe { + private final ChannelGateway channelGateway; + + public void execute(ChannelDestroyCmd channelDestroyCmd) { + channelGateway.destroy(channelDestroyCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/ChannelUpdateCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/ChannelUpdateCmdExe.java new file mode 100644 index 0000000..01584c0 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/ChannelUpdateCmdExe.java @@ -0,0 +1,23 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.vo.ChannelVO; +import com.xunhong.erp.turbo.infra.app.assembler.ChannelAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Channel; +import com.xunhong.erp.turbo.infra.domain.gateway.ChannelGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class ChannelUpdateCmdExe { + private final ChannelGateway channelGateway; + private final ChannelAssembler channelAssembler; + + public ChannelVO execute(ChannelUpdateCmd channelUpdateCmd) { + Channel channel = channelGateway.update(channelUpdateCmd); + return channelAssembler.toChannelVO(channel); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/DictionaryCreateCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/DictionaryCreateCmdExe.java new file mode 100644 index 0000000..35c6074 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/DictionaryCreateCmdExe.java @@ -0,0 +1,31 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + +import com.alicp.jetcache.anno.CacheInvalidate; +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.vo.DictionaryVO; +import com.xunhong.erp.turbo.infra.app.assembler.DictionaryAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Dictionary; +import com.xunhong.erp.turbo.infra.domain.gateway.DictionaryGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DictionaryCreateCmdExe { + + private final DictionaryAssembler dictionaryAssembler; + private final DictionaryGateway dictionaryGateway; + + @CacheInvalidate(name = ":dictionary:cache:type:", key = "#dictionaryCreateCmd.type") + public DictionaryVO execute(DictionaryCreateCmd dictionaryCreateCmd) { + Dictionary dictionary = dictionaryGateway.save(dictionaryCreateCmd); + + return dictionaryAssembler.toDictionaryVO(dictionary); + } +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/DictionaryDestroyCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/DictionaryDestroyCmdExe.java new file mode 100644 index 0000000..1b25a6b --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/DictionaryDestroyCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryDestroyCmd; +import com.xunhong.erp.turbo.infra.domain.gateway.DictionaryGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DictionaryDestroyCmdExe { + private final DictionaryGateway dictionaryGateway; + + public void execute(DictionaryDestroyCmd dictionaryDestroyCmd) { + dictionaryGateway.destroy(dictionaryDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/DictionaryUpdateCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/DictionaryUpdateCmdExe.java new file mode 100644 index 0000000..b9d15c5 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/DictionaryUpdateCmdExe.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.vo.DictionaryVO; +import com.xunhong.erp.turbo.infra.app.assembler.DictionaryAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Dictionary; +import com.xunhong.erp.turbo.infra.domain.gateway.DictionaryGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DictionaryUpdateCmdExe { + + private final DictionaryAssembler dictionaryAssembler; + private final DictionaryGateway dictionaryGateway; + + public DictionaryVO execute(DictionaryUpdateCmd dictionaryUpdateCmd) { + Dictionary dictionary = dictionaryGateway.update(dictionaryUpdateCmd); + return dictionaryAssembler.toDictionaryVO(dictionary); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/MaterialBatchAddCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/MaterialBatchAddCmdExe.java new file mode 100644 index 0000000..8c00be5 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/MaterialBatchAddCmdExe.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + + +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialBatchAddCmd; +import com.xunhong.erp.turbo.api.infra.dto.vo.MaterialVO; +import com.xunhong.erp.turbo.infra.app.assembler.MaterialAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Material; +import com.xunhong.erp.turbo.infra.domain.gateway.MaterialGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@RequiredArgsConstructor +public class MaterialBatchAddCmdExe { + + private final MaterialGateway materialGateway; + private final MaterialAssembler materialAssembler; + + public List execute(MaterialBatchAddCmd materialBatchAddCmd) { + List materialList = materialGateway.save(materialBatchAddCmd); + return materialList.stream().map(materialAssembler::toMaterialVO).toList(); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/MaterialCreateCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/MaterialCreateCmdExe.java new file mode 100644 index 0000000..fe832c1 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/MaterialCreateCmdExe.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.vo.MaterialVO; +import com.xunhong.erp.turbo.infra.app.assembler.MaterialAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Material; +import com.xunhong.erp.turbo.infra.domain.gateway.MaterialGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class MaterialCreateCmdExe { + private final MaterialGateway materialGateway; + private final MaterialAssembler materialAssembler; + + public MaterialVO execute(MaterialCreateCmd materialCreateCmd) { + Material material = materialGateway.save(materialCreateCmd); + return materialAssembler.toMaterialVO(material); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/MaterialDestroyCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/MaterialDestroyCmdExe.java new file mode 100644 index 0000000..aa4cf0a --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/MaterialDestroyCmdExe.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + + +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialDestroyCmd; +import com.xunhong.erp.turbo.infra.domain.gateway.MaterialGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class MaterialDestroyCmdExe { + + private final MaterialGateway materialGateway; + + public void execute(MaterialDestroyCmd materialDestroyCmd) { + materialGateway.destroy(materialDestroyCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/MaterialUpdateCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/MaterialUpdateCmdExe.java new file mode 100644 index 0000000..5bf36a6 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/MaterialUpdateCmdExe.java @@ -0,0 +1,23 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + + +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.vo.MaterialVO; +import com.xunhong.erp.turbo.infra.app.assembler.MaterialAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Material; +import com.xunhong.erp.turbo.infra.domain.gateway.MaterialGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class MaterialUpdateCmdExe { + + private final MaterialGateway materialGateway; + private final MaterialAssembler materialAssembler; + + public MaterialVO execute(MaterialUpdateCmd materialUpdateCmd) { + Material material = materialGateway.update(materialUpdateCmd); + return materialAssembler.toMaterialVO(material); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/PlatformCreateCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/PlatformCreateCmdExe.java new file mode 100644 index 0000000..3e1d0de --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/PlatformCreateCmdExe.java @@ -0,0 +1,26 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.vo.PlatformVO; +import com.xunhong.erp.turbo.infra.app.assembler.PlatformAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Platform; +import com.xunhong.erp.turbo.infra.domain.gateway.PlatformGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Component +@RequiredArgsConstructor +public class PlatformCreateCmdExe { + private final PlatformAssembler platformAssembler; + + private final PlatformGateway platformGateway; + + public PlatformVO execute(PlatformCreateCmd platformCreateCmd) { + Platform platform = platformGateway.save(platformCreateCmd); + + return platformAssembler.toPlatformVO(platform); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/PlatformDestroyCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/PlatformDestroyCmdExe.java new file mode 100644 index 0000000..1824904 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/PlatformDestroyCmdExe.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformDestroyCmd; +import com.xunhong.erp.turbo.infra.app.assembler.PlatformAssembler; +import com.xunhong.erp.turbo.infra.domain.gateway.PlatformGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Component +@RequiredArgsConstructor +public class PlatformDestroyCmdExe { + private final PlatformAssembler platformAssembler; + private final PlatformGateway platformGateway; + + public void execute(PlatformDestroyCmd platformDestroyCmd) { + platformGateway.destroy(platformDestroyCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/PlatformUpdateCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/PlatformUpdateCmdExe.java new file mode 100644 index 0000000..de93087 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/PlatformUpdateCmdExe.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.vo.PlatformVO; +import com.xunhong.erp.turbo.infra.app.assembler.PlatformAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Platform; +import com.xunhong.erp.turbo.infra.domain.gateway.PlatformGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class PlatformUpdateCmdExe { + private final PlatformAssembler platformAssembler; + private final PlatformGateway platformGateway; + + public PlatformVO execute(PlatformUpdateCmd platformUpdateCmd) { + Platform platform = platformGateway.update(platformUpdateCmd); + return platformAssembler.toPlatformVO(platform); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/SettingUpdateCmdExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/SettingUpdateCmdExe.java new file mode 100644 index 0000000..855d9ff --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/cmd/SettingUpdateCmdExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.infra.app.executor.cmd; + +import com.alicp.jetcache.anno.CacheInvalidate; +import com.xunhong.erp.turbo.api.infra.dto.cmd.SettingUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.vo.SettingVO; +import com.xunhong.erp.turbo.infra.app.assembler.SettingAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Setting; +import com.xunhong.erp.turbo.infra.domain.gateway.SettingGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class SettingUpdateCmdExe { + + private final SettingAssembler settingAssembler; + private final SettingGateway settingGateway; + + @CacheInvalidate(name = ":setting:cache:type:", key = "#settingUpdateCmd.settingKey") + public SettingVO execute(SettingUpdateCmd settingUpdateCmd) { + Setting setting = settingGateway.update(settingUpdateCmd); + return settingAssembler.toSettingVO(setting); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/AgreementListQryExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/AgreementListQryExe.java new file mode 100644 index 0000000..1e4cc6d --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/AgreementListQryExe.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.infra.app.executor.query; + +import com.xunhong.erp.turbo.api.infra.dto.qry.AgreementListQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.AgreementVO; +import com.xunhong.erp.turbo.infra.app.assembler.AgreementAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Agreement; +import com.xunhong.erp.turbo.infra.domain.gateway.AgreementGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class AgreementListQryExe { + + private final AgreementGateway agreementGateway; + private final AgreementAssembler agreementAssembler; + + public List execute(AgreementListQry agreementListQry) { + List agreementList = agreementGateway.list(agreementListQry); + return agreementList.stream().map(agreementAssembler::toAgreementVO).toList(); + } +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/AgreementPageQryExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/AgreementPageQryExe.java new file mode 100644 index 0000000..71d1d19 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/AgreementPageQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.infra.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.infra.dto.qry.AgreementPageQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.AgreementVO; +import com.xunhong.erp.turbo.infra.app.assembler.AgreementAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Agreement; +import com.xunhong.erp.turbo.infra.domain.gateway.AgreementGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class AgreementPageQryExe { + + private final AgreementGateway agreementGateway; + private final AgreementAssembler agreementAssembler; + + public IPage execute(AgreementPageQry agreementPageQry) { + IPage page = agreementGateway.page(agreementPageQry); + return page.convert(agreementAssembler::toAgreementVO); + } +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/AgreementShowQryExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/AgreementShowQryExe.java new file mode 100644 index 0000000..8f3939f --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/AgreementShowQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.infra.app.executor.query; + +import com.xunhong.erp.turbo.api.infra.dto.qry.AgreementShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.AgreementVO; +import com.xunhong.erp.turbo.infra.app.assembler.AgreementAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Agreement; +import com.xunhong.erp.turbo.infra.domain.gateway.AgreementGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class AgreementShowQryExe { + + private final AgreementAssembler agreementAssembler; + private final AgreementGateway agreementGateway; + + public AgreementVO execute(AgreementShowQry agreementShowQry) { + Agreement agreement = agreementGateway.show(agreementShowQry); + + return agreementAssembler.toAgreementVO(agreement); + } +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/CategoryListQryExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/CategoryListQryExe.java new file mode 100644 index 0000000..e3243a5 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/CategoryListQryExe.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.infra.app.executor.query; + + +import com.xunhong.erp.turbo.api.infra.dto.qry.CategoryTreeQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.CategoryVO; +import com.xunhong.erp.turbo.infra.app.assembler.CategoryAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Category; +import com.xunhong.erp.turbo.infra.domain.gateway.CategoryGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class CategoryListQryExe { + private final CategoryGateway categoryGateway; + private final CategoryAssembler categoryAssembler; + + public List execute(CategoryTreeQry categoryTreeQry) { + List menuList = categoryGateway.list(categoryTreeQry); + + return menuList.stream().map(categoryAssembler::toCategoryVO).toList(); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/CategoryPageQryExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/CategoryPageQryExe.java new file mode 100644 index 0000000..8ba0d2f --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/CategoryPageQryExe.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.infra.app.executor.query; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.infra.dto.qry.CategoryPageQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.CategoryVO; +import com.xunhong.erp.turbo.infra.app.assembler.CategoryAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Category; +import com.xunhong.erp.turbo.infra.domain.gateway.CategoryGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class CategoryPageQryExe { + private final CategoryGateway categoryGateway; + private final CategoryAssembler categoryAssembler; + + public IPage execute(CategoryPageQry categoryPageQry) { + IPage page = categoryGateway.page(categoryPageQry); + return page.convert(categoryAssembler::toCategoryVO); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/CategoryShowQryExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/CategoryShowQryExe.java new file mode 100644 index 0000000..86610a8 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/CategoryShowQryExe.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.infra.app.executor.query; + + +import com.xunhong.erp.turbo.api.infra.dto.qry.CategoryShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.CategoryVO; +import com.xunhong.erp.turbo.infra.app.assembler.CategoryAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Category; +import com.xunhong.erp.turbo.infra.domain.gateway.CategoryGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class CategoryShowQryExe { + private final CategoryGateway categoryGateway; + private final CategoryAssembler categoryAssembler; + + public CategoryVO execute(CategoryShowQry categoryShowQry) { + Category category = categoryGateway.show(categoryShowQry); + return categoryAssembler.toCategoryVO(category); + + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/ChannelPageQryExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/ChannelPageQryExe.java new file mode 100644 index 0000000..1b19929 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/ChannelPageQryExe.java @@ -0,0 +1,24 @@ +package com.xunhong.erp.turbo.infra.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.infra.dto.qry.ChannelPageQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.ChannelVO; +import com.xunhong.erp.turbo.infra.app.assembler.ChannelAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Channel; +import com.xunhong.erp.turbo.infra.domain.gateway.ChannelGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class ChannelPageQryExe { + private final ChannelGateway channelGateway; + private final ChannelAssembler channelAssembler; + + public IPage execute(ChannelPageQry channelPageQry) { + IPage page = channelGateway.page(channelPageQry); + return page.convert(channelAssembler::toChannelVO); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/ChannelShowQryExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/ChannelShowQryExe.java new file mode 100644 index 0000000..ffdeaed --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/ChannelShowQryExe.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.infra.app.executor.query; + +import com.alibaba.cola.exception.Assert; +import com.xunhong.erp.turbo.api.infra.dto.qry.ChannelShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.ChannelVO; +import com.xunhong.erp.turbo.infra.app.assembler.ChannelAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Channel; +import com.xunhong.erp.turbo.infra.domain.gateway.ChannelGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class ChannelShowQryExe { + private final ChannelGateway channelGateway; + private final ChannelAssembler channelAssembler; +// private final WxMpGateway wxMpGateway; + + public ChannelVO execute(ChannelShowQry channelShowQry) { + Channel channel = channelGateway.show(channelShowQry); + Assert.notNull(channel, "渠道不存在"); +// WxMp wxMp = wxMpGateway.selectByChannelId(channel.getChannelId()); + ChannelVO channelVO = channelAssembler.toChannelVO(channel); +// channelVO.setWxMpId(wxMp.getWxMpId()); +// channelVO.setWxOpenId(wxMp.getWxOpenId()); + return channelVO; + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/DictionaryListQryExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/DictionaryListQryExe.java new file mode 100644 index 0000000..40b4138 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/DictionaryListQryExe.java @@ -0,0 +1,36 @@ +package com.xunhong.erp.turbo.infra.app.executor.query; + +import com.alicp.jetcache.anno.CacheRefresh; +import com.alicp.jetcache.anno.CacheType; +import com.alicp.jetcache.anno.Cached; +import com.xunhong.erp.turbo.api.infra.dto.qry.DictionaryListQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.DictionaryVO; +import com.xunhong.erp.turbo.infra.app.assembler.DictionaryAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Dictionary; +import com.xunhong.erp.turbo.infra.domain.gateway.DictionaryGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DictionaryListQryExe { + + private final DictionaryGateway dictionaryGateway; + private final DictionaryAssembler dictionaryAssembler; + + @Cached(name = ":dictionary:cache:type:", expire = 60, localExpire = 10, timeUnit = TimeUnit.MINUTES, cacheType = CacheType.REMOTE, key = "#dictionaryListQry.type", cacheNullValue = true) + @CacheRefresh(refresh = 50, timeUnit = TimeUnit.MINUTES) + public List execute(DictionaryListQry dictionaryListQry) { + List dictionaryList = dictionaryGateway.list(dictionaryListQry); + return dictionaryList.stream().map(dictionaryAssembler::toDictionaryVO).toList(); + } +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/DictionaryPageQryExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/DictionaryPageQryExe.java new file mode 100644 index 0000000..2e7b5f3 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/DictionaryPageQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.infra.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.infra.dto.qry.DictionaryPageQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.DictionaryVO; +import com.xunhong.erp.turbo.infra.app.assembler.DictionaryAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Dictionary; +import com.xunhong.erp.turbo.infra.domain.gateway.DictionaryGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DictionaryPageQryExe { + + private final DictionaryGateway dictionaryGateway; + private final DictionaryAssembler dictionaryAssembler; + + public IPage execute(DictionaryPageQry dictionaryPageQry) { + IPage page = dictionaryGateway.page(dictionaryPageQry); + return page.convert(dictionaryAssembler::toDictionaryVO); + } +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/DictionaryShowQryExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/DictionaryShowQryExe.java new file mode 100644 index 0000000..d742d95 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/DictionaryShowQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.infra.app.executor.query; + +import com.xunhong.erp.turbo.api.infra.dto.qry.DictionaryShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.DictionaryVO; +import com.xunhong.erp.turbo.infra.app.assembler.DictionaryAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Dictionary; +import com.xunhong.erp.turbo.infra.domain.gateway.DictionaryGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DictionaryShowQryExe { + + private final DictionaryAssembler dictionaryAssembler; + private final DictionaryGateway dictionaryGateway; + + public DictionaryVO execute(DictionaryShowQry dictionaryShowQry) { + Dictionary dictionary = dictionaryGateway.show(dictionaryShowQry); + + return dictionaryAssembler.toDictionaryVO(dictionary); + } +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/MaterialPageQryExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/MaterialPageQryExe.java new file mode 100644 index 0000000..2fd57d3 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/MaterialPageQryExe.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.infra.app.executor.query; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.infra.dto.qry.MaterialPageQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.MaterialVO; +import com.xunhong.erp.turbo.infra.app.assembler.MaterialAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Material; +import com.xunhong.erp.turbo.infra.domain.gateway.MaterialGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class MaterialPageQryExe { + private final MaterialGateway materialGateway; + private final MaterialAssembler materialAssembler; + + public IPage execute(MaterialPageQry materialPageQry) { + IPage page = materialGateway.page(materialPageQry); + return page.convert(materialAssembler::toMaterialVO); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/MaterialQryExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/MaterialQryExe.java new file mode 100644 index 0000000..13ba63b --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/MaterialQryExe.java @@ -0,0 +1,12 @@ +package com.xunhong.erp.turbo.infra.app.executor.query; + + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class MaterialQryExe { +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/MaterialShowQryExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/MaterialShowQryExe.java new file mode 100644 index 0000000..d97b685 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/MaterialShowQryExe.java @@ -0,0 +1,24 @@ +package com.xunhong.erp.turbo.infra.app.executor.query; + + +import com.xunhong.erp.turbo.api.infra.dto.qry.MaterialShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.MaterialVO; +import com.xunhong.erp.turbo.infra.app.assembler.MaterialAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Material; +import com.xunhong.erp.turbo.infra.domain.gateway.MaterialGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class MaterialShowQryExe { + private final MaterialGateway materialGateway; + private final MaterialAssembler materialAssembler; + + public MaterialVO execute(MaterialShowQry materialShowQry) { + Material material = materialGateway.show(materialShowQry); + return materialAssembler.toMaterialVO(material); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/OssTokenQryExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/OssTokenQryExe.java new file mode 100644 index 0000000..b6513eb --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/OssTokenQryExe.java @@ -0,0 +1,35 @@ +package com.xunhong.erp.turbo.infra.app.executor.query; + + +import com.xunhong.erp.turbo.api.user.dto.vo.OssTokenVO; +import com.xunhong.erp.turbo.infra.domain.entity.Credentials; +import com.xunhong.erp.turbo.infra.domain.gateway.OssGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author m809745357 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class OssTokenQryExe { + + private final OssGateway ossGateway; + + /** + * @return + */ + public OssTokenVO execute() { + Credentials ossToken = ossGateway.getOssToken(); + OssTokenVO ossTokenVO = new OssTokenVO(); + ossTokenVO.setSecurityToken(ossToken.getSecurityToken()); + ossTokenVO.setAccessKeyId(ossToken.getAccessKeyId()); + ossTokenVO.setAccessKeySecret(ossToken.getAccessKeySecret()); + ossTokenVO.setDomain(ossToken.getDomain()); + ossTokenVO.setRegion(ossToken.getRegion()); + ossTokenVO.setBucket(ossToken.getBucket()); + return ossTokenVO; + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/PlatformListQryExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/PlatformListQryExe.java new file mode 100644 index 0000000..92e51f6 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/PlatformListQryExe.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.infra.app.executor.query; + +import com.xunhong.erp.turbo.api.infra.dto.qry.PlatformListQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.PlatformVO; +import com.xunhong.erp.turbo.infra.app.assembler.PlatformAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Platform; +import com.xunhong.erp.turbo.infra.domain.gateway.PlatformGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PlatformListQryExe { + + private final PlatformGateway platformGateway; + + private final PlatformAssembler platformAssembler; + + public List execute(PlatformListQry platformListQry) { + List platformList = platformGateway.list(platformListQry); + return platformList.stream().map(platformAssembler::toPlatformVO).toList(); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/PlatformPageQryExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/PlatformPageQryExe.java new file mode 100644 index 0000000..c1079b1 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/PlatformPageQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.infra.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.infra.dto.qry.PlatformPageQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.PlatformVO; +import com.xunhong.erp.turbo.infra.app.assembler.PlatformAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Platform; +import com.xunhong.erp.turbo.infra.domain.gateway.PlatformGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PlatformPageQryExe { + + private final PlatformGateway platformGateway; + + private final PlatformAssembler platformAssembler; + + public IPage execute(PlatformPageQry query) { + IPage page = platformGateway.page(query); + return page.convert(platformAssembler::toPlatformVO); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/PlatformShowQryExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/PlatformShowQryExe.java new file mode 100644 index 0000000..5751011 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/PlatformShowQryExe.java @@ -0,0 +1,26 @@ +package com.xunhong.erp.turbo.infra.app.executor.query; + +import com.xunhong.erp.turbo.api.infra.dto.qry.PlatformShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.PlatformVO; +import com.xunhong.erp.turbo.infra.app.assembler.PlatformAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Platform; +import com.xunhong.erp.turbo.infra.domain.gateway.PlatformGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Component +@RequiredArgsConstructor +public class PlatformShowQryExe { + private final PlatformAssembler platformAssembler; + + private final PlatformGateway platformGateway; + + public PlatformVO execute(PlatformShowQry platformShowQry) { + Platform platform = platformGateway.show(platformShowQry); + + return platformAssembler.toPlatformVO(platform); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/SettingShowQryExe.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/SettingShowQryExe.java new file mode 100644 index 0000000..370c1d1 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/executor/query/SettingShowQryExe.java @@ -0,0 +1,36 @@ +package com.xunhong.erp.turbo.infra.app.executor.query; + +import com.alicp.jetcache.anno.CacheRefresh; +import com.alicp.jetcache.anno.CacheType; +import com.alicp.jetcache.anno.Cached; +import com.xunhong.erp.turbo.api.infra.dto.qry.SettingShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.SettingVO; +import com.xunhong.erp.turbo.infra.app.assembler.SettingAssembler; +import com.xunhong.erp.turbo.infra.domain.entity.Setting; +import com.xunhong.erp.turbo.infra.domain.gateway.SettingGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeUnit; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class SettingShowQryExe { + + private final SettingAssembler settingAssembler; + private final SettingGateway settingGateway; + + @Cached(name = ":setting:cache:type:", expire = 60, localExpire = 10, timeUnit = TimeUnit.MINUTES, cacheType = CacheType.REMOTE, key = "#settingShowQry.settingKey", cacheNullValue = true) + @CacheRefresh(refresh = 50, timeUnit = TimeUnit.MINUTES) + public SettingVO execute(SettingShowQry settingShowQry) { + Setting setting = settingGateway.show(settingShowQry); + + return settingAssembler.toSettingVO(setting); + } +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/AgreementServiceImpl.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/AgreementServiceImpl.java new file mode 100644 index 0000000..3104a52 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/AgreementServiceImpl.java @@ -0,0 +1,71 @@ +package com.xunhong.erp.turbo.infra.app.service; + +import com.xunhong.erp.turbo.api.infra.api.AgreementServiceI; +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.AgreementListQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.AgreementPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.AgreementShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.AgreementVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.infra.app.executor.cmd.AgreementCreateCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.cmd.AgreementDestroyCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.cmd.AgreementUpdateCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.query.AgreementListQryExe; +import com.xunhong.erp.turbo.infra.app.executor.query.AgreementPageQryExe; +import com.xunhong.erp.turbo.infra.app.executor.query.AgreementShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Service +@DubboService(interfaceClass = AgreementServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class AgreementServiceImpl implements AgreementServiceI { + + private final AgreementCreateCmdExe agreementCreateCmdExe; + private final AgreementUpdateCmdExe agreementUpdateCmdExe; + private final AgreementPageQryExe agreementPageQryExe; + private final AgreementListQryExe agreementListQryExe; + private final AgreementShowQryExe agreementShowQryExe; + private final AgreementDestroyCmdExe agreementDestroyCmdExe; + + @Override + public AgreementVO create(AgreementCreateCmd agreementCreateCmd) { + return agreementCreateCmdExe.execute(agreementCreateCmd); + } + + @Override + public PageDTO page(AgreementPageQry agreementPageQry) { + return PageDTO.of(agreementPageQryExe.execute(agreementPageQry)); + } + + @Override + public List list(AgreementListQry agreementListQry) { + return agreementListQryExe.execute(agreementListQry); + } + + @Override + public AgreementVO update(AgreementUpdateCmd agreementUpdateCmd) { + return agreementUpdateCmdExe.execute(agreementUpdateCmd); + } + + @Override + public AgreementVO show(AgreementShowQry agreementShowQry) { + return agreementShowQryExe.execute(agreementShowQry); + } + + @Override + public void destroy(AgreementDestroyCmd agreementDestroyCmd) { + agreementDestroyCmdExe.execute(agreementDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/CategoryServiceImpl.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/CategoryServiceImpl.java new file mode 100644 index 0000000..d4224fb --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/CategoryServiceImpl.java @@ -0,0 +1,65 @@ +package com.xunhong.erp.turbo.infra.app.service; + +import com.xunhong.erp.turbo.api.infra.api.CategoryServiceI; +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.CategoryPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.CategoryShowQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.CategoryTreeQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.CategoryVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.infra.app.executor.cmd.CategoryCreateCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.cmd.CategoryDestroyCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.cmd.CategoryUpdateCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.query.CategoryListQryExe; +import com.xunhong.erp.turbo.infra.app.executor.query.CategoryPageQryExe; +import com.xunhong.erp.turbo.infra.app.executor.query.CategoryShowQryExe; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + + +@Service +@DubboService(interfaceClass = CategoryServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class CategoryServiceImpl implements CategoryServiceI { + private final CategoryListQryExe categoryListQryExe; + private final CategoryCreateCmdExe categoryCreateCmdExe; + private final CategoryUpdateCmdExe categoryUpdateCmdExe; + private final CategoryShowQryExe categoryShowQryExe; + private final CategoryDestroyCmdExe categoryDestroyCmdExe; + private final CategoryPageQryExe categoryPageQryExe; + + @Override + public PageDTO page(CategoryPageQry categoryPageQry) { + return PageDTO.of(categoryPageQryExe.execute(categoryPageQry)); + } + + @Override + public List list(CategoryTreeQry categoryTreeQry) { + return categoryListQryExe.execute(categoryTreeQry); + } + + @Override + public CategoryVO create(CategoryCreateCmd categoryCreateCmd) { + return categoryCreateCmdExe.execute(categoryCreateCmd); + } + + @Override + public CategoryVO update(CategoryUpdateCmd categoryUpdateCmd) { + return categoryUpdateCmdExe.execute(categoryUpdateCmd); + } + + @Override + public CategoryVO show(CategoryShowQry categoryShowQry) { + return categoryShowQryExe.execute(categoryShowQry); + } + + @Override + public void destroy(CategoryDestroyCmd categoryDestroyCmd) { + categoryDestroyCmdExe.execute(categoryDestroyCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/ChannelServiceImpl.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/ChannelServiceImpl.java new file mode 100644 index 0000000..0cfdf09 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/ChannelServiceImpl.java @@ -0,0 +1,59 @@ +package com.xunhong.erp.turbo.infra.app.service; + +import com.alicp.jetcache.anno.Cached; +import com.xunhong.erp.turbo.api.infra.api.ChannelServiceI; +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.ChannelPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.ChannelShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.ChannelVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.infra.app.executor.cmd.ChannelCreateCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.cmd.ChannelDestroyCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.cmd.ChannelUpdateCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.query.ChannelPageQryExe; +import com.xunhong.erp.turbo.infra.app.executor.query.ChannelShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + + +@Slf4j +@Service +@DubboService(interfaceClass = ChannelServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class ChannelServiceImpl implements ChannelServiceI { + private final ChannelPageQryExe channelPageQryExe; + private final ChannelCreateCmdExe channelCreateCmdExe; + private final ChannelShowQryExe channelShowQryExe; + private final ChannelUpdateCmdExe channelUpdateCmdExe; + private final ChannelDestroyCmdExe channelDestroyCmdExe; + + @Override + public PageDTO page(ChannelPageQry channelPageQry) { + return PageDTO.of(channelPageQryExe.execute(channelPageQry)); + } + + @Override + public ChannelVO create(ChannelCreateCmd channelCreateCmd) { + return channelCreateCmdExe.execute(channelCreateCmd); + } + + @Override + @Cached(name = ":channel:id:", key = "#channelShowQry.channelId") + public ChannelVO show(ChannelShowQry channelShowQry) { + return channelShowQryExe.execute(channelShowQry); + } + + @Override + public ChannelVO update(ChannelUpdateCmd channelUpdateCmd) { + return channelUpdateCmdExe.execute(channelUpdateCmd); + } + + @Override + public void destroy(ChannelDestroyCmd channelDestroyCmd) { + channelDestroyCmdExe.execute(channelDestroyCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/DictionaryServiceImpl.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/DictionaryServiceImpl.java new file mode 100644 index 0000000..2909b44 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/DictionaryServiceImpl.java @@ -0,0 +1,71 @@ +package com.xunhong.erp.turbo.infra.app.service; + +import com.xunhong.erp.turbo.api.infra.api.DictionaryServiceI; +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.DictionaryListQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.DictionaryPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.DictionaryShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.DictionaryVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.infra.app.executor.cmd.DictionaryCreateCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.cmd.DictionaryDestroyCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.cmd.DictionaryUpdateCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.query.DictionaryListQryExe; +import com.xunhong.erp.turbo.infra.app.executor.query.DictionaryPageQryExe; +import com.xunhong.erp.turbo.infra.app.executor.query.DictionaryShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Service +@DubboService(interfaceClass = DictionaryServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class DictionaryServiceImpl implements DictionaryServiceI { + + private final DictionaryCreateCmdExe dictionaryCreateCmdExe; + private final DictionaryUpdateCmdExe dictionaryUpdateCmdExe; + private final DictionaryPageQryExe dictionaryPageQryExe; + private final DictionaryListQryExe dictionaryListQryExe; + private final DictionaryShowQryExe dictionaryShowQryExe; + private final DictionaryDestroyCmdExe dictionaryDestroyCmdExe; + + @Override + public DictionaryVO create(DictionaryCreateCmd dictionaryCreateCmd) { + return dictionaryCreateCmdExe.execute(dictionaryCreateCmd); + } + + @Override + public PageDTO page(DictionaryPageQry dictionaryPageQry) { + return PageDTO.of(dictionaryPageQryExe.execute(dictionaryPageQry)); + } + + @Override + public List list(DictionaryListQry dictionaryListQry) { + return dictionaryListQryExe.execute(dictionaryListQry); + } + + @Override + public DictionaryVO update(DictionaryUpdateCmd dictionaryUpdateCmd) { + return dictionaryUpdateCmdExe.execute(dictionaryUpdateCmd); + } + + @Override + public DictionaryVO show(DictionaryShowQry dictionaryShowQry) { + return dictionaryShowQryExe.execute(dictionaryShowQry); + } + + @Override + public void destroy(DictionaryDestroyCmd dictionaryDestroyCmd) { + dictionaryDestroyCmdExe.execute(dictionaryDestroyCmd); + } +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/MaterialServiceImpl.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/MaterialServiceImpl.java new file mode 100644 index 0000000..052d66e --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/MaterialServiceImpl.java @@ -0,0 +1,78 @@ +package com.xunhong.erp.turbo.infra.app.service; + +import com.xunhong.erp.turbo.api.infra.api.MaterialServiceI; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialBatchAddCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.MaterialPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.MaterialShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.MaterialVO; +import com.xunhong.erp.turbo.api.user.dto.vo.OssTokenVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.infra.app.executor.cmd.MaterialBatchAddCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.cmd.MaterialCreateCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.cmd.MaterialDestroyCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.cmd.MaterialUpdateCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.query.MaterialPageQryExe; +import com.xunhong.erp.turbo.infra.app.executor.query.MaterialShowQryExe; +import com.xunhong.erp.turbo.infra.app.executor.query.OssTokenQryExe; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + */ +@Service +@DubboService(interfaceClass = MaterialServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class MaterialServiceImpl implements MaterialServiceI { + private final OssTokenQryExe ossTokenQryExe; + + private final MaterialCreateCmdExe materialCreateCmdExe; + + private final MaterialBatchAddCmdExe materialBatchAddCmdExe; + + private final MaterialPageQryExe materialPageQryExe; + private final MaterialShowQryExe materialShowQryExe; + private final MaterialUpdateCmdExe materialUpdateCmdExe; + private final MaterialDestroyCmdExe materialDestroyCmdExe; + + @Override + public OssTokenVO ossToken() { + return ossTokenQryExe.execute(); + } + + @Override + public PageDTO page(MaterialPageQry materialPageQry) { + return PageDTO.of(materialPageQryExe.execute(materialPageQry)); + } + + @Override + public MaterialVO create(MaterialCreateCmd materialCreateCmd) { + return materialCreateCmdExe.execute(materialCreateCmd); + } + + @Override + public MaterialVO show(MaterialShowQry materialShowQry) { + return materialShowQryExe.execute(materialShowQry); + } + + @Override + public MaterialVO update(MaterialUpdateCmd materialUpdateCmd) { + return materialUpdateCmdExe.execute(materialUpdateCmd); + } + + @Override + public void destroy(MaterialDestroyCmd materialDestroyCmd) { + materialDestroyCmdExe.execute(materialDestroyCmd); + } + + @Override + public List batchCreate(MaterialBatchAddCmd materialAddCmdList) { + return materialBatchAddCmdExe.execute(materialAddCmdList); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/PlatformServiceImpl.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/PlatformServiceImpl.java new file mode 100644 index 0000000..b38eb60 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/PlatformServiceImpl.java @@ -0,0 +1,68 @@ +package com.xunhong.erp.turbo.infra.app.service; + +import com.xunhong.erp.turbo.api.infra.api.PlatformServiceI; +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.PlatformListQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.PlatformPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.PlatformShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.PlatformVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.infra.app.executor.cmd.PlatformCreateCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.cmd.PlatformDestroyCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.cmd.PlatformUpdateCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.query.PlatformListQryExe; +import com.xunhong.erp.turbo.infra.app.executor.query.PlatformPageQryExe; +import com.xunhong.erp.turbo.infra.app.executor.query.PlatformShowQryExe; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + */ +@Service +@DubboService(interfaceClass = PlatformServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class PlatformServiceImpl implements PlatformServiceI { + + private final PlatformCreateCmdExe platformCreateCmdExe; + private final PlatformUpdateCmdExe platformUpdateCmdExe; + private final PlatformPageQryExe platformPageQryExe; + private final PlatformListQryExe platformListQryExe; + private final PlatformShowQryExe platformShowQryExe; + private final PlatformDestroyCmdExe platformDestroyCmdExe; + + @Override + public PlatformVO create(PlatformCreateCmd platformCreateCmd) { + return platformCreateCmdExe.execute(platformCreateCmd); + } + + @Override + public PageDTO page(PlatformPageQry platformPageQry) { + return PageDTO.of(platformPageQryExe.execute(platformPageQry)); + } + + @Override + public List list(PlatformListQry platformListQry) { + return platformListQryExe.execute(platformListQry); + } + + @Override + public PlatformVO update(PlatformUpdateCmd platformUpdateCmd) { + return platformUpdateCmdExe.execute(platformUpdateCmd); + } + + @Override + public PlatformVO show(PlatformShowQry platformShowQry) { + return platformShowQryExe.execute(platformShowQry); + } + + @Override + public void destroy(PlatformDestroyCmd platformDestroyCmd) { + platformDestroyCmdExe.execute(platformDestroyCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/SettingServiceImpl.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/SettingServiceImpl.java new file mode 100644 index 0000000..003a653 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/app/service/SettingServiceImpl.java @@ -0,0 +1,37 @@ +package com.xunhong.erp.turbo.infra.app.service; + +import com.xunhong.erp.turbo.api.infra.api.SettingServiceI; +import com.xunhong.erp.turbo.api.infra.dto.cmd.SettingUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.SettingShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.SettingVO; +import com.xunhong.erp.turbo.infra.app.executor.cmd.SettingUpdateCmdExe; +import com.xunhong.erp.turbo.infra.app.executor.query.SettingShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +/** + * @author shenyifei + */ +@Slf4j +@Service +@DubboService(interfaceClass = SettingServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class SettingServiceImpl implements SettingServiceI { + + private final SettingUpdateCmdExe settingUpdateCmdExe; + private final SettingShowQryExe settingShowQryExe; + + + @Override + public SettingVO update(SettingUpdateCmd settingUpdateCmd) { + return settingUpdateCmdExe.execute(settingUpdateCmd); + } + + @Override + public SettingVO show(SettingShowQry settingShowQry) { + return settingShowQryExe.execute(settingShowQry); + } +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Agreement.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Agreement.java new file mode 100644 index 0000000..e6bbd06 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Agreement.java @@ -0,0 +1,45 @@ +package com.xunhong.erp.turbo.infra.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.infra.dto.enums.AgreementSceneEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class Agreement extends DTO { + + /** + * 协议id + */ + private Long agreementId; + + /** + * 使用场景 + */ + private List scene; + + /** + * 协议标题 + */ + private String title; + + /** + * 副标题 + */ + private String subTitle; + + /** + * 协议内容 + */ + private String content; + +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Category.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Category.java new file mode 100644 index 0000000..98731ac --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Category.java @@ -0,0 +1,40 @@ +package com.xunhong.erp.turbo.infra.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class Category extends DTO { + + /** + * 分类id + */ + private Long categoryId; + + /** + * 分类名称 + */ + private String name; + + /** + * 素材类型 + */ + private String type; + + /** + * 上级分类id + */ + private Long pid; + + /** + * 排序 + */ + private Integer sort; +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Channel.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Channel.java new file mode 100644 index 0000000..1c90fa0 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Channel.java @@ -0,0 +1,54 @@ +package com.xunhong.erp.turbo.infra.domain.entity; + + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class Channel extends DTO { + /** + * 渠道ID + */ + private Long channelId; + + /** + * 域名 + */ + private String domain; + + /** + * Logo + */ + private String logo; + + /** + * 标题 + */ + private String title; + + /** + * 副标题 + */ + private String subTitle; + + /** + * 背景图片 + */ + private String backgroundImageUrl; + + /** + * 技术支持 + */ + private String technicalSupport; + + /** + * 创建时间 + */ + private LocalDateTime createdAt; +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Credentials.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Credentials.java new file mode 100644 index 0000000..03b32e7 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Credentials.java @@ -0,0 +1,20 @@ +package com.xunhong.erp.turbo.infra.domain.entity; + + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class Credentials extends DTO { + private String securityToken; + private String accessKeySecret; + private String accessKeyId; + private String expiration; + private String domain; + private String bucket; + private String region; +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Dictionary.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Dictionary.java new file mode 100644 index 0000000..0adfbb5 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Dictionary.java @@ -0,0 +1,47 @@ +package com.xunhong.erp.turbo.infra.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class Dictionary extends DTO { + + /** + * 自增id + */ + private Integer dictionaryId; + + /** + * 代码 + */ + private String code; + + /** + * 字典名称 + */ + private String name; + + /** + * 上级id + */ + private String parentId; + + /** + * 排序号 + */ + private Integer sortNo; + + /** + * 类型 + */ + private String type; + +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Material.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Material.java new file mode 100644 index 0000000..11e906f --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Material.java @@ -0,0 +1,46 @@ +package com.xunhong.erp.turbo.infra.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.infra.dto.enums.CategoryTypeEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class Material extends DTO { + + /** + * 分类id + */ + private Long materialId; + + /** + * 上级分类id + */ + private Long categoryId; + + /** + * 素材类型 + */ + private CategoryTypeEnum type; + + /** + * 名称 + */ + private String name; + + /** + * 路劲 + */ + private String path; + + /** + * 分类 + */ + private Category category; +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Platform.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Platform.java new file mode 100644 index 0000000..fe7284d --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Platform.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.infra.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class Platform extends DTO { + + private Long platformId; + + private String platformName; + + private String homePage; + +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Setting.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Setting.java new file mode 100644 index 0000000..d51b9b3 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/entity/Setting.java @@ -0,0 +1,33 @@ +package com.xunhong.erp.turbo.infra.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.infra.dto.common.SettingValue; +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class Setting extends DTO { + + /** + * 门店id + */ + private Long settingId; + + /** + * 系统设置项Key + */ + private SettingKeyEnum settingKey; + + /** + * 系统设置项内容 + */ + private SettingValue settingValue; +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/AgreementGateway.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/AgreementGateway.java new file mode 100644 index 0000000..6cbb117 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/AgreementGateway.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.infra.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.AgreementListQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.AgreementPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.AgreementShowQry; +import com.xunhong.erp.turbo.infra.domain.entity.Agreement; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface AgreementGateway { + Agreement save(AgreementCreateCmd agreementCreateCmd); + + IPage page(AgreementPageQry agreementPageQry); + + List list(AgreementListQry agreementListQry); + + Agreement update(AgreementUpdateCmd agreementUpdateCmd); + + Agreement show(AgreementShowQry agreementShowQry); + + void destroy(AgreementDestroyCmd agreementDestroyCmd); +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/CategoryGateway.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/CategoryGateway.java new file mode 100644 index 0000000..93a1316 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/CategoryGateway.java @@ -0,0 +1,26 @@ +package com.xunhong.erp.turbo.infra.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.CategoryPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.CategoryShowQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.CategoryTreeQry; +import com.xunhong.erp.turbo.infra.domain.entity.Category; + +import java.util.List; + +public interface CategoryGateway { + Category save(CategoryCreateCmd categoryCreateCmd); + + List list(CategoryTreeQry categoryTreeQry); + + Category update(CategoryUpdateCmd categoryUpdateCmd); + + Category show(CategoryShowQry categoryShowQry); + + void destroy(CategoryDestroyCmd categoryDestroyCmd); + + IPage page(CategoryPageQry categoryPageQry); +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/ChannelGateway.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/ChannelGateway.java new file mode 100644 index 0000000..e55c7b1 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/ChannelGateway.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.infra.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.ChannelPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.ChannelShowQry; +import com.xunhong.erp.turbo.infra.domain.entity.Channel; + +public interface ChannelGateway { + IPage page(ChannelPageQry channelPageQry); + + Channel show(ChannelShowQry channelShowQry); + + Channel save(ChannelCreateCmd channelCreateCmd); + + void destroy(ChannelDestroyCmd channelDestroyCmd); + + Channel update(ChannelUpdateCmd channelUpdateCmd); +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/DictionaryGateway.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/DictionaryGateway.java new file mode 100644 index 0000000..86602db --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/DictionaryGateway.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.infra.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.DictionaryListQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.DictionaryPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.DictionaryShowQry; +import com.xunhong.erp.turbo.infra.domain.entity.Dictionary; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface DictionaryGateway { + Dictionary save(DictionaryCreateCmd dictionaryCreateCmd); + + IPage page(DictionaryPageQry dictionaryPageQry); + + List list(DictionaryListQry dictionaryListQry); + + Dictionary update(DictionaryUpdateCmd dictionaryUpdateCmd); + + Dictionary show(DictionaryShowQry dictionaryShowQry); + + void destroy(DictionaryDestroyCmd dictionaryDestroyCmd); +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/MaterialGateway.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/MaterialGateway.java new file mode 100644 index 0000000..d5cfaf0 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/MaterialGateway.java @@ -0,0 +1,26 @@ +package com.xunhong.erp.turbo.infra.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialBatchAddCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.MaterialPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.MaterialShowQry; +import com.xunhong.erp.turbo.infra.domain.entity.Material; + +import java.util.List; + +public interface MaterialGateway { + List save(MaterialBatchAddCmd materialBatchAddCmd); + + IPage page(MaterialPageQry materialPageQry); + + Material show(MaterialShowQry materialShowQry); + + Material update(MaterialUpdateCmd materialUpdateCmd); + + void destroy(MaterialDestroyCmd materialDestroyCmd); + + Material save(MaterialCreateCmd materialCreateCmd); +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/OssGateway.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/OssGateway.java new file mode 100644 index 0000000..4f945fe --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/OssGateway.java @@ -0,0 +1,14 @@ +package com.xunhong.erp.turbo.infra.domain.gateway; + +import com.xunhong.erp.turbo.infra.domain.entity.Credentials; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; + +public interface OssGateway { + Credentials getOssToken(); + + String upload(MultipartFile file); + + String upload(File file); +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/PlatformGateway.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/PlatformGateway.java new file mode 100644 index 0000000..3265646 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/PlatformGateway.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.infra.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.PlatformListQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.PlatformPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.PlatformShowQry; +import com.xunhong.erp.turbo.infra.domain.entity.Platform; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface PlatformGateway { + Platform save(PlatformCreateCmd platformCreateCmd); + + IPage page(PlatformPageQry platformPageQry); + + List list(PlatformListQry platformListQry); + + Platform update(PlatformUpdateCmd platformUpdateCmd); + + Platform show(PlatformShowQry platformShowQry); + + void destroy(PlatformDestroyCmd platformDestroyCmd); +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/SettingGateway.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/SettingGateway.java new file mode 100644 index 0000000..49caff1 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/domain/gateway/SettingGateway.java @@ -0,0 +1,16 @@ +package com.xunhong.erp.turbo.infra.domain.gateway; + + +import com.xunhong.erp.turbo.api.infra.dto.cmd.SettingUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.SettingShowQry; +import com.xunhong.erp.turbo.infra.domain.entity.Setting; + +/** + * @author shenyifei + */ +public interface SettingGateway { + Setting update(SettingUpdateCmd settingUpdateCmd); + + Setting show(SettingShowQry settingShowQry); +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/AgreementConvert.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/AgreementConvert.java new file mode 100644 index 0000000..7e86d22 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/AgreementConvert.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.infra.infrastructure.convert; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementUpdateCmd; +import com.xunhong.erp.turbo.infra.domain.entity.Agreement; +import com.xunhong.erp.turbo.infra.infrastructure.entity.AgreementDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface AgreementConvert { + + Agreement toAgreement(AgreementDO agreementDO); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + AgreementDO toAgreementDO(AgreementCreateCmd agreementCreateCmd); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + void toAgreementDO(@MappingTarget AgreementDO agreementDO, AgreementUpdateCmd agreementUpdateCmd); +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/CategoryConvert.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/CategoryConvert.java new file mode 100644 index 0000000..551e5c5 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/CategoryConvert.java @@ -0,0 +1,33 @@ +package com.xunhong.erp.turbo.infra.infrastructure.convert; + + +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryUpdateCmd; +import com.xunhong.erp.turbo.infra.domain.entity.Category; +import com.xunhong.erp.turbo.infra.infrastructure.entity.CategoryDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface CategoryConvert { + + Category toCategory(CategoryDO categoryDO); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + void toCategoryDO(@MappingTarget CategoryDO categoryDO, CategoryUpdateCmd categoryUpdateCmd); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + @Mapping(target = "categoryId", ignore = true) + CategoryDO toCategoryDO(CategoryCreateCmd categoryCreateCmd); +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/ChannelConvert.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/ChannelConvert.java new file mode 100644 index 0000000..cc8c84e --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/ChannelConvert.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.infra.infrastructure.convert; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelUpdateCmd; +import com.xunhong.erp.turbo.infra.domain.entity.Channel; +import com.xunhong.erp.turbo.infra.infrastructure.entity.ChannelDO; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface ChannelConvert { + Channel toChannel(ChannelDO channelDO); + + ChannelDO toChannelDO(ChannelCreateCmd channelCreateCmd); + + ChannelDO toChannelDO(ChannelUpdateCmd channelUpdateCmd); +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/DictionaryConvert.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/DictionaryConvert.java new file mode 100644 index 0000000..2f5a940 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/DictionaryConvert.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.infra.infrastructure.convert; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryUpdateCmd; +import com.xunhong.erp.turbo.infra.domain.entity.Dictionary; +import com.xunhong.erp.turbo.infra.infrastructure.entity.DictionaryDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface DictionaryConvert { + + Dictionary toDictionary(DictionaryDO dictionaryDO); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + DictionaryDO toDictionaryDO(DictionaryCreateCmd dictionaryCreateCmd); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + void toDictionaryDO(@MappingTarget DictionaryDO dictionaryDO, DictionaryUpdateCmd dictionaryUpdateCmd); +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/MaterialConvert.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/MaterialConvert.java new file mode 100644 index 0000000..0069b79 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/MaterialConvert.java @@ -0,0 +1,36 @@ +package com.xunhong.erp.turbo.infra.infrastructure.convert; + + +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialUpdateCmd; +import com.xunhong.erp.turbo.infra.domain.entity.Material; +import com.xunhong.erp.turbo.infra.infrastructure.entity.MaterialDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface MaterialConvert { + + @Mapping(target = "categoryDO", ignore = true) + @Mapping(target = "materialId", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + MaterialDO toMaterialDO(MaterialCreateCmd materialCreateCmd); + + @Mapping(target = "category", source = "categoryDO") + Material toMaterial(MaterialDO materialDO); + + @Mapping(target = "categoryDO", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + void toMaterialDO(@MappingTarget MaterialDO materialDO, MaterialUpdateCmd materialUpdateCmd); +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/PlatformConvert.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/PlatformConvert.java new file mode 100644 index 0000000..4def1e9 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/PlatformConvert.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.infra.infrastructure.convert; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformUpdateCmd; +import com.xunhong.erp.turbo.infra.domain.entity.Platform; +import com.xunhong.erp.turbo.infra.infrastructure.entity.PlatformDO; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface PlatformConvert { + + Platform toPlatform(PlatformDO platformDO); + + PlatformDO toPlatformDO(PlatformCreateCmd platformCreateCmd); + + PlatformDO toPlatformDO(PlatformUpdateCmd platformUpdateCmd); +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/SettingConvert.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/SettingConvert.java new file mode 100644 index 0000000..a2c9b04 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/convert/SettingConvert.java @@ -0,0 +1,34 @@ +package com.xunhong.erp.turbo.infra.infrastructure.convert; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.SettingUpdateCmd; +import com.xunhong.erp.turbo.infra.domain.entity.Setting; +import com.xunhong.erp.turbo.infra.infrastructure.entity.SettingDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface SettingConvert { + + Setting toSetting(SettingDO settingDO); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "settingId", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + SettingDO toSettingDO(SettingUpdateCmd settingUpdateCmd); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "settingId", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + @Mapping(target = "settingKey", ignore = true) + void toSettingDO(@MappingTarget SettingDO settingDO, SettingUpdateCmd settingUpdateCmd); +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/AgreementDO.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/AgreementDO.java new file mode 100644 index 0000000..9b495a3 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/AgreementDO.java @@ -0,0 +1,54 @@ +package com.xunhong.erp.turbo.infra.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import com.xunhong.erp.turbo.api.infra.dto.enums.AgreementSceneEnum; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "agreement", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +public class AgreementDO extends BaseDO { + + /** + * 协议id + */ + @TableId(value = "agreement_id", type = IdType.ASSIGN_ID) + private Long agreementId; + + /** + * 使用场景 + */ + @TableField(value = "scene", typeHandler = JacksonTypeHandler.class) + private List scene; + + /** + * 协议标题 + */ + @TableField(value = "title") + private String title; + + /** + * 副标题 + */ + @TableField(value = "sub_title") + private String subTitle; + + /** + * 协议内容 + */ + @TableField(value = "content") + private String content; + +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/CategoryDO.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/CategoryDO.java new file mode 100644 index 0000000..9fd85d2 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/CategoryDO.java @@ -0,0 +1,50 @@ +package com.xunhong.erp.turbo.infra.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.api.infra.dto.enums.CategoryTypeEnum; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "category", autoResultMap = true) +public class CategoryDO extends BaseDO { + + /** + * 分类id + */ + @TableId(value = "category_id", type = IdType.ASSIGN_ID) + private Long categoryId; + + /** + * 名称 + */ + @TableField(value = "name") + private String name; + + /** + * 资源类型 + */ + @TableField(value = "type") + private CategoryTypeEnum type; + + + /** + * 上级分类id + */ + @TableField(value = "pid") + private Long pid; + + /** + * 排序 + */ + @TableField(value = "sort") + private Integer sort; +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/ChannelDO.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/ChannelDO.java new file mode 100644 index 0000000..1d36893 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/ChannelDO.java @@ -0,0 +1,74 @@ +package com.xunhong.erp.turbo.infra.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +@Data +@TableName("channel") +@EqualsAndHashCode(callSuper = true) +public class ChannelDO extends Model { + + /** + * 渠道ID + */ + @TableId(value = "channel_id", type = IdType.ASSIGN_ID) + private Long channelId; + + /** + * 域名 + */ + @TableField(value = "domain") + private String domain; + /** + * Logo + */ + @TableField(value = "logo") + private String logo; + /** + * 标题 + */ + @TableField(value = "title") + private String title; + /** + * 副标题 + */ + @TableField(value = "sub_title") + private String subTitle; + /** + * 背景图片 + */ + @TableField(value = "background_image_url") + private String backgroundImageUrl; + /** + * 技术支持 + */ + @TableField(value = "technical_support") + private String technicalSupport; + /** + * 创建时间 + */ + @TableField(value = "created_at", fill = FieldFill.INSERT, updateStrategy = FieldStrategy.NEVER) + private LocalDateTime createdAt; + /** + * 更新时间 + */ + @TableField(value = "updated_at", fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updatedAt; + /** + * 逻辑删除时间 + */ + @TableLogic(value = "0", delval = "1") + @TableField(value = "is_delete", fill = FieldFill.INSERT) + private Integer isDelete; + /** + * 数据版本号(乐观锁) + */ + @Version + @TableField(value = "version", fill = FieldFill.INSERT) + private Integer version; +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/DictionaryDO.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/DictionaryDO.java new file mode 100644 index 0000000..0a0303f --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/DictionaryDO.java @@ -0,0 +1,56 @@ +package com.xunhong.erp.turbo.infra.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "dictionary") +@EqualsAndHashCode(callSuper = true) +public class DictionaryDO extends BaseDO { + + /** + * 自增id + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer dictionaryId; + + /** + * 代码 + */ + @TableField(value = "code") + private String code; + + /** + * 字典名称 + */ + @TableField(value = "name") + private String name; + + /** + * 上级id + */ + @TableField(value = "parentId") + private String parentId; + + /** + * 排序号 + */ + @TableField(value = "sortNo") + private Integer sortNo; + + /** + * 类型 + */ + @TableField(value = "type") + private String type; + +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/MaterialDO.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/MaterialDO.java new file mode 100644 index 0000000..0487cc7 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/MaterialDO.java @@ -0,0 +1,52 @@ +package com.xunhong.erp.turbo.infra.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.api.infra.dto.enums.CategoryTypeEnum; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "material") +public class MaterialDO extends BaseDO { + + /** + * 分类id + */ + @TableId(value = "material_id", type = IdType.ASSIGN_ID) + private Long materialId; + + /** + * 上级分类id + */ + @TableField(value = "category_id") + private Long categoryId; + + /** + * 素材类型 + */ + @TableField(value = "type") + private CategoryTypeEnum type; + + /** + * 名称 + */ + @TableField(value = "name") + private String name; + + /** + * 路劲 + */ + @TableField(value = "path") + private String path; + + @TableField(exist = false) + private CategoryDO categoryDO; +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/PlatformDO.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/PlatformDO.java new file mode 100644 index 0000000..43a1d52 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/PlatformDO.java @@ -0,0 +1,37 @@ +package com.xunhong.erp.turbo.infra.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "platform") +@EqualsAndHashCode(callSuper = true) +public class PlatformDO extends BaseDO { + + /** + * 平台id + */ + @TableId(value = "platform_id", type = IdType.ASSIGN_ID) + private Long platformId; + + /** + * 平台名称 + */ + @TableField(value = "platform_name") + private String platformName; + + /** + * home_page + */ + @TableField(value = "home_page") + private String homePage; + +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/SettingDO.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/SettingDO.java new file mode 100644 index 0000000..265cee9 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/entity/SettingDO.java @@ -0,0 +1,40 @@ +package com.xunhong.erp.turbo.infra.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import com.xunhong.erp.turbo.api.infra.dto.common.SettingValue; +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "setting", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +public class SettingDO extends BaseDO { + + /** + * 门店id + */ + @TableId(value = "setting_id", type = IdType.ASSIGN_ID) + private Long settingId; + + /** + * 系统设置项Key + */ + @TableField(value = "setting_key") + private SettingKeyEnum settingKey; + + /** + * 系统设置项内容 + */ + @TableField(value = "setting_value", typeHandler = JacksonTypeHandler.class) + private SettingValue settingValue; +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/AgreementGatewayImpl.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/AgreementGatewayImpl.java new file mode 100644 index 0000000..0c0fae8 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/AgreementGatewayImpl.java @@ -0,0 +1,103 @@ +package com.xunhong.erp.turbo.infra.infrastructure.gateway; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.AgreementListQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.AgreementPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.AgreementShowQry; +import com.xunhong.erp.turbo.infra.domain.entity.Agreement; +import com.xunhong.erp.turbo.infra.domain.gateway.AgreementGateway; +import com.xunhong.erp.turbo.infra.infrastructure.convert.AgreementConvert; +import com.xunhong.erp.turbo.infra.infrastructure.entity.AgreementDO; +import com.xunhong.erp.turbo.infra.infrastructure.mapper.AgreementMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Objects; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class AgreementGatewayImpl implements AgreementGateway { + private final AgreementMapper agreementMapper; + private final AgreementConvert agreementConvert; + + @Override + public Agreement save(AgreementCreateCmd agreementCreateCmd) { + AgreementDO agreementDO = agreementConvert.toAgreementDO(agreementCreateCmd); + agreementMapper.insert(agreementDO); + + return agreementConvert.toAgreement(agreementDO); + } + + @Override + public IPage page(AgreementPageQry agreementPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(AgreementDO.class); + if (Objects.nonNull(agreementPageQry.getScene())) { + queryWrapper.apply("JSON_CONTAINS(scene, JSON_ARRAY({0})) = 1", agreementPageQry.getScene()); + } + + queryWrapper.orderByDesc(AgreementDO::getCreatedAt); + + IPage page = new Page<>(agreementPageQry.getPageIndex(), agreementPageQry.getPageSize()); + page = agreementMapper.selectPage(page, queryWrapper); + + return page.convert(agreementConvert::toAgreement); + } + + @Override + public List list(AgreementListQry agreementListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(AgreementDO.class); + queryWrapper.eq(Objects.nonNull(agreementListQry.getAgreementId()), AgreementDO::getAgreementId, agreementListQry.getAgreementId()); + if (Objects.nonNull(agreementListQry.getScene())) { + queryWrapper.apply("JSON_CONTAINS(scene, JSON_ARRAY({0})) = 1", agreementListQry.getScene()); + } + + queryWrapper.select(AgreementDO::getAgreementId, AgreementDO::getTitle); + List agreementDOList = agreementMapper.selectList(queryWrapper); + return agreementDOList.stream().map(agreementConvert::toAgreement).toList(); + } + + @Override + public Agreement update(AgreementUpdateCmd agreementUpdateCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(AgreementDO.class); + queryWrapper.eq(AgreementDO::getAgreementId, agreementUpdateCmd.getAgreementId()); + queryWrapper.last("limit 1"); + + AgreementDO agreementDO = agreementMapper.selectOne(queryWrapper); + + agreementConvert.toAgreementDO(agreementDO, agreementUpdateCmd); + agreementMapper.updateById(agreementDO); + + return agreementConvert.toAgreement(agreementDO); + } + + @Override + public Agreement show(AgreementShowQry agreementShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(AgreementDO.class); + queryWrapper.eq(AgreementDO::getAgreementId, agreementShowQry.getAgreementId()); + queryWrapper.last("limit 1"); + + AgreementDO agreementDO = agreementMapper.selectOne(queryWrapper); + return agreementConvert.toAgreement(agreementDO); + } + + @Override + public void destroy(AgreementDestroyCmd agreementDestroyCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(AgreementDO.class); + queryWrapper.eq(AgreementDO::getAgreementId, agreementDestroyCmd.getAgreementId()); + queryWrapper.last("limit 1"); + + AgreementDO agreementDO = agreementMapper.selectOne(queryWrapper); + agreementDO.deleteById(); + } +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/CategoryGatewayImpl.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/CategoryGatewayImpl.java new file mode 100644 index 0000000..1d64ac4 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/CategoryGatewayImpl.java @@ -0,0 +1,123 @@ +package com.xunhong.erp.turbo.infra.infrastructure.gateway; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.cola.exception.BizException; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.CategoryPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.CategoryShowQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.CategoryTreeQry; +import com.xunhong.erp.turbo.infra.domain.entity.Category; +import com.xunhong.erp.turbo.infra.domain.gateway.CategoryGateway; +import com.xunhong.erp.turbo.infra.infrastructure.convert.CategoryConvert; +import com.xunhong.erp.turbo.infra.infrastructure.entity.CategoryDO; +import com.xunhong.erp.turbo.infra.infrastructure.mapper.CategoryMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Objects; + + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class CategoryGatewayImpl implements CategoryGateway { + private final CategoryMapper categoryMapper; + private final CategoryConvert categoryConvert; + + + @Override + public IPage page(CategoryPageQry categoryPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CategoryDO.class); + queryWrapper.like(StrUtil.isNotEmpty(categoryPageQry.getName()), CategoryDO::getName, categoryPageQry.getName()); + queryWrapper.eq(Objects.nonNull(categoryPageQry.getType()), CategoryDO::getType, categoryPageQry.getType()); + queryWrapper.in(CollUtil.isNotEmpty(categoryPageQry.getTypeList()), CategoryDO::getType, categoryPageQry.getTypeList()); + + queryWrapper.orderByDesc(CategoryDO::getSort); + queryWrapper.orderByDesc(CategoryDO::getCreatedAt); + + Page page = new Page<>(categoryPageQry.getPageIndex(), categoryPageQry.getPageSize()); + categoryMapper.selectPage(page, queryWrapper); + + return page.convert(categoryConvert::toCategory); + } + + @Override + public List list(CategoryTreeQry categoryTreeQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CategoryDO.class); + queryWrapper.like(StrUtil.isNotEmpty(categoryTreeQry.getName()), CategoryDO::getName, categoryTreeQry.getName()); + queryWrapper.eq(Objects.nonNull(categoryTreeQry.getType()), CategoryDO::getType, categoryTreeQry.getType()); + queryWrapper.in(CollUtil.isNotEmpty(categoryTreeQry.getTypeList()), CategoryDO::getType, categoryTreeQry.getTypeList()); + + queryWrapper.orderByDesc(CategoryDO::getSort); + queryWrapper.orderByDesc(CategoryDO::getCreatedAt); + List categoryDOList = categoryMapper.selectList(queryWrapper); + return categoryDOList.stream().map(categoryConvert::toCategory).toList(); + } + + @Override + public Category update(CategoryUpdateCmd categoryUpdateCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CategoryDO.class); + queryWrapper.eq(CategoryDO::getCategoryId, categoryUpdateCmd.getCategoryId()); + queryWrapper.eq(CategoryDO::getType, categoryUpdateCmd.getType()); + queryWrapper.select(CategoryDO::getCategoryId); + + queryWrapper.last("limit 1"); + CategoryDO categoryDO = categoryMapper.selectOne(queryWrapper); + + categoryConvert.toCategoryDO(categoryDO, categoryUpdateCmd); + categoryMapper.updateById(categoryDO); + + return categoryConvert.toCategory(categoryDO); + } + + @Override + public Category save(CategoryCreateCmd categoryCreateCmd) { + CategoryDO categoryDO = categoryConvert.toCategoryDO(categoryCreateCmd); + + categoryMapper.insert(categoryDO); + + return categoryConvert.toCategory(categoryDO); + } + + @Override + public Category show(CategoryShowQry categoryShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CategoryDO.class); + queryWrapper.eq(CategoryDO::getCategoryId, categoryShowQry.getCategoryId()); + queryWrapper.eq(Objects.nonNull(categoryShowQry.getType()), CategoryDO::getType, categoryShowQry.getType()); + + queryWrapper.last("limit 1"); + CategoryDO categoryDO = categoryMapper.selectOne(queryWrapper); + return categoryConvert.toCategory(categoryDO); + } + + @Override + public void destroy(CategoryDestroyCmd categoryDestroyCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(CategoryDO.class); + queryWrapper.eq(CategoryDO::getCategoryId, categoryDestroyCmd.getCategoryId()); + queryWrapper.eq(CategoryDO::getType, categoryDestroyCmd.getType()); + + queryWrapper.last("limit 1"); + CategoryDO categoryDO = categoryMapper.selectOne(queryWrapper); + if (Objects.isNull(categoryDO)) { + throw new BizException("400", "分类不存在,无法删除"); + } + + LambdaQueryWrapper queryWrapper1 = Wrappers.lambdaQuery(CategoryDO.class); + queryWrapper1.eq(CategoryDO::getPid, categoryDestroyCmd.getCategoryId()); + if (categoryMapper.selectCount(queryWrapper1) > 0) { + throw new BizException("400", "分类下存在子分类,无法删除"); + } + + categoryDO.deleteById(); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/ChannelGatewayImpl.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/ChannelGatewayImpl.java new file mode 100644 index 0000000..c2f3c59 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/ChannelGatewayImpl.java @@ -0,0 +1,74 @@ +package com.xunhong.erp.turbo.infra.infrastructure.gateway; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.ChannelPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.ChannelShowQry; +import com.xunhong.erp.turbo.infra.domain.entity.Channel; +import com.xunhong.erp.turbo.infra.domain.gateway.ChannelGateway; +import com.xunhong.erp.turbo.infra.infrastructure.convert.ChannelConvert; +import com.xunhong.erp.turbo.infra.infrastructure.entity.ChannelDO; +import com.xunhong.erp.turbo.infra.infrastructure.mapper.ChannelMapper; +import lombok.RequiredArgsConstructor; +import org.redisson.api.RedissonClient; +import org.springframework.stereotype.Repository; + +import java.util.Objects; + +@Repository +@RequiredArgsConstructor +public class ChannelGatewayImpl implements ChannelGateway { + + private final ChannelMapper channelMapper; + private final ChannelConvert channelConvert; + private final RedissonClient redissonClient; + + @Override + public IPage page(ChannelPageQry channelPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(ChannelDO.class); + Page page = new Page<>(channelPageQry.getPageIndex(), channelPageQry.getPageSize()); + channelMapper.selectPage(page, queryWrapper); + + return page.convert(channelConvert::toChannel); + } + + @Override + public Channel show(ChannelShowQry channelShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(ChannelDO.class); + queryWrapper.eq(Objects.nonNull(channelShowQry.getChannelId()), ChannelDO::getChannelId, channelShowQry.getChannelId()); + queryWrapper.eq(StrUtil.isNotEmpty(channelShowQry.getDomain()), ChannelDO::getDomain, channelShowQry.getDomain()); + ChannelDO channelDO = channelMapper.selectOne(queryWrapper); + + return channelConvert.toChannel(channelDO); + } + + @Override + public Channel save(ChannelCreateCmd channelCreateCmd) { + ChannelDO channelDO = channelConvert.toChannelDO(channelCreateCmd); + channelMapper.insert(channelDO); + return channelConvert.toChannel(channelDO); + } + + @Override + public void destroy(ChannelDestroyCmd channelDestroyCmd) { + ChannelDO channelDO = channelMapper.selectById(channelDestroyCmd.getChannelId()); + + channelMapper.deleteById(channelDestroyCmd.getChannelId()); + redissonClient.getBucket("channel:" + channelDO.getChannelId()).deleteAsync(); + } + + @Override + public Channel update(ChannelUpdateCmd channelUpdateCmd) { + ChannelDO channelDO = channelConvert.toChannelDO(channelUpdateCmd); + channelMapper.updateById(channelDO); + + redissonClient.getBucket("channel:" + channelDO.getChannelId()).deleteAsync(); + return channelConvert.toChannel(channelDO); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/DictionaryGatewayImpl.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/DictionaryGatewayImpl.java new file mode 100644 index 0000000..c5bfdb2 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/DictionaryGatewayImpl.java @@ -0,0 +1,98 @@ +package com.xunhong.erp.turbo.infra.infrastructure.gateway; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.DictionaryListQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.DictionaryPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.DictionaryShowQry; +import com.xunhong.erp.turbo.infra.domain.entity.Dictionary; +import com.xunhong.erp.turbo.infra.domain.gateway.DictionaryGateway; +import com.xunhong.erp.turbo.infra.infrastructure.convert.DictionaryConvert; +import com.xunhong.erp.turbo.infra.infrastructure.entity.DictionaryDO; +import com.xunhong.erp.turbo.infra.infrastructure.mapper.DictionaryMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class DictionaryGatewayImpl implements DictionaryGateway { + private final DictionaryMapper dictionaryMapper; + private final DictionaryConvert dictionaryConvert; + + @Override + public Dictionary save(DictionaryCreateCmd dictionaryCreateCmd) { + DictionaryDO dictionaryDO = dictionaryConvert.toDictionaryDO(dictionaryCreateCmd); + dictionaryMapper.insert(dictionaryDO); + + return dictionaryConvert.toDictionary(dictionaryDO); + } + + @Override + public IPage page(DictionaryPageQry dictionaryPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DictionaryDO.class); + queryWrapper.eq(!StrUtil.isBlankIfStr(dictionaryPageQry.getType()), DictionaryDO::getType, dictionaryPageQry.getType()); + queryWrapper.like(!StrUtil.isBlankIfStr(dictionaryPageQry.getName()), DictionaryDO::getName, dictionaryPageQry.getName()); + + queryWrapper.orderByDesc(DictionaryDO::getDictionaryId); + + IPage page = new Page<>(dictionaryPageQry.getPageIndex(), dictionaryPageQry.getPageSize()); + page = dictionaryMapper.selectPage(page, queryWrapper); + + return page.convert(dictionaryConvert::toDictionary); + } + + @Override + public List list(DictionaryListQry dictionaryListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DictionaryDO.class); + queryWrapper.eq(!StrUtil.isBlankIfStr(dictionaryListQry.getType()), DictionaryDO::getType, dictionaryListQry.getType()); + queryWrapper.orderByDesc(DictionaryDO::getDictionaryId); + List dictionaryDOList = dictionaryMapper.selectList(queryWrapper); + return dictionaryDOList.stream().map(dictionaryConvert::toDictionary).toList(); + } + + @Override + public Dictionary update(DictionaryUpdateCmd dictionaryUpdateCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DictionaryDO.class); + queryWrapper.eq(DictionaryDO::getDictionaryId, dictionaryUpdateCmd.getDictionaryId()); + queryWrapper.last("limit 1"); + + DictionaryDO dictionaryDO = dictionaryMapper.selectOne(queryWrapper); + + dictionaryConvert.toDictionaryDO(dictionaryDO, dictionaryUpdateCmd); + dictionaryMapper.updateById(dictionaryDO); + + return dictionaryConvert.toDictionary(dictionaryDO); + } + + @Override + public Dictionary show(DictionaryShowQry dictionaryShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DictionaryDO.class); + queryWrapper.eq(DictionaryDO::getDictionaryId, dictionaryShowQry.getDictionaryId()); + queryWrapper.last("limit 1"); + + DictionaryDO dictionaryDO = dictionaryMapper.selectOne(queryWrapper); + return dictionaryConvert.toDictionary(dictionaryDO); + } + + @Override + public void destroy(DictionaryDestroyCmd dictionaryDestroyCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DictionaryDO.class); + queryWrapper.eq(DictionaryDO::getDictionaryId, dictionaryDestroyCmd.getDictionaryId()); + queryWrapper.last("limit 1"); + + DictionaryDO dictionaryDO = dictionaryMapper.selectOne(queryWrapper); + dictionaryDO.deleteById(); + } +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/MaterialGatewayImpl.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/MaterialGatewayImpl.java new file mode 100644 index 0000000..3fad245 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/MaterialGatewayImpl.java @@ -0,0 +1,118 @@ +package com.xunhong.erp.turbo.infra.infrastructure.gateway; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialBatchAddCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.MaterialPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.MaterialShowQry; +import com.xunhong.erp.turbo.infra.domain.entity.Material; +import com.xunhong.erp.turbo.infra.domain.gateway.MaterialGateway; +import com.xunhong.erp.turbo.infra.infrastructure.convert.MaterialConvert; +import com.xunhong.erp.turbo.infra.infrastructure.entity.CategoryDO; +import com.xunhong.erp.turbo.infra.infrastructure.entity.MaterialDO; +import com.xunhong.erp.turbo.infra.infrastructure.mapper.CategoryMapper; +import com.xunhong.erp.turbo.infra.infrastructure.mapper.MaterialMapper; +import lombok.RequiredArgsConstructor; +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class MaterialGatewayImpl implements MaterialGateway { + private final MaterialMapper materialMapper; + private final MaterialConvert materialConvert; + private final SqlSessionFactory sqlSessionFactory; + + private final CategoryMapper categoryMapper; + + @Override + public List save(MaterialBatchAddCmd materialBatchAddCmd) { + List materialCreateCmdList = materialBatchAddCmd.getMaterialCreateCmdList(); + SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); + MaterialMapper materialMapper = sqlSession.getMapper(MaterialMapper.class); + + List materialDOList = materialCreateCmdList.stream() + .map(materialCreateCmd -> { + MaterialDO materialDO = materialConvert.toMaterialDO(materialCreateCmd); + + materialMapper.insert(materialDO); + + return materialDO; + }) + .toList(); + + sqlSession.commit(); + sqlSession.close(); + + return materialDOList.stream().map(materialConvert::toMaterial).toList(); + } + + @Override + public IPage page(MaterialPageQry materialPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(MaterialDO.class); + queryWrapper.like(StrUtil.isNotEmpty(materialPageQry.getTitle()), MaterialDO::getName, materialPageQry.getTitle()); + queryWrapper.eq(Objects.nonNull(materialPageQry.getCategoryId()), MaterialDO::getCategoryId, materialPageQry.getCategoryId()); + queryWrapper.eq(Objects.nonNull(materialPageQry.getType()), MaterialDO::getType, materialPageQry.getType()); + + queryWrapper.orderByDesc(MaterialDO::getMaterialId); + IPage page = new Page<>(materialPageQry.getPageIndex(), materialPageQry.getPageSize()); + page = materialMapper.selectPage(page, queryWrapper); + + List categoryIdList = page.getRecords().stream().map(MaterialDO::getCategoryId).toList(); + if (CollUtil.isNotEmpty(categoryIdList)) { + LambdaQueryWrapper queryWrapper1 = Wrappers.lambdaQuery(CategoryDO.class); + queryWrapper1.in(CategoryDO::getCategoryId, categoryIdList); + List categoryDOList = categoryMapper.selectList(queryWrapper1); + Map categoryDOMap = categoryDOList.stream().collect(Collectors.toMap(CategoryDO::getCategoryId, Function.identity())); + page.getRecords().forEach(materialDO -> materialDO.setCategoryDO(categoryDOMap.get(materialDO.getCategoryId()))); + } + + return page.convert(materialConvert::toMaterial); + } + + @Override + public Material show(MaterialShowQry materialShowQry) { + MaterialDO materialDO = materialMapper.selectById(materialShowQry.getMaterialId()); + return materialConvert.toMaterial(materialDO); + } + + @Override + public Material update(MaterialUpdateCmd materialUpdateCmd) { + MaterialDO materialDO = materialMapper.selectById(materialUpdateCmd.getMaterialId()); + materialConvert.toMaterialDO(materialDO, materialUpdateCmd); + materialMapper.updateById(materialDO); + return materialConvert.toMaterial(materialDO); + } + + @Override + public void destroy(MaterialDestroyCmd materialDestroyCmd) { + materialMapper.deleteById(materialDestroyCmd.getMaterialId()); + } + + @Override + public Material save(MaterialCreateCmd materialCreateCmd) { + MaterialDO materialDO = materialConvert.toMaterialDO(materialCreateCmd); + + materialMapper.insert(materialDO); + return materialConvert.toMaterial(materialDO); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/OssConvert.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/OssConvert.java new file mode 100644 index 0000000..1dc3310 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/OssConvert.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.infra.infrastructure.gateway; + + +import com.aliyuncs.auth.sts.AssumeRoleResponse; +import com.xunhong.erp.turbo.infra.domain.entity.Credentials; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface OssConvert { + + Credentials toCredentials(AssumeRoleResponse.Credentials credentials); +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/OssGatewayImpl.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/OssGatewayImpl.java new file mode 100644 index 0000000..e239b2a --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/OssGatewayImpl.java @@ -0,0 +1,59 @@ +package com.xunhong.erp.turbo.infra.infrastructure.gateway; + +import cn.hutool.core.date.LocalDateTimeUtil; +import com.xunhong.erp.turbo.file.FileService; +import com.xunhong.erp.turbo.file.config.OssProperties; +import com.xunhong.erp.turbo.infra.domain.entity.Credentials; +import com.xunhong.erp.turbo.infra.domain.gateway.OssGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; + + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class OssGatewayImpl implements OssGateway { + + private final OssProperties properties; + + private final FileService fileService; + + private final OssConvert ossConvert; + + @Override + public Credentials getOssToken() { + Credentials credentials = ossConvert.toCredentials(fileService.getOssToken()); + credentials.setDomain(properties.getDomain()); + credentials.setBucket(properties.getBucket()); + credentials.setRegion(properties.getRegion()); + return credentials; + } + + @Override + public String upload(MultipartFile file) { + String objectName = "uploads/" + LocalDateTimeUtil.format(LocalDateTimeUtil.now(), "yyMM/dd") + "/" + file.getOriginalFilename(); + + try { + fileService.upload(objectName, file.getInputStream()); + + return objectName; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public String upload(File file) { + String objectName = "uploads/" + LocalDateTimeUtil.format(LocalDateTimeUtil.now(), "yyMM/dd") + "/" + file.getName(); + + fileService.upload(objectName, file); + + return objectName; + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/PlatformGatewayImpl.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/PlatformGatewayImpl.java new file mode 100644 index 0000000..8e8dba6 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/PlatformGatewayImpl.java @@ -0,0 +1,82 @@ +package com.xunhong.erp.turbo.infra.infrastructure.gateway; + +import com.alibaba.cola.exception.BizException; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.PlatformListQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.PlatformPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.PlatformShowQry; +import com.xunhong.erp.turbo.infra.domain.entity.Platform; +import com.xunhong.erp.turbo.infra.domain.gateway.PlatformGateway; +import com.xunhong.erp.turbo.infra.infrastructure.convert.PlatformConvert; +import com.xunhong.erp.turbo.infra.infrastructure.entity.PlatformDO; +import com.xunhong.erp.turbo.infra.infrastructure.mapper.PlatformMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Objects; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class PlatformGatewayImpl implements PlatformGateway { + private final PlatformMapper platformMapper; + private final PlatformConvert platformConvert; + + @Override + public Platform save(PlatformCreateCmd platformCreateCmd) { + PlatformDO platformDO = platformConvert.toPlatformDO(platformCreateCmd); + platformMapper.insert(platformDO); + + return platformConvert.toPlatform(platformDO); + } + + @Override + public IPage page(PlatformPageQry platformPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(PlatformDO.class); + IPage page = new Page<>(platformPageQry.getPageIndex(), platformPageQry.getPageSize()); + page = platformMapper.selectPage(page, queryWrapper); + + return page.convert(platformConvert::toPlatform); + } + + @Override + public List list(PlatformListQry platformListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(PlatformDO.class); + + List platformDOList = platformMapper.selectList(queryWrapper); + return platformDOList.stream().map(platformConvert::toPlatform).toList(); + } + + @Override + public Platform update(PlatformUpdateCmd platformUpdateCmd) { + PlatformDO platformDO = platformConvert.toPlatformDO(platformUpdateCmd); + platformMapper.updateById(platformDO); + return platformConvert.toPlatform(platformDO); + } + + @Override + public Platform show(PlatformShowQry platformShowQry) { + PlatformDO platformDO = platformMapper.selectById(platformShowQry.getPlatformId()); + return platformConvert.toPlatform(platformDO); + } + + @Override + public void destroy(PlatformDestroyCmd platformDestroyCmd) { + // 判断平台是否存在 + PlatformDO platformDO = platformMapper.selectById(platformDestroyCmd.getPlatformId()); + if (Objects.isNull(platformDO)) { + throw new BizException("400", "平台不存在,不能删除"); + } + + platformMapper.deleteById(platformDestroyCmd.getPlatformId()); + } +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/SettingGatewayImpl.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/SettingGatewayImpl.java new file mode 100644 index 0000000..3cdc022 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/gateway/SettingGatewayImpl.java @@ -0,0 +1,54 @@ +package com.xunhong.erp.turbo.infra.infrastructure.gateway; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.xunhong.erp.turbo.api.infra.dto.cmd.SettingUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.SettingShowQry; +import com.xunhong.erp.turbo.infra.domain.entity.Setting; +import com.xunhong.erp.turbo.infra.domain.gateway.SettingGateway; +import com.xunhong.erp.turbo.infra.infrastructure.convert.SettingConvert; +import com.xunhong.erp.turbo.infra.infrastructure.entity.SettingDO; +import com.xunhong.erp.turbo.infra.infrastructure.mapper.SettingMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.Objects; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class SettingGatewayImpl implements SettingGateway { + private final SettingMapper settingMapper; + private final SettingConvert settingConvert; + + @Override + public Setting update(SettingUpdateCmd settingUpdateCmd) { + // 判断是否存在当前配置 + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(SettingDO.class); + queryWrapper.eq(Objects.nonNull(settingUpdateCmd.getSettingKey()), SettingDO::getSettingKey, settingUpdateCmd.getSettingKey()); + SettingDO settingDO = settingMapper.selectOne(queryWrapper); + + if (Objects.isNull(settingDO)) { + settingDO = settingConvert.toSettingDO(settingUpdateCmd); + settingMapper.insert(settingDO); + } else { + settingConvert.toSettingDO(settingDO, settingUpdateCmd); + settingMapper.updateById(settingDO); + } + + return settingConvert.toSetting(settingDO); + } + + @Override + public Setting show(SettingShowQry settingShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(SettingDO.class); + queryWrapper.eq(Objects.nonNull(settingShowQry.getSettingKey()), SettingDO::getSettingKey, settingShowQry.getSettingKey()); + queryWrapper.last("limit 1"); + + SettingDO settingDO = settingMapper.selectOne(queryWrapper); + return settingConvert.toSetting(settingDO); + } +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/AgreementMapper.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/AgreementMapper.java new file mode 100644 index 0000000..b7dff0c --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/AgreementMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.infra.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.infra.infrastructure.entity.AgreementDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface AgreementMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/CategoryMapper.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/CategoryMapper.java new file mode 100644 index 0000000..e0acab6 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/CategoryMapper.java @@ -0,0 +1,12 @@ +package com.xunhong.erp.turbo.infra.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.infra.infrastructure.entity.CategoryDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface CategoryMapper extends BaseMapper { +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/ChannelMapper.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/ChannelMapper.java new file mode 100644 index 0000000..b812e95 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/ChannelMapper.java @@ -0,0 +1,9 @@ +package com.xunhong.erp.turbo.infra.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.infra.infrastructure.entity.ChannelDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface ChannelMapper extends BaseMapper { +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/DictionaryMapper.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/DictionaryMapper.java new file mode 100644 index 0000000..32c9013 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/DictionaryMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.infra.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.infra.infrastructure.entity.DictionaryDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface DictionaryMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/MaterialMapper.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/MaterialMapper.java new file mode 100644 index 0000000..3eb837f --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/MaterialMapper.java @@ -0,0 +1,12 @@ +package com.xunhong.erp.turbo.infra.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.infra.infrastructure.entity.MaterialDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface MaterialMapper extends BaseMapper { +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/PlatformMapper.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/PlatformMapper.java new file mode 100644 index 0000000..73fa0fa --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/PlatformMapper.java @@ -0,0 +1,12 @@ +package com.xunhong.erp.turbo.infra.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.infra.infrastructure.entity.PlatformDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface PlatformMapper extends BaseMapper { +} diff --git a/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/SettingMapper.java b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/SettingMapper.java new file mode 100644 index 0000000..49bcc5f --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/java/com/xunhong/erp/turbo/infra/infrastructure/mapper/SettingMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.infra.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.infra.infrastructure.entity.SettingDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface SettingMapper extends BaseMapper { +} + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/resources/application.yml b/erp-turbo-business/erp-turbo-infra/src/main/resources/application.yml new file mode 100644 index 0000000..27bc143 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/resources/application.yml @@ -0,0 +1,10 @@ +spring: + application: + name: @application.name@ + profiles: + active: dev + config: + import: classpath:cache.yml,classpath:datasource.yml,classpath:rpc.yml,classpath:sa-token.yml + +server: + port: 8086 diff --git a/erp-turbo-business/erp-turbo-infra/src/main/resources/bootstrap.yml b/erp-turbo-business/erp-turbo-infra/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..c93901e --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/resources/bootstrap.yml @@ -0,0 +1,7 @@ +spring: + application: + name: @application.name@ + profiles: + active: dev + config: + import: classpath:base.yml,classpath:logging.yml,classpath:config.yml diff --git a/erp-turbo-business/erp-turbo-infra/src/main/resources/i18n/messages.properties b/erp-turbo-business/erp-turbo-infra/src/main/resources/i18n/messages.properties new file mode 100644 index 0000000..ea28719 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/resources/i18n/messages.properties @@ -0,0 +1,22 @@ +msg.200=Success +msg.500=Internal Server Error. +msg.1001=No data +msg.1002=Data saving failed +msg.100000=platform and client do not match. +msg.100001=the current account has been registered in the platform client, please do not register again. +msg.100002= +msg.50001=Obtaining the verification code succeeded +msg.50002=The verification code has expired +msg.50003=The account corresponding to the verification code does not match +msg.50004=Verification code error +validation.account=account number +validation.wechatCode=wechat code +validation.smsCode=message authentication code +validation.mobile=mobile +validation.platform=platform +validation.password=password +validation.min=length must be greater than {min} bits +validation.max=length must be less than {max} bits +validation.size=length must be between {min} ~ {max} bits +validation.regexp=format error +validation.notBlank=must not be empty \ No newline at end of file diff --git a/erp-turbo-business/erp-turbo-infra/src/main/resources/i18n/messages_en.properties b/erp-turbo-business/erp-turbo-infra/src/main/resources/i18n/messages_en.properties new file mode 100644 index 0000000..ea28719 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/resources/i18n/messages_en.properties @@ -0,0 +1,22 @@ +msg.200=Success +msg.500=Internal Server Error. +msg.1001=No data +msg.1002=Data saving failed +msg.100000=platform and client do not match. +msg.100001=the current account has been registered in the platform client, please do not register again. +msg.100002= +msg.50001=Obtaining the verification code succeeded +msg.50002=The verification code has expired +msg.50003=The account corresponding to the verification code does not match +msg.50004=Verification code error +validation.account=account number +validation.wechatCode=wechat code +validation.smsCode=message authentication code +validation.mobile=mobile +validation.platform=platform +validation.password=password +validation.min=length must be greater than {min} bits +validation.max=length must be less than {max} bits +validation.size=length must be between {min} ~ {max} bits +validation.regexp=format error +validation.notBlank=must not be empty \ No newline at end of file diff --git a/erp-turbo-business/erp-turbo-infra/src/main/resources/i18n/messages_zh_CN.properties b/erp-turbo-business/erp-turbo-infra/src/main/resources/i18n/messages_zh_CN.properties new file mode 100644 index 0000000..dcd1ed2 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/resources/i18n/messages_zh_CN.properties @@ -0,0 +1,21 @@ +msg.200=\u64CD\u4F5C\u6210\u529F +msg.500=\u7CFB\u7EDF\u5F02\u5E38 +msg.1001=\u6570\u636E\u4E3A\u7A7A +msg.1002=\u6570\u636E\u4FDD\u5B58\u5931\u8D25 +msg.100000=\u5e73\u53f0\u548c\u5ba2\u6237\u7aef\u4e0d\u5339\u914d。 +msg.100001=\u5f53\u524d\u8d26\u53f7\u5df2\u7ecf\u5728\u5e73\u53f0\u5ba2\u6237\u7aef\u6ce8\u518c,\u8bf7\u52ff\u91cd\u590d\u6ce8\u518c。 +msg.50001={0}\u83b7\u53d6\u6210\u529f +msg.50002={0}\u5df2\u8fc7\u671f +msg.50003={0}\u5bf9\u5e94\u7684\u8d26\u53f7\u4e0d\u5339\u914d +msg.50004={0}\u9519\u8bef +validation.account=\u8d26\u53f7 +validation.wechatCode=\u5fae\u4fe1 code +validation.smsCode=\u77ed\u4fe1\u9a8c\u8bc1\u7801 +validation.mobile=\u624b\u673a\u53f7\u7801 +validation.platform=\u5e73\u53f0 +validation.password=\u5bc6\u7801 +validation.min=\u957f\u5ea6\u5fc5\u987b\u5927\u4e8e {min} \u4f4d +validation.max=\u957f\u5ea6\u5fc5\u987b\u5c0f\u4e8e {max} \u4f4d +validation.size=\u957f\u5ea6\u5fc5\u987b\u4ecb\u4e8e {min} ~ {max} \u4f4d +validation.regexp=\u683c\u5f0f\u9519\u8bef +validation.notBlank=\u5fc5\u987b\u4e0d\u80fd\u4e3a\u7a7a \ No newline at end of file diff --git a/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/AgreementMapper.xml b/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/AgreementMapper.xml new file mode 100644 index 0000000..6a6b9f9 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/AgreementMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/CategoryMapper.xml b/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/CategoryMapper.xml new file mode 100644 index 0000000..bbf2d8f --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/CategoryMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/ChannelMapper.xml b/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/ChannelMapper.xml new file mode 100644 index 0000000..08f3cda --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/ChannelMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/DictionaryMapper.xml b/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/DictionaryMapper.xml new file mode 100644 index 0000000..712215b --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/DictionaryMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/MaterialMapper.xml b/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/MaterialMapper.xml new file mode 100644 index 0000000..c949ce9 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/MaterialMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/PlatformMapper.xml b/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/PlatformMapper.xml new file mode 100644 index 0000000..ef7b3ee --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/PlatformMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/SettingMapper.xml b/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/SettingMapper.xml new file mode 100644 index 0000000..09f0967 --- /dev/null +++ b/erp-turbo-business/erp-turbo-infra/src/main/resources/mapper/SettingMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-rbac/pom.xml b/erp-turbo-business/erp-turbo-rbac/pom.xml new file mode 100644 index 0000000..126a4c0 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/pom.xml @@ -0,0 +1,142 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-business + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-rbac + 1.0.0-SNAPSHOT + + + erp-turbo-rbac + 21 + 21 + UTF-8 + + + + + + com.alibaba.cola + cola-component-domain-starter + + + com.alibaba.cola + cola-component-exception + + + + + org.springframework.boot + spring-boot-starter + + + + com.xunhong + erp-turbo-base + + + + com.xunhong + erp-turbo-config + + + + com.xunhong + erp-turbo-file + + + + com.xunhong + erp-turbo-api + + + + com.xunhong + erp-turbo-rpc + + + + com.xunhong + erp-turbo-apm + + + + com.xunhong + erp-turbo-logback + + + + com.xunhong + erp-turbo-limiter + + + + com.xunhong + erp-turbo-datasource + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + junit + junit + test + + + + + com.h2database + h2 + 1.4.200 + test + + + com.baomidou + mybatis-mate-annotation + 1.3.4 + + + + + ${application.name} + + + org.springframework.boot + spring-boot-maven-plugin + + true + + com.xunhong.erp.turbo.rbac.ErpTurboRbacApplication + + + true + + ../layers/layers.xml + + + + + + package + + repackage + + + + + + + diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/ErpTurboRbacApplication.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/ErpTurboRbacApplication.java new file mode 100644 index 0000000..25e12c5 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/ErpTurboRbacApplication.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.rbac; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * Spring Boot Starter + * + * @author shenyifei + */ +@SpringBootApplication(scanBasePackages = {"com.xunhong.erp.turbo", "com.alibaba.cola"}) +public class ErpTurboRbacApplication { + + public static void main(String[] args) { + SpringApplication.run(ErpTurboRbacApplication.class, args); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/assembler/MenuAssembler.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/assembler/MenuAssembler.java new file mode 100644 index 0000000..d37053e --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/assembler/MenuAssembler.java @@ -0,0 +1,14 @@ +package com.xunhong.erp.turbo.rbac.app.assembler; + +import com.xunhong.erp.turbo.api.rbac.dto.vo.MenuVO; +import com.xunhong.erp.turbo.rbac.domain.entity.Menu; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface MenuAssembler { + MenuVO toMenuVO(Menu menu); +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/assembler/PermissionAssembler.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/assembler/PermissionAssembler.java new file mode 100644 index 0000000..e4388c6 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/assembler/PermissionAssembler.java @@ -0,0 +1,11 @@ +package com.xunhong.erp.turbo.rbac.app.assembler; + +import com.xunhong.erp.turbo.api.rbac.dto.vo.PermissionVO; +import com.xunhong.erp.turbo.rbac.domain.entity.Permission; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface PermissionAssembler { + PermissionVO toPermissionVO(Permission permission); +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/assembler/RoleAssembler.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/assembler/RoleAssembler.java new file mode 100644 index 0000000..d500a19 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/assembler/RoleAssembler.java @@ -0,0 +1,37 @@ +package com.xunhong.erp.turbo.rbac.app.assembler; + +import cn.hutool.core.collection.CollUtil; +import com.xunhong.erp.turbo.api.rbac.dto.vo.RoleVO; +import com.xunhong.erp.turbo.rbac.domain.entity.Role; +import com.xunhong.erp.turbo.rbac.domain.entity.RoleMenu; +import com.xunhong.erp.turbo.rbac.domain.entity.RolePermission; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +import java.util.ArrayList; +import java.util.List; + +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface RoleAssembler { + + @Mapping(target = "permissionId", expression = "java(toPermissionId(role))") + @Mapping(target = "menuId", expression = "java(toMenuId(role))") + RoleVO toRoleVO(Role role); + + @SuppressWarnings("unused") + default List toPermissionId(Role role) { + if (CollUtil.isEmpty(role.getRolePermissionList())) { + return new ArrayList<>(); + } + return role.getRolePermissionList().stream().map(RolePermission::getPermissionId).toList(); + } + + @SuppressWarnings("unused") + default List toMenuId(Role role) { + if (CollUtil.isEmpty(role.getRoleMenuList())) { + return new ArrayList<>(); + } + return role.getRoleMenuList().stream().map(RoleMenu::getMenuId).toList(); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/assembler/UserRoleAssembler.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/assembler/UserRoleAssembler.java new file mode 100644 index 0000000..5bc9929 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/assembler/UserRoleAssembler.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.rbac.app.assembler; + +import com.xunhong.erp.turbo.api.rbac.dto.vo.UserRoleVO; +import com.xunhong.erp.turbo.rbac.domain.entity.UserRole; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface UserRoleAssembler { + @Mapping(target = "slug", source = "userRole.role.slug") + @Mapping(target = "name", source = "userRole.role.name") + @Mapping(target = "description", source = "userRole.role.description") + UserRoleVO toUserRoleVO(UserRole userRole); +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/MenuCreateCmdExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/MenuCreateCmdExe.java new file mode 100644 index 0000000..973893b --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/MenuCreateCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.rbac.app.executor.cmd; + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.vo.MenuVO; +import com.xunhong.erp.turbo.rbac.app.assembler.MenuAssembler; +import com.xunhong.erp.turbo.rbac.domain.entity.Menu; +import com.xunhong.erp.turbo.rbac.domain.gateway.MenuGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class MenuCreateCmdExe { + private final MenuAssembler menuAssembler; + + private final MenuGateway menuGateway; + + public MenuVO execute(MenuCreateCmd menuCreateCmd) { + Menu menu = menuGateway.create(menuCreateCmd); + return menuAssembler.toMenuVO(menu); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/MenuDestroyCmdExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/MenuDestroyCmdExe.java new file mode 100644 index 0000000..54ef2b7 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/MenuDestroyCmdExe.java @@ -0,0 +1,16 @@ +package com.xunhong.erp.turbo.rbac.app.executor.cmd; + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuDestroyCmd; +import com.xunhong.erp.turbo.rbac.domain.gateway.MenuGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class MenuDestroyCmdExe { + private final MenuGateway menuGateway; + + public void execute(MenuDestroyCmd menuDestroyCmd) { + menuGateway.destroy(menuDestroyCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/MenuUpdateCmdExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/MenuUpdateCmdExe.java new file mode 100644 index 0000000..8fc91cd --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/MenuUpdateCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.rbac.app.executor.cmd; + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.vo.MenuVO; +import com.xunhong.erp.turbo.rbac.app.assembler.MenuAssembler; +import com.xunhong.erp.turbo.rbac.domain.entity.Menu; +import com.xunhong.erp.turbo.rbac.domain.gateway.MenuGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class MenuUpdateCmdExe { + private final MenuAssembler menuAssembler; + + private final MenuGateway menuGateway; + + public MenuVO execute(MenuUpdateCmd menuUpdateCmd) { + Menu menu = menuGateway.update(menuUpdateCmd); + return menuAssembler.toMenuVO(menu); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/PermissionCreateCmdExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/PermissionCreateCmdExe.java new file mode 100644 index 0000000..9441af9 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/PermissionCreateCmdExe.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.rbac.app.executor.cmd; + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.vo.PermissionVO; +import com.xunhong.erp.turbo.rbac.app.assembler.PermissionAssembler; +import com.xunhong.erp.turbo.rbac.domain.gateway.PermissionGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class PermissionCreateCmdExe { + private final PermissionGateway permissionGateway; + private final PermissionAssembler permissionAssembler; + + public PermissionVO execute(PermissionCreateCmd permissionCreateCmd) { + return permissionAssembler.toPermissionVO(permissionGateway.create(permissionCreateCmd)); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/PermissionDestroyCmdExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/PermissionDestroyCmdExe.java new file mode 100644 index 0000000..884f445 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/PermissionDestroyCmdExe.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.rbac.app.executor.cmd; + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionDestroyCmd; +import com.xunhong.erp.turbo.rbac.app.assembler.PermissionAssembler; +import com.xunhong.erp.turbo.rbac.domain.gateway.PermissionGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class PermissionDestroyCmdExe { + private final PermissionGateway permissionGateway; + private final PermissionAssembler permissionAssembler; + + public void execute(PermissionDestroyCmd permissionDestroyCmd) { + permissionGateway.destroy(permissionDestroyCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/PermissionUpdateCmdExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/PermissionUpdateCmdExe.java new file mode 100644 index 0000000..46486eb --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/PermissionUpdateCmdExe.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.rbac.app.executor.cmd; + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.vo.PermissionVO; +import com.xunhong.erp.turbo.rbac.app.assembler.PermissionAssembler; +import com.xunhong.erp.turbo.rbac.domain.gateway.PermissionGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class PermissionUpdateCmdExe { + private final PermissionGateway permissionGateway; + private final PermissionAssembler permissionAssembler; + + public PermissionVO execute(PermissionUpdateCmd permissionUpdateCmd) { + return permissionAssembler.toPermissionVO(permissionGateway.update(permissionUpdateCmd)); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/RoleCreateCmdExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/RoleCreateCmdExe.java new file mode 100644 index 0000000..fa5dd2c --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/RoleCreateCmdExe.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.rbac.app.executor.cmd; + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.vo.RoleVO; +import com.xunhong.erp.turbo.rbac.app.assembler.RoleAssembler; +import com.xunhong.erp.turbo.rbac.domain.entity.Role; +import com.xunhong.erp.turbo.rbac.domain.gateway.RoleGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class RoleCreateCmdExe { + private final RoleGateway roleGateway; + private final RoleAssembler roleAssembler; + + public RoleVO execute(RoleCreateCmd roleCreateCmd) { + Role role = roleGateway.save(roleCreateCmd); + return roleAssembler.toRoleVO(role); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/RoleDestroyCmdExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/RoleDestroyCmdExe.java new file mode 100644 index 0000000..301ae6e --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/RoleDestroyCmdExe.java @@ -0,0 +1,16 @@ +package com.xunhong.erp.turbo.rbac.app.executor.cmd; + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleDestroyCmd; +import com.xunhong.erp.turbo.rbac.domain.gateway.RoleGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class RoleDestroyCmdExe { + private final RoleGateway roleGateway; + + public void execute(RoleDestroyCmd roleDeleteCmd) { + roleGateway.destroy(roleDeleteCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/RoleUpdateCmdExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/RoleUpdateCmdExe.java new file mode 100644 index 0000000..96575eb --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/RoleUpdateCmdExe.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.rbac.app.executor.cmd; + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.vo.RoleVO; +import com.xunhong.erp.turbo.rbac.app.assembler.RoleAssembler; +import com.xunhong.erp.turbo.rbac.domain.entity.Role; +import com.xunhong.erp.turbo.rbac.domain.gateway.RoleGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class RoleUpdateCmdExe { + private final RoleGateway roleGateway; + private final RoleAssembler roleAssembler; + + public RoleVO execute(RoleUpdateCmd roleUpdateCmd) { + Role role = roleGateway.update(roleUpdateCmd); + return roleAssembler.toRoleVO(role); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/UserRoleCreateCmdExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/UserRoleCreateCmdExe.java new file mode 100644 index 0000000..7b69ef3 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/UserRoleCreateCmdExe.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.rbac.app.executor.cmd; + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.UserRoleCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.vo.UserRoleVO; +import com.xunhong.erp.turbo.rbac.app.assembler.UserRoleAssembler; +import com.xunhong.erp.turbo.rbac.domain.entity.UserRole; +import com.xunhong.erp.turbo.rbac.domain.gateway.UserRoleGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.stream.Collectors; + +@Component +@RequiredArgsConstructor +public class UserRoleCreateCmdExe { + + private final UserRoleGateway userRoleGateway; + private final UserRoleAssembler userRoleAssembler; + + public List execute(UserRoleCreateCmd userRoleCreateCmd) { + List userRoleList = userRoleGateway.create(userRoleCreateCmd); + return userRoleList.stream().map(userRoleAssembler::toUserRoleVO).collect(Collectors.toList()); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/UserRoleListQryExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/UserRoleListQryExe.java new file mode 100644 index 0000000..b46c891 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/UserRoleListQryExe.java @@ -0,0 +1,23 @@ +package com.xunhong.erp.turbo.rbac.app.executor.cmd; + +import com.xunhong.erp.turbo.api.rbac.dto.qry.UserRoleListQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.UserRoleVO; +import com.xunhong.erp.turbo.rbac.app.assembler.UserRoleAssembler; +import com.xunhong.erp.turbo.rbac.domain.entity.UserRole; +import com.xunhong.erp.turbo.rbac.domain.gateway.UserRoleGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@RequiredArgsConstructor +public class UserRoleListQryExe { + private final UserRoleGateway userRoleGateway; + private final UserRoleAssembler userRoleAssembler; + + public List execute(UserRoleListQry userRoleListQry) { + List userRoleList = userRoleGateway.list(userRoleListQry); + return userRoleList.stream().map(userRoleAssembler::toUserRoleVO).toList(); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/UserRoleUpdateCmdExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/UserRoleUpdateCmdExe.java new file mode 100644 index 0000000..21a5202 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/cmd/UserRoleUpdateCmdExe.java @@ -0,0 +1,40 @@ +package com.xunhong.erp.turbo.rbac.app.executor.cmd; + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.UserRoleUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleListQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.UserRoleVO; +import com.xunhong.erp.turbo.rbac.app.assembler.UserRoleAssembler; +import com.xunhong.erp.turbo.rbac.domain.entity.Role; +import com.xunhong.erp.turbo.rbac.domain.entity.UserRole; +import com.xunhong.erp.turbo.rbac.domain.gateway.RoleGateway; +import com.xunhong.erp.turbo.rbac.domain.gateway.UserRoleGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Component +@RequiredArgsConstructor +public class UserRoleUpdateCmdExe { + + private final UserRoleGateway userRoleGateway; + private final UserRoleAssembler userRoleAssembler; + + private final RoleGateway roleGateway; + + public List execute(UserRoleUpdateCmd userRoleUpdateCmd) { + RoleListQry roleListQry = new RoleListQry(); + roleListQry.setRoleIdList(userRoleUpdateCmd.getRoleIdList()); + List roleList = roleGateway.list(roleListQry); + + if (roleList.isEmpty()) { + return new ArrayList<>(); + } + + userRoleUpdateCmd.setRoleIdList(roleList.stream().map(Role::getRoleId).collect(Collectors.toList())); + List userRoleList = userRoleGateway.update(userRoleUpdateCmd); + return userRoleList.stream().map(userRoleAssembler::toUserRoleVO).collect(Collectors.toList()); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/MenuDragCmdExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/MenuDragCmdExe.java new file mode 100644 index 0000000..17c42a0 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/MenuDragCmdExe.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.rbac.app.executor.query; + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuDragCmd; +import com.xunhong.erp.turbo.rbac.domain.gateway.MenuGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class MenuDragCmdExe { + private final MenuGateway menuGateway; + + public void execute(MenuDragCmd menuDragCmd) { + menuGateway.drag(menuDragCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/MenuListQryExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/MenuListQryExe.java new file mode 100644 index 0000000..0cbc259 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/MenuListQryExe.java @@ -0,0 +1,26 @@ +package com.xunhong.erp.turbo.rbac.app.executor.query; + +import com.xunhong.erp.turbo.api.rbac.dto.qry.MenuListQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.MenuVO; +import com.xunhong.erp.turbo.rbac.app.assembler.MenuAssembler; +import com.xunhong.erp.turbo.rbac.domain.entity.Menu; +import com.xunhong.erp.turbo.rbac.domain.gateway.MenuGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author shenyifei + */ +@Component +@RequiredArgsConstructor +public class MenuListQryExe { + private final MenuGateway menuGateway; + private final MenuAssembler menuAssembler; + + public List execute(MenuListQry menuListQry) { + List menuList = menuGateway.list(menuListQry); + return menuList.stream().map(menuAssembler::toMenuVO).toList(); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/MenuShowQryExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/MenuShowQryExe.java new file mode 100644 index 0000000..d01594a --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/MenuShowQryExe.java @@ -0,0 +1,24 @@ +package com.xunhong.erp.turbo.rbac.app.executor.query; + +import com.xunhong.erp.turbo.api.rbac.dto.qry.MenuShowQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.MenuVO; +import com.xunhong.erp.turbo.rbac.app.assembler.MenuAssembler; +import com.xunhong.erp.turbo.rbac.domain.entity.Menu; +import com.xunhong.erp.turbo.rbac.domain.gateway.MenuGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Component +@RequiredArgsConstructor +public class MenuShowQryExe { + private final MenuGateway menuGateway; + private final MenuAssembler menuAssembler; + + public MenuVO execute(MenuShowQry menuShowQry) { + Menu menu = menuGateway.show(menuShowQry); + return menuAssembler.toMenuVO(menu); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/MenuTreeQryExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/MenuTreeQryExe.java new file mode 100644 index 0000000..f226b0c --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/MenuTreeQryExe.java @@ -0,0 +1,46 @@ +package com.xunhong.erp.turbo.rbac.app.executor.query; + +import cn.hutool.core.lang.tree.Tree; +import cn.hutool.core.lang.tree.TreeNodeConfig; +import cn.hutool.core.lang.tree.TreeUtil; +import com.xunhong.erp.turbo.api.rbac.dto.qry.MenuTreeQry; +import com.xunhong.erp.turbo.rbac.domain.entity.Menu; +import com.xunhong.erp.turbo.rbac.domain.gateway.MenuGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author shenyifei + */ +@Component +@RequiredArgsConstructor +public class MenuTreeQryExe { + private final MenuGateway menuGateway; + + public List> execute(MenuTreeQry menuTreeQry) { + List menuList = menuGateway.tree(menuTreeQry); + + TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); + treeNodeConfig.setWeightKey("sort"); + treeNodeConfig.setIdKey("menuId"); + treeNodeConfig.setParentIdKey("pid"); + treeNodeConfig.setNameKey("name"); + treeNodeConfig.setChildrenKey("routes"); + treeNodeConfig.setDeep(5); + + return TreeUtil.build(menuList, menuTreeQry.getPid(), treeNodeConfig, (appMenu, tree) -> { + tree.setId(appMenu.getMenuId()); + tree.setParentId(appMenu.getPid()); + tree.setWeight(appMenu.getSort()); + tree.setName(appMenu.getName()); + // 扩展属性 ... + tree.putExtra("path", appMenu.getPath()); + tree.putExtra("platformId", appMenu.getPlatformId()); + tree.putExtra("hideInMenu", appMenu.getHideInMenu()); + tree.putExtra("type", appMenu.getType()); + tree.putExtra("component", appMenu.getComponent()); + }); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/PermissionListQryExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/PermissionListQryExe.java new file mode 100644 index 0000000..2854579 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/PermissionListQryExe.java @@ -0,0 +1,23 @@ +package com.xunhong.erp.turbo.rbac.app.executor.query; + +import com.xunhong.erp.turbo.api.rbac.dto.qry.PermissionListQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.PermissionVO; +import com.xunhong.erp.turbo.rbac.app.assembler.PermissionAssembler; +import com.xunhong.erp.turbo.rbac.domain.entity.Permission; +import com.xunhong.erp.turbo.rbac.domain.gateway.PermissionGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@RequiredArgsConstructor +public class PermissionListQryExe { + private final PermissionGateway permissionGateway; + private final PermissionAssembler permissionAssembler; + + public List execute(PermissionListQry permissionListQry) { + List permissionList = permissionGateway.list(permissionListQry); + return permissionList.stream().map(permissionAssembler::toPermissionVO).toList(); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/PermissionPageQryExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/PermissionPageQryExe.java new file mode 100644 index 0000000..853d991 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/PermissionPageQryExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.rbac.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.rbac.dto.qry.PermissionPageQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.PermissionVO; +import com.xunhong.erp.turbo.rbac.app.assembler.PermissionAssembler; +import com.xunhong.erp.turbo.rbac.domain.entity.Permission; +import com.xunhong.erp.turbo.rbac.domain.gateway.PermissionGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class PermissionPageQryExe { + private final PermissionGateway privilegeGateway; + private final PermissionAssembler permissionAssembler; + + public IPage execute(PermissionPageQry permissionPageQry) { + IPage page = privilegeGateway.page(permissionPageQry); + return page.convert(permissionAssembler::toPermissionVO); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/PermissionShowQryExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/PermissionShowQryExe.java new file mode 100644 index 0000000..10c62b8 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/PermissionShowQryExe.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.rbac.app.executor.query; + +import com.xunhong.erp.turbo.api.rbac.dto.qry.PermissionShowQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.PermissionVO; +import com.xunhong.erp.turbo.rbac.app.assembler.PermissionAssembler; +import com.xunhong.erp.turbo.rbac.domain.gateway.PermissionGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class PermissionShowQryExe { + private final PermissionGateway permissionGateway; + private final PermissionAssembler permissionAssembler; + + public PermissionVO execute(PermissionShowQry permissionShowQry) { + return permissionAssembler.toPermissionVO(permissionGateway.show(permissionShowQry)); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/RoleListQryExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/RoleListQryExe.java new file mode 100644 index 0000000..9a0ce8d --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/RoleListQryExe.java @@ -0,0 +1,24 @@ +package com.xunhong.erp.turbo.rbac.app.executor.query; + + +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleListQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.RoleVO; +import com.xunhong.erp.turbo.rbac.app.assembler.RoleAssembler; +import com.xunhong.erp.turbo.rbac.domain.entity.Role; +import com.xunhong.erp.turbo.rbac.domain.gateway.RoleGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@RequiredArgsConstructor +public class RoleListQryExe { + private final RoleGateway roleGateway; + private final RoleAssembler roleAssembler; + + public List execute(RoleListQry roleListQry) { + List roleList = roleGateway.list(roleListQry); + return roleList.stream().map(roleAssembler::toRoleVO).toList(); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/RolePageQryExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/RolePageQryExe.java new file mode 100644 index 0000000..cb543cc --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/RolePageQryExe.java @@ -0,0 +1,23 @@ +package com.xunhong.erp.turbo.rbac.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RolePageQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.RoleVO; +import com.xunhong.erp.turbo.rbac.app.assembler.RoleAssembler; +import com.xunhong.erp.turbo.rbac.domain.entity.Role; +import com.xunhong.erp.turbo.rbac.domain.gateway.RoleGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class RolePageQryExe { + + private final RoleGateway roleGateway; + private final RoleAssembler roleAssembler; + + public IPage execute(RolePageQry rolePageQry) { + IPage page = roleGateway.page(rolePageQry); + return page.convert(roleAssembler::toRoleVO); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/RoleShowQryExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/RoleShowQryExe.java new file mode 100644 index 0000000..75db61f --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/RoleShowQryExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.rbac.app.executor.query; + +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleShowQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.RoleVO; +import com.xunhong.erp.turbo.rbac.app.assembler.RoleAssembler; +import com.xunhong.erp.turbo.rbac.domain.entity.Role; +import com.xunhong.erp.turbo.rbac.domain.gateway.RoleGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class RoleShowQryExe { + + private final RoleGateway roleGateway; + private final RoleAssembler roleAssembler; + + public RoleVO execute(RoleShowQry roleShowQry) { + Role role = roleGateway.show(roleShowQry); + return roleAssembler.toRoleVO(role); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/UserMenuQryExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/UserMenuQryExe.java new file mode 100644 index 0000000..76916ed --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/UserMenuQryExe.java @@ -0,0 +1,45 @@ +package com.xunhong.erp.turbo.rbac.app.executor.query; + +import cn.hutool.core.lang.tree.Tree; +import cn.hutool.core.lang.tree.TreeNodeConfig; +import cn.hutool.core.lang.tree.TreeUtil; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleMenuTreeQry; +import com.xunhong.erp.turbo.rbac.domain.entity.Menu; +import com.xunhong.erp.turbo.rbac.domain.entity.RoleMenu; +import com.xunhong.erp.turbo.rbac.domain.gateway.RoleMenuGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@RequiredArgsConstructor +public class UserMenuQryExe { + private final RoleMenuGateway roleMenuGateway; + + public List> execute(RoleMenuTreeQry roleMenuTreeQry) { + List roleMenuList = roleMenuGateway.list(roleMenuTreeQry); + + TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); + treeNodeConfig.setWeightKey("sort"); + treeNodeConfig.setIdKey("menuId"); + treeNodeConfig.setParentIdKey("pid"); + treeNodeConfig.setNameKey("name"); + treeNodeConfig.setChildrenKey("routes"); + treeNodeConfig.setDeep(5); + + return TreeUtil.build(roleMenuList, null, treeNodeConfig, (roleMenu, tree) -> { + Menu menu = roleMenu.getMenu(); + tree.setId(roleMenu.getMenuId()); + tree.setParentId(menu.getPid()); + tree.setWeight(menu.getSort()); + tree.setName(menu.getName()); + // 扩展属性 ... + tree.putExtra("path", menu.getPath()); + tree.putExtra("platformId", menu.getPlatformId()); + tree.putExtra("hideInMenu", menu.getHideInMenu()); + tree.putExtra("type", menu.getType()); + tree.putExtra("component", menu.getComponent()); + }); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/UserPermissionQryExe.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/UserPermissionQryExe.java new file mode 100644 index 0000000..a83804b --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/executor/query/UserPermissionQryExe.java @@ -0,0 +1,23 @@ +package com.xunhong.erp.turbo.rbac.app.executor.query; + +import com.xunhong.erp.turbo.api.rbac.dto.qry.UserPermissionQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.PermissionVO; +import com.xunhong.erp.turbo.rbac.app.assembler.PermissionAssembler; +import com.xunhong.erp.turbo.rbac.domain.entity.Permission; +import com.xunhong.erp.turbo.rbac.domain.gateway.PermissionGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@RequiredArgsConstructor +public class UserPermissionQryExe { + private final PermissionGateway permissionGateway; + private final PermissionAssembler permissionAssembler; + + public List execute(UserPermissionQry userPermissionQry) { + List permissionList = permissionGateway.userPermission(userPermissionQry); + return permissionList.stream().map(permissionAssembler::toPermissionVO).toList(); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/MenuServiceImpl.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/MenuServiceImpl.java new file mode 100644 index 0000000..b769cd6 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/MenuServiceImpl.java @@ -0,0 +1,79 @@ +package com.xunhong.erp.turbo.rbac.app.service; + +import cn.hutool.core.lang.tree.Tree; +import com.xunhong.erp.turbo.api.rbac.api.MenuServiceI; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuDestroyCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuDragCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.qry.MenuListQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.MenuShowQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.MenuTreeQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.MenuVO; +import com.xunhong.erp.turbo.rbac.app.executor.cmd.MenuCreateCmdExe; +import com.xunhong.erp.turbo.rbac.app.executor.cmd.MenuDestroyCmdExe; +import com.xunhong.erp.turbo.rbac.app.executor.cmd.MenuUpdateCmdExe; +import com.xunhong.erp.turbo.rbac.app.executor.query.MenuDragCmdExe; +import com.xunhong.erp.turbo.rbac.app.executor.query.MenuListQryExe; +import com.xunhong.erp.turbo.rbac.app.executor.query.MenuShowQryExe; +import com.xunhong.erp.turbo.rbac.app.executor.query.MenuTreeQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + * @author shenyifei + */ +@Slf4j +@Service +@DubboService(interfaceClass = MenuServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class MenuServiceImpl implements MenuServiceI { + + private final MenuTreeQryExe menuTreeQryExe; + private final MenuCreateCmdExe menuCreateCmdExe; + private final MenuUpdateCmdExe menuUpdateCmdExe; + private final MenuShowQryExe menuShowQryExe; + private final MenuDestroyCmdExe menuDestroyCmdExe; + private final MenuListQryExe menuListQryExe; + private final MenuDragCmdExe menuDragCmdExe; + + @Override + public List> tree(MenuTreeQry menuTreeQry) { + return menuTreeQryExe.execute(menuTreeQry); + } + + @Override + public MenuVO create(MenuCreateCmd menuCreateCmd) { + return menuCreateCmdExe.execute(menuCreateCmd); + } + + @Override + public MenuVO show(MenuShowQry menuShowQry) { + return menuShowQryExe.execute(menuShowQry); + } + + @Override + public MenuVO update(MenuUpdateCmd menuUpdateCmd) { + return menuUpdateCmdExe.execute(menuUpdateCmd); + } + + @Override + public void destroy(MenuDestroyCmd menuDestroyCmd) { + menuDestroyCmdExe.execute(menuDestroyCmd); + } + + @Override + public List list(MenuListQry menuListQry) { + return menuListQryExe.execute(menuListQry); + } + + @Override + public void drag(MenuDragCmd menuDragCmd) { + menuDragCmdExe.execute(menuDragCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/PermissionServiceImpl.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/PermissionServiceImpl.java new file mode 100644 index 0000000..1f82151 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/PermissionServiceImpl.java @@ -0,0 +1,66 @@ +package com.xunhong.erp.turbo.rbac.app.service; + +import com.xunhong.erp.turbo.api.rbac.api.PermissionServiceI; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionDestroyCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.qry.PermissionListQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.PermissionPageQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.PermissionShowQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.PermissionVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.rbac.app.executor.cmd.PermissionCreateCmdExe; +import com.xunhong.erp.turbo.rbac.app.executor.cmd.PermissionDestroyCmdExe; +import com.xunhong.erp.turbo.rbac.app.executor.cmd.PermissionUpdateCmdExe; +import com.xunhong.erp.turbo.rbac.app.executor.query.PermissionListQryExe; +import com.xunhong.erp.turbo.rbac.app.executor.query.PermissionPageQryExe; +import com.xunhong.erp.turbo.rbac.app.executor.query.PermissionShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Slf4j +@Service +@DubboService(interfaceClass = PermissionServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class PermissionServiceImpl implements PermissionServiceI { + private final PermissionListQryExe permissionListQryExe; + private final PermissionShowQryExe permissionShowQryExe; + private final PermissionPageQryExe permissionPageQryExe; + private final PermissionCreateCmdExe permissionCreateCmdExe; + private final PermissionUpdateCmdExe permissionUpdateCmdExe; + private final PermissionDestroyCmdExe permissionDestroyCmdExe; + + @Override + public List list(PermissionListQry permissionListQry) { + return permissionListQryExe.execute(permissionListQry); + } + + @Override + public PageDTO page(PermissionPageQry permissionPageQry) { + return PageDTO.of(permissionPageQryExe.execute(permissionPageQry)); + } + + @Override + public PermissionVO create(PermissionCreateCmd permissionCreateCmd) { + return permissionCreateCmdExe.execute(permissionCreateCmd); + } + + @Override + public PermissionVO show(PermissionShowQry permissionShowQry) { + return permissionShowQryExe.execute(permissionShowQry); + } + + @Override + public PermissionVO update(PermissionUpdateCmd permissionUpdateCmd) { + return permissionUpdateCmdExe.execute(permissionUpdateCmd); + } + + @Override + public void destroy(PermissionDestroyCmd permissionDestroyCmd) { + permissionDestroyCmdExe.execute(permissionDestroyCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/RoleServiceImpl.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/RoleServiceImpl.java new file mode 100644 index 0000000..f21fb48 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/RoleServiceImpl.java @@ -0,0 +1,68 @@ +package com.xunhong.erp.turbo.rbac.app.service; + +import com.xunhong.erp.turbo.api.rbac.api.RoleServiceI; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleDestroyCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleListQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RolePageQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleShowQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.RoleVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.rbac.app.executor.cmd.RoleCreateCmdExe; +import com.xunhong.erp.turbo.rbac.app.executor.cmd.RoleDestroyCmdExe; +import com.xunhong.erp.turbo.rbac.app.executor.cmd.RoleUpdateCmdExe; +import com.xunhong.erp.turbo.rbac.app.executor.query.RoleListQryExe; +import com.xunhong.erp.turbo.rbac.app.executor.query.RolePageQryExe; +import com.xunhong.erp.turbo.rbac.app.executor.query.RoleShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + + +@Slf4j +@Service +@DubboService(interfaceClass = RoleServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class RoleServiceImpl implements RoleServiceI { + + private final RoleListQryExe roleListQryExe; + private final RoleCreateCmdExe roleCreateCmdExe; + private final RoleUpdateCmdExe roleUpdateCmdExe; + private final RoleDestroyCmdExe roleDestroyCmdExe; + private final RoleShowQryExe roleShowQryExe; + private final RolePageQryExe rolePageQryExe; + + @Override + public List listRole(RoleListQry roleListQry) { + return roleListQryExe.execute(roleListQry); + } + + @Override + public RoleVO createRole(RoleCreateCmd roleCreateCmd) { + return roleCreateCmdExe.execute(roleCreateCmd); + } + + @Override + public RoleVO showRole(RoleShowQry roleShowQry) { + return roleShowQryExe.execute(roleShowQry); + } + + @Override + public RoleVO updateRole(RoleUpdateCmd roleUpdateCmd) { + return roleUpdateCmdExe.execute(roleUpdateCmd); + } + + @Override + public void destroyRole(RoleDestroyCmd roleDeleteCmd) { + roleDestroyCmdExe.execute(roleDeleteCmd); + } + + @Override + public PageDTO pageRole(RolePageQry rolePageQry) { + return PageDTO.of(rolePageQryExe.execute(rolePageQry)); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/UserMenuServiceImpl.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/UserMenuServiceImpl.java new file mode 100644 index 0000000..dc6f3a1 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/UserMenuServiceImpl.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.rbac.app.service; + +import cn.hutool.core.lang.tree.Tree; +import com.xunhong.erp.turbo.api.rbac.api.UserMenuServiceI; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleMenuTreeQry; +import com.xunhong.erp.turbo.rbac.app.executor.query.UserMenuQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Slf4j +@Service +@DubboService(interfaceClass = UserMenuServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class UserMenuServiceImpl implements UserMenuServiceI { + private final UserMenuQryExe userMenuQryExe; + + @Override + public List> list(RoleMenuTreeQry roleMenuTreeQry) { + return userMenuQryExe.execute(roleMenuTreeQry); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/UserPermissionServiceImpl.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/UserPermissionServiceImpl.java new file mode 100644 index 0000000..b909714 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/UserPermissionServiceImpl.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.rbac.app.service; + +import com.xunhong.erp.turbo.api.rbac.api.UserPermissionServiceI; +import com.xunhong.erp.turbo.api.rbac.dto.qry.UserPermissionQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.PermissionVO; +import com.xunhong.erp.turbo.rbac.app.executor.query.UserPermissionQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Slf4j +@Service +@DubboService(interfaceClass = UserPermissionServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class UserPermissionServiceImpl implements UserPermissionServiceI { + private final UserPermissionQryExe userPermissionQryExe; + + @Override + public List list(UserPermissionQry userPermissionQry) { + return userPermissionQryExe.execute(userPermissionQry); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/UserRoleServiceImpl.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/UserRoleServiceImpl.java new file mode 100644 index 0000000..09f4a77 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/app/service/UserRoleServiceImpl.java @@ -0,0 +1,41 @@ +package com.xunhong.erp.turbo.rbac.app.service; + +import com.xunhong.erp.turbo.api.rbac.api.UserRoleServiceI; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.UserRoleCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.UserRoleUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.qry.UserRoleListQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.UserRoleVO; +import com.xunhong.erp.turbo.rbac.app.executor.cmd.UserRoleCreateCmdExe; +import com.xunhong.erp.turbo.rbac.app.executor.cmd.UserRoleListQryExe; +import com.xunhong.erp.turbo.rbac.app.executor.cmd.UserRoleUpdateCmdExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Slf4j +@Service +@DubboService(interfaceClass = UserRoleServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class UserRoleServiceImpl implements UserRoleServiceI { + private final UserRoleListQryExe userRoleListQryExe; + private final UserRoleCreateCmdExe userRoleCreateCmdExe; + private final UserRoleUpdateCmdExe userRoleUpdateCmdExe; + + @Override + public List list(UserRoleListQry userRoleListQry) { + return userRoleListQryExe.execute(userRoleListQry); + } + + @Override + public List create(UserRoleCreateCmd userRoleCreateCmd) { + return userRoleCreateCmdExe.execute(userRoleCreateCmd); + } + + @Override + public List update(UserRoleUpdateCmd userRoleUpdateCmd) { + return userRoleUpdateCmdExe.execute(userRoleUpdateCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/Menu.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/Menu.java new file mode 100644 index 0000000..f9cb855 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/Menu.java @@ -0,0 +1,73 @@ +package com.xunhong.erp.turbo.rbac.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.rbac.dto.enums.MenuTypeEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class Menu extends DTO { + + /** + * 菜单Id + */ + private Long menuId; + + /** + * 平台id + */ + private Long platformId; + + /** + * 名称 + */ + private String name; + + /** + * 路径 + */ + private String path; + + /** + * 组件 + */ + private String component; + + /** + * 上级菜单id + */ + private Long pid; + + /** + * 排序 + */ + private BigDecimal sort; + + /** + * 菜单类型 + */ + private MenuTypeEnum type; + + /** + * 是否显示 + */ + private Boolean hideInMenu; + + /** + * 权限id + */ + private Long permissionId; + /** + * 创建时间 + */ + private LocalDateTime createdAt; +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/Permission.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/Permission.java new file mode 100644 index 0000000..14c019a --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/Permission.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.rbac.domain.entity; + + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class Permission extends DTO { + + private Long permissionId; + + private String slug; + + private String name; +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/Role.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/Role.java new file mode 100644 index 0000000..e24dec1 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/Role.java @@ -0,0 +1,58 @@ +package com.xunhong.erp.turbo.rbac.domain.entity; + + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class Role extends DTO { + + /** + * 角色id + */ + private Long roleId; + + /** + * 标识 + */ + private String slug; + + /** + * 名称 + */ + private String name; + + /** + * 类型 + */ + private String type; + + /** + * 描述 + */ + private String description; + + /** + * 平台id + */ + private Long platformId; + + /** + * 权限列表 + */ + private List rolePermissionList; + + /** + * 权限列表 + */ + private List roleMenuList; + + private LocalDateTime createdAt; +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/RoleMenu.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/RoleMenu.java new file mode 100644 index 0000000..051e669 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/RoleMenu.java @@ -0,0 +1,24 @@ +package com.xunhong.erp.turbo.rbac.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class RoleMenu extends DTO { + + /** + * 角色id + */ + private Long roleId; + + /** + * 权限id + */ + private Long menuId; + + private Menu menu; +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/RolePermission.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/RolePermission.java new file mode 100644 index 0000000..175a0c0 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/RolePermission.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.rbac.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class RolePermission extends DTO { + + /** + * 角色id + */ + private Long roleId; + + /** + * 权限id + */ + private Long permissionId; +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/UserRole.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/UserRole.java new file mode 100644 index 0000000..c7b830a --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/entity/UserRole.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.rbac.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class UserRole extends DTO { + + private Long roleId; + + private Role role; + + private Long userId; +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/MenuGateway.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/MenuGateway.java new file mode 100644 index 0000000..3de8f6f --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/MenuGateway.java @@ -0,0 +1,31 @@ +package com.xunhong.erp.turbo.rbac.domain.gateway; + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuDestroyCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuDragCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.qry.MenuListQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.MenuShowQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.MenuTreeQry; +import com.xunhong.erp.turbo.rbac.domain.entity.Menu; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface MenuGateway { + List tree(MenuTreeQry menuTreeQry); + + List list(MenuListQry menuListQry); + + Menu create(MenuCreateCmd menuCreateCmd); + + Menu update(MenuUpdateCmd menuUpdateCmd); + + void destroy(MenuDestroyCmd menuDestroyCmd); + + Menu show(MenuShowQry menuShowQry); + + void drag(MenuDragCmd menuDragCmd); +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/PermissionGateway.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/PermissionGateway.java new file mode 100644 index 0000000..9cdd6d5 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/PermissionGateway.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.rbac.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionDestroyCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.qry.PermissionListQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.PermissionPageQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.PermissionShowQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.UserPermissionQry; +import com.xunhong.erp.turbo.rbac.domain.entity.Permission; + +import java.util.List; + +public interface PermissionGateway { + List list(PermissionListQry permissionListQry); + + IPage page(PermissionPageQry permissionPageQry); + + Permission show(PermissionShowQry permissionShowQry); + + Permission create(PermissionCreateCmd permissionCreateCmd); + + Permission update(PermissionUpdateCmd permissionUpdateCmd); + + void destroy(PermissionDestroyCmd permissionDestroyCmd); + + List userPermission(UserPermissionQry userPermissionQry); +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/RoleGateway.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/RoleGateway.java new file mode 100644 index 0000000..7cfb64a --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/RoleGateway.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.rbac.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleDestroyCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleListQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RolePageQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleShowQry; +import com.xunhong.erp.turbo.rbac.domain.entity.Role; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface RoleGateway { + + List list(RoleListQry roleListQry); + + Role save(RoleCreateCmd roleCreateCmd); + + void destroy(RoleDestroyCmd roleDeleteCmd); + + Role update(RoleUpdateCmd roleUpdateCmd); + + IPage page(RolePageQry rolePageQry); + + Role show(RoleShowQry roleShowQry); +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/RoleMenuGateway.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/RoleMenuGateway.java new file mode 100644 index 0000000..a6c769e --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/RoleMenuGateway.java @@ -0,0 +1,10 @@ +package com.xunhong.erp.turbo.rbac.domain.gateway; + +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleMenuTreeQry; +import com.xunhong.erp.turbo.rbac.domain.entity.RoleMenu; + +import java.util.List; + +public interface RoleMenuGateway { + List list(RoleMenuTreeQry roleMenuTreeQry); +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/UserRoleGateway.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/UserRoleGateway.java new file mode 100644 index 0000000..408152c --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/domain/gateway/UserRoleGateway.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.rbac.domain.gateway; + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.UserRoleCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.UserRoleUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.qry.UserRoleListQry; +import com.xunhong.erp.turbo.rbac.domain.entity.UserRole; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface UserRoleGateway { + void assignRole(Long userId, List roleIdList); + + List list(UserRoleListQry userRoleListQry); + + List create(UserRoleCreateCmd userRoleCreateCmd); + + List update(UserRoleUpdateCmd userRoleUpdateCmd); +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/MenuConvert.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/MenuConvert.java new file mode 100644 index 0000000..8c42a33 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/MenuConvert.java @@ -0,0 +1,28 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.convert; + + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuUpdateCmd; +import com.xunhong.erp.turbo.rbac.domain.entity.Menu; +import com.xunhong.erp.turbo.rbac.domain.entity.Permission; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.MenuDO; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.PermissionDO; +import org.mapstruct.Mapper; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface MenuConvert { + + MenuDO toMenuDO(MenuCreateCmd menuCreateCmd); + + void toMenuDO(@MappingTarget MenuDO menuDO, MenuUpdateCmd menuUpdateCmd); + + @SuppressWarnings("unused") + Permission toPermission(PermissionDO permissionDO); + + Menu toMenu(MenuDO menuDO); +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/PermissionConvert.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/PermissionConvert.java new file mode 100644 index 0000000..2a0c50d --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/PermissionConvert.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.convert; + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionUpdateCmd; +import com.xunhong.erp.turbo.rbac.domain.entity.Permission; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.PermissionDO; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface PermissionConvert { + Permission toPermission(PermissionDO permissionDO); + + PermissionDO toPermissionDO(PermissionCreateCmd permissionCreateCmd); + + PermissionDO toPermissionDO(PermissionUpdateCmd permissionUpdateCmd); +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/RoleConvert.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/RoleConvert.java new file mode 100644 index 0000000..01e6e03 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/RoleConvert.java @@ -0,0 +1,44 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.convert; + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleUpdateCmd; +import com.xunhong.erp.turbo.rbac.domain.entity.Role; +import com.xunhong.erp.turbo.rbac.domain.entity.RolePermission; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.RoleDO; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.RolePermissionDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +import java.util.List; + +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface RoleConvert { + + @Mapping(target = "rolePermissionList", source = "roleDO.rolePermissionDOList") + @Mapping(target = "roleMenuList", source = "roleDO.roleMenuDOList") + Role toRole(RoleDO roleDO); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "rolePermissionDOList", ignore = true) + @Mapping(target = "roleMenuDOList", ignore = true) + @Mapping(target = "roleId", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + RoleDO toRoleDO(RoleCreateCmd roleCreateCmd); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "rolePermissionDOList", ignore = true) + @Mapping(target = "roleMenuDOList", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + RoleDO toRoleDO(RoleUpdateCmd roleUpdateCmd); + + @SuppressWarnings("unused") + List toRolePermissionDOList(List rolePermissionDOList); + + @SuppressWarnings("unused") + RolePermission toRolePermission(RolePermissionDO rolePermissionDO); +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/RoleMenuConvert.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/RoleMenuConvert.java new file mode 100644 index 0000000..ccd0f34 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/RoleMenuConvert.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.convert; + + +import com.xunhong.erp.turbo.rbac.domain.entity.RoleMenu; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.RoleMenuDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface RoleMenuConvert { + + @Mapping(target = "menu", source = "menuDO") + RoleMenu toRoleMenu(RoleMenuDO roleMenuDO); +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/UserRoleConvert.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/UserRoleConvert.java new file mode 100644 index 0000000..893a83e --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/convert/UserRoleConvert.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.convert; + +import com.xunhong.erp.turbo.rbac.domain.entity.Role; +import com.xunhong.erp.turbo.rbac.domain.entity.UserRole; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.RoleDO; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.UserRoleDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface UserRoleConvert { + @Mapping(target = "role", source = "userRoleDO.roleDO") + UserRole toUserRole(UserRoleDO userRoleDO); + + @SuppressWarnings("unused") + Role toRole(RoleDO roleDO); +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/MenuDO.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/MenuDO.java new file mode 100644 index 0000000..7733b43 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/MenuDO.java @@ -0,0 +1,95 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.xunhong.erp.turbo.api.rbac.dto.enums.MenuTypeEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "menu") +@EqualsAndHashCode(callSuper = true) +public class MenuDO extends Model { + + /** + * 菜单id + */ + @TableId(value = "menu_id", type = IdType.ASSIGN_ID) + private Long menuId; + /** + * 平台id + */ + @TableField(value = "platform_id") + private Long platformId; + /** + * 名称 + */ + @TableField(value = "name") + private String name; + /** + * 路径 + */ + @TableField(value = "path") + private String path; + /** + * 组件 + */ + @TableField(value = "component") + private String component; + /** + * 上级菜单id + */ + @TableField(value = "pid") + private Long pid; + /** + * 菜单类型:1:菜单,2:页面,3:按钮 + */ + @TableField(value = "type") + private MenuTypeEnum type; + /** + * 菜单排序 + */ + @TableField(value = "sort") + private BigDecimal sort; + /** + * display + */ + @TableField(value = "hide_in_menu") + private Boolean hideInMenu; + /** + * 权限id + */ + @TableField(value = "permission_id", updateStrategy = FieldStrategy.ALWAYS) + private Long permissionId; + /** + * 创建时间 + */ + @TableField(value = "created_at", fill = FieldFill.INSERT, updateStrategy = FieldStrategy.NEVER) + private LocalDateTime createdAt; + /** + * 更新时间 + */ + @TableField(value = "updated_at", fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updatedAt; + /** + * 逻辑删除时间 + */ + @TableLogic(value = "0", delval = "1") + @TableField(value = "is_delete", fill = FieldFill.INSERT) + private Integer isDelete; + /** + * 数据版本号(乐观锁) + */ + @Version + @TableField(value = "version", fill = FieldFill.INSERT) + private Integer version; + + @TableField(exist = false) + private PermissionDO permissionDO; +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/PermissionDO.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/PermissionDO.java new file mode 100644 index 0000000..1443ff9 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/PermissionDO.java @@ -0,0 +1,24 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@TableName(value = "permission") +@EqualsAndHashCode(callSuper = true) +public class PermissionDO extends BaseDO { + + @TableId(value = "permission_id", type = IdType.ASSIGN_ID) + private Long permissionId; + + @TableField(value = "slug") + private String slug; + + @TableField(value = "name") + private String name; +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/RoleDO.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/RoleDO.java new file mode 100644 index 0000000..c3cd28f --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/RoleDO.java @@ -0,0 +1,62 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "role") +public class RoleDO extends BaseDO { + + /** + * 角色id + */ + @TableId(value = "role_id", type = IdType.ASSIGN_ID) + private Long roleId; + + /** + * 标识 + */ + @TableField(value = "slug") + private String slug; + + /** + * 名称 + */ + @TableField(value = "name") + private String name; + + /** + * 角色类型1系统内置2商家自定义 + */ + @TableField(value = "type") + private String type; + + /** + * platformId + */ + @TableField(value = "platform_id") + private Long platformId; + + /** + * 描述 + */ + @TableField(value = "description") + private String description; + + @TableField(exist = false) + private List rolePermissionDOList; + + @TableField(exist = false) + private List roleMenuDOList; +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/RoleMenuDO.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/RoleMenuDO.java new file mode 100644 index 0000000..7f1ffc5 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/RoleMenuDO.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@TableName(value = "role_menu") +@EqualsAndHashCode(callSuper = true) +public class RoleMenuDO extends Model { + + @TableField(value = "role_id") + private Long roleId; + + @TableField(value = "menu_id") + private Long menuId; + + @TableField(exist = false) + private MenuDO menuDO; +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/RolePermissionDO.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/RolePermissionDO.java new file mode 100644 index 0000000..404ef69 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/RolePermissionDO.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@TableName(value = "role_permission") +@EqualsAndHashCode(callSuper = true) +public class RolePermissionDO extends Model { + + @TableField(value = "role_id") + private Long roleId; + + @TableField(value = "permission_id") + private Long permissionId; +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/UserRoleDO.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/UserRoleDO.java new file mode 100644 index 0000000..b475f14 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/entity/UserRoleDO.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "user_role") +@EqualsAndHashCode(callSuper = true) +public class UserRoleDO extends Model { + + /** + * 用户id + */ + @TableField(value = "user_id", updateStrategy = FieldStrategy.NEVER) + private Long userId; + + /** + * 角色id + */ + @TableField(value = "role_id") + private Long roleId; + + @TableField(exist = false) + private RoleDO roleDO; +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/MenuGatewayImpl.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/MenuGatewayImpl.java new file mode 100644 index 0000000..54bbe69 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/MenuGatewayImpl.java @@ -0,0 +1,181 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.gateway; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuDestroyCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuDragCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.qry.MenuListQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.MenuShowQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.MenuTreeQry; +import com.xunhong.erp.turbo.api.rbac.exception.RbacErrorCode; +import com.xunhong.erp.turbo.api.rbac.exception.RbacException; +import com.xunhong.erp.turbo.rbac.domain.entity.Menu; +import com.xunhong.erp.turbo.rbac.domain.gateway.MenuGateway; +import com.xunhong.erp.turbo.rbac.infrastructure.convert.MenuConvert; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.MenuDO; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.PermissionDO; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.RoleMenuDO; +import com.xunhong.erp.turbo.rbac.infrastructure.mapper.MenuMapper; +import com.xunhong.erp.turbo.rbac.infrastructure.mapper.PermissionMapper; +import com.xunhong.erp.turbo.rbac.infrastructure.mapper.RoleMenuMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class MenuGatewayImpl implements MenuGateway { + private final MenuMapper menuMapper; + private final MenuConvert menuConvert; + private final PermissionMapper permissionMapper; + private final RoleMenuMapper roleMenuMapper; + + @Override + public List tree(MenuTreeQry menuTreeQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(MenuDO.class); + queryWrapper.eq(Objects.nonNull(menuTreeQry.getPlatformId()), MenuDO::getPlatformId, menuTreeQry.getPlatformId()); + queryWrapper.eq(Objects.nonNull(menuTreeQry.getPid()), MenuDO::getPid, menuTreeQry.getPid()); + queryWrapper.orderByAsc(MenuDO::getSort); + List menuDOList = menuMapper.selectList(queryWrapper); + return menuDOList.stream().map(menuConvert::toMenu).toList(); + } + + @Override + public List list(MenuListQry menuListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(MenuDO.class); + queryWrapper.eq(Objects.nonNull(menuListQry.getPlatformId()), MenuDO::getPlatformId, menuListQry.getPlatformId()); + queryWrapper.eq(Objects.nonNull(menuListQry.getPid()), MenuDO::getPid, menuListQry.getPid()); + queryWrapper.orderByAsc(MenuDO::getSort); + List menuDOList = menuMapper.selectList(queryWrapper); + return menuDOList.stream().map(menuConvert::toMenu).toList(); + } + + @Override + @Transactional + public Menu create(MenuCreateCmd menuCreateCmd) { + // 创建菜单 + MenuDO menuDO = menuConvert.toMenuDO(menuCreateCmd); + + MenuDO menuDO1 = menuMapper.selectOne(new LambdaQueryWrapper() + .select(MenuDO::getSort) + .eq(MenuDO::getMenuId, menuDO.getMenuId()) + .eq(Objects.nonNull(menuCreateCmd.getPid()), MenuDO::getPid, menuCreateCmd.getPid()) + .eq(Objects.nonNull(menuCreateCmd.getPlatformId()), MenuDO::getPlatformId, menuCreateCmd.getPlatformId()) + .orderByDesc(MenuDO::getSort) + .last("LIMIT 1") + ); + + BigDecimal maxSort = Optional.ofNullable(menuDO1).map(MenuDO::getSort).orElseGet(() -> { + MenuDO customFieldDO2 = new MenuDO(); + customFieldDO2.setSort(BigDecimal.ZERO); + return customFieldDO2.getSort(); + }); + + menuDO.setSort(BigDecimal.valueOf(maxSort.doubleValue() + 1000)); + + menuMapper.insert(menuDO); + + return menuConvert.toMenu(menuDO); + } + + @Override + @Transactional + public Menu update(MenuUpdateCmd menuUpdateCmd) { + MenuDO menuDO = menuMapper.selectById(menuUpdateCmd.getMenuId()); + menuConvert.toMenuDO(menuDO, menuUpdateCmd); + menuMapper.updateById(menuDO); + return menuConvert.toMenu(menuDO); + } + + @Override + public Menu show(MenuShowQry menuShowQry) { + MenuDO menuDO = menuMapper.selectById(menuShowQry.getMenuId()); + PermissionDO permissionDO = permissionMapper.selectById(menuDO.getPermissionId()); + menuDO.setPermissionDO(permissionDO); + return menuConvert.toMenu(menuDO); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public void destroy(MenuDestroyCmd menuDestroyCmd) { + MenuDO menuDO = menuMapper.selectById(menuDestroyCmd.getMenuId()); + // 判断菜单是否存在 + if (Objects.isNull(menuDO)) { + throw new RbacException(RbacErrorCode.B_RBAC_MENU_NOT_EXIST); + } + + // 判断菜单是否被应用引用 + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(RoleMenuDO.class); + queryWrapper.eq(RoleMenuDO::getMenuId, menuDestroyCmd.getMenuId()); + if (roleMenuMapper.selectCount(queryWrapper) > 0) { + throw new RbacException(RbacErrorCode.B_RBAC_MENU_IN_ROLE_USE); + } + + // 有下级菜单不能删除 + if (menuMapper.selectCount(Wrappers.lambdaQuery(MenuDO.class).eq(MenuDO::getPid, menuDestroyCmd.getMenuId())) > 0) { + throw new RbacException(RbacErrorCode.B_RBAC_MENU_HAS_CHILDREN); + } + + // 删除菜单 + menuMapper.deleteById(menuDO.getMenuId()); + } + + + @Override + @Transactional + public void drag(MenuDragCmd menuDragCmd) { + reorderTask(menuDragCmd.getCurrentId(), menuDragCmd.getPrevId(), menuDragCmd.getNextId()); + } + + // 拖拽排序核心方法 + public void reorderTask(Long currentId, Long prevId, Long nextId) { + // 获取相邻元素的sort值 + Double prevSort = Optional.ofNullable(prevId) + .map(id -> menuMapper.selectById(id).getSort().doubleValue()) + .orElse(null); + Double nextSort = Optional.ofNullable(nextId) + .map(id -> menuMapper.selectById(id).getSort().doubleValue()) + .orElse(null); + // 计算新sort值 + Double newSort = calculateNewSort(prevSort, nextSort); + // 检查是否需要重整排序 + if (needResetSort(prevSort, nextSort)) { + menuMapper.batchResetSort(menuMapper.selectById(currentId).getMenuId()); + } else { + // 更新当前任务sort值 + menuMapper.update(null, new LambdaUpdateWrapper() + .eq(MenuDO::getMenuId, currentId) + .set(MenuDO::getSort, newSort) + ); + } + } + + private Double calculateNewSort(Double prevSort, Double nextSort) { + if (prevSort == null && nextSort != null) { + return nextSort - 1000; // 插入到开头 + } else if (nextSort == null && prevSort != null) { + return prevSort + 1000; // 插入到末尾 + } else if (prevSort == null && nextSort == null) { + return 0.0; + } else { + return (prevSort + nextSort) / 2; // 插入中间 + } + } + + private boolean needResetSort(Double prevSort, Double nextSort) { + return prevSort != null && nextSort != null + && (nextSort - prevSort) < 1.0; // 判断间隙是否耗尽 + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/PermissionGatewayImpl.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/PermissionGatewayImpl.java new file mode 100644 index 0000000..0b0cf95 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/PermissionGatewayImpl.java @@ -0,0 +1,96 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.gateway; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionDestroyCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.qry.PermissionListQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.PermissionPageQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.PermissionShowQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.UserPermissionQry; +import com.xunhong.erp.turbo.api.rbac.exception.RbacErrorCode; +import com.xunhong.erp.turbo.api.rbac.exception.RbacException; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import com.xunhong.erp.turbo.rbac.domain.entity.Permission; +import com.xunhong.erp.turbo.rbac.domain.gateway.PermissionGateway; +import com.xunhong.erp.turbo.rbac.infrastructure.convert.PermissionConvert; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.MenuDO; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.PermissionDO; +import com.xunhong.erp.turbo.rbac.infrastructure.mapper.MenuMapper; +import com.xunhong.erp.turbo.rbac.infrastructure.mapper.PermissionMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +@RequiredArgsConstructor +public class PermissionGatewayImpl implements PermissionGateway { + private final PermissionMapper permissionMapper; + private final PermissionConvert permissionConvert; + + private final MenuMapper menuMapper; + + @Override + public List list(PermissionListQry permissionListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(PermissionDO.class); + queryWrapper.orderByDesc(PermissionDO::getSlug, BaseDO::getCreatedAt); + + List permissionDOList = permissionMapper.selectList(queryWrapper); + return permissionDOList.stream().map(permissionConvert::toPermission).toList(); + } + + @Override + public List userPermission(UserPermissionQry userPermissionQry) { + List permissionDOList = permissionMapper.listByRoleList(userPermissionQry); + return permissionDOList.stream().map(permissionConvert::toPermission).toList(); + } + + @Override + public IPage page(PermissionPageQry permissionPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(PermissionDO.class); + queryWrapper.like(StrUtil.isNotEmpty(permissionPageQry.getSlug()), PermissionDO::getSlug, permissionPageQry.getSlug()); + queryWrapper.like(StrUtil.isNotEmpty(permissionPageQry.getName()), PermissionDO::getName, permissionPageQry.getName()); + queryWrapper.orderByDesc(PermissionDO::getSlug, BaseDO::getCreatedAt); + Page page = new Page<>(permissionPageQry.getPageIndex(), permissionPageQry.getPageSize()); + page = permissionMapper.selectPage(page, queryWrapper); + return page.convert(permissionConvert::toPermission); + } + + @Override + public Permission show(PermissionShowQry permissionShowQry) { + PermissionDO permissionDO = permissionMapper.selectById(permissionShowQry.getPermissionId()); + return permissionConvert.toPermission(permissionDO); + } + + @Override + public Permission create(PermissionCreateCmd permissionCreateCmd) { + PermissionDO permissionDO = permissionConvert.toPermissionDO(permissionCreateCmd); + permissionMapper.insert(permissionDO); + return permissionConvert.toPermission(permissionDO); + } + + @Override + public Permission update(PermissionUpdateCmd permissionUpdateCmd) { + PermissionDO permissionDO = permissionConvert.toPermissionDO(permissionUpdateCmd); + permissionMapper.updateById(permissionDO); + return permissionConvert.toPermission(permissionDO); + } + + @Override + public void destroy(PermissionDestroyCmd permissionDestroyCmd) { + // 判断权限是否被菜单绑定 + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(MenuDO.class); + queryWrapper.eq(MenuDO::getPermissionId, permissionDestroyCmd.getPermissionId()); + + if (menuMapper.selectCount(queryWrapper) > 0) { + throw new RbacException(RbacErrorCode.PERMISSION_USED); + } + + permissionMapper.deleteById(permissionDestroyCmd.getPermissionId()); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/RoleGatewayImpl.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/RoleGatewayImpl.java new file mode 100644 index 0000000..e6423a1 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/RoleGatewayImpl.java @@ -0,0 +1,190 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.gateway; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.cola.exception.BizException; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleDestroyCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleListQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RolePageQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleShowQry; +import com.xunhong.erp.turbo.rbac.domain.entity.Role; +import com.xunhong.erp.turbo.rbac.domain.gateway.RoleGateway; +import com.xunhong.erp.turbo.rbac.infrastructure.convert.RoleConvert; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.*; +import com.xunhong.erp.turbo.rbac.infrastructure.mapper.*; +import lombok.RequiredArgsConstructor; +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Objects; + +@Repository +@RequiredArgsConstructor +public class RoleGatewayImpl implements RoleGateway { + private final RoleMenuMapper roleMenuMapper; + private final RoleMapper roleMapper; + private final RoleConvert roleConvert; + private final SqlSessionFactory sqlSessionFactory; + private final RolePermissionMapper rolePermissionMapper; + private final PermissionMapper permissionMapper; + private final MenuMapper menuMapper; + private final UserRoleMapper userRoleMapper; + + @Override + public List list(RoleListQry roleListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(RoleDO.class); + queryWrapper.eq(CharSequenceUtil.isNotBlank(roleListQry.getName()), RoleDO::getName, roleListQry.getName()); + queryWrapper.eq(Objects.nonNull(roleListQry.getType()), RoleDO::getType, roleListQry.getType()); + queryWrapper.eq(Objects.nonNull(roleListQry.getRoleId()), RoleDO::getRoleId, roleListQry.getRoleId()); + queryWrapper.eq(Objects.nonNull(roleListQry.getPlatformId()), RoleDO::getPlatformId, roleListQry.getPlatformId()); + queryWrapper.in(CollUtil.isNotEmpty(roleListQry.getRoleIdList()), RoleDO::getRoleId, roleListQry.getRoleIdList()); + + List roleDOList = roleMapper.selectList(queryWrapper); + return roleDOList.stream().map(roleConvert::toRole).toList(); + } + + @Override + @Transactional + public Role save(RoleCreateCmd roleCreateCmd) { + // 创建角色 + RoleDO roleDO = roleConvert.toRoleDO(roleCreateCmd); + roleMapper.insert(roleDO); + + SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); + RolePermissionMapper rolePermissionMapper1 = sqlSession.getMapper(RolePermissionMapper.class); + RoleMenuMapper roleMenuMapper1 = sqlSession.getMapper(RoleMenuMapper.class); + + // 根据提供的菜单查询有效菜单 + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(MenuDO.class); + queryWrapper.in(MenuDO::getMenuId, roleCreateCmd.getMenuId()); + List menuDOList = menuMapper.selectList(queryWrapper); + + // 角色关联菜单 + menuDOList.forEach(menuDO -> { + RoleMenuDO roleMenuDO = new RoleMenuDO(); + roleMenuDO.setMenuId(menuDO.getMenuId()); + roleMenuDO.setRoleId(roleDO.getRoleId()); + roleMenuMapper1.insert(roleMenuDO); + }); + + // 角色关联权限 + List permissionIds = menuDOList.stream().map(MenuDO::getPermissionId).toList(); + List permissionDOList = permissionMapper.selectBatchIds(permissionIds); + permissionDOList.forEach(permissionDO -> { + RolePermissionDO rolePermissionDO = new RolePermissionDO(); + rolePermissionDO.setPermissionId(permissionDO.getPermissionId()); + rolePermissionDO.setRoleId(roleDO.getRoleId()); + rolePermissionMapper1.insert(rolePermissionDO); + }); + + sqlSession.commit(); + sqlSession.clearCache(); + + return roleConvert.toRole(roleDO); + } + + @Override + public void destroy(RoleDestroyCmd roleDeleteCmd) { + // 判断角色是否存在 + RoleDO roleDO = roleMapper.selectById(roleDeleteCmd.getRoleId()); + if (Objects.isNull(roleDO)) { + throw new BizException("400", "角色不存在,无法删除"); + } + + // 判断角色是否被使用 + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(UserRoleDO.class); + queryWrapper.eq(UserRoleDO::getRoleId, roleDeleteCmd.getRoleId()); + if (userRoleMapper.selectCount(queryWrapper) > 0) { + throw new BizException("400", "角色被使用,无法删除"); + } + + // 删除角色关联菜单 + roleMenuMapper.delete(Wrappers.lambdaQuery(RoleMenuDO.class).eq(RoleMenuDO::getRoleId, roleDeleteCmd.getRoleId())); + + // 删除角色关联权限 + rolePermissionMapper.delete(Wrappers.lambdaQuery(RolePermissionDO.class).eq(RolePermissionDO::getRoleId, roleDeleteCmd.getRoleId())); + + // 删除角色 + roleMapper.deleteById(roleDeleteCmd.getRoleId()); + } + + @Override + @Transactional + public Role update(RoleUpdateCmd roleUpdateCmd) { + // 更新角色 + RoleDO roleDO = roleConvert.toRoleDO(roleUpdateCmd); + roleMapper.updateById(roleDO); + + SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); + RolePermissionMapper rolePermissionMapper1 = sqlSession.getMapper(RolePermissionMapper.class); + RoleMenuMapper roleMenuMapper1 = sqlSession.getMapper(RoleMenuMapper.class); + + // 删除角色权限关联 + rolePermissionMapper1.delete(Wrappers.lambdaQuery(RolePermissionDO.class).eq(RolePermissionDO::getRoleId, roleDO.getRoleId())); + // 删除角色菜单关联 + roleMenuMapper1.delete(Wrappers.lambdaQuery(RoleMenuDO.class).eq(RoleMenuDO::getRoleId, roleDO.getRoleId())); + + // 角色关联菜单 + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(MenuDO.class); + queryWrapper.in(MenuDO::getMenuId, roleUpdateCmd.getMenuId()); + List menuDOList = menuMapper.selectList(queryWrapper); + menuDOList.forEach(menuDO -> { + RoleMenuDO roleMenuDO = new RoleMenuDO(); + roleMenuDO.setMenuId(menuDO.getMenuId()); + roleMenuDO.setRoleId(roleDO.getRoleId()); + roleMenuMapper1.insert(roleMenuDO); + }); + + // 角色关联权限 + List permissionIds = menuDOList.stream().map(MenuDO::getPermissionId).toList(); + List permissionDOList = permissionMapper.selectBatchIds(permissionIds); + permissionDOList.forEach(permissionDO -> { + RolePermissionDO rolePermissionDO = new RolePermissionDO(); + rolePermissionDO.setPermissionId(permissionDO.getPermissionId()); + rolePermissionDO.setRoleId(roleDO.getRoleId()); + rolePermissionMapper1.insert(rolePermissionDO); + }); + + sqlSession.commit(); + sqlSession.clearCache(); + + return roleConvert.toRole(roleDO); + } + + @Override + public IPage page(RolePageQry rolePageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(RoleDO.class); + queryWrapper.like(StrUtil.isNotEmpty(rolePageQry.getName()), RoleDO::getName, rolePageQry.getName()); + queryWrapper.eq(Objects.nonNull(rolePageQry.getRoleId()), RoleDO::getRoleId, rolePageQry.getRoleId()); + queryWrapper.eq(Objects.nonNull(rolePageQry.getType()), RoleDO::getType, rolePageQry.getType()); + queryWrapper.eq(Objects.nonNull(rolePageQry.getSlug()), RoleDO::getSlug, rolePageQry.getSlug()); + queryWrapper.eq(Objects.nonNull(rolePageQry.getPlatformId()), RoleDO::getPlatformId, rolePageQry.getPlatformId()); + + Page page = new Page<>(rolePageQry.getPageIndex(), rolePageQry.getPageSize()); + page = roleMapper.selectPage(page, queryWrapper); + + return page.convert(roleConvert::toRole); + } + + @Override + public Role show(RoleShowQry roleShowQry) { + RoleDO roleDO = roleMapper.selectById(roleShowQry.getRoleId()); + List rolePermissionDOList = rolePermissionMapper.selectList(Wrappers.lambdaQuery(RolePermissionDO.class).eq(RolePermissionDO::getRoleId, roleDO.getRoleId())); + roleDO.setRolePermissionDOList(rolePermissionDOList); + List roleMenuDOList = roleMenuMapper.selectList(Wrappers.lambdaQuery(RoleMenuDO.class).eq(RoleMenuDO::getRoleId, roleDO.getRoleId())); + roleDO.setRoleMenuDOList(roleMenuDOList); + + return roleConvert.toRole(roleDO); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/RoleMenuGatewayImpl.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/RoleMenuGatewayImpl.java new file mode 100644 index 0000000..efa3516 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/RoleMenuGatewayImpl.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.gateway; + +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleMenuTreeQry; +import com.xunhong.erp.turbo.rbac.domain.entity.RoleMenu; +import com.xunhong.erp.turbo.rbac.domain.gateway.RoleMenuGateway; +import com.xunhong.erp.turbo.rbac.infrastructure.convert.RoleMenuConvert; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.RoleMenuDO; +import com.xunhong.erp.turbo.rbac.infrastructure.mapper.RoleMenuMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +@RequiredArgsConstructor +public class RoleMenuGatewayImpl implements RoleMenuGateway { + private final RoleMenuMapper roleMenuMapper; + private final RoleMenuConvert roleMenuConvert; + + @Override + public List list(RoleMenuTreeQry roleMenuTreeQry) { + List roleMenuDOList = roleMenuMapper.selectByRoleList(roleMenuTreeQry); + return roleMenuDOList.stream().map(roleMenuConvert::toRoleMenu).toList(); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/UserRoleGatewayImpl.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/UserRoleGatewayImpl.java new file mode 100644 index 0000000..1b162cb --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/gateway/UserRoleGatewayImpl.java @@ -0,0 +1,129 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.gateway; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.UserRoleCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.UserRoleUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.qry.UserRoleListQry; +import com.xunhong.erp.turbo.rbac.domain.entity.UserRole; +import com.xunhong.erp.turbo.rbac.domain.gateway.UserRoleGateway; +import com.xunhong.erp.turbo.rbac.infrastructure.convert.UserRoleConvert; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.UserRoleDO; +import com.xunhong.erp.turbo.rbac.infrastructure.mapper.UserRoleMapper; +import lombok.RequiredArgsConstructor; +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +@Repository +@RequiredArgsConstructor +public class UserRoleGatewayImpl implements UserRoleGateway { + private final UserRoleMapper userRoleMapper; + private final UserRoleConvert userRoleConvert; + private final SqlSessionFactory sqlSessionFactory; + + @Override + @Transactional + public void assignRole(Long userId, List roleIdList) { + // 查询当前用户所有的权限,如果roleIdList不在里面则添加角色 + List userRoleDOList = userRoleMapper.listByUserId(userId); + List oldRoleIdList = userRoleDOList.stream().map(UserRoleDO::getRoleId).toList(); + roleIdList = roleIdList.stream().filter(roleId -> !oldRoleIdList.contains(roleId)).toList(); + + SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); + UserRoleMapper userRoleMapper1 = sqlSession.getMapper(UserRoleMapper.class); + + for (Long roleId : roleIdList) { + UserRoleDO userRoleDO = new UserRoleDO(); + userRoleDO.setUserId(userId); + userRoleDO.setRoleId(roleId); + userRoleMapper1.insert(userRoleDO); + } + + sqlSession.commit(); + sqlSession.close(); + } + + @Override + public List list(UserRoleListQry userRoleListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(UserRoleDO.class); + queryWrapper.eq(Objects.nonNull(userRoleListQry.getUserId()), UserRoleDO::getUserId, userRoleListQry.getUserId()); + queryWrapper.in(Objects.nonNull(userRoleListQry.getUserIdList()), UserRoleDO::getUserId, userRoleListQry.getUserIdList()); + + queryWrapper.select(UserRoleDO::getUserId, UserRoleDO::getRoleId); + List userRoleDOList = userRoleMapper.selectList(queryWrapper); + return userRoleDOList.stream().map(userRoleConvert::toUserRole).toList(); + } + + @Override + public List create(UserRoleCreateCmd userRoleCreateCmd) { + List userRoleDOList = new ArrayList<>(); + + SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); + UserRoleMapper userRoleMapper1 = sqlSession.getMapper(UserRoleMapper.class); + + for (Long roleId : userRoleCreateCmd.getRoleId()) { + UserRoleDO userRoleDO = new UserRoleDO(); + userRoleDO.setUserId(userRoleCreateCmd.getUserId()); + userRoleDO.setRoleId(roleId); + userRoleMapper1.insert(userRoleDO); + userRoleDOList.add(userRoleDO); + } + + sqlSession.commit(); + sqlSession.close(); + + return userRoleDOList.stream().map(userRoleConvert::toUserRole).collect(Collectors.toList()); + } + + @Override + @Transactional + public List update(UserRoleUpdateCmd userRoleUpdateCmd) { + List userRoleDOList = new ArrayList<>(); + List roleIdList = userRoleUpdateCmd.getRoleIdList(); + + if (userRoleUpdateCmd.getCover()) { + // 删除角色关联 + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(UserRoleDO.class); + queryWrapper.eq(UserRoleDO::getUserId, userRoleUpdateCmd.getUserId()); + userRoleMapper.delete(queryWrapper); + } else { + // 获取角色列表,不存在则添加角色关联 + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(UserRoleDO.class); + queryWrapper.eq(UserRoleDO::getUserId, userRoleUpdateCmd.getUserId()); + List userRoleDOList1 = userRoleMapper.selectList(queryWrapper); + + List oldRoleIdList = userRoleDOList1.stream().map(UserRoleDO::getRoleId).toList(); + roleIdList = roleIdList.stream().filter(roleId -> !oldRoleIdList.contains(roleId)).toList(); + } + + // 角色为空,则不处理 + if (roleIdList.isEmpty()) { + return new ArrayList<>(); + } + + SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); + UserRoleMapper userRoleMapper1 = sqlSession.getMapper(UserRoleMapper.class); + + // 创建新角色关联 + for (Long roleId : roleIdList) { + UserRoleDO userRoleDO = new UserRoleDO(); + userRoleDO.setUserId(userRoleUpdateCmd.getUserId()); + userRoleDO.setRoleId(roleId); + userRoleMapper1.insert(userRoleDO); + userRoleDOList.add(userRoleDO); + } + + sqlSession.commit(); + sqlSession.close(); + + return userRoleDOList.stream().map(userRoleConvert::toUserRole).collect(Collectors.toList()); + } +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/MenuMapper.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/MenuMapper.java new file mode 100644 index 0000000..844e318 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/MenuMapper.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.MenuDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; + +/** + * @author shenyifei + */ +@Mapper +public interface MenuMapper extends BaseMapper { + // 批量更新排序值(用于间隙重整) + @Update("UPDATE menu t " + + "JOIN (SELECT menu_id, (ROW_NUMBER() OVER (ORDER BY sort) - 1) * 1000 AS new_sort " + + "FROM menu WHERE menu_id = #{menuId}) AS sorted_rows " + + "ON t.menu_id = sorted_rows.menu_id " + + "SET t.sort = sorted_rows.new_sort WHERE t.menu_id = #{menuId}") + void batchResetSort(@Param("menuId") Long menuId); +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/PermissionMapper.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/PermissionMapper.java new file mode 100644 index 0000000..f6e9b59 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/PermissionMapper.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.api.rbac.dto.qry.UserPermissionQry; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.PermissionDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface PermissionMapper extends BaseMapper { + + List listByRoleList(@Param("query") UserPermissionQry userPermissionQry); +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/RoleMapper.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/RoleMapper.java new file mode 100644 index 0000000..18b2151 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/RoleMapper.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.RoleDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface RoleMapper extends BaseMapper { + RoleDO selectByRoleSlug(String slug); +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/RoleMenuMapper.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/RoleMenuMapper.java new file mode 100644 index 0000000..333a2cc --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/RoleMenuMapper.java @@ -0,0 +1,14 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleMenuTreeQry; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.RoleMenuDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface RoleMenuMapper extends BaseMapper { + List selectByRoleList(@Param("query") RoleMenuTreeQry roleMenuTreeQry); +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/RolePermissionMapper.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/RolePermissionMapper.java new file mode 100644 index 0000000..3415ced --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/RolePermissionMapper.java @@ -0,0 +1,9 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.RolePermissionDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface RolePermissionMapper extends BaseMapper { +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/UserRoleMapper.java b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/UserRoleMapper.java new file mode 100644 index 0000000..000653e --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/java/com/xunhong/erp/turbo/rbac/infrastructure/mapper/UserRoleMapper.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.rbac.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.rbac.infrastructure.entity.UserRoleDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author shenyifei + */ +@Mapper +public interface UserRoleMapper extends BaseMapper { + UserRoleDO getByUserId(Long userId); + + List listByUserId(Long userId); + + List selectList(@Param("ew") Wrapper queryWrapper, @Param("roleIdList") List roleIdList); +} diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/resources/application.yml b/erp-turbo-business/erp-turbo-rbac/src/main/resources/application.yml new file mode 100644 index 0000000..07e1fdb --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/resources/application.yml @@ -0,0 +1,10 @@ +spring: + profiles: + active: dev + application: + name: @application.name@ + config: + import: classpath:cache.yml,classpath:datasource.yml,classpath:rpc.yml,classpath:sa-token.yml + +server: + port: 8091 diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/resources/bootstrap.yml b/erp-turbo-business/erp-turbo-rbac/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..914c581 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/resources/bootstrap.yml @@ -0,0 +1,7 @@ +spring: + profiles: + active: dev + application: + name: @application.name@ + config: + import: classpath:base.yml,classpath:logging.yml,classpath:config.yml diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/resources/i18n/messages.properties b/erp-turbo-business/erp-turbo-rbac/src/main/resources/i18n/messages.properties new file mode 100644 index 0000000..ea28719 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/resources/i18n/messages.properties @@ -0,0 +1,22 @@ +msg.200=Success +msg.500=Internal Server Error. +msg.1001=No data +msg.1002=Data saving failed +msg.100000=platform and client do not match. +msg.100001=the current account has been registered in the platform client, please do not register again. +msg.100002= +msg.50001=Obtaining the verification code succeeded +msg.50002=The verification code has expired +msg.50003=The account corresponding to the verification code does not match +msg.50004=Verification code error +validation.account=account number +validation.wechatCode=wechat code +validation.smsCode=message authentication code +validation.mobile=mobile +validation.platform=platform +validation.password=password +validation.min=length must be greater than {min} bits +validation.max=length must be less than {max} bits +validation.size=length must be between {min} ~ {max} bits +validation.regexp=format error +validation.notBlank=must not be empty \ No newline at end of file diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/resources/i18n/messages_en.properties b/erp-turbo-business/erp-turbo-rbac/src/main/resources/i18n/messages_en.properties new file mode 100644 index 0000000..ea28719 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/resources/i18n/messages_en.properties @@ -0,0 +1,22 @@ +msg.200=Success +msg.500=Internal Server Error. +msg.1001=No data +msg.1002=Data saving failed +msg.100000=platform and client do not match. +msg.100001=the current account has been registered in the platform client, please do not register again. +msg.100002= +msg.50001=Obtaining the verification code succeeded +msg.50002=The verification code has expired +msg.50003=The account corresponding to the verification code does not match +msg.50004=Verification code error +validation.account=account number +validation.wechatCode=wechat code +validation.smsCode=message authentication code +validation.mobile=mobile +validation.platform=platform +validation.password=password +validation.min=length must be greater than {min} bits +validation.max=length must be less than {max} bits +validation.size=length must be between {min} ~ {max} bits +validation.regexp=format error +validation.notBlank=must not be empty \ No newline at end of file diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/resources/i18n/messages_zh_CN.properties b/erp-turbo-business/erp-turbo-rbac/src/main/resources/i18n/messages_zh_CN.properties new file mode 100644 index 0000000..dcd1ed2 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/resources/i18n/messages_zh_CN.properties @@ -0,0 +1,21 @@ +msg.200=\u64CD\u4F5C\u6210\u529F +msg.500=\u7CFB\u7EDF\u5F02\u5E38 +msg.1001=\u6570\u636E\u4E3A\u7A7A +msg.1002=\u6570\u636E\u4FDD\u5B58\u5931\u8D25 +msg.100000=\u5e73\u53f0\u548c\u5ba2\u6237\u7aef\u4e0d\u5339\u914d。 +msg.100001=\u5f53\u524d\u8d26\u53f7\u5df2\u7ecf\u5728\u5e73\u53f0\u5ba2\u6237\u7aef\u6ce8\u518c,\u8bf7\u52ff\u91cd\u590d\u6ce8\u518c。 +msg.50001={0}\u83b7\u53d6\u6210\u529f +msg.50002={0}\u5df2\u8fc7\u671f +msg.50003={0}\u5bf9\u5e94\u7684\u8d26\u53f7\u4e0d\u5339\u914d +msg.50004={0}\u9519\u8bef +validation.account=\u8d26\u53f7 +validation.wechatCode=\u5fae\u4fe1 code +validation.smsCode=\u77ed\u4fe1\u9a8c\u8bc1\u7801 +validation.mobile=\u624b\u673a\u53f7\u7801 +validation.platform=\u5e73\u53f0 +validation.password=\u5bc6\u7801 +validation.min=\u957f\u5ea6\u5fc5\u987b\u5927\u4e8e {min} \u4f4d +validation.max=\u957f\u5ea6\u5fc5\u987b\u5c0f\u4e8e {max} \u4f4d +validation.size=\u957f\u5ea6\u5fc5\u987b\u4ecb\u4e8e {min} ~ {max} \u4f4d +validation.regexp=\u683c\u5f0f\u9519\u8bef +validation.notBlank=\u5fc5\u987b\u4e0d\u80fd\u4e3a\u7a7a \ No newline at end of file diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/MenuMapper.xml b/erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/MenuMapper.xml new file mode 100644 index 0000000..abb57d1 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/MenuMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/PermissionMapper.xml b/erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/PermissionMapper.xml new file mode 100644 index 0000000..a85d1c3 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/PermissionMapper.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/RoleMapper.xml b/erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/RoleMapper.xml new file mode 100644 index 0000000..6058285 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/RoleMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/RoleMenuMapper.xml b/erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/RoleMenuMapper.xml new file mode 100644 index 0000000..a5b996a --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/RoleMenuMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/RolePermissionMapper.xml b/erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/RolePermissionMapper.xml new file mode 100644 index 0000000..8d7b440 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/RolePermissionMapper.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/UserRoleMapper.xml b/erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/UserRoleMapper.xml new file mode 100644 index 0000000..0e70d32 --- /dev/null +++ b/erp-turbo-business/erp-turbo-rbac/src/main/resources/mapper/UserRoleMapper.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-user/pom.xml b/erp-turbo-business/erp-turbo-user/pom.xml new file mode 100644 index 0000000..bef0157 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/pom.xml @@ -0,0 +1,141 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-business + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-user + + + erp-turbo-user + 21 + 21 + UTF-8 + + + + + + com.alibaba.cola + cola-component-domain-starter + + + com.alibaba.cola + cola-component-exception + + + + + org.springframework.boot + spring-boot-starter + + + + com.xunhong + erp-turbo-base + + + + com.xunhong + erp-turbo-config + + + + com.xunhong + erp-turbo-file + + + + com.xunhong + erp-turbo-api + + + + com.xunhong + erp-turbo-rpc + + + + com.xunhong + erp-turbo-apm + + + + com.xunhong + erp-turbo-logback + + + + com.xunhong + erp-turbo-limiter + + + + com.xunhong + erp-turbo-datasource + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + junit + junit + test + + + + + com.h2database + h2 + 1.4.200 + test + + + com.baomidou + mybatis-mate-annotation + 1.3.4 + + + + + ${application.name} + + + org.springframework.boot + spring-boot-maven-plugin + + true + + com.xunhong.erp.turbo.user.ErpTurboUserApplication + + + true + + ../layers/layers.xml + + + + + + package + + repackage + + + + + + + diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/ErpTurboUserApplication.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/ErpTurboUserApplication.java new file mode 100644 index 0000000..ae81fb0 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/ErpTurboUserApplication.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.user; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * Spring Boot Starter + * + * @author shenyifei + */ +@SpringBootApplication(scanBasePackages = {"com.xunhong.erp.turbo", "com.alibaba.cola"}) +public class ErpTurboUserApplication { + + public static void main(String[] args) { + SpringApplication.run(ErpTurboUserApplication.class, args); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/assembler/AdminAssembler.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/assembler/AdminAssembler.java new file mode 100644 index 0000000..2de1b8f --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/assembler/AdminAssembler.java @@ -0,0 +1,11 @@ +package com.xunhong.erp.turbo.user.app.assembler; + +import com.xunhong.erp.turbo.api.user.dto.vo.AdminVO; +import com.xunhong.erp.turbo.user.domain.entity.Admin; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface AdminAssembler { + AdminVO toAdminVO(Admin admin); +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/assembler/EmployeeAssembler.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/assembler/EmployeeAssembler.java new file mode 100644 index 0000000..28dc641 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/assembler/EmployeeAssembler.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.user.app.assembler; + +import com.xunhong.erp.turbo.api.user.dto.vo.EmployeeVO; +import com.xunhong.erp.turbo.user.domain.entity.Employee; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface EmployeeAssembler { + + @Mapping(target = "roleIdList", ignore = true) + EmployeeVO toEmployeeVO(Employee employee); +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/assembler/UserAssembler.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/assembler/UserAssembler.java new file mode 100644 index 0000000..6c2cf3c --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/assembler/UserAssembler.java @@ -0,0 +1,14 @@ +package com.xunhong.erp.turbo.user.app.assembler; + +import com.xunhong.erp.turbo.api.user.dto.vo.UserVO; +import com.xunhong.erp.turbo.user.domain.entity.User; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface UserAssembler { + UserVO toUserVO(User user); +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/assembler/UserAuthAssembler.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/assembler/UserAuthAssembler.java new file mode 100644 index 0000000..0e5c907 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/assembler/UserAuthAssembler.java @@ -0,0 +1,16 @@ +package com.xunhong.erp.turbo.user.app.assembler; + +import com.xunhong.erp.turbo.api.user.dto.vo.UserAuthVO; +import com.xunhong.erp.turbo.user.domain.entity.UserAuth; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; + +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface UserAuthAssembler { + @Mapping(target = "userRoleVOList", ignore = true) + @Mapping(target = "permissionVOList", ignore = true) + @Mapping(target = "meta", ignore = true) + @Mapping(target = "userVO", source = "userAuth.user") + UserAuthVO toUserAuthVO(UserAuth userAuth); +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeCreateCmdExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeCreateCmdExe.java new file mode 100644 index 0000000..3b0cda1 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeCreateCmdExe.java @@ -0,0 +1,59 @@ +package com.xunhong.erp.turbo.user.app.executor.cmd; + +import cn.hutool.crypto.digest.BCrypt; +import com.xunhong.erp.turbo.api.user.dto.cmd.AdminCreateCmd; +import com.xunhong.erp.turbo.api.user.dto.cmd.EmployeeCreateCmd; +import com.xunhong.erp.turbo.api.user.dto.cmd.UserAuthCreateCmd; +import com.xunhong.erp.turbo.api.user.dto.enums.AdminTypeEnum; +import com.xunhong.erp.turbo.api.user.dto.enums.SocialTypeEnum; +import com.xunhong.erp.turbo.api.user.dto.vo.EmployeeVO; +import com.xunhong.erp.turbo.user.app.assembler.EmployeeAssembler; +import com.xunhong.erp.turbo.user.domain.entity.Employee; +import com.xunhong.erp.turbo.user.domain.entity.UserAuth; +import com.xunhong.erp.turbo.user.domain.gateway.AdminGateway; +import com.xunhong.erp.turbo.user.domain.gateway.EmployeeGateway; +import com.xunhong.erp.turbo.user.domain.gateway.UserAuthGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class EmployeeCreateCmdExe { + + private final EmployeeAssembler employeeAssembler; + private final EmployeeGateway employeeGateway; + + private final UserAuthGateway userAuthGateway; + private final AdminGateway adminGateway; + + @Transactional + public EmployeeVO execute(EmployeeCreateCmd employeeCreateCmd) { + // 注册用户 + UserAuthCreateCmd userAuthCreateCmd = UserAuthCreateCmd.builder().socialType(SocialTypeEnum.ACCOUNT) + .username(employeeCreateCmd.getUsername()) + .password(BCrypt.hashpw(employeeCreateCmd.getPassword())) + .isAdmin(Boolean.TRUE) + .build(); + UserAuth userAuth = userAuthGateway.register(userAuthCreateCmd); + + // 注册管理员 + AdminCreateCmd adminCreateCmd = AdminCreateCmd.builder() + .userId(userAuth.getUserId()) + .name(employeeCreateCmd.getName()) + .type(AdminTypeEnum.SUB_ADMIN) + .build(); + adminGateway.register(adminCreateCmd); + + // 创建员工 + employeeCreateCmd.setUserId(userAuth.getUserId()); + Employee employee = employeeGateway.save(employeeCreateCmd); + + return employeeAssembler.toEmployeeVO(employee); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeDestroyCmdExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeDestroyCmdExe.java new file mode 100644 index 0000000..db3ae29 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeDestroyCmdExe.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.user.app.executor.cmd; + +import com.xunhong.erp.turbo.api.user.dto.cmd.EmployeeDestroyCmd; +import com.xunhong.erp.turbo.user.domain.gateway.EmployeeGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class EmployeeDestroyCmdExe { + private final EmployeeGateway employeeGateway; + + public void execute(EmployeeDestroyCmd employeeDestroyCmd) { + employeeGateway.destroy(employeeDestroyCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeDisableCmdExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeDisableCmdExe.java new file mode 100644 index 0000000..7f7c5fb --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeDisableCmdExe.java @@ -0,0 +1,35 @@ +package com.xunhong.erp.turbo.user.app.executor.cmd; + +import com.xunhong.erp.turbo.api.user.dto.cmd.EmployeeDisableCmd; +import com.xunhong.erp.turbo.api.user.dto.cmd.UserDisableCmd; +import com.xunhong.erp.turbo.api.user.dto.vo.EmployeeVO; +import com.xunhong.erp.turbo.user.app.assembler.EmployeeAssembler; +import com.xunhong.erp.turbo.user.domain.entity.Employee; +import com.xunhong.erp.turbo.user.domain.gateway.EmployeeGateway; +import com.xunhong.erp.turbo.user.domain.gateway.UserGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class EmployeeDisableCmdExe { + private final EmployeeGateway employeeGateway; + private final UserGateway userGateway; + + private final EmployeeAssembler employeeAssembler; + + public EmployeeVO execute(EmployeeDisableCmd employeeDisableCmd) { + Employee employee = employeeGateway.disable(employeeDisableCmd); + + UserDisableCmd userDisableCmd = new UserDisableCmd(); + userDisableCmd.setUserId(employee.getUserId()); + userGateway.disable(userDisableCmd); + + return employeeAssembler.toEmployeeVO(employee); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeRestPasswordCmdExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeRestPasswordCmdExe.java new file mode 100644 index 0000000..c825865 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeRestPasswordCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.user.app.executor.cmd; + +import com.xunhong.erp.turbo.api.user.dto.cmd.EmployeeRestPasswordCmd; +import com.xunhong.erp.turbo.user.domain.gateway.UserAuthGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class EmployeeRestPasswordCmdExe { + + private final UserAuthGateway userAuthGateway; + + public void execute(EmployeeRestPasswordCmd employeeRestPasswordCmd) { + userAuthGateway.restPassword(employeeRestPasswordCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeUpdateAvatarCmdExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeUpdateAvatarCmdExe.java new file mode 100644 index 0000000..cb2ee31 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeUpdateAvatarCmdExe.java @@ -0,0 +1,28 @@ +package com.xunhong.erp.turbo.user.app.executor.cmd; + +import com.xunhong.erp.turbo.api.user.dto.cmd.EmployeeUpdateAvatarCmd; +import com.xunhong.erp.turbo.api.user.dto.vo.EmployeeVO; +import com.xunhong.erp.turbo.user.app.assembler.EmployeeAssembler; +import com.xunhong.erp.turbo.user.domain.entity.Employee; +import com.xunhong.erp.turbo.user.domain.gateway.EmployeeGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class EmployeeUpdateAvatarCmdExe { + private final EmployeeGateway employeeGateway; + + private final EmployeeAssembler employeeAssembler; + + public EmployeeVO execute(EmployeeUpdateAvatarCmd employeeUpdateAvatarCmd) { + Employee employee = employeeGateway.updateAvatar(employeeUpdateAvatarCmd); + + return employeeAssembler.toEmployeeVO(employee); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeUpdateCmdExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeUpdateCmdExe.java new file mode 100644 index 0000000..22f9382 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/EmployeeUpdateCmdExe.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.user.app.executor.cmd; + +import com.xunhong.erp.turbo.api.user.dto.cmd.EmployeeUpdateCmd; +import com.xunhong.erp.turbo.api.user.dto.vo.EmployeeVO; +import com.xunhong.erp.turbo.user.app.assembler.EmployeeAssembler; +import com.xunhong.erp.turbo.user.domain.entity.Employee; +import com.xunhong.erp.turbo.user.domain.gateway.EmployeeGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class EmployeeUpdateCmdExe { + + private final EmployeeAssembler employeeAssembler; + private final EmployeeGateway employeeGateway; + + public EmployeeVO execute(EmployeeUpdateCmd employeeUpdateCmd) { + Employee employee = employeeGateway.update(employeeUpdateCmd); + return employeeAssembler.toEmployeeVO(employee); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UpdatePasswordCmdExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UpdatePasswordCmdExe.java new file mode 100644 index 0000000..51a0643 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UpdatePasswordCmdExe.java @@ -0,0 +1,40 @@ +package com.xunhong.erp.turbo.user.app.executor.cmd; + +import cn.hutool.crypto.digest.BCrypt; +import com.xunhong.erp.turbo.api.user.dto.cmd.UpdatePasswordCmd; +import com.xunhong.erp.turbo.api.user.dto.qry.UserAuthShowQry; +import com.xunhong.erp.turbo.api.user.exception.UserErrorCode; +import com.xunhong.erp.turbo.api.user.exception.UserException; +import com.xunhong.erp.turbo.user.domain.entity.UserAuth; +import com.xunhong.erp.turbo.user.domain.gateway.UserAuthGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class UpdatePasswordCmdExe { + private final UserAuthGateway userAuthGateway; + + public void execute(UpdatePasswordCmd updatePasswordCmd) { + // 获取当前用户 + UserAuthShowQry userAuthShowQry = new UserAuthShowQry(); + userAuthShowQry.setUserId(updatePasswordCmd.getUserId()); + UserAuth userAuth = userAuthGateway.show(userAuthShowQry); + + // 判断旧密码是否正确 + if (!BCrypt.checkpw(updatePasswordCmd.getOldPassword(), userAuth.getPassword())) { + throw new UserException("旧密码不正确", UserErrorCode.B_USER_USER_AUTH_PASSWORD_ERROR); + } + + if (BCrypt.checkpw(updatePasswordCmd.getPassword(), userAuth.getPassword())) { + throw new UserException("新密码不能与旧密码相同", UserErrorCode.B_USER_USER_AUTH_PASSWORD_ERROR); + } + + // 判断两个密码是否一致 + if (!updatePasswordCmd.getPassword().equals(updatePasswordCmd.getConfirmPassword())) { + throw new UserException("两次输入的密码", UserErrorCode.B_USER_USER_AUTH_PASSWORD_ERROR); + } + + userAuthGateway.restPassword(updatePasswordCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserCreateCmdExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserCreateCmdExe.java new file mode 100644 index 0000000..f87e5bc --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserCreateCmdExe.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.user.app.executor.cmd; + +import com.xunhong.erp.turbo.api.user.dto.cmd.UserCreateCmd; +import com.xunhong.erp.turbo.api.user.dto.vo.UserVO; +import com.xunhong.erp.turbo.user.app.assembler.UserAssembler; +import com.xunhong.erp.turbo.user.domain.entity.User; +import com.xunhong.erp.turbo.user.domain.gateway.UserGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + + +@Component +@RequiredArgsConstructor +public class UserCreateCmdExe { + private final UserGateway userGateway; + private final UserAssembler userAssembler; + + @Transactional + public UserVO execute(UserCreateCmd userCreateCmd) { + User user = userGateway.create(userCreateCmd); + + return userAssembler.toUserVO(user); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserDestroyCmdExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserDestroyCmdExe.java new file mode 100644 index 0000000..0ee54fc --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserDestroyCmdExe.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.user.app.executor.cmd; + +import com.xunhong.erp.turbo.api.user.dto.cmd.UserDestroyCmd; +import com.xunhong.erp.turbo.user.domain.gateway.UserGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + + +@Component +@RequiredArgsConstructor +public class UserDestroyCmdExe { + private final UserGateway userGateway; + + public void execute(UserDestroyCmd userDestroyCmd) { + userGateway.destroy(userDestroyCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserDisableCmdExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserDisableCmdExe.java new file mode 100644 index 0000000..af7dd15 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserDisableCmdExe.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.user.app.executor.cmd; + +import com.xunhong.erp.turbo.api.user.dto.cmd.UserDisableCmd; +import com.xunhong.erp.turbo.user.domain.gateway.UserGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + + +@Component +@RequiredArgsConstructor +public class UserDisableCmdExe { + private final UserGateway userGateway; + + public void execute(UserDisableCmd userDestroyCmd) { + userGateway.disable(userDestroyCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserEnableCmdExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserEnableCmdExe.java new file mode 100644 index 0000000..bb287f9 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserEnableCmdExe.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.user.app.executor.cmd; + +import com.xunhong.erp.turbo.api.user.dto.cmd.UserEnableCmd; +import com.xunhong.erp.turbo.user.domain.gateway.UserGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + + +@Component +@RequiredArgsConstructor +public class UserEnableCmdExe { + private final UserGateway userGateway; + + public void execute(UserEnableCmd userEnableCmd) { + userGateway.enable(userEnableCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserListQryExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserListQryExe.java new file mode 100644 index 0000000..e2e018a --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserListQryExe.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.user.app.executor.cmd; + +import com.xunhong.erp.turbo.api.user.dto.qry.UserListQry; +import com.xunhong.erp.turbo.api.user.dto.vo.UserVO; +import com.xunhong.erp.turbo.user.app.assembler.UserAssembler; +import com.xunhong.erp.turbo.user.domain.entity.User; +import com.xunhong.erp.turbo.user.domain.gateway.UserGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class UserListQryExe { + private final UserGateway userGateway; + private final UserAssembler userAssembler; + + public List execute(UserListQry userListQry) { + List userList = userGateway.list(userListQry); + return userList.stream().map(userAssembler::toUserVO).toList(); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserUnsubscribeCmdExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserUnsubscribeCmdExe.java new file mode 100644 index 0000000..fa1eed2 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserUnsubscribeCmdExe.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.user.app.executor.cmd; + +import com.xunhong.erp.turbo.api.facade.dto.qry.WxMaOpenidQry; +import com.xunhong.erp.turbo.user.domain.gateway.UserGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + + +@Component +@RequiredArgsConstructor +public class UserUnsubscribeCmdExe { + private final UserGateway userGateway; + + public void execute(WxMaOpenidQry wxMaOpenidQry) { + userGateway.unsubscribe(wxMaOpenidQry); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserUpdateCmdExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserUpdateCmdExe.java new file mode 100644 index 0000000..5692eab --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/cmd/UserUpdateCmdExe.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.user.app.executor.cmd; + +import com.xunhong.erp.turbo.api.user.dto.cmd.UserUpdateCmd; +import com.xunhong.erp.turbo.api.user.dto.vo.UserVO; +import com.xunhong.erp.turbo.user.app.assembler.UserAssembler; +import com.xunhong.erp.turbo.user.domain.entity.User; +import com.xunhong.erp.turbo.user.domain.gateway.UserGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class UserUpdateCmdExe { + private final UserGateway userGateway; + private final UserAssembler userAssembler; + + public UserVO execute(UserUpdateCmd userUpdateCmd) { + User user = userGateway.updateUser(userUpdateCmd); + return userAssembler.toUserVO(user); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/AdminShowQryExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/AdminShowQryExe.java new file mode 100644 index 0000000..8ce78eb --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/AdminShowQryExe.java @@ -0,0 +1,23 @@ +package com.xunhong.erp.turbo.user.app.executor.query; + +import com.xunhong.erp.turbo.api.user.dto.qry.AdminShowQry; +import com.xunhong.erp.turbo.api.user.dto.vo.AdminVO; +import com.xunhong.erp.turbo.user.app.assembler.AdminAssembler; +import com.xunhong.erp.turbo.user.domain.entity.Admin; +import com.xunhong.erp.turbo.user.domain.gateway.AdminGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class AdminShowQryExe { + private final AdminGateway adminGateway; + private final AdminAssembler adminAssembler; + + public AdminVO execute(AdminShowQry adminShowQry) { + Admin admin = adminGateway.show(adminShowQry); + return adminAssembler.toAdminVO(admin); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/EmployeeListQryExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/EmployeeListQryExe.java new file mode 100644 index 0000000..beb65e2 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/EmployeeListQryExe.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.user.app.executor.query; + +import com.xunhong.erp.turbo.api.user.dto.qry.EmployeeListQry; +import com.xunhong.erp.turbo.api.user.dto.vo.EmployeeVO; +import com.xunhong.erp.turbo.user.app.assembler.EmployeeAssembler; +import com.xunhong.erp.turbo.user.domain.entity.Employee; +import com.xunhong.erp.turbo.user.domain.gateway.EmployeeGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class EmployeeListQryExe { + + private final EmployeeGateway employeeGateway; + private final EmployeeAssembler employeeAssembler; + + public List execute(EmployeeListQry employeeListQry) { + List employeeList = employeeGateway.list(employeeListQry); + return employeeList.stream().map(employeeAssembler::toEmployeeVO).toList(); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/EmployeePageQryExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/EmployeePageQryExe.java new file mode 100644 index 0000000..f9055e3 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/EmployeePageQryExe.java @@ -0,0 +1,28 @@ +package com.xunhong.erp.turbo.user.app.executor.query; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.user.dto.qry.EmployeePageQry; +import com.xunhong.erp.turbo.api.user.dto.vo.EmployeeVO; +import com.xunhong.erp.turbo.user.app.assembler.EmployeeAssembler; +import com.xunhong.erp.turbo.user.domain.entity.Employee; +import com.xunhong.erp.turbo.user.domain.gateway.EmployeeGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class EmployeePageQryExe { + + private final EmployeeGateway employeeGateway; + private final EmployeeAssembler employeeAssembler; + + public IPage execute(EmployeePageQry employeePageQry) { + IPage page = employeeGateway.page(employeePageQry); + return page.convert(employeeAssembler::toEmployeeVO); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/EmployeeShowQryExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/EmployeeShowQryExe.java new file mode 100644 index 0000000..ca6dd75 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/EmployeeShowQryExe.java @@ -0,0 +1,28 @@ +package com.xunhong.erp.turbo.user.app.executor.query; + +import com.xunhong.erp.turbo.api.user.dto.qry.EmployeeShowQry; +import com.xunhong.erp.turbo.api.user.dto.vo.EmployeeVO; +import com.xunhong.erp.turbo.user.app.assembler.EmployeeAssembler; +import com.xunhong.erp.turbo.user.domain.entity.Employee; +import com.xunhong.erp.turbo.user.domain.gateway.EmployeeGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class EmployeeShowQryExe { + + private final EmployeeAssembler employeeAssembler; + private final EmployeeGateway employeeGateway; + + public EmployeeVO execute(EmployeeShowQry employeeShowQry) { + Employee employee = employeeGateway.show(employeeShowQry); + + return employeeAssembler.toEmployeeVO(employee); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/OpenSafeCmdExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/OpenSafeCmdExe.java new file mode 100644 index 0000000..893ced6 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/OpenSafeCmdExe.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.user.app.executor.query; + + +import com.xunhong.erp.turbo.api.user.dto.cmd.OpenSafeCmd; +import com.xunhong.erp.turbo.user.domain.gateway.UserAuthGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class OpenSafeCmdExe { + private final UserAuthGateway userAuthGateway; + + public void execute(OpenSafeCmd openSafeCmd) { + userAuthGateway.openSafe(openSafeCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/PasswordLoginQryExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/PasswordLoginQryExe.java new file mode 100644 index 0000000..aad5d97 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/PasswordLoginQryExe.java @@ -0,0 +1,87 @@ +package com.xunhong.erp.turbo.user.app.executor.query; + +import cn.hutool.crypto.digest.BCrypt; +import com.xunhong.erp.turbo.api.user.dto.enums.SocialTypeEnum; +import com.xunhong.erp.turbo.api.user.dto.qry.PasswordLoginQry; +import com.xunhong.erp.turbo.api.user.dto.vo.UserAuthVO; +import com.xunhong.erp.turbo.api.user.exception.UserErrorCode; +import com.xunhong.erp.turbo.api.user.exception.UserException; +import com.xunhong.erp.turbo.user.app.assembler.UserAuthAssembler; +import com.xunhong.erp.turbo.user.domain.entity.UserAuth; +import com.xunhong.erp.turbo.user.domain.gateway.UserAuthGateway; +import com.xunhong.erp.turbo.user.domain.gateway.UserGateway; +import lombok.RequiredArgsConstructor; +import org.redisson.api.RBucket; +import org.redisson.api.RedissonClient; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * @author shenyifei + */ +@Component +@RequiredArgsConstructor +public class PasswordLoginQryExe { + private final UserAuthGateway userAuthGateway; + private final UserAuthAssembler userAuthAssembler; + private final RedissonClient redissonClient; + + private final UserGateway userGateway; + + public UserAuthVO execute(PasswordLoginQry passwordLoginQry) { + String account = passwordLoginQry.getUsername(); + + // 判断账号是否存在 + UserAuth userAuth = userAuthGateway.getByAccount(account, SocialTypeEnum.ACCOUNT); + + // 存在则提示账号已经存在 + if (Objects.isNull(userAuth)) { + throw new UserException(UserErrorCode.B_USER_USER_AUTH_NULL); + } + + // 检查账户是否被锁定 + RBucket isLockedBucket = redissonClient.getBucket("user:lock:" + account); + if (isLockedBucket.isExists() && isLockedBucket.get()) { + throw new UserException(UserErrorCode.B_USER_USER_AUTH_LOCKED); + } + + // 密码校验 + if (!BCrypt.checkpw(passwordLoginQry.getPassword(), userAuth.getPassword())) { + // 增加密码错误次数 + RBucket errorCountBucket = redissonClient.getBucket("user:errorCount:" + account); + int errorCount = errorCountBucket.isExists() ? errorCountBucket.get() : 0; + errorCount++; + + if (errorCount >= 5) { + // 锁定账户并设置30分钟过期时间 + RBucket isLockedBucket1 = redissonClient.getBucket("user:lock:" + account); + isLockedBucket1.set(true, 30, TimeUnit.MINUTES); + // 删除错误计数 + errorCountBucket.delete(); + throw new UserException(UserErrorCode.B_USER_USER_AUTH_LOCKED); + } else { + // 更新错误计数 + errorCountBucket.set(errorCount); + String message = String.format("密码错误次数:%s 次,5 次后将锁定账户 30 分钟", errorCount); + throw new UserException(message, UserErrorCode.B_USER_USER_AUTH_PASSWORD_ERROR); + } + } else { + // 密码正确,重置错误计数 + RBucket errorCountBucket = redissonClient.getBucket("user:errorCount:" + account); + if (errorCountBucket.isExists()) { + errorCountBucket.delete(); + } + } + + // 更新登录时间 + LocalDateTime lastLoginAt = LocalDateTime.now(); + userGateway.updateLastLoginAt(userAuth.getUserId(), lastLoginAt); + + userAuth.getUser().setLastLoginAt(lastLoginAt); + // 返回数据 + return userAuthAssembler.toUserAuthVO(userAuth); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/UserAuthShowQryExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/UserAuthShowQryExe.java new file mode 100644 index 0000000..48d4e6b --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/UserAuthShowQryExe.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.user.app.executor.query; + +import com.xunhong.erp.turbo.api.user.dto.qry.UserAuthShowQry; +import com.xunhong.erp.turbo.api.user.dto.vo.UserAuthVO; +import com.xunhong.erp.turbo.user.app.assembler.UserAuthAssembler; +import com.xunhong.erp.turbo.user.domain.entity.UserAuth; +import com.xunhong.erp.turbo.user.domain.gateway.UserAuthGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Component +@RequiredArgsConstructor +public class UserAuthShowQryExe { + + private final UserAuthGateway userAuthGateway; + private final UserAuthAssembler userAuthAssembler; + + public UserAuthVO execute(UserAuthShowQry userAuthShowQry) { + UserAuth userAuth = userAuthGateway.show(userAuthShowQry); + return userAuthAssembler.toUserAuthVO(userAuth); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/UserPageQryExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/UserPageQryExe.java new file mode 100644 index 0000000..eece093 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/UserPageQryExe.java @@ -0,0 +1,24 @@ +package com.xunhong.erp.turbo.user.app.executor.query; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.user.dto.qry.UserPageQry; +import com.xunhong.erp.turbo.api.user.dto.vo.UserVO; +import com.xunhong.erp.turbo.user.app.assembler.UserAssembler; +import com.xunhong.erp.turbo.user.domain.entity.User; +import com.xunhong.erp.turbo.user.domain.gateway.UserGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class UserPageQryExe { + private final UserGateway userGateway; + + private final UserAssembler userAssembler; + + public IPage execute(UserPageQry userPageQry) { + IPage page = userGateway.page(userPageQry); + return page.convert(userAssembler::toUserVO); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/UserShowQryExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/UserShowQryExe.java new file mode 100644 index 0000000..2b900a9 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/UserShowQryExe.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.user.app.executor.query; + +import com.xunhong.erp.turbo.api.user.dto.qry.UserShowQry; +import com.xunhong.erp.turbo.api.user.dto.vo.UserVO; +import com.xunhong.erp.turbo.user.app.assembler.UserAssembler; +import com.xunhong.erp.turbo.user.domain.entity.User; +import com.xunhong.erp.turbo.user.domain.gateway.UserGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +/** + * @author shenyifei + */ +@Component +@RequiredArgsConstructor +public class UserShowQryExe { + + private final UserGateway userGateway; + private final UserAssembler userAssembler; + + public UserVO execute(UserShowQry userShowQry) { + User user = userGateway.show(userShowQry); + return userAssembler.toUserVO(user); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/WxMaCodeLoginQryExe.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/WxMaCodeLoginQryExe.java new file mode 100644 index 0000000..27ace4d --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/executor/query/WxMaCodeLoginQryExe.java @@ -0,0 +1,57 @@ +package com.xunhong.erp.turbo.user.app.executor.query; + +import cn.dev33.satoken.secure.BCrypt; +import com.xunhong.erp.turbo.api.facade.dto.qry.WxMaOpenidQry; +import com.xunhong.erp.turbo.api.user.dto.cmd.UserAuthCreateCmd; +import com.xunhong.erp.turbo.api.user.dto.cmd.UserUpdateWxCmd; +import com.xunhong.erp.turbo.api.user.dto.enums.SocialTypeEnum; +import com.xunhong.erp.turbo.api.user.dto.vo.UserAuthVO; +import com.xunhong.erp.turbo.user.app.assembler.UserAuthAssembler; +import com.xunhong.erp.turbo.user.domain.entity.UserAuth; +import com.xunhong.erp.turbo.user.domain.gateway.UserAuthGateway; +import com.xunhong.erp.turbo.user.domain.gateway.UserGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.Objects; + +/** + * @author shenyifei + */ +@Component +@RequiredArgsConstructor +public class WxMaCodeLoginQryExe { + private final UserAuthGateway userAuthGateway; + private final UserAuthAssembler userAuthAssembler; + + private final UserGateway userGateway; + + public UserAuthVO execute(WxMaOpenidQry wxMaOpenidQry) { + String unionid = wxMaOpenidQry.getUnionid(); + UserAuth userAuth = userAuthGateway.getByAccount(unionid, SocialTypeEnum.WX_UNION_ID); + + if (Objects.isNull(userAuth)) { + UserAuthCreateCmd userAuthCreateCmd = UserAuthCreateCmd.builder().socialType(SocialTypeEnum.ACCOUNT) + .username(unionid) + .password(BCrypt.hashpw(unionid)) + .socialType(SocialTypeEnum.WX_UNION_ID) + .isAdmin(Boolean.FALSE) + .build(); + userAuth = userAuthGateway.register(userAuthCreateCmd); + } + + Long userId = userAuth.getUserId(); + UserUpdateWxCmd userUpdateWxCmd = new UserUpdateWxCmd(); + userUpdateWxCmd.setUserId(userId); + userUpdateWxCmd.setUnionid(unionid); + if (Objects.nonNull(wxMaOpenidQry.getMaOpenid())) { + userUpdateWxCmd.setMaOpenid(wxMaOpenidQry.getMaOpenid()); + } + if (Objects.nonNull(wxMaOpenidQry.getMpOpenid())) { + userUpdateWxCmd.setMpOpenid(wxMaOpenidQry.getMpOpenid()); + } + userGateway.updateWx(userUpdateWxCmd); + + return userAuthAssembler.toUserAuthVO(userAuth); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/service/AdminServiceImpl.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/service/AdminServiceImpl.java new file mode 100644 index 0000000..7f3a82f --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/service/AdminServiceImpl.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.user.app.service; + +import com.xunhong.erp.turbo.api.user.api.AdminServiceI; +import com.xunhong.erp.turbo.api.user.dto.qry.AdminShowQry; +import com.xunhong.erp.turbo.api.user.dto.vo.AdminVO; +import com.xunhong.erp.turbo.user.app.executor.query.AdminShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +@DubboService(interfaceClass = AdminServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class AdminServiceImpl implements AdminServiceI { + private final AdminShowQryExe adminShowQryExe; +// private final StoreListQryExe storeListQryExe; + + @Override + public AdminVO show(AdminShowQry adminShowQry) { + return adminShowQryExe.execute(adminShowQry); + } + +// @Override +// public List listStore(StoreListQry storeListQry) { +// return storeListQryExe.execute(storeListQry); +// } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/service/EmployeeServiceImpl.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/service/EmployeeServiceImpl.java new file mode 100644 index 0000000..57cd3ea --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/service/EmployeeServiceImpl.java @@ -0,0 +1,85 @@ + +package com.xunhong.erp.turbo.user.app.service; + +import com.xunhong.erp.turbo.api.user.api.EmployeeServiceI; +import com.xunhong.erp.turbo.api.user.dto.cmd.*; +import com.xunhong.erp.turbo.api.user.dto.qry.EmployeeListQry; +import com.xunhong.erp.turbo.api.user.dto.qry.EmployeePageQry; +import com.xunhong.erp.turbo.api.user.dto.qry.EmployeeShowQry; +import com.xunhong.erp.turbo.api.user.dto.vo.EmployeeVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.user.app.executor.cmd.*; +import com.xunhong.erp.turbo.user.app.executor.query.EmployeeListQryExe; +import com.xunhong.erp.turbo.user.app.executor.query.EmployeePageQryExe; +import com.xunhong.erp.turbo.user.app.executor.query.EmployeeShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + */ +@Slf4j +@Service +@DubboService(interfaceClass = EmployeeServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class EmployeeServiceImpl implements EmployeeServiceI { + + private final EmployeeCreateCmdExe employeeCreateCmdExe; + private final EmployeeUpdateCmdExe employeeUpdateCmdExe; + private final EmployeePageQryExe employeePageQryExe; + private final EmployeeListQryExe employeeListQryExe; + private final EmployeeShowQryExe employeeShowQryExe; + private final EmployeeDestroyCmdExe employeeDestroyCmdExe; + private final EmployeeRestPasswordCmdExe employeeRestPasswordCmdExe; + private final EmployeeDisableCmdExe employeeDisableCmdExe; + private final EmployeeUpdateAvatarCmdExe employeeUpdateAvatarCmdExe; + + @Override + public EmployeeVO create(EmployeeCreateCmd employeeCreateCmd) { + return employeeCreateCmdExe.execute(employeeCreateCmd); + } + + @Override + public PageDTO page(EmployeePageQry employeePageQry) { + return PageDTO.of(employeePageQryExe.execute(employeePageQry)); + } + + @Override + public List list(EmployeeListQry employeeListQry) { + return employeeListQryExe.execute(employeeListQry); + } + + @Override + public EmployeeVO update(EmployeeUpdateCmd employeeUpdateCmd) { + return employeeUpdateCmdExe.execute(employeeUpdateCmd); + } + + @Override + public EmployeeVO show(EmployeeShowQry employeeShowQry) { + return employeeShowQryExe.execute(employeeShowQry); + } + + @Override + public void destroy(EmployeeDestroyCmd employeeDestroyCmd) { + employeeDestroyCmdExe.execute(employeeDestroyCmd); + } + + @Override + public void restPassword(EmployeeRestPasswordCmd employeeRestPasswordCmd) { + employeeRestPasswordCmdExe.execute(employeeRestPasswordCmd); + } + + @Override + public EmployeeVO disable(EmployeeDisableCmd employeeDisableCmd) { + return employeeDisableCmdExe.execute(employeeDisableCmd); + } + + @Override + public void updateAvatar(EmployeeUpdateAvatarCmd employeeUpdateAvatarCmd) { + employeeUpdateAvatarCmdExe.execute(employeeUpdateAvatarCmd); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/service/UserAuthServiceImpl.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/service/UserAuthServiceImpl.java new file mode 100644 index 0000000..2e56f8d --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/service/UserAuthServiceImpl.java @@ -0,0 +1,57 @@ +package com.xunhong.erp.turbo.user.app.service; + +import com.xunhong.erp.turbo.api.facade.dto.qry.WxMaOpenidQry; +import com.xunhong.erp.turbo.api.user.api.UserAuthServiceI; +import com.xunhong.erp.turbo.api.user.dto.cmd.OpenSafeCmd; +import com.xunhong.erp.turbo.api.user.dto.cmd.UpdatePasswordCmd; +import com.xunhong.erp.turbo.api.user.dto.qry.PasswordLoginQry; +import com.xunhong.erp.turbo.api.user.dto.qry.UserAuthShowQry; +import com.xunhong.erp.turbo.api.user.dto.vo.UserAuthVO; +import com.xunhong.erp.turbo.user.app.executor.cmd.UpdatePasswordCmdExe; +import com.xunhong.erp.turbo.user.app.executor.query.OpenSafeCmdExe; +import com.xunhong.erp.turbo.user.app.executor.query.PasswordLoginQryExe; +import com.xunhong.erp.turbo.user.app.executor.query.UserAuthShowQryExe; +import com.xunhong.erp.turbo.user.app.executor.query.WxMaCodeLoginQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + + +@Slf4j +@Service +@DubboService(interfaceClass = UserAuthServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class UserAuthServiceImpl implements UserAuthServiceI { + + private final PasswordLoginQryExe passwordLoginQryExe; + private final WxMaCodeLoginQryExe wxMaCodeLoginQryExe; + private final OpenSafeCmdExe openSafeCmdExe; + private final UpdatePasswordCmdExe updatePasswordCmdExe; + private final UserAuthShowQryExe userAuthShowQryExe; + + @Override + public UserAuthVO passwordLogin(PasswordLoginQry passwordLoginQry) { + return passwordLoginQryExe.execute(passwordLoginQry); + } + + @Override + public UserAuthVO wxMaCodeLogin(WxMaOpenidQry wxMaOpenidQry) { + return wxMaCodeLoginQryExe.execute(wxMaOpenidQry); + } + + @Override + public void openSafe(OpenSafeCmd openSafeCmd) { + openSafeCmdExe.execute(openSafeCmd); + } + + @Override + public void updatePassword(UpdatePasswordCmd updatePasswordCmd) { + updatePasswordCmdExe.execute(updatePasswordCmd); + } + + @Override + public UserAuthVO show(UserAuthShowQry userAuthShowQry) { + return userAuthShowQryExe.execute(userAuthShowQry); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/service/UserServiceImpl.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/service/UserServiceImpl.java new file mode 100644 index 0000000..43e1f62 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/app/service/UserServiceImpl.java @@ -0,0 +1,84 @@ +package com.xunhong.erp.turbo.user.app.service; + +import com.xunhong.erp.turbo.api.facade.dto.qry.WxMaOpenidQry; +import com.xunhong.erp.turbo.api.user.api.UserServiceI; +import com.xunhong.erp.turbo.api.user.dto.cmd.*; +import com.xunhong.erp.turbo.api.user.dto.qry.UserListQry; +import com.xunhong.erp.turbo.api.user.dto.qry.UserPageQry; +import com.xunhong.erp.turbo.api.user.dto.qry.UserShowQry; +import com.xunhong.erp.turbo.api.user.dto.vo.UserVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; +import com.xunhong.erp.turbo.user.app.executor.cmd.*; +import com.xunhong.erp.turbo.user.app.executor.query.UserPageQryExe; +import com.xunhong.erp.turbo.user.app.executor.query.UserShowQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author shenyifei + * @author shenyifei + */ +@Slf4j +@Service +@DubboService(interfaceClass = UserServiceI.class, version = "1.0.0") +@RequiredArgsConstructor +public class UserServiceImpl implements UserServiceI { + private final UserShowQryExe userShowQryExe; + private final UserUpdateCmdExe userUpdateCmdExe; + private final UserPageQryExe userPageQryExe; + private final UserCreateCmdExe userCreateCmdExe; + private final UserDestroyCmdExe userDestroyCmdExe; + private final UserListQryExe userListQryExe; + private final UserDisableCmdExe userDisableCmdExe; + private final UserEnableCmdExe userEnableCmdExe; + private final UserUnsubscribeCmdExe userUnsubscribeCmdExe; + + @Override + public UserVO show(UserShowQry userShowQry) { + return userShowQryExe.execute(userShowQry); + } + + @Override + public UserVO update(UserUpdateCmd userUpdateCmd) { + return userUpdateCmdExe.execute(userUpdateCmd); + } + + @Override + public PageDTO page(UserPageQry userPageQry) { + return PageDTO.of(userPageQryExe.execute(userPageQry)); + } + + @Override + public UserVO create(UserCreateCmd userCreateCmd) { + return userCreateCmdExe.execute(userCreateCmd); + } + + @Override + public void destroy(UserDestroyCmd userDestroyCmd) { + userDestroyCmdExe.execute(userDestroyCmd); + } + + @Override + public List list(UserListQry userListQry) { + return userListQryExe.execute(userListQry); + } + + @Override + public void disable(UserDisableCmd userDisableCmd) { + userDisableCmdExe.execute(userDisableCmd); + } + + @Override + public void enable(UserEnableCmd userEnableCmd) { + userEnableCmdExe.execute(userEnableCmd); + } + + @Override + public void unsubscribe(WxMaOpenidQry wxMaOpenidQry) { + userUnsubscribeCmdExe.execute(wxMaOpenidQry); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/entity/Admin.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/entity/Admin.java new file mode 100644 index 0000000..4855862 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/entity/Admin.java @@ -0,0 +1,33 @@ +package com.xunhong.erp.turbo.user.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.user.dto.enums.AdminTypeEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class Admin extends DTO { + + /** + * 管理员Id + */ + private Long adminId; + + /** + * 用户Id + */ + private Long userId; + + /** + * 管理员名称 + */ + private String name; + + /** + * 管理员类型 + */ + private AdminTypeEnum type; +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/entity/Employee.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/entity/Employee.java new file mode 100644 index 0000000..e7910b3 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/entity/Employee.java @@ -0,0 +1,38 @@ +package com.xunhong.erp.turbo.user.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class Employee extends DTO { + + private Long employeeId; + + private String name; + + private String number; + + private Integer gender; + + private String phone; + + private String avatar; + + private String remark; + + private Boolean status; + + private Long userId; + + private LocalDateTime createdAt; + +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/entity/User.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/entity/User.java new file mode 100644 index 0000000..267addd --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/entity/User.java @@ -0,0 +1,103 @@ +package com.xunhong.erp.turbo.user.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.user.dto.enums.UserStateEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class User extends DTO { + + /** + * 用户id + */ + private Long userId; + + /** + * 昵称 + */ + private String nickname; + + /** + * 头像 + */ + private String avatar; + + /** + * 姓名 + */ + private String name; + + /** + * 生日 + */ + private String birthday; + + /** + * 性别 + */ + private Integer gender; + + /** + * 手机号 + */ + private String phone; + + /** + * 状态 1.启用 2.禁用 + */ + private UserStateEnum state; + + /** + * 备注 + */ + private String remark; + + /** + * 是否是管理员 1.是 0.否 + */ + private Boolean isAdmin; + + /** + * 是否是小区合伙人 1.是 0.否 + */ + private Boolean isPartner; + + /** + * 创建时间 + */ + private LocalDateTime createdAt; + + /** + * 绑定手机号码时间 + */ + private LocalDateTime bindPhoneAt; + + /** + * 最后一次登录时间 + */ + private LocalDateTime lastLoginAt; + + /** + * 微信公众号openid + */ + private String mpOpenid; + + /** + * 微信小程序openid + */ + private String maOpenid; + + /** + * 开放平台unionid + */ + private String unionid; +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/entity/UserAuth.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/entity/UserAuth.java new file mode 100644 index 0000000..6b6feb0 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/entity/UserAuth.java @@ -0,0 +1,47 @@ +package com.xunhong.erp.turbo.user.domain.entity; + +import com.alibaba.cola.domain.Entity; +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Entity +@EqualsAndHashCode(callSuper = true) +public class UserAuth extends DTO { + + /** + * 用户认证id + */ + private Long userAuthId; + + /** + * 用户id + */ + private Long userId; + + /** + * 账户 + */ + private String username; + + /** + * 密码 + */ + private String password; + + /** + * 认证类型 + */ + private Integer type; + + /** + * 状态 1.启用 2.禁用 + */ + private Integer state; + + private User user; +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/gateway/AdminGateway.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/gateway/AdminGateway.java new file mode 100644 index 0000000..68109b1 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/gateway/AdminGateway.java @@ -0,0 +1,11 @@ +package com.xunhong.erp.turbo.user.domain.gateway; + +import com.xunhong.erp.turbo.api.user.dto.cmd.AdminCreateCmd; +import com.xunhong.erp.turbo.api.user.dto.qry.AdminShowQry; +import com.xunhong.erp.turbo.user.domain.entity.Admin; + +public interface AdminGateway { + Admin show(AdminShowQry adminShowQry); + + Admin register(AdminCreateCmd adminCreateCmd); +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/gateway/EmployeeGateway.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/gateway/EmployeeGateway.java new file mode 100644 index 0000000..359fd46 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/gateway/EmployeeGateway.java @@ -0,0 +1,31 @@ +package com.xunhong.erp.turbo.user.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.user.dto.cmd.*; +import com.xunhong.erp.turbo.api.user.dto.qry.EmployeeListQry; +import com.xunhong.erp.turbo.api.user.dto.qry.EmployeePageQry; +import com.xunhong.erp.turbo.api.user.dto.qry.EmployeeShowQry; +import com.xunhong.erp.turbo.user.domain.entity.Employee; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface EmployeeGateway { + Employee save(EmployeeCreateCmd employeeCreateCmd); + + IPage page(EmployeePageQry employeePageQry); + + List list(EmployeeListQry employeeListQry); + + Employee update(EmployeeUpdateCmd employeeUpdateCmd); + + Employee show(EmployeeShowQry employeeShowQry); + + void destroy(EmployeeDestroyCmd employeeDestroyCmd); + + Employee disable(EmployeeDisableCmd employeeDisableCmd); + + Employee updateAvatar(EmployeeUpdateAvatarCmd employeeUpdateAvatarCmd); +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/gateway/UserAuthGateway.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/gateway/UserAuthGateway.java new file mode 100644 index 0000000..e74b334 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/gateway/UserAuthGateway.java @@ -0,0 +1,28 @@ +package com.xunhong.erp.turbo.user.domain.gateway; + +import com.xunhong.erp.turbo.api.user.dto.cmd.EmployeeRestPasswordCmd; +import com.xunhong.erp.turbo.api.user.dto.cmd.OpenSafeCmd; +import com.xunhong.erp.turbo.api.user.dto.cmd.UpdatePasswordCmd; +import com.xunhong.erp.turbo.api.user.dto.cmd.UserAuthCreateCmd; +import com.xunhong.erp.turbo.api.user.dto.enums.SocialTypeEnum; +import com.xunhong.erp.turbo.api.user.dto.qry.UserAuthShowQry; +import com.xunhong.erp.turbo.user.domain.entity.UserAuth; + +/** + * @author shenyifei + */ +public interface UserAuthGateway { + UserAuth getByAccount(String account, SocialTypeEnum socialTypeEnum); + + UserAuth save(UserAuth userAuth); + + UserAuth register(UserAuthCreateCmd userAuthCreateCmd); + + UserAuth show(UserAuthShowQry userAuthShowQry); + + void restPassword(EmployeeRestPasswordCmd employeeRestPasswordCmd); + + void restPassword(UpdatePasswordCmd updatePasswordCmd); + + void openSafe(OpenSafeCmd openSafeCmd); +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/gateway/UserGateway.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/gateway/UserGateway.java new file mode 100644 index 0000000..8a45454 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/domain/gateway/UserGateway.java @@ -0,0 +1,41 @@ +package com.xunhong.erp.turbo.user.domain.gateway; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xunhong.erp.turbo.api.facade.dto.qry.WxMaOpenidQry; +import com.xunhong.erp.turbo.api.user.dto.cmd.*; +import com.xunhong.erp.turbo.api.user.dto.qry.UserListQry; +import com.xunhong.erp.turbo.api.user.dto.qry.UserPageQry; +import com.xunhong.erp.turbo.api.user.dto.qry.UserShowQry; +import com.xunhong.erp.turbo.user.domain.entity.User; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author shenyifei + */ +public interface UserGateway { + User create(UserCreateCmd userCreateCmd); + + User getByUserId(Long userId); + + User updateUser(UserUpdateCmd userUpdateCmd); + + IPage page(UserPageQry userPageQry); + + User show(UserShowQry userShowQry); + + void destroy(UserDestroyCmd userDestroyCmd); + + void disable(UserDisableCmd userDisableCmd); + + List list(UserListQry userListQry); + + void enable(UserEnableCmd userEnableCmd); + + void updateWx(UserUpdateWxCmd userUpdateWxCmd); + + void unsubscribe(WxMaOpenidQry wxMaOpenidQry); + + void updateLastLoginAt(Long userId, LocalDateTime lastLoginAt); +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/convert/AdminConvert.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/convert/AdminConvert.java new file mode 100644 index 0000000..d9754b8 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/convert/AdminConvert.java @@ -0,0 +1,14 @@ +package com.xunhong.erp.turbo.user.infrastructure.convert; + +import com.xunhong.erp.turbo.api.user.dto.cmd.AdminCreateCmd; +import com.xunhong.erp.turbo.user.domain.entity.Admin; +import com.xunhong.erp.turbo.user.infrastructure.entity.AdminDO; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface AdminConvert { + Admin toAdmin(AdminDO adminDO); + + AdminDO toAdminDO(AdminCreateCmd adminCreateCmd); +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/convert/EmployeeConvert.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/convert/EmployeeConvert.java new file mode 100644 index 0000000..ab2a504 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/convert/EmployeeConvert.java @@ -0,0 +1,33 @@ +package com.xunhong.erp.turbo.user.infrastructure.convert; + +import com.xunhong.erp.turbo.api.user.dto.cmd.EmployeeCreateCmd; +import com.xunhong.erp.turbo.api.user.dto.cmd.EmployeeUpdateCmd; +import com.xunhong.erp.turbo.user.domain.entity.Employee; +import com.xunhong.erp.turbo.user.infrastructure.entity.EmployeeDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface EmployeeConvert { + + Employee toEmployee(EmployeeDO employeeDO); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "employeeId", ignore = true) + @Mapping(target = "createdAt", ignore = true) + EmployeeDO toEmployeeDO(EmployeeCreateCmd employeeCreateCmd); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "userId", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + void toEmployeeDO(@MappingTarget EmployeeDO employeeDO, EmployeeUpdateCmd employeeUpdateCmd); +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/convert/UserAuthConvert.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/convert/UserAuthConvert.java new file mode 100644 index 0000000..a4d726d --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/convert/UserAuthConvert.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.user.infrastructure.convert; + + +import com.xunhong.erp.turbo.api.user.dto.cmd.UserAuthCreateCmd; +import com.xunhong.erp.turbo.user.domain.entity.UserAuth; +import com.xunhong.erp.turbo.user.infrastructure.entity.UserAuthDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingConstants; + +/** + * @author shenyifei + */ +@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, uses = {UserConvert.class}) +public interface UserAuthConvert { + + @Mapping(target = "type", ignore = true) + @Mapping(target = "user", source = "userDO") + UserAuth toUserAuth(UserAuthDO userAuthDO); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "userId", ignore = true) + @Mapping(target = "userDO", ignore = true) + @Mapping(target = "userAuthId", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "state", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "createdAt", ignore = true) + UserAuthDO toUserAuthDO(UserAuthCreateCmd userAuthCreateCmd); +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/convert/UserConvert.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/convert/UserConvert.java new file mode 100644 index 0000000..e6fd8c9 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/convert/UserConvert.java @@ -0,0 +1,53 @@ +package com.xunhong.erp.turbo.user.infrastructure.convert; + + +import com.xunhong.erp.turbo.api.user.dto.cmd.UserUpdateCmd; +import com.xunhong.erp.turbo.api.user.dto.cmd.UserUpdateWxCmd; +import com.xunhong.erp.turbo.user.domain.entity.User; +import com.xunhong.erp.turbo.user.infrastructure.entity.UserDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValueCheckStrategy; + +/** + * @author shenyifei + */ +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +public interface UserConvert { + User toUser(UserDO userDO); + + @Mapping(target = "unionid", ignore = true) + @Mapping(target = "mpOpenid", ignore = true) + @Mapping(target = "maOpenid", ignore = true) + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "state", ignore = true) + @Mapping(target = "lastLoginAt", ignore = true) + @Mapping(target = "isPartner", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "isAdmin", ignore = true) + @Mapping(target = "createdAt", ignore = true) + @Mapping(target = "bindPhoneAt", ignore = true) + @Mapping(target = "phone", ignore = true) + @Mapping(target = "birthday", ignore = true) + void toUser(@MappingTarget UserDO userDO, UserUpdateCmd userUpdateCmd); + + @Mapping(target = "version", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "state", ignore = true) + @Mapping(target = "remark", ignore = true) + @Mapping(target = "phone", ignore = true) + @Mapping(target = "nickname", ignore = true) + @Mapping(target = "name", ignore = true) + @Mapping(target = "lastLoginAt", ignore = true) + @Mapping(target = "isPartner", ignore = true) + @Mapping(target = "isDelete", ignore = true) + @Mapping(target = "isAdmin", ignore = true) + @Mapping(target = "gender", ignore = true) + @Mapping(target = "createdAt", ignore = true) + @Mapping(target = "birthday", ignore = true) + @Mapping(target = "bindPhoneAt", ignore = true) + @Mapping(target = "avatar", ignore = true) + void toUser(@MappingTarget UserDO userDO, UserUpdateWxCmd userUpdateWxCmd); +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/entity/AdminDO.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/entity/AdminDO.java new file mode 100644 index 0000000..2fdaf25 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/entity/AdminDO.java @@ -0,0 +1,37 @@ +package com.xunhong.erp.turbo.user.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.xunhong.erp.turbo.api.user.dto.enums.AdminTypeEnum; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@TableName(value = "admin") +@EqualsAndHashCode(callSuper = true) +public class AdminDO extends BaseDO { + + /** + * 管理员Id + */ + @TableId(value = "admin_id", type = IdType.ASSIGN_ID) + private Long adminId; + + /** + * 管理员名称 + */ + @TableField(value = "name") + private String name; + + /** + * 用户Id + */ + @TableField(value = "user_id", updateStrategy = FieldStrategy.NEVER) + private Long userId; + + /** + * 管理员类型 + */ + @TableField(value = "type") + private AdminTypeEnum type; +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/entity/EmployeeDO.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/entity/EmployeeDO.java new file mode 100644 index 0000000..f4de041 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/entity/EmployeeDO.java @@ -0,0 +1,71 @@ +package com.xunhong.erp.turbo.user.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import com.xunhong.erp.turbo.datasource.handler.AesEncryptTypeHandler; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "employee", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +public class EmployeeDO extends BaseDO { + + /** + * 员工信息id + */ + @TableId(value = "employee_id", type = IdType.ASSIGN_ID) + private Long employeeId; + + /** + * 用户ID + */ + @TableField(value = "user_id", updateStrategy = FieldStrategy.NEVER) + private Long userId; + + /** + * 姓名 + */ + @TableField(value = "name") + private String name; + + /** + * 工号 + */ + @TableField(value = "number") + private String number; + + /** + * 头像 + */ + @TableField(value = "avatar") + private String avatar; + + /** + * 性别 + */ + @TableField(value = "gender") + private Integer gender; + + /** + * 手机号 + */ + @TableField(value = "phone", typeHandler = AesEncryptTypeHandler.class) + private String phone; + + /** + * 备注 + */ + @TableField(value = "remark") + private String remark; + + /** + * 状态 + */ + @TableField(value = "status") + private Boolean status; + +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/entity/UserAuthDO.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/entity/UserAuthDO.java new file mode 100644 index 0000000..a0d0518 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/entity/UserAuthDO.java @@ -0,0 +1,55 @@ +package com.xunhong.erp.turbo.user.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.xunhong.erp.turbo.api.user.dto.enums.SocialTypeEnum; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "user_auth") +public class UserAuthDO extends BaseDO { + + /** + * 用户认证id + */ + @TableId(value = "user_auth_id", type = IdType.ASSIGN_ID) + private Long userAuthId; + + /** + * 用户id + */ + @TableField(value = "user_id", updateStrategy = FieldStrategy.NEVER) + private Long userId; + + /** + * 账户 + */ + @TableField(value = "username") + private String username; + + /** + * 密码 + */ + @TableField(value = "password") + private String password; + + /** + * 认证类型 + */ + @TableField(value = "social_type") + private SocialTypeEnum socialType; + + /** + * 状态 1.启用 2.禁用 + */ + @TableField(value = "state") + private Integer state; + + @TableField(exist = false) + private UserDO userDO; +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/entity/UserDO.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/entity/UserDO.java new file mode 100644 index 0000000..7162b74 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/entity/UserDO.java @@ -0,0 +1,118 @@ +package com.xunhong.erp.turbo.user.infrastructure.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xunhong.erp.turbo.api.user.dto.enums.UserStateEnum; +import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; +import com.xunhong.erp.turbo.datasource.handler.AesEncryptTypeHandler; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@TableName(value = "user", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +public class UserDO extends BaseDO { + + /** + * 用户id + */ + @TableId(value = "user_id", type = IdType.ASSIGN_ID) + private Long userId; + + /** + * 昵称 + */ + @TableField(value = "nickname") + private String nickname; + + /** + * 头像 + */ + @TableField(value = "avatar") + private String avatar; + + /** + * 姓名 + */ + @TableField(value = "name") + private String name; + + /** + * 手机号 + */ + @TableField(value = "phone", typeHandler = AesEncryptTypeHandler.class) + private String phone; + + /** + * 生日 + */ + @TableField(value = "birthday") + private String birthday; + + /** + * 性别 1.男 2.女 + */ + @TableField(value = "gender") + private Integer gender; + + /** + * 状态 1.启用 2.禁用 + */ + @TableField(value = "state") + private UserStateEnum state; + + /** + * 绑定手机号码时间 + */ + @TableField(value = "bind_phone_at") + private LocalDateTime bindPhoneAt; + + /** + * 最后一次登录时间 + */ + @TableField(value = "last_login_at") + private LocalDateTime lastLoginAt; + + /** + * 微信公众号openid + */ + @TableField(value = "mp_openid") + private String mpOpenid; + + /** + * 微信小程序openid + */ + @TableField(value = "ma_openid") + private String maOpenid; + + /** + * 开放平台unionid + */ + @TableField(value = "unionid") + private String unionid; + + /** + * 备注 + */ + @TableField(value = "remark") + private String remark; + + /** + * 是否是管理员 1.是 0.否 + */ + @TableField(value = "is_admin") + private Boolean isAdmin; + + /** + * 是否是小区合伙人 1.是 0.否 + */ + @TableField(value = "is_partner") + private Boolean isPartner; +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/gateway/AdminGatewayImpl.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/gateway/AdminGatewayImpl.java new file mode 100644 index 0000000..23a38fd --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/gateway/AdminGatewayImpl.java @@ -0,0 +1,42 @@ +package com.xunhong.erp.turbo.user.infrastructure.gateway; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.xunhong.erp.turbo.api.user.dto.cmd.AdminCreateCmd; +import com.xunhong.erp.turbo.api.user.dto.qry.AdminShowQry; +import com.xunhong.erp.turbo.user.domain.entity.Admin; +import com.xunhong.erp.turbo.user.domain.gateway.AdminGateway; +import com.xunhong.erp.turbo.user.infrastructure.convert.AdminConvert; +import com.xunhong.erp.turbo.user.infrastructure.entity.AdminDO; +import com.xunhong.erp.turbo.user.infrastructure.mapper.AdminMapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +import java.util.Objects; + +@Slf4j +@Repository +@RequiredArgsConstructor +public class AdminGatewayImpl implements AdminGateway { + private final AdminMapper adminMapper; + private final AdminConvert adminConvert; + + @Override + public Admin show(AdminShowQry adminShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(AdminDO.class); + queryWrapper.eq(Objects.nonNull(adminShowQry.getAdminId()), AdminDO::getAdminId, adminShowQry.getAdminId()); + queryWrapper.eq(Objects.nonNull(adminShowQry.getUserId()), AdminDO::getUserId, adminShowQry.getUserId()); + queryWrapper.eq(Objects.nonNull(adminShowQry.getType()), AdminDO::getType, adminShowQry.getType()); + + AdminDO adminDO = adminMapper.selectOne(queryWrapper); + return adminConvert.toAdmin(adminDO); + } + + @Override + public Admin register(AdminCreateCmd adminCreateCmd) { + AdminDO adminDO = adminConvert.toAdminDO(adminCreateCmd); + adminMapper.insert(adminDO); + return adminConvert.toAdmin(adminDO); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/gateway/EmployeeGatewayImpl.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/gateway/EmployeeGatewayImpl.java new file mode 100644 index 0000000..28e9e22 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/gateway/EmployeeGatewayImpl.java @@ -0,0 +1,112 @@ +package com.xunhong.erp.turbo.user.infrastructure.gateway; + +import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.user.dto.cmd.*; +import com.xunhong.erp.turbo.api.user.dto.qry.EmployeeListQry; +import com.xunhong.erp.turbo.api.user.dto.qry.EmployeePageQry; +import com.xunhong.erp.turbo.api.user.dto.qry.EmployeeShowQry; +import com.xunhong.erp.turbo.user.domain.entity.Employee; +import com.xunhong.erp.turbo.user.domain.gateway.EmployeeGateway; +import com.xunhong.erp.turbo.user.infrastructure.convert.EmployeeConvert; +import com.xunhong.erp.turbo.user.infrastructure.entity.EmployeeDO; +import com.xunhong.erp.turbo.user.infrastructure.mapper.EmployeeMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Objects; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class EmployeeGatewayImpl implements EmployeeGateway { + private final EmployeeMapper employeeMapper; + private final EmployeeConvert employeeConvert; + + @Override + public Employee save(EmployeeCreateCmd employeeCreateCmd) { + EmployeeDO employeeDO = employeeConvert.toEmployeeDO(employeeCreateCmd); + employeeMapper.insert(employeeDO); + + return employeeConvert.toEmployee(employeeDO); + } + + @Override + public IPage page(EmployeePageQry employeePageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EmployeeDO.class); + queryWrapper.eq(Objects.nonNull(employeePageQry.getEmployeeId()), EmployeeDO::getEmployeeId, employeePageQry.getEmployeeId()); + queryWrapper.like(StrUtil.isNotEmpty(employeePageQry.getName()), EmployeeDO::getName, employeePageQry.getName()); + queryWrapper.eq(CharSequenceUtil.isNotBlank(employeePageQry.getNumber()), EmployeeDO::getNumber, employeePageQry.getNumber()); + queryWrapper.eq(CharSequenceUtil.isNotBlank(employeePageQry.getPhone()), EmployeeDO::getPhone, employeePageQry.getPhone()); + queryWrapper.eq(Objects.nonNull(employeePageQry.getStatus()), EmployeeDO::getStatus, employeePageQry.getStatus()); + + IPage page = new Page<>(employeePageQry.getPageIndex(), employeePageQry.getPageSize()); + page = employeeMapper.selectPage(page, queryWrapper); + + return page.convert(employeeConvert::toEmployee); + } + + @Override + public List list(EmployeeListQry employeeListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EmployeeDO.class); + List employeeDOList = employeeMapper.selectList(queryWrapper); + return employeeDOList.stream().map(employeeConvert::toEmployee).toList(); + } + + @Override + public Employee update(EmployeeUpdateCmd employeeUpdateCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EmployeeDO.class); + queryWrapper.eq(EmployeeDO::getEmployeeId, employeeUpdateCmd.getEmployeeId()); + queryWrapper.select(EmployeeDO::getEmployeeId); + EmployeeDO employeeDO = employeeMapper.selectOne(queryWrapper); + + employeeConvert.toEmployeeDO(employeeDO, employeeUpdateCmd); + employeeMapper.updateById(employeeDO); + return employeeConvert.toEmployee(employeeDO); + } + + @Override + public Employee show(EmployeeShowQry employeeShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EmployeeDO.class); + queryWrapper.eq(Objects.nonNull(employeeShowQry.getEmployeeId()), EmployeeDO::getEmployeeId, employeeShowQry.getEmployeeId()); + queryWrapper.eq(Objects.nonNull(employeeShowQry.getUserId()), EmployeeDO::getUserId, employeeShowQry.getUserId()); + EmployeeDO employeeDO = employeeMapper.selectOne(queryWrapper); + + return employeeConvert.toEmployee(employeeDO); + } + + @Override + public void destroy(EmployeeDestroyCmd employeeDestroyCmd) { + employeeMapper.deleteById(employeeDestroyCmd.getEmployeeId()); + } + + @Override + public Employee disable(EmployeeDisableCmd employeeDisableCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EmployeeDO.class); + queryWrapper.eq(EmployeeDO::getEmployeeId, employeeDisableCmd.getEmployeeId()); + EmployeeDO employeeDO = employeeMapper.selectOne(queryWrapper); + + employeeDO.setStatus(Boolean.TRUE); + employeeMapper.updateById(employeeDO); + + return employeeConvert.toEmployee(employeeDO); + } + + @Override + public Employee updateAvatar(EmployeeUpdateAvatarCmd employeeUpdateAvatarCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(EmployeeDO.class); + queryWrapper.eq(EmployeeDO::getEmployeeId, employeeUpdateAvatarCmd.getEmployeeId()); + queryWrapper.select(EmployeeDO::getEmployeeId, EmployeeDO::getAvatar); + EmployeeDO employeeDO = employeeMapper.selectOne(queryWrapper); + employeeDO.setAvatar(employeeUpdateAvatarCmd.getAvatar()); + employeeMapper.updateById(employeeDO); + return employeeConvert.toEmployee(employeeDO); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/gateway/UserAuthGatewayImpl.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/gateway/UserAuthGatewayImpl.java new file mode 100644 index 0000000..c0c6b0d --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/gateway/UserAuthGatewayImpl.java @@ -0,0 +1,122 @@ +package com.xunhong.erp.turbo.user.infrastructure.gateway; + +import cn.hutool.crypto.digest.BCrypt; +import com.alibaba.cola.exception.BizException; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.xunhong.erp.turbo.api.user.dto.cmd.EmployeeRestPasswordCmd; +import com.xunhong.erp.turbo.api.user.dto.cmd.OpenSafeCmd; +import com.xunhong.erp.turbo.api.user.dto.cmd.UpdatePasswordCmd; +import com.xunhong.erp.turbo.api.user.dto.cmd.UserAuthCreateCmd; +import com.xunhong.erp.turbo.api.user.dto.enums.SocialTypeEnum; +import com.xunhong.erp.turbo.api.user.dto.enums.UserStateEnum; +import com.xunhong.erp.turbo.api.user.dto.qry.UserAuthShowQry; +import com.xunhong.erp.turbo.user.domain.entity.UserAuth; +import com.xunhong.erp.turbo.user.domain.gateway.UserAuthGateway; +import com.xunhong.erp.turbo.user.infrastructure.convert.UserAuthConvert; +import com.xunhong.erp.turbo.user.infrastructure.entity.UserAuthDO; +import com.xunhong.erp.turbo.user.infrastructure.entity.UserDO; +import com.xunhong.erp.turbo.user.infrastructure.mapper.UserAuthMapper; +import com.xunhong.erp.turbo.user.infrastructure.mapper.UserMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class UserAuthGatewayImpl implements UserAuthGateway { + private final UserMapper userMapper; + private final UserAuthMapper userAuthMapper; + private final UserAuthConvert userAuthConvert; + + @Override + public UserAuth getByAccount(String username, SocialTypeEnum socialTypeEnum) { + List byAccountList = getByAccountList(username, socialTypeEnum); + if (byAccountList.isEmpty()) { + return null; + } + + if ((long) byAccountList.size() > 1) { + throw new BizException("400", "当前账号异常"); + } + + return byAccountList.get(0); + } + + public List getByAccountList(String username, SocialTypeEnum socialTypeEnum) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(UserAuthDO.class); + queryWrapper.eq(UserAuthDO::getUsername, username); + queryWrapper.eq(UserAuthDO::getSocialType, socialTypeEnum); + List userAuthDOList = userAuthMapper.selectList(queryWrapper); + + return userAuthDOList.stream().map(userAuthConvert::toUserAuth).toList(); + } + + @Override + public UserAuth save(UserAuth userAuth) { + return userAuth; + } + + @Override + @Transactional + public UserAuth register(UserAuthCreateCmd userAuthCreateCmd) { + UserDO userDO = new UserDO(); + userDO.setIsAdmin(false); + userDO.setState(UserStateEnum.ENABLE); + userMapper.insert(userDO); + + UserAuthDO userAuthDO = userAuthConvert.toUserAuthDO(userAuthCreateCmd); + userAuthDO.setUserId(userDO.getUserId()); + userAuthDO.setState(1); + userAuthMapper.insert(userAuthDO); + + userAuthDO.setUserDO(userDO); + return userAuthConvert.toUserAuth(userAuthDO); + } + + @Override + public UserAuth show(UserAuthShowQry userAuthShowQry) { + QueryWrapper queryWrapper = Wrappers.query(UserAuthDO.class); + queryWrapper.eq("a.user_id", userAuthShowQry.getUserId()); + UserAuthDO userAuthDO = userAuthMapper.selectOne(queryWrapper); + + return userAuthConvert.toUserAuth(userAuthDO); + } + + @Override + public void restPassword(EmployeeRestPasswordCmd employeeRestPasswordCmd) { + QueryWrapper queryWrapper = Wrappers.query(UserAuthDO.class); + queryWrapper.eq("a.user_id", employeeRestPasswordCmd.getUserId()); + UserAuthDO userAuthDO = userAuthMapper.selectOne(queryWrapper); + + userAuthDO.setPassword(BCrypt.hashpw(employeeRestPasswordCmd.getPassword())); + userAuthMapper.updateById(userAuthDO); + } + + @Override + public void restPassword(UpdatePasswordCmd updatePasswordCmd) { + QueryWrapper queryWrapper = Wrappers.query(UserAuthDO.class); + queryWrapper.eq("a.user_id", updatePasswordCmd.getUserId()); + UserAuthDO userAuthDO = userAuthMapper.selectOne(queryWrapper); + + userAuthDO.setPassword(BCrypt.hashpw(updatePasswordCmd.getPassword())); + userAuthMapper.updateById(userAuthDO); + } + + @Override + public void openSafe(OpenSafeCmd openSafeCmd) { + QueryWrapper queryWrapper = Wrappers.query(UserAuthDO.class); + queryWrapper.eq("a.user_id", openSafeCmd.getUserId()); + UserAuthDO userAuthDO = userAuthMapper.selectOne(queryWrapper); + + if (!BCrypt.checkpw(openSafeCmd.getPassword(), userAuthDO.getPassword())) { + throw new BizException("400", "密码错误"); + } + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/gateway/UserGatewayImpl.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/gateway/UserGatewayImpl.java new file mode 100644 index 0000000..ba73427 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/gateway/UserGatewayImpl.java @@ -0,0 +1,231 @@ +package com.xunhong.erp.turbo.user.infrastructure.gateway; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.cola.exception.BizException; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xunhong.erp.turbo.api.facade.dto.qry.WxMaOpenidQry; +import com.xunhong.erp.turbo.api.user.dto.cmd.*; +import com.xunhong.erp.turbo.api.user.dto.enums.UserStateEnum; +import com.xunhong.erp.turbo.api.user.dto.qry.UserListQry; +import com.xunhong.erp.turbo.api.user.dto.qry.UserPageQry; +import com.xunhong.erp.turbo.api.user.dto.qry.UserShowQry; +import com.xunhong.erp.turbo.datasource.util.AesUtil; +import com.xunhong.erp.turbo.user.domain.entity.User; +import com.xunhong.erp.turbo.user.domain.gateway.UserGateway; +import com.xunhong.erp.turbo.user.infrastructure.convert.UserConvert; +import com.xunhong.erp.turbo.user.infrastructure.entity.UserDO; +import com.xunhong.erp.turbo.user.infrastructure.mapper.UserMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; + +/** + * @author shenyifei + */ +@Repository +@RequiredArgsConstructor +public class UserGatewayImpl implements UserGateway { + private final UserMapper userMapper; + + private final UserConvert userConvert; + + private final IdentifierGenerator identifierGenerator; + + @Override + public User create(UserCreateCmd userCreateCmd) { + Long userId = identifierGenerator.nextId(UserDO.class).longValue(); + + // 创建用户 + UserDO userDO = new UserDO(); + + String phone = userCreateCmd.getPhone(); + + userDO.setPhone(phone); + + userDO.setUserId(userId); + userDO.setIsAdmin(Boolean.FALSE); + userDO.setState(UserStateEnum.ENABLE); + userDO.setRemark(userCreateCmd.getRemark()); + userDO.setBirthday(userCreateCmd.getBirthday()); + userDO.setGender(userCreateCmd.getGender()); + userMapper.insert(userDO); + + return userConvert.toUser(userDO); + } + + @Override + public User show(UserShowQry userShowQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(UserDO.class); + queryWrapper.eq(UserDO::getUserId, userShowQry.getUserId()); + + UserDO userDO = userMapper.selectOne(queryWrapper); + + return userConvert.toUser(userDO); + } + + @Override + public void destroy(UserDestroyCmd userDestroyCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(UserDO.class); + queryWrapper.eq(UserDO::getUserId, userDestroyCmd.getUserId()); + + UserDO userDO = userMapper.selectOne(queryWrapper); + + // userDO 不存在 + if (Objects.isNull(userDO)) { + throw new BizException("400", "用户不存在"); + } + + userDO.deleteById(); + } + + @Override + public User getByUserId(Long userId) { + UserDO userDO = userMapper.selectById(userId); + + return userConvert.toUser(userDO); + } + + @Override + @Transactional + public User updateUser(UserUpdateCmd userUpdateCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(UserDO.class); + queryWrapper.eq(UserDO::getUserId, userUpdateCmd.getUserId()); + queryWrapper.select(UserDO::getUserId); + + UserDO userDO = userMapper.selectOne(queryWrapper); + userConvert.toUser(userDO, userUpdateCmd); + + // 生日只能设置一次 + if (Objects.nonNull(userUpdateCmd.getBirthday()) && Objects.isNull(userDO.getBirthday())) { + userDO.setBirthday(userUpdateCmd.getBirthday()); + } + + // 手机号码只在不存在的时候更新 + if (Objects.nonNull(userUpdateCmd.getPhone()) && Objects.isNull(userDO.getPhone())) { + userDO.setPhone(userUpdateCmd.getPhone()); + userDO.setBindPhoneAt(LocalDateTime.now()); + } + + userDO.updateById(); + + return userConvert.toUser(userDO); + } + + @Override + public IPage page(UserPageQry userPageQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(UserDO.class); + queryWrapper.eq(Objects.nonNull(userPageQry.getIsAdmin()), UserDO::getIsAdmin, userPageQry.getIsAdmin()); + if (!StrUtil.isBlankIfStr(userPageQry.getKeyword())) { + queryWrapper.and(userDOLambdaQueryWrapper -> userDOLambdaQueryWrapper.like(UserDO::getNickname, userPageQry.getKeyword()) + .or().apply("u.name LIKE {0}", "%".concat(userPageQry.getKeyword()).concat("%"))); + } + if (!StrUtil.isBlankIfStr(userPageQry.getName())) { + queryWrapper.apply("u.name LIKE {0}", "%".concat(userPageQry.getName()).concat("%")); + } + queryWrapper.like(!StrUtil.isBlankIfStr(userPageQry.getNickname()), UserDO::getNickname, userPageQry.getNickname()); + queryWrapper.eq(!StrUtil.isBlankIfStr(userPageQry.getPhone()), UserDO::getPhone, AesUtil.encrypt(userPageQry.getPhone())); + queryWrapper.in(Objects.nonNull(userPageQry.getState()), UserDO::getState, userPageQry.getState()); + queryWrapper.eq(Objects.nonNull(userPageQry.getGender()), UserDO::getGender, userPageQry.getGender()); + queryWrapper.like(!StrUtil.isBlankIfStr(userPageQry.getRemark()), UserDO::getRemark, userPageQry.getRemark()); + if (CollUtil.isNotEmpty(userPageQry.getCreatedAt())) { + queryWrapper.apply("u.created_at between {0} and {1}", userPageQry.getCreatedAt().get(0), userPageQry.getCreatedAt().get(1)); + } + if (Objects.nonNull(userPageQry.getBindPhoneAt())) { + queryWrapper.between(UserDO::getBindPhoneAt, userPageQry.getBindPhoneAt().get(0), userPageQry.getBindPhoneAt().get(1)); + } + + if (Objects.nonNull(userPageQry.getCommunityId())) { + queryWrapper.apply("u.user_id in (select user_id from user_community where community_id = {0})", userPageQry.getCommunityId()); + } + + IPage page = new Page<>(userPageQry.getPageIndex(), userPageQry.getPageSize()); + page = userMapper.selectPage(page, queryWrapper, userPageQry); + + return page.convert(userConvert::toUser); + } + + @Override + public void disable(UserDisableCmd userDisableCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(UserDO.class); + queryWrapper.eq(UserDO::getUserId, userDisableCmd.getUserId()); + + UserDO userDO = userMapper.selectOne(queryWrapper); + + LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(UserDO.class); + updateWrapper.eq(UserDO::getUserId, userDO.getUserId()); + updateWrapper.set(UserDO::getState, UserStateEnum.DISABLE); + + userMapper.update(updateWrapper); + } + + @Override + public List list(UserListQry userListQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(UserDO.class); + queryWrapper.in(!CollectionUtil.isEmpty(userListQry.getUserIdList()), UserDO::getUserId, userListQry.getUserIdList()); + queryWrapper.eq(!StrUtil.isBlankIfStr(userListQry.getName()), UserDO::getName, userListQry.getName()); + queryWrapper.select(UserDO::getUserId, UserDO::getName, UserDO::getNickname, UserDO::getAvatar, UserDO::getPhone); + + List userDOList = userMapper.selectList(queryWrapper); + return userDOList.stream().map(userConvert::toUser).toList(); + } + + @Override + public void enable(UserEnableCmd userEnableCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(UserDO.class); + queryWrapper.eq(UserDO::getUserId, userEnableCmd.getUserId()); + + UserDO userDO = userMapper.selectOne(queryWrapper); + + LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(UserDO.class); + updateWrapper.eq(UserDO::getUserId, userDO.getUserId()); + updateWrapper.set(UserDO::getState, UserStateEnum.ENABLE); + + userMapper.update(updateWrapper); + } + + @Override + public void updateWx(UserUpdateWxCmd userUpdateWxCmd) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(UserDO.class); + queryWrapper.eq(UserDO::getUserId, userUpdateWxCmd.getUserId()); + queryWrapper.select(UserDO::getUserId); + UserDO userDO = userMapper.selectOne(queryWrapper); + userConvert.toUser(userDO, userUpdateWxCmd); + userDO.updateById(); + } + + @Override + public void unsubscribe(WxMaOpenidQry wxMaOpenidQry) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(UserDO.class); + queryWrapper.eq(UserDO::getMpOpenid, wxMaOpenidQry.getMpOpenid()); + queryWrapper.select(UserDO::getUserId); + UserDO userDO = userMapper.selectOne(queryWrapper); + + if (Objects.isNull(userDO)) { + return; + } + + LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(UserDO.class); + updateWrapper.eq(UserDO::getUserId, userDO.getUserId()); + updateWrapper.set(UserDO::getMpOpenid, null); + userMapper.update(updateWrapper); + } + + @Override + public void updateLastLoginAt(Long userId, LocalDateTime lastLoginAt) { + LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(UserDO.class); + updateWrapper.eq(UserDO::getUserId, userId); + updateWrapper.set(UserDO::getLastLoginAt, lastLoginAt); + userMapper.update(updateWrapper); + } +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/mapper/AdminMapper.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/mapper/AdminMapper.java new file mode 100644 index 0000000..0ce5a6f --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/mapper/AdminMapper.java @@ -0,0 +1,9 @@ +package com.xunhong.erp.turbo.user.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.user.infrastructure.entity.AdminDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface AdminMapper extends BaseMapper { +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/mapper/EmployeeMapper.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/mapper/EmployeeMapper.java new file mode 100644 index 0000000..4317f62 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/mapper/EmployeeMapper.java @@ -0,0 +1,12 @@ +package com.xunhong.erp.turbo.user.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.user.infrastructure.entity.EmployeeDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface EmployeeMapper extends BaseMapper { +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/mapper/UserAuthMapper.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/mapper/UserAuthMapper.java new file mode 100644 index 0000000..dc5e33f --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/mapper/UserAuthMapper.java @@ -0,0 +1,12 @@ +package com.xunhong.erp.turbo.user.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xunhong.erp.turbo.user.infrastructure.entity.UserAuthDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author shenyifei + */ +@Mapper +public interface UserAuthMapper extends BaseMapper { +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/mapper/UserMapper.java b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/mapper/UserMapper.java new file mode 100644 index 0000000..f7f34fd --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/java/com/xunhong/erp/turbo/user/infrastructure/mapper/UserMapper.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.user.infrastructure.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.xunhong.erp.turbo.api.user.dto.qry.UserPageQry; +import com.xunhong.erp.turbo.user.infrastructure.entity.UserDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * @author shenyifei + */ +@Mapper +public interface UserMapper extends BaseMapper { + IPage selectPage(IPage page, @Param(Constants.WRAPPER) LambdaQueryWrapper queryWrapper, @Param("query") UserPageQry userPageQry); +} diff --git a/erp-turbo-business/erp-turbo-user/src/main/resources/application.yml b/erp-turbo-business/erp-turbo-user/src/main/resources/application.yml new file mode 100644 index 0000000..b65df29 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/resources/application.yml @@ -0,0 +1,10 @@ +spring: + profiles: + active: dev + application: + name: @application.name@ + config: + import: classpath:cache.yml,classpath:datasource.yml,classpath:rpc.yml,classpath:sa-token.yml + +server: + port: 8081 diff --git a/erp-turbo-business/erp-turbo-user/src/main/resources/bootstrap.yml b/erp-turbo-business/erp-turbo-user/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..914c581 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/resources/bootstrap.yml @@ -0,0 +1,7 @@ +spring: + profiles: + active: dev + application: + name: @application.name@ + config: + import: classpath:base.yml,classpath:logging.yml,classpath:config.yml diff --git a/erp-turbo-business/erp-turbo-user/src/main/resources/i18n/messages.properties b/erp-turbo-business/erp-turbo-user/src/main/resources/i18n/messages.properties new file mode 100644 index 0000000..ea28719 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/resources/i18n/messages.properties @@ -0,0 +1,22 @@ +msg.200=Success +msg.500=Internal Server Error. +msg.1001=No data +msg.1002=Data saving failed +msg.100000=platform and client do not match. +msg.100001=the current account has been registered in the platform client, please do not register again. +msg.100002= +msg.50001=Obtaining the verification code succeeded +msg.50002=The verification code has expired +msg.50003=The account corresponding to the verification code does not match +msg.50004=Verification code error +validation.account=account number +validation.wechatCode=wechat code +validation.smsCode=message authentication code +validation.mobile=mobile +validation.platform=platform +validation.password=password +validation.min=length must be greater than {min} bits +validation.max=length must be less than {max} bits +validation.size=length must be between {min} ~ {max} bits +validation.regexp=format error +validation.notBlank=must not be empty \ No newline at end of file diff --git a/erp-turbo-business/erp-turbo-user/src/main/resources/i18n/messages_en.properties b/erp-turbo-business/erp-turbo-user/src/main/resources/i18n/messages_en.properties new file mode 100644 index 0000000..ea28719 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/resources/i18n/messages_en.properties @@ -0,0 +1,22 @@ +msg.200=Success +msg.500=Internal Server Error. +msg.1001=No data +msg.1002=Data saving failed +msg.100000=platform and client do not match. +msg.100001=the current account has been registered in the platform client, please do not register again. +msg.100002= +msg.50001=Obtaining the verification code succeeded +msg.50002=The verification code has expired +msg.50003=The account corresponding to the verification code does not match +msg.50004=Verification code error +validation.account=account number +validation.wechatCode=wechat code +validation.smsCode=message authentication code +validation.mobile=mobile +validation.platform=platform +validation.password=password +validation.min=length must be greater than {min} bits +validation.max=length must be less than {max} bits +validation.size=length must be between {min} ~ {max} bits +validation.regexp=format error +validation.notBlank=must not be empty \ No newline at end of file diff --git a/erp-turbo-business/erp-turbo-user/src/main/resources/i18n/messages_zh_CN.properties b/erp-turbo-business/erp-turbo-user/src/main/resources/i18n/messages_zh_CN.properties new file mode 100644 index 0000000..dcd1ed2 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/resources/i18n/messages_zh_CN.properties @@ -0,0 +1,21 @@ +msg.200=\u64CD\u4F5C\u6210\u529F +msg.500=\u7CFB\u7EDF\u5F02\u5E38 +msg.1001=\u6570\u636E\u4E3A\u7A7A +msg.1002=\u6570\u636E\u4FDD\u5B58\u5931\u8D25 +msg.100000=\u5e73\u53f0\u548c\u5ba2\u6237\u7aef\u4e0d\u5339\u914d。 +msg.100001=\u5f53\u524d\u8d26\u53f7\u5df2\u7ecf\u5728\u5e73\u53f0\u5ba2\u6237\u7aef\u6ce8\u518c,\u8bf7\u52ff\u91cd\u590d\u6ce8\u518c。 +msg.50001={0}\u83b7\u53d6\u6210\u529f +msg.50002={0}\u5df2\u8fc7\u671f +msg.50003={0}\u5bf9\u5e94\u7684\u8d26\u53f7\u4e0d\u5339\u914d +msg.50004={0}\u9519\u8bef +validation.account=\u8d26\u53f7 +validation.wechatCode=\u5fae\u4fe1 code +validation.smsCode=\u77ed\u4fe1\u9a8c\u8bc1\u7801 +validation.mobile=\u624b\u673a\u53f7\u7801 +validation.platform=\u5e73\u53f0 +validation.password=\u5bc6\u7801 +validation.min=\u957f\u5ea6\u5fc5\u987b\u5927\u4e8e {min} \u4f4d +validation.max=\u957f\u5ea6\u5fc5\u987b\u5c0f\u4e8e {max} \u4f4d +validation.size=\u957f\u5ea6\u5fc5\u987b\u4ecb\u4e8e {min} ~ {max} \u4f4d +validation.regexp=\u683c\u5f0f\u9519\u8bef +validation.notBlank=\u5fc5\u987b\u4e0d\u80fd\u4e3a\u7a7a \ No newline at end of file diff --git a/erp-turbo-business/erp-turbo-user/src/main/resources/mapper/AdminMapper.xml b/erp-turbo-business/erp-turbo-user/src/main/resources/mapper/AdminMapper.xml new file mode 100644 index 0000000..9794159 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/resources/mapper/AdminMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-user/src/main/resources/mapper/EmployeeMapper.xml b/erp-turbo-business/erp-turbo-user/src/main/resources/mapper/EmployeeMapper.xml new file mode 100644 index 0000000..4afd6ad --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/resources/mapper/EmployeeMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-user/src/main/resources/mapper/UserAuthMapper.xml b/erp-turbo-business/erp-turbo-user/src/main/resources/mapper/UserAuthMapper.xml new file mode 100644 index 0000000..7d3bf59 --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/resources/mapper/UserAuthMapper.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/erp-turbo-user/src/main/resources/mapper/UserMapper.xml b/erp-turbo-business/erp-turbo-user/src/main/resources/mapper/UserMapper.xml new file mode 100644 index 0000000..a10455b --- /dev/null +++ b/erp-turbo-business/erp-turbo-user/src/main/resources/mapper/UserMapper.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/erp-turbo-business/pom.xml b/erp-turbo-business/pom.xml new file mode 100644 index 0000000..e31e7ad --- /dev/null +++ b/erp-turbo-business/pom.xml @@ -0,0 +1,45 @@ + + + 4.0.0 + + + com.xunhong + ERPTurbo + 1.0.0-SNAPSHOT + + + com.xunhong + pom + erp-turbo-business + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + + erp-turbo-user + erp-turbo-infra + erp-turbo-facade + erp-turbo-rbac + erp-turbo-biz + + + + + + org.springframework.boot + spring-boot-maven-plugin + + true + + + + + + diff --git a/erp-turbo-common/erp-turbo-ai/pom.xml b/erp-turbo-common/erp-turbo-ai/pom.xml new file mode 100644 index 0000000..562675d --- /dev/null +++ b/erp-turbo-common/erp-turbo-ai/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-ai + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + + com.xunhong + erp-turbo-base + + + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + org.springframework.ai + spring-ai-deepseek + + + + + diff --git a/erp-turbo-common/erp-turbo-ai/src/main/java/com/xunhong/erp/turbo/ai/config/DeepSeekAutoConfiguration.java b/erp-turbo-common/erp-turbo-ai/src/main/java/com/xunhong/erp/turbo/ai/config/DeepSeekAutoConfiguration.java new file mode 100644 index 0000000..49bfaaa --- /dev/null +++ b/erp-turbo-common/erp-turbo-ai/src/main/java/com/xunhong/erp/turbo/ai/config/DeepSeekAutoConfiguration.java @@ -0,0 +1,28 @@ +package com.xunhong.erp.turbo.ai.config; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.ai.deepseek.DeepSeekChatModel; +import org.springframework.ai.deepseek.api.DeepSeekApi; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Slf4j +@Configuration +@EnableConfigurationProperties(DeepSeekProperties.class) +@RequiredArgsConstructor +public class DeepSeekAutoConfiguration { + + private final DeepSeekProperties properties; + + @Bean + @ConditionalOnMissingBean + public DeepSeekChatModel deepSeekChatModel() { + System.out.println(">>>>>>>>>>> deepseek config init."); + DeepSeekApi deepSeekApi = DeepSeekApi.builder().apiKey(properties.getApiKey()).build(); + return DeepSeekChatModel.builder().deepSeekApi(deepSeekApi).build(); + } + +} diff --git a/erp-turbo-common/erp-turbo-ai/src/main/java/com/xunhong/erp/turbo/ai/config/DeepSeekProperties.java b/erp-turbo-common/erp-turbo-ai/src/main/java/com/xunhong/erp/turbo/ai/config/DeepSeekProperties.java new file mode 100644 index 0000000..3ef02cb --- /dev/null +++ b/erp-turbo-common/erp-turbo-ai/src/main/java/com/xunhong/erp/turbo/ai/config/DeepSeekProperties.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.ai.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * @author shenyifei + */ +@Setter +@Getter +@ConfigurationProperties(prefix = DeepSeekProperties.PREFIX) +public class DeepSeekProperties { + + public static final String PREFIX = "spring.ai.deepseek"; + + private String apiKey; +} diff --git a/erp-turbo-common/erp-turbo-ai/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/erp-turbo-common/erp-turbo-ai/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..7113b81 --- /dev/null +++ b/erp-turbo-common/erp-turbo-ai/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.xunhong.erp.turbo.ai.config.DeepSeekAutoConfiguration diff --git a/erp-turbo-common/erp-turbo-ai/src/main/resources/openapi.yml b/erp-turbo-common/erp-turbo-ai/src/main/resources/openapi.yml new file mode 100644 index 0000000..e8edf30 --- /dev/null +++ b/erp-turbo-common/erp-turbo-ai/src/main/resources/openapi.yml @@ -0,0 +1,4 @@ +spring: + ai: + deepseek: + api-key: sk-7f55bc2366b64c638e50eeebc2fd4907 diff --git a/erp-turbo-common/erp-turbo-api/pom.xml b/erp-turbo-common/erp-turbo-api/pom.xml new file mode 100644 index 0000000..29ce330 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-api + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + + com.alibaba.cola + cola-component-dto + + + + com.xunhong + erp-turbo-swagger + + + + cn.monitor4all + log-record-springboot3-starter + + + + + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/BoxBrandServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/BoxBrandServiceI.java new file mode 100644 index 0000000..2a4215c --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/BoxBrandServiceI.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.api.biz.api; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxBrandUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxBrandListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxBrandPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxBrandShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.BoxBrandVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface BoxBrandServiceI { + BoxBrandVO create(BoxBrandCreateCmd boxBrandCreateCmd); + + PageDTO page(BoxBrandPageQry boxBrandPageQry); + + List list(BoxBrandListQry boxBrandListQry); + + BoxBrandVO update(BoxBrandUpdateCmd boxBrandUpdateCmd); + + BoxBrandVO show(BoxBrandShowQry boxBrandShowQry); + + void destroy(BoxBrandDestroyCmd boxBrandDestroyCmd); +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/BoxProductServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/BoxProductServiceI.java new file mode 100644 index 0000000..6d46f12 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/BoxProductServiceI.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.api.biz.api; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.BoxProductUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxProductListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxProductPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.BoxProductShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.BoxProductVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface BoxProductServiceI { + BoxProductVO create(BoxProductCreateCmd boxProductCreateCmd); + + PageDTO page(BoxProductPageQry boxProductPageQry); + + List list(BoxProductListQry boxProductListQry); + + BoxProductVO update(BoxProductUpdateCmd boxProductUpdateCmd); + + BoxProductVO show(BoxProductShowQry boxProductShowQry); + + void destroy(BoxProductDestroyCmd boxProductDestroyCmd); +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/CompanyPaymentAccountServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/CompanyPaymentAccountServiceI.java new file mode 100644 index 0000000..92a3778 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/CompanyPaymentAccountServiceI.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.api.biz.api; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyPaymentAccountUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPaymentAccountListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPaymentAccountPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPaymentAccountShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.CompanyPaymentAccountVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface CompanyPaymentAccountServiceI { + CompanyPaymentAccountVO create(CompanyPaymentAccountCreateCmd companyPaymentAccountCreateCmd); + + PageDTO page(CompanyPaymentAccountPageQry companyPaymentAccountPageQry); + + List list(CompanyPaymentAccountListQry companyPaymentAccountListQry); + + CompanyPaymentAccountVO update(CompanyPaymentAccountUpdateCmd companyPaymentAccountUpdateCmd); + + CompanyPaymentAccountVO show(CompanyPaymentAccountShowQry companyPaymentAccountShowQry); + + void destroy(CompanyPaymentAccountDestroyCmd companyPaymentAccountDestroyCmd); +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/CompanyServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/CompanyServiceI.java new file mode 100644 index 0000000..d890b5b --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/CompanyServiceI.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.api.biz.api; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CompanyUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CompanyShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.CompanyVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface CompanyServiceI { + CompanyVO create(CompanyCreateCmd companyCreateCmd); + + PageDTO page(CompanyPageQry companyPageQry); + + List list(CompanyListQry companyListQry); + + CompanyVO update(CompanyUpdateCmd companyUpdateCmd); + + CompanyVO show(CompanyShowQry companyShowQry); + + void destroy(CompanyDestroyCmd companyDestroyCmd); +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/CostItemServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/CostItemServiceI.java new file mode 100644 index 0000000..53ae82d --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/CostItemServiceI.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.api.biz.api; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.CostItemUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.CostItemListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CostItemPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.CostItemShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.CostItemVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface CostItemServiceI { + CostItemVO create(CostItemCreateCmd costItemCreateCmd); + + PageDTO page(CostItemPageQry costItemPageQry); + + List list(CostItemListQry costItemListQry); + + CostItemVO update(CostItemUpdateCmd costItemUpdateCmd); + + CostItemVO show(CostItemShowQry costItemShowQry); + + void destroy(CostItemDestroyCmd costItemDestroyCmd); +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/DealerPaymentAccountServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/DealerPaymentAccountServiceI.java new file mode 100644 index 0000000..f588108 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/DealerPaymentAccountServiceI.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.api.biz.api; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerPaymentAccountUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPaymentAccountListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPaymentAccountPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPaymentAccountShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerPaymentAccountVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface DealerPaymentAccountServiceI { + DealerPaymentAccountVO create(DealerPaymentAccountCreateCmd dealerPaymentAccountCreateCmd); + + PageDTO page(DealerPaymentAccountPageQry dealerPaymentAccountPageQry); + + List list(DealerPaymentAccountListQry dealerPaymentAccountListQry); + + DealerPaymentAccountVO update(DealerPaymentAccountUpdateCmd dealerPaymentAccountUpdateCmd); + + DealerPaymentAccountVO show(DealerPaymentAccountShowQry dealerPaymentAccountShowQry); + + void destroy(DealerPaymentAccountDestroyCmd dealerPaymentAccountDestroyCmd); +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/DealerRebateCustomerServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/DealerRebateCustomerServiceI.java new file mode 100644 index 0000000..e063719 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/DealerRebateCustomerServiceI.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.api.biz.api; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerRebateCustomerUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerRebateCustomerListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerRebateCustomerPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerRebateCustomerShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerRebateCustomerVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface DealerRebateCustomerServiceI { + DealerRebateCustomerVO create(DealerRebateCustomerCreateCmd dealerRebateCustomerCreateCmd); + + PageDTO page(DealerRebateCustomerPageQry dealerRebateCustomerPageQry); + + List list(DealerRebateCustomerListQry dealerRebateCustomerListQry); + + DealerRebateCustomerVO update(DealerRebateCustomerUpdateCmd dealerRebateCustomerUpdateCmd); + + DealerRebateCustomerVO show(DealerRebateCustomerShowQry dealerRebateCustomerShowQry); + + void destroy(DealerRebateCustomerDestroyCmd dealerRebateCustomerDestroyCmd); +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/DealerServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/DealerServiceI.java new file mode 100644 index 0000000..1c32bfa --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/DealerServiceI.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.api.biz.api; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface DealerServiceI { + DealerVO create(DealerCreateCmd dealerCreateCmd); + + PageDTO page(DealerPageQry dealerPageQry); + + List list(DealerListQry dealerListQry); + + DealerVO update(DealerUpdateCmd dealerUpdateCmd); + + DealerVO show(DealerShowQry dealerShowQry); + + void destroy(DealerDestroyCmd dealerDestroyCmd); +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/DealerWarehouseServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/DealerWarehouseServiceI.java new file mode 100644 index 0000000..1390844 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/DealerWarehouseServiceI.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.api.biz.api; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.DealerWarehouseUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerWarehouseListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerWarehousePageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.DealerWarehouseShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.DealerWarehouseVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface DealerWarehouseServiceI { + DealerWarehouseVO create(DealerWarehouseCreateCmd dealerWarehouseCreateCmd); + + PageDTO page(DealerWarehousePageQry dealerWarehousePageQry); + + List list(DealerWarehouseListQry dealerWarehouseListQry); + + DealerWarehouseVO update(DealerWarehouseUpdateCmd dealerWarehouseUpdateCmd); + + DealerWarehouseVO show(DealerWarehouseShowQry dealerWarehouseShowQry); + + void destroy(DealerWarehouseDestroyCmd dealerWarehouseDestroyCmd); +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/GiftBoxServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/GiftBoxServiceI.java new file mode 100644 index 0000000..e2bbc4f --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/GiftBoxServiceI.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.api.biz.api; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.GiftBoxUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.GiftBoxListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.GiftBoxPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.GiftBoxShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.GiftBoxVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface GiftBoxServiceI { + GiftBoxVO create(GiftBoxCreateCmd giftBoxCreateCmd); + + PageDTO page(GiftBoxPageQry giftBoxPageQry); + + List list(GiftBoxListQry giftBoxListQry); + + GiftBoxVO update(GiftBoxUpdateCmd giftBoxUpdateCmd); + + GiftBoxVO show(GiftBoxShowQry giftBoxShowQry); + + void destroy(GiftBoxDestroyCmd giftBoxDestroyCmd); +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/PurchaseOrderServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/PurchaseOrderServiceI.java new file mode 100644 index 0000000..59b1350 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/PurchaseOrderServiceI.java @@ -0,0 +1,43 @@ +package com.xunhong.erp.turbo.api.biz.api; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.*; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderCountQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.PurchaseOrderVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface PurchaseOrderServiceI { + PurchaseOrderVO create(PurchaseOrderCreateCmd purchaseOrderCreateCmd); + + PageDTO page(PurchaseOrderPageQry purchaseOrderPageQry); + + List list(PurchaseOrderListQry purchaseOrderListQry); + + PurchaseOrderVO update(PurchaseOrderUpdateCmd purchaseOrderUpdateCmd); + + PurchaseOrderVO show(PurchaseOrderShowQry purchaseOrderShowQry); + + void destroy(PurchaseOrderDestroyCmd purchaseOrderDestroyCmd); + + void approve(PurchaseOrderApproveCmd purchaseOrderApproveCmd); + + void submitReview(PurchaseOrderSubmitReviewCmd purchaseOrderSubmitReviewCmd); + + void withdrawReview(PurchaseOrderWithdrawReviewCmd purchaseOrderWithdrawReviewCmd); + + void rejectApprove(PurchaseOrderRejectApproveCmd purchaseOrderRejectApproveCmd); + + void finalApprove(PurchaseOrderFinalApproveCmd purchaseOrderFinalApproveCmd); + + void rejectFinal(PurchaseOrderRejectFinalCmd purchaseOrderRejectFinalCmd); + + Long countPurchaseOrderByState(PurchaseOrderCountQry purchaseOrderCountQry); +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/ShipOrderServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/ShipOrderServiceI.java new file mode 100644 index 0000000..022db37 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/ShipOrderServiceI.java @@ -0,0 +1,33 @@ +package com.xunhong.erp.turbo.api.biz.api; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderGenerateDocumentCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.ShipOrderUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.ShipOrderListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.ShipOrderPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.ShipOrderShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.ShipOrderVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface ShipOrderServiceI { + ShipOrderVO create(ShipOrderCreateCmd shipOrderCreateCmd); + + PageDTO page(ShipOrderPageQry shipOrderPageQry); + + List list(ShipOrderListQry shipOrderListQry); + + ShipOrderVO update(ShipOrderUpdateCmd shipOrderUpdateCmd); + + ShipOrderVO show(ShipOrderShowQry shipOrderShowQry); + + void destroy(ShipOrderDestroyCmd shipOrderDestroyCmd); + + void generateDocument(ShipOrderGenerateDocumentCmd shipOrderGenerateDocumentCmd); +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/SupplierServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/SupplierServiceI.java new file mode 100644 index 0000000..759f489 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/api/SupplierServiceI.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.api.biz.api; + +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierCreateCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierDestroyCmd; +import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierUpdateCmd; +import com.xunhong.erp.turbo.api.biz.dto.qry.SupplierListQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.SupplierPageQry; +import com.xunhong.erp.turbo.api.biz.dto.qry.SupplierShowQry; +import com.xunhong.erp.turbo.api.biz.dto.vo.SupplierVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface SupplierServiceI { + SupplierVO create(SupplierCreateCmd supplierCreateCmd); + + PageDTO page(SupplierPageQry supplierPageQry); + + List list(SupplierListQry supplierListQry); + + SupplierVO update(SupplierUpdateCmd supplierUpdateCmd); + + SupplierVO show(SupplierShowQry supplierShowQry); + + void destroy(SupplierDestroyCmd supplierDestroyCmd); +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxBrandCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxBrandCreateCmd.java new file mode 100644 index 0000000..708593e --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxBrandCreateCmd.java @@ -0,0 +1,53 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.enums.BoxBrandTypeEnum; +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "纸箱品牌创建") +@EqualsAndHashCode(callSuper = true) +public class BoxBrandCreateCmd extends Command { + + /** + * 品牌ID + */ + @Schema(title = "品牌ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long brandId; + + /** + * 品牌名称 + */ + @Schema(title = "品牌名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 品牌图片URL + */ + @Schema(title = "品牌图片URL") + private String image; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态:1_启用;0_禁用 + */ + @Schema(title = "状态:1_启用;0_禁用", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + + /** + * 品牌类型:1_我方纸箱;2_瓜农纸箱;3_第三方纸箱 + */ + @Schema(title = "品牌类型:1_我方纸箱;2_瓜农纸箱;3_第三方纸箱", requiredMode = Schema.RequiredMode.REQUIRED) + private BoxBrandTypeEnum type; + +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxBrandDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxBrandDestroyCmd.java new file mode 100644 index 0000000..63702db --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxBrandDestroyCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "删除纸箱品牌") +@EqualsAndHashCode(callSuper = true) +public class BoxBrandDestroyCmd extends Command { + + @Schema(title = "纸箱品牌ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long brandId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxBrandUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxBrandUpdateCmd.java new file mode 100644 index 0000000..13ae125 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxBrandUpdateCmd.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "纸箱品牌更新") +@EqualsAndHashCode(callSuper = true) +public class BoxBrandUpdateCmd extends BoxBrandCreateCmd { + + @Schema(title = "纸箱品牌ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long brandId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxProductCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxProductCreateCmd.java new file mode 100644 index 0000000..4dbb2ab --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxProductCreateCmd.java @@ -0,0 +1,80 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.enums.BoxBrandTypeEnum; +import com.xunhong.erp.turbo.api.biz.dto.enums.BoxProductSpecTypeEnum; +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "纸箱产品创建") +@EqualsAndHashCode(callSuper = true) +public class BoxProductCreateCmd extends Command { + + /** + * 产品ID + */ + @Schema(title = "产品ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long productId; + + /** + * 纸箱名称 + */ + @Schema(title = "纸箱名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 重量(kg) + */ + @Schema(title = "重量(kg)") + private BigDecimal weight; + + /** + * 成本价 + */ + @Schema(title = "成本价") + private BigDecimal costPrice; + + /** + * 销售价 + */ + @Schema(title = "销售价") + private BigDecimal salePrice; + + /** + * 规格:1_2粒装;2_4粒装 + */ + @Schema(title = "规格:1_2粒装;2_4粒装", requiredMode = Schema.RequiredMode.REQUIRED) + private BoxProductSpecTypeEnum specType; + + /** + * 品牌ID + */ + @Schema(title = "品牌ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long brandId; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态:1_启用;0_禁用 + */ + @Schema(title = "状态:1_启用;0_禁用", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + + /** + * 品牌类型:1_我方纸箱;2_瓜农纸箱;3_第三方纸箱 + */ + @Schema(title = "品牌类型:1_我方纸箱;2_瓜农纸箱;3_第三方纸箱", requiredMode = Schema.RequiredMode.REQUIRED) + private BoxBrandTypeEnum type; + +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxProductDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxProductDestroyCmd.java new file mode 100644 index 0000000..8f9f3a6 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxProductDestroyCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "删除纸箱产品") +@EqualsAndHashCode(callSuper = true) +public class BoxProductDestroyCmd extends Command { + + @Schema(title = "纸箱产品ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long productId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxProductUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxProductUpdateCmd.java new file mode 100644 index 0000000..a047e0c --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/BoxProductUpdateCmd.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "纸箱产品更新") +@EqualsAndHashCode(callSuper = true) +public class BoxProductUpdateCmd extends BoxProductCreateCmd { + + @Schema(title = "纸箱产品ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long productId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyCreateCmd.java new file mode 100644 index 0000000..41ebaee --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyCreateCmd.java @@ -0,0 +1,65 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "公司管理创建") +@EqualsAndHashCode(callSuper = true) +public class CompanyCreateCmd extends Command { + + /** + * 公司ID + */ + @Schema(title = "公司ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long companyId; + + /** + * 公司名称 + */ + @Schema(title = "公司名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 税号 + */ + @Schema(title = "税号", requiredMode = Schema.RequiredMode.REQUIRED) + private String taxNumber; + + /** + * 联系人 + */ + @Schema(title = "联系人", requiredMode = Schema.RequiredMode.REQUIRED) + private String contactPerson; + + /** + * 联系电话 + */ + @Schema(title = "联系电话", requiredMode = Schema.RequiredMode.REQUIRED) + private String contactPhone; + + /** + * 发货地址 + */ + @Schema(title = "发货地址", requiredMode = Schema.RequiredMode.REQUIRED) + private String address; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态:1_启用;0_禁用; + */ + @Schema(title = "状态:1_启用;0_禁用;", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyDestroyCmd.java new file mode 100644 index 0000000..d5e0e03 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyDestroyCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "删除公司管理") +@EqualsAndHashCode(callSuper = true) +public class CompanyDestroyCmd extends Command { + + @Schema(title = "公司管理ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long companyId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyPaymentAccountCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyPaymentAccountCreateCmd.java new file mode 100644 index 0000000..5f640a2 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyPaymentAccountCreateCmd.java @@ -0,0 +1,100 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.enums.CompanyPaymentAccountCategoryEnum; +import com.xunhong.erp.turbo.api.biz.dto.enums.CompanyPaymentAccountTypeEnum; +import com.xunhong.erp.turbo.api.biz.dto.enums.CompanyPaymentPublicAccountTypeEnum; +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "公司付款账户创建") +@EqualsAndHashCode(callSuper = true) +public class CompanyPaymentAccountCreateCmd extends Command { + + /** + * 账户ID + */ + @Schema(title = "账户ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long accountId; + + /** + * 公司ID + */ + @Schema(title = "公司ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long companyId; + + /** + * 账户类别:1_对公账户;2_私人账户 + */ + @Schema(title = "账户类别:1_对公账户;2_私人账户", requiredMode = Schema.RequiredMode.REQUIRED) + private CompanyPaymentAccountCategoryEnum accountCategory; + + /** + * 账户类型:1_银行卡;2_支付宝;3_微信 + */ + @Schema(title = "账户类型:1_银行卡;2_支付宝;3_微信", requiredMode = Schema.RequiredMode.REQUIRED) + private CompanyPaymentAccountTypeEnum accountType; + + /** + * 银行名称 + */ + @Schema(title = "银行名称") + private String bankName; + + /** + * 支行名称 + */ + @Schema(title = "支行名称") + private String branchName; + + /** + * 对公账户类型:1_基本户;2_一般户;3_专用账户;4_临时户 + */ + @Schema(title = "对公账户类型:1_基本户;2_一般户;3_专用账户;4_临时户") + private CompanyPaymentPublicAccountTypeEnum publicAccountType; + + /** + * 开户公司名称、支付宝昵称、微信号 + */ + @Schema(title = "开户公司名称、支付宝昵称、微信号", requiredMode = Schema.RequiredMode.REQUIRED) + private String accountName; + + /** + * 银行账号、支付宝账号、微信账号 + */ + @Schema(title = "银行账号、支付宝账号、微信账号", requiredMode = Schema.RequiredMode.REQUIRED) + private String accountNumber; + + /** + * 是否主付款账户:0_否;1_是 + */ + @Schema(title = "是否主付款账户:0_否;1_是", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean isPrimary; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态:1_启用;2_禁用; + */ + @Schema(title = "状态:1_启用;2_禁用;", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyPaymentAccountDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyPaymentAccountDestroyCmd.java new file mode 100644 index 0000000..6aecf7c --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyPaymentAccountDestroyCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "删除公司付款账户") +@EqualsAndHashCode(callSuper = true) +public class CompanyPaymentAccountDestroyCmd extends Command { + + @Schema(title = "公司付款账户ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long accountId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyPaymentAccountUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyPaymentAccountUpdateCmd.java new file mode 100644 index 0000000..0d17beb --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyPaymentAccountUpdateCmd.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "公司付款账户更新") +@EqualsAndHashCode(callSuper = true) +public class CompanyPaymentAccountUpdateCmd extends CompanyPaymentAccountCreateCmd { + + @Schema(title = "公司付款账户ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long accountId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyUpdateCmd.java new file mode 100644 index 0000000..ef083ed --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CompanyUpdateCmd.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "公司管理更新") +@EqualsAndHashCode(callSuper = true) +public class CompanyUpdateCmd extends CompanyCreateCmd { + + @Schema(title = "公司管理ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long companyId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CostItemCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CostItemCreateCmd.java new file mode 100644 index 0000000..8df8f19 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CostItemCreateCmd.java @@ -0,0 +1,68 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.enums.CostItemCostTypeEnum; +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "费用项目创建") +@EqualsAndHashCode(callSuper = true) +public class CostItemCreateCmd extends Command { + + /** + * 项目ID + */ + @Schema(title = "项目ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long itemId; + + /** + * 费用类型:1_包装材料;2_人工费用;3_其他费用;4_固定费用 + */ + @Schema(title = "费用类型:1_包装材料;2_人工费用;3_其他费用;4_固定费用", requiredMode = Schema.RequiredMode.REQUIRED) + private CostItemCostTypeEnum costType; + + /** + * 项目名称 + */ + @Schema(title = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 单位 + */ + @Schema(title = "单位", requiredMode = Schema.RequiredMode.REQUIRED) + private String unit; + + /** + * 单价 + */ + @Schema(title = "单价", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal price; + + /** + * 是否在录入时显示 + */ + @Schema(title = "是否在录入时显示", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean showInEntry; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态:1_启用;0_禁用 + */ + @Schema(title = "状态:1_启用;0_禁用", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CostItemDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CostItemDestroyCmd.java new file mode 100644 index 0000000..907c0e0 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CostItemDestroyCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "删除费用项目") +@EqualsAndHashCode(callSuper = true) +public class CostItemDestroyCmd extends Command { + + @Schema(title = "费用项目ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long itemId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CostItemUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CostItemUpdateCmd.java new file mode 100644 index 0000000..e74090e --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/CostItemUpdateCmd.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "费用项目更新") +@EqualsAndHashCode(callSuper = true) +public class CostItemUpdateCmd extends CostItemCreateCmd { + + @Schema(title = "费用项目ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long itemId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerCreateCmd.java new file mode 100644 index 0000000..224ee83 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerCreateCmd.java @@ -0,0 +1,98 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.enums.DealerTypeEnum; +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商表创建") +@EqualsAndHashCode(callSuper = true) +public class DealerCreateCmd extends Command { + + /** + * 经销商ID + */ + @Schema(title = "经销商ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long dealerId; + + /** + * 经销商简称 + */ + @Schema(title = "经销商简称", requiredMode = Schema.RequiredMode.REQUIRED) + private String shortName; + + /** + * 经销商全称 + */ + @Schema(title = "经销商全称") + private String fullName; + + /** + * 经销商类型:1_市场;2_超市; + */ + @Schema(title = "经销商类型:1_市场;2_超市;", requiredMode = Schema.RequiredMode.REQUIRED) + private DealerTypeEnum dealerType; + + /** + * 是否开启分成 + */ + @Schema(title = "是否开启分成") + private Boolean enableShare; + + /** + * 分成比例 + */ + @Schema(title = "分成比例") + private BigDecimal shareRatio; + + /** + * 运费是否作为成本 + */ + @Schema(title = "运费是否作为成本") + private Boolean freightCostFlag; + + /** + * 草帘是否作为成本 + */ + @Schema(title = "草帘是否作为成本") + private Boolean strawMatCostFlag; + + /** + * 发货单合计金额是否含包装费 + */ + @Schema(title = "发货单合计金额是否含包装费") + private Boolean includePackingFlag; + + /** + * 单据类型:delivery-发货单, purchase-采购底单, cost-成本单 + */ + @Schema(title = "单据类型:delivery-发货单, purchase-采购底单, cost-成本单") + private String documentTypes; + + /** + * 应收金额 + */ + @Schema(title = "应收金额") + private BigDecimal receivable; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态:1_启用;0_禁用; + */ + @Schema(title = "状态:1_启用;0_禁用;", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerDestroyCmd.java new file mode 100644 index 0000000..01b1ee4 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerDestroyCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "删除经销商表") +@EqualsAndHashCode(callSuper = true) +public class DealerDestroyCmd extends Command { + + @Schema(title = "经销商表ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long dealerId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerPaymentAccountCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerPaymentAccountCreateCmd.java new file mode 100644 index 0000000..49a2047 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerPaymentAccountCreateCmd.java @@ -0,0 +1,77 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商付款账户创建") +@EqualsAndHashCode(callSuper = true) +public class DealerPaymentAccountCreateCmd extends Command { + + /** + * 账户ID + */ + @Schema(title = "账户ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long accountId; + + /** + * 经销商ID + */ + @Schema(title = "经销商ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long dealerId; + + /** + * 公司名称 + */ + @Schema(title = "公司名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String companyName; + + /** + * 税号 + */ + @Schema(title = "税号", requiredMode = Schema.RequiredMode.REQUIRED) + private String taxNumber; + + /** + * 银行账号 + */ + @Schema(title = "银行账号", requiredMode = Schema.RequiredMode.REQUIRED) + private String bankAccount; + + /** + * 单位地址 + */ + @Schema(title = "单位地址") + private String companyAddress; + + /** + * 电话 + */ + @Schema(title = "电话") + private String phone; + + /** + * 开户行 + */ + @Schema(title = "开户行") + private String openingBank; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态:1_启用;0_禁用; + */ + @Schema(title = "状态:1_启用;0_禁用;") + private Boolean status; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerPaymentAccountDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerPaymentAccountDestroyCmd.java new file mode 100644 index 0000000..8303a0c --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerPaymentAccountDestroyCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "删除经销商付款账户") +@EqualsAndHashCode(callSuper = true) +public class DealerPaymentAccountDestroyCmd extends Command { + + @Schema(title = "经销商付款账户ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long accountId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerPaymentAccountUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerPaymentAccountUpdateCmd.java new file mode 100644 index 0000000..5819fb7 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerPaymentAccountUpdateCmd.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商付款账户更新") +@EqualsAndHashCode(callSuper = true) +public class DealerPaymentAccountUpdateCmd extends DealerPaymentAccountCreateCmd { + + @Schema(title = "经销商付款账户ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long accountId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerRebateCustomerCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerRebateCustomerCreateCmd.java new file mode 100644 index 0000000..00693a8 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerRebateCustomerCreateCmd.java @@ -0,0 +1,47 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商返点客户创建") +@EqualsAndHashCode(callSuper = true) +public class DealerRebateCustomerCreateCmd extends Command { + + /** + * 客户ID + */ + @Schema(title = "客户ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long customerId; + + /** + * 经销商ID + */ + @Schema(title = "经销商ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long dealerId; + + /** + * 客户名称 + */ + @Schema(title = "客户名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 状态:1_启用;0_禁用; + */ + @Schema(title = "状态:1_启用;0_禁用;", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerRebateCustomerDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerRebateCustomerDestroyCmd.java new file mode 100644 index 0000000..77f24b4 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerRebateCustomerDestroyCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "删除经销商返点客户") +@EqualsAndHashCode(callSuper = true) +public class DealerRebateCustomerDestroyCmd extends Command { + + @Schema(title = "经销商返点客户ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long customerId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerRebateCustomerUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerRebateCustomerUpdateCmd.java new file mode 100644 index 0000000..1580770 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerRebateCustomerUpdateCmd.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商返点客户更新") +@EqualsAndHashCode(callSuper = true) +public class DealerRebateCustomerUpdateCmd extends DealerRebateCustomerCreateCmd { + + @Schema(title = "经销商返点客户ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long customerId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerUpdateCmd.java new file mode 100644 index 0000000..e1ad799 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerUpdateCmd.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商表更新") +@EqualsAndHashCode(callSuper = true) +public class DealerUpdateCmd extends DealerCreateCmd { + + @Schema(title = "经销商表ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long dealerId; + + @Schema(title = "发货单模板") + private String deliveryTemplate; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerWarehouseCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerWarehouseCreateCmd.java new file mode 100644 index 0000000..3eb0efa --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerWarehouseCreateCmd.java @@ -0,0 +1,83 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商仓库创建") +@EqualsAndHashCode(callSuper = true) +public class DealerWarehouseCreateCmd extends Command { + + /** + * 仓库ID + */ + @Schema(title = "仓库ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long warehouseId; + + /** + * 经销商ID + */ + @Schema(title = "经销商ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long dealerId; + + /** + * 经销商账户ID + */ + @Schema(title = "经销商账户ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long accountId; + + /** + * 仓库名称 + */ + @Schema(title = "仓库名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 仓库地址 + */ + @Schema(title = "仓库地址", requiredMode = Schema.RequiredMode.REQUIRED) + private String address; + + /** + * 联系人 + */ + @Schema(title = "联系人") + private String contactPerson; + + /** + * 联系电话 + */ + @Schema(title = "联系电话") + private String contactPhone; + + /** + * 收货人姓名 + */ + @Schema(title = "收货人姓名") + private String receiverName; + + /** + * 收货人电话 + */ + @Schema(title = "收货人电话") + private String receiverPhone; + + /** + * 状态:1_启用;0_禁用; + */ + @Schema(title = "状态:1_启用;0_禁用;", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerWarehouseDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerWarehouseDestroyCmd.java new file mode 100644 index 0000000..1b474b2 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerWarehouseDestroyCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "删除经销商仓库") +@EqualsAndHashCode(callSuper = true) +public class DealerWarehouseDestroyCmd extends Command { + + @Schema(title = "经销商仓库ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long warehouseId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerWarehouseUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerWarehouseUpdateCmd.java new file mode 100644 index 0000000..012ea3b --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/DealerWarehouseUpdateCmd.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商仓库更新") +@EqualsAndHashCode(callSuper = true) +public class DealerWarehouseUpdateCmd extends DealerWarehouseCreateCmd { + + @Schema(title = "经销商仓库ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long warehouseId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/GiftBoxCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/GiftBoxCreateCmd.java new file mode 100644 index 0000000..5da4dcb --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/GiftBoxCreateCmd.java @@ -0,0 +1,68 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "礼盒创建") +@EqualsAndHashCode(callSuper = true) +public class GiftBoxCreateCmd extends Command { + + /** + * 礼盒ID + */ + @Schema(title = "礼盒ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long boxId; + + /** + * 礼盒名称 + */ + @Schema(title = "礼盒名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 成本价 + */ + @Schema(title = "成本价", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal costPrice; + + /** + * 重量(kg) + */ + @Schema(title = "重量(kg)", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal weight; + + /** + * 售价 + */ + @Schema(title = "售价", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal salePrice; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态:1_启用;0_禁用 + */ + @Schema(title = "状态:1_启用;0_禁用", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/GiftBoxDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/GiftBoxDestroyCmd.java new file mode 100644 index 0000000..36f7cf1 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/GiftBoxDestroyCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "删除礼盒") +@EqualsAndHashCode(callSuper = true) +public class GiftBoxDestroyCmd extends Command { + + @Schema(title = "礼盒ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long boxId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/GiftBoxUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/GiftBoxUpdateCmd.java new file mode 100644 index 0000000..44642d5 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/GiftBoxUpdateCmd.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "礼盒更新") +@EqualsAndHashCode(callSuper = true) +public class GiftBoxUpdateCmd extends GiftBoxCreateCmd { + + @Schema(title = "礼盒ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long boxId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderApproveCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderApproveCmd.java new file mode 100644 index 0000000..d821806 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderApproveCmd.java @@ -0,0 +1,44 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.xunhong.erp.turbo.api.biz.dto.common.OrderCompany; +import com.xunhong.erp.turbo.api.biz.dto.common.OrderRebate; +import com.xunhong.erp.turbo.api.biz.dto.enums.PurchaseOrderPricingMethodEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "采购订单更新") +@EqualsAndHashCode(callSuper = true) +public class PurchaseOrderApproveCmd extends PurchaseOrderCreateCmd { + + @Schema(title = "采购订单ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long orderId; + + @Schema(title = "是否是暂存", type = "boolean", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean draft; + + /** + * 报价方式:1_按毛重报价;2_按净重报价; + */ + @TableField(value = "pricing_method") + private PurchaseOrderPricingMethodEnum pricingMethod; + + /** + * 公司信息 + */ + @Schema(title = "公司信息", requiredMode = Schema.RequiredMode.REQUIRED) + private OrderCompany orderCompany; + + /** + * 返点信息 + */ + @Schema(title = "返点信息", requiredMode = Schema.RequiredMode.REQUIRED) + private OrderRebate orderRebate; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderCreateCmd.java new file mode 100644 index 0000000..e1ac560 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderCreateCmd.java @@ -0,0 +1,76 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.common.OrderCost; +import com.xunhong.erp.turbo.api.biz.dto.common.OrderDealer; +import com.xunhong.erp.turbo.api.biz.dto.common.OrderSupplier; +import com.xunhong.erp.turbo.api.biz.dto.common.OrderVehicle; +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "采购订单创建") +@EqualsAndHashCode(callSuper = true) +public class PurchaseOrderCreateCmd extends Command { + + /** + * 步骤标识 + */ + @Schema(title = "步骤标识") + private Integer active; + + /** + * 产地负责人 + */ + @Schema(title = "产地负责人") + private String originPrincipal; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 创建人ID + */ + @Schema(title = "创建人ID", type = "string", hidden = true) + private Long createdBy; + + /** + * 创建人名称 + */ + @Schema(title = "创建人名称", type = "string", hidden = true) + private String createdByName; + + /** + * 车辆信息 + */ + @Schema(title = "车辆信息", requiredMode = Schema.RequiredMode.REQUIRED) + private OrderVehicle orderVehicle; + + /** + * 经销商信息 + */ + @Schema(title = "经销商信息", requiredMode = Schema.RequiredMode.REQUIRED) + private OrderDealer orderDealer; + + /** + * 供应商信息 + */ + @Schema(title = "供应商信息", requiredMode = Schema.RequiredMode.REQUIRED) + private List orderSupplierList; + + /** + * 费用信息 + */ + @Schema(title = "采购订单费用信息", requiredMode = Schema.RequiredMode.REQUIRED) + private List orderCostList; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderDestroyCmd.java new file mode 100644 index 0000000..6c84b3d --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderDestroyCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "删除采购订单") +@EqualsAndHashCode(callSuper = true) +public class PurchaseOrderDestroyCmd extends Command { + + @Schema(title = "采购订单ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long orderId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderFinalApproveCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderFinalApproveCmd.java new file mode 100644 index 0000000..c62d8bc --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderFinalApproveCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "采购订单审批(老板审批)") +@EqualsAndHashCode(callSuper = true) +public class PurchaseOrderFinalApproveCmd extends Command { + + @Schema(title = "采购订单ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long orderId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderRejectApproveCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderRejectApproveCmd.java new file mode 100644 index 0000000..bb2e585 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderRejectApproveCmd.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "采购订单驳回审核(审核员驳回审核)") +@EqualsAndHashCode(callSuper = true) +public class PurchaseOrderRejectApproveCmd extends Command { + + @Schema(title = "采购订单ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long orderId; + + @Schema(title = "驳回原因", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private String rejectReason; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderRejectFinalCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderRejectFinalCmd.java new file mode 100644 index 0000000..913beeb --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderRejectFinalCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "采购订单驳回审批(老板驳回审批)") +@EqualsAndHashCode(callSuper = true) +public class PurchaseOrderRejectFinalCmd extends Command { + + @Schema(title = "采购订单ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long orderId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderSubmitReviewCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderSubmitReviewCmd.java new file mode 100644 index 0000000..1e4b022 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderSubmitReviewCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "采购订单提审(录入员提审)") +@EqualsAndHashCode(callSuper = true) +public class PurchaseOrderSubmitReviewCmd extends Command { + + @Schema(title = "采购订单ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long orderId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderUpdateCmd.java new file mode 100644 index 0000000..e077fbb --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderUpdateCmd.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "采购订单更新") +@EqualsAndHashCode(callSuper = true) +public class PurchaseOrderUpdateCmd extends PurchaseOrderCreateCmd { + + @Schema(title = "采购订单ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long orderId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderWithdrawReviewCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderWithdrawReviewCmd.java new file mode 100644 index 0000000..936d76c --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/PurchaseOrderWithdrawReviewCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "采购订单撤回提审(录入员撤回提审)") +@EqualsAndHashCode(callSuper = true) +public class PurchaseOrderWithdrawReviewCmd extends Command { + + @Schema(title = "采购订单ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long orderId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/ShipOrderCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/ShipOrderCreateCmd.java new file mode 100644 index 0000000..871fbd0 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/ShipOrderCreateCmd.java @@ -0,0 +1,158 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "发货单创建") +@EqualsAndHashCode(callSuper = true) +public class ShipOrderCreateCmd extends Command { + + /** + * 发货单ID + */ + @Schema(title = "发货单ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long shipOrderId; + + /** + * 采购单ID + */ + @Schema(title = "采购单ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long purchaseOrderId; + + /** + * 发货单编号 + */ + @Schema(title = "发货单编号") + private String orderSn; + + /** + * 发货地址 + */ + @Schema(title = "发货地址") + private String shippingAddress; + + /** + * 收货地址 + */ + @Schema(title = "收货地址") + private String receivingAddress; + + /** + * 发货日期 + */ + @Schema(title = "发货日期") + private LocalDate shippingDate; + + /** + * 预计到仓时间 + */ + @Schema(title = "预计到仓时间") + private LocalDate estimatedArrivalDate; + + /** + * 西瓜品级 + */ + @Schema(title = "西瓜品级") + private String watermelonGrade; + + /** + * 司机姓名 + */ + @Schema(title = "司机姓名") + private String driverName; + + /** + * 司机手机号 + */ + @Schema(title = "司机手机号") + private String driverPhone; + + /** + * 车牌号码 + */ + @Schema(title = "车牌号码") + private String licensePlate; + + /** + * 运费欠款(元) + */ + @Schema(title = "运费欠款(元)") + private BigDecimal freightDebt; + + /** + * 草帘欠款(元) + */ + @Schema(title = "草帘欠款(元)") + private BigDecimal strawMatDebt; + + /** + * 商标费(元) + */ + @Schema(title = "商标费(元)") + private BigDecimal trademarkFee; + + /** + * 人工费(元) + */ + @Schema(title = "人工费(元)") + private BigDecimal laborFee; + + /** + * 纸箱费(元) + */ + @Schema(title = "纸箱费(元)") + private BigDecimal cartonFee; + + /** + * 打码费(元) + */ + @Schema(title = "打码费(元)") + private BigDecimal codingFee; + + /** + * 计提费(元) + */ + @Schema(title = "计提费(元)") + private BigDecimal provisionFee; + + /** + * 合计金额(元) + */ + @Schema(title = "合计金额(元)") + private BigDecimal totalAmount; + + /** + * 瓜农姓名逗号隔开 + */ + @Schema(title = "瓜农姓名逗号隔开") + private String farmerInfo; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 创建人ID + */ + @Schema(title = "创建人ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long createdBy; + + /** + * 创建人姓名 + */ + @Schema(title = "创建人姓名") + private String createdByName; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/ShipOrderDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/ShipOrderDestroyCmd.java new file mode 100644 index 0000000..21d9ee8 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/ShipOrderDestroyCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "删除发货单") +@EqualsAndHashCode(callSuper = true) +public class ShipOrderDestroyCmd extends Command { + + @Schema(title = "发货单ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long shipOrderId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/ShipOrderGenerateDocumentCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/ShipOrderGenerateDocumentCmd.java new file mode 100644 index 0000000..26eaed9 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/ShipOrderGenerateDocumentCmd.java @@ -0,0 +1,71 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.common.ShipOrderItem; +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "发货单生成单据") +@EqualsAndHashCode(callSuper = true) +public class ShipOrderGenerateDocumentCmd extends Command { + + @Schema(title = "发货单ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long shipOrderId; + + /** + * 预计到仓时间 + */ + @Schema(title = "预计到仓时间") + private LocalDate estimatedArrivalDate; + + /** + * 西瓜品级 + */ + @Schema(title = "西瓜品级") + private String watermelonGrade; + + /** + * 发货地址 + */ + @Schema(title = "发货地址") + private String shippingAddress; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 发货单明细 + */ + @Schema(title = "发货单明细") + private List shipOrderItemList; + + /** + * 发货单据 + */ + @Schema(title = "发货单据") + private String shipDocument; + + /** + * 采购底单 + */ + @Schema(title = "采购底单") + private String purchaseDocument; + + /** + * 成本单据 + */ + @Schema(title = "成本单据") + private String costDocument; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/ShipOrderUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/ShipOrderUpdateCmd.java new file mode 100644 index 0000000..e7078db --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/ShipOrderUpdateCmd.java @@ -0,0 +1,71 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.api.biz.dto.common.ShipOrderItem; +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "发货单更新") +@EqualsAndHashCode(callSuper = true) +public class ShipOrderUpdateCmd extends Command { + + @Schema(title = "发货单ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long shipOrderId; + + /** + * 预计到仓时间 + */ + @Schema(title = "预计到仓时间") + private LocalDate estimatedArrivalDate; + + /** + * 西瓜品级 + */ + @Schema(title = "西瓜品级") + private String watermelonGrade; + + /** + * 发货地址 + */ + @Schema(title = "发货地址") + private String shippingAddress; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 发货单明细 + */ + @Schema(title = "发货单明细") + private List shipOrderItemList; + + /** + * 发货单据 + */ + @Schema(title = "发货单据") + private String shipDocument; + + /** + * 采购底单 + */ + @Schema(title = "采购底单") + private String purchaseDocument; + + /** + * 成本单据 + */ + @Schema(title = "成本单据") + private String costDocument; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/SupplierCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/SupplierCreateCmd.java new file mode 100644 index 0000000..04b11e2 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/SupplierCreateCmd.java @@ -0,0 +1,65 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "供应商创建") +@EqualsAndHashCode(callSuper = true) +public class SupplierCreateCmd extends Command { + + /** + * 供应商ID + */ + @Schema(title = "供应商ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long supplierId; + + /** + * 姓名 + */ + @Schema(title = "姓名", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 身份证号 + */ + @Schema(title = "身份证号", requiredMode = Schema.RequiredMode.REQUIRED) + private String idCard; + + /** + * 手机号 + */ + @Schema(title = "手机号", requiredMode = Schema.RequiredMode.REQUIRED) + private String phone; + + /** + * 银行卡号 + */ + @Schema(title = "银行卡号", requiredMode = Schema.RequiredMode.REQUIRED) + private String bankCard; + + /** + * 微信收款码URL + */ + @Schema(title = "微信收款码URL") + private String wechatQr; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态:1_启用;0_禁用; + */ + @Schema(title = "状态:1_启用;0_禁用;", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/SupplierDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/SupplierDestroyCmd.java new file mode 100644 index 0000000..4f60826 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/SupplierDestroyCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "删除供应商") +@EqualsAndHashCode(callSuper = true) +public class SupplierDestroyCmd extends Command { + + @Schema(title = "供应商ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long supplierId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/SupplierUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/SupplierUpdateCmd.java new file mode 100644 index 0000000..fbcaa4a --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/cmd/SupplierUpdateCmd.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.biz.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "供应商更新") +@EqualsAndHashCode(callSuper = true) +public class SupplierUpdateCmd extends SupplierCreateCmd { + + @Schema(title = "供应商ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long supplierId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderCompany.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderCompany.java new file mode 100644 index 0000000..e2f5452 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderCompany.java @@ -0,0 +1,95 @@ +package com.xunhong.erp.turbo.api.biz.dto.common; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "采购订单公司信息创建") +@EqualsAndHashCode(callSuper = true) +public class OrderCompany extends Command { + + /** + * 记录ID + */ + @Schema(title = "记录ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long orderCompanyId; + + /** + * 订单ID + */ + @Schema(title = "订单ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long orderId; + + /** + * 公司ID + */ + @Schema(title = "公司ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long companyId; + + /** + * 公司名称 + */ + @Schema(title = "公司名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 税号 + */ + @Schema(title = "税号", requiredMode = Schema.RequiredMode.REQUIRED) + private String taxNumber; + + /** + * 联系人 + */ + @Schema(title = "联系人", requiredMode = Schema.RequiredMode.REQUIRED) + private String contactPerson; + + /** + * 联系电话 + */ + @Schema(title = "联系电话", requiredMode = Schema.RequiredMode.REQUIRED) + private String contactPhone; + + /** + * 发货地址 + */ + @Schema(title = "发货地址", requiredMode = Schema.RequiredMode.REQUIRED) + private String address; + + /** + * 账户ID + */ + @Schema(title = "账户ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long accountId; + + /** + * 银行名称 + */ + @Schema(title = "银行名称") + private String bankName; + + /** + * 支行名称 + */ + @Schema(title = "支行名称") + private String branchName; + + /** + * 账户名称 + */ + @Schema(title = "账户名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String accountName; + + /** + * 银行账号 + */ + @Schema(title = "银行账号", requiredMode = Schema.RequiredMode.REQUIRED) + private String accountNumber; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderCost.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderCost.java new file mode 100644 index 0000000..6125fd4 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderCost.java @@ -0,0 +1,81 @@ +package com.xunhong.erp.turbo.api.biz.dto.common; + +import com.xunhong.erp.turbo.api.biz.dto.enums.CostItemCostTypeEnum; +import com.xunhong.erp.turbo.api.biz.dto.enums.OrderCostPayerTypeEnum; +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "采购订单成本项目信息创建") +@EqualsAndHashCode(callSuper = true) +public class OrderCost extends Command { + + /** + * 记录ID + */ + @Schema(title = "记录ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long orderCostId; + + /** + * 订单ID + */ + @Schema(title = "订单ID", type = "string") + private Long orderId; + + /** + * 成本项目ID + */ + @Schema(title = "成本项目ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long itemId; + + /** + * 成本项目名称 + */ + @Schema(title = "成本项目名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 单价 + */ + @Schema(title = "单价", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal price; + + /** + * 单位 + */ + @Schema(title = "单位", requiredMode = Schema.RequiredMode.REQUIRED) + private String unit; + + /** + * 数量 + */ + @Schema(title = "数量", requiredMode = Schema.RequiredMode.REQUIRED) + private Integer count; + + /** + * 付款方类型:1-我方,2-对方 + */ + @Schema(title = "付款方类型:1-我方,2-对方", requiredMode = Schema.RequiredMode.REQUIRED) + private OrderCostPayerTypeEnum payerType; + + /** + * 负责人 + */ + @Schema(title = "负责人") + private String principal; + + /** + * 费用类型:1_包装材料;2_人工费用;3_其他费用;4_固定费用 + */ + @Schema(title = "费用类型:1_包装材料;2_人工费用;3_其他费用;4_固定费用", requiredMode = Schema.RequiredMode.REQUIRED) + private CostItemCostTypeEnum costType; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderDealer.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderDealer.java new file mode 100644 index 0000000..79e2888 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderDealer.java @@ -0,0 +1,171 @@ +package com.xunhong.erp.turbo.api.biz.dto.common; + +import com.xunhong.erp.turbo.api.biz.dto.enums.DealerTypeEnum; +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "采购订单经销商信息创建") +@EqualsAndHashCode(callSuper = true) +public class OrderDealer extends Command { + + /** + * 记录ID + */ + @Schema(title = "记录ID", type = "string") + private Long orderDealerId; + + /** + * 采购订单ID + */ + @Schema(title = "采购订单ID", type = "string") + private Long orderId; + + /** + * 经销商ID + */ + @Schema(title = "经销商ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long dealerId; + + /** + * 经销商简称 + */ + @Schema(title = "经销商简称", requiredMode = Schema.RequiredMode.REQUIRED) + private String shortName; + + /** + * 经销商类型:1_市场;2_超市; + */ + @Schema(title = "经销商类型:1_市场;2_超市;", requiredMode = Schema.RequiredMode.REQUIRED) + private DealerTypeEnum dealerType; + + /** + * 是否开启分成 + */ + @Schema(title = "是否开启分成") + private Boolean enableShare; + + /** + * 分成比例 + */ + @Schema(title = "分成比例") + private BigDecimal shareRatio; + + /** + * 运费是否作为成本 + */ + @Schema(title = "运费是否作为成本") + private Boolean freightCostFlag; + + /** + * 草帘是否作为成本 + */ + @Schema(title = "草帘是否作为成本") + private Boolean strawMatCostFlag; + + /** + * 发货单合计金额是否含包装费 + */ + @Schema(title = "发货单合计金额是否含包装费") + private Boolean includePackingFlag; + + /** + * 单据类型:delivery-发货单, purchase-采购底单, cost-成本单 + */ + @Schema(title = "单据类型:delivery-发货单, purchase-采购底单, cost-成本单") + private String documentTypes; + + /** + * 账户ID + */ + @Schema(title = "账户ID", type = "string") + private Long accountId; + + /** + * 公司名称 + */ + @Schema(title = "公司名称") + private String companyName; + + /** + * 税号 + */ + @Schema(title = "税号") + private String taxNumber; + + /** + * 银行账号 + */ + @Schema(title = "银行账号") + private String bankAccount; + + /** + * 单位地址 + */ + @Schema(title = "单位地址") + private String companyAddress; + + /** + * 电话 + */ + @Schema(title = "电话") + private String phone; + + /** + * 开户行 + */ + @Schema(title = "开户行") + private String openingBank; + + /** + * 仓库ID + */ + @Schema(title = "仓库ID", type = "string") + private Long warehouseId; + + + /** + * 仓库名称 + */ + @Schema(title = "仓库名称") + private String warehouseName; + + /** + * 仓库地址 + */ + @Schema(title = "仓库地址") + private String warehouseAddress; + + /** + * 联系人 + */ + @Schema(title = "联系人") + private String contactPerson; + + /** + * 联系电话 + */ + @Schema(title = "联系电话") + private String contactPhone; + + /** + * 收货人姓名 + */ + @Schema(title = "收货人姓名") + private String receiverName; + + /** + * 收货人电话 + */ + @Schema(title = "收货人电话") + private String receiverPhone; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderPackage.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderPackage.java new file mode 100644 index 0000000..98d2b06 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderPackage.java @@ -0,0 +1,92 @@ +package com.xunhong.erp.turbo.api.biz.dto.common; + +import com.xunhong.erp.turbo.api.biz.dto.enums.OrderPackageBoxTypeEnum; +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "采购订单包装箱信息创建") +@EqualsAndHashCode(callSuper = true) +public class OrderPackage extends Command { + + /** + * 记录ID + */ + @Schema(title = "记录ID", type = "string") + private Long orderPackageId; + + /** + * 供应商记录ID + */ + @Schema(title = "供应商记录ID", type = "string") + private Long orderSupplierId; + + /** + * 箱子品牌ID + */ + @Schema(title = "箱子品牌ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long boxBrandId; + + /** + * 箱子品牌名称 + */ + @Schema(title = "箱子品牌名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String boxBrandName; + + /** + * 箱子分类ID + */ + @Schema(title = "箱子分类ID", requiredMode = Schema.RequiredMode.REQUIRED) + private String boxCategoryId; + + /** + * 箱子产品ID + */ + @Schema(title = "箱子产品ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long boxProductId; + + /** + * 箱子产品名称 + */ + @Schema(title = "箱子产品名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String boxProductName; + + /** + * 单个箱子重量(kg) + */ + @Schema(title = "单个箱子重量(kg)", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal boxProductWeight; + + /** + * 箱子数量 + */ + @Schema(title = "箱子数量", requiredMode = Schema.RequiredMode.REQUIRED) + private Integer boxCount; + + /** + * 成本单价(元/个) + */ + @Schema(title = "成本单价(元/个)") + private BigDecimal boxCostPrice; + + /** + * 销售单价(元/个) + */ + @Schema(title = "销售单价(元/个)") + private BigDecimal boxSalePrice; + + /** + * 箱子类型:1_本次使用;2_额外运输;3_已使用额外运输;4_车上剩余; + */ + @Schema(title = "箱子类型:1_本次使用;2_额外运输;3_已使用额外运输;4_车上剩余;", requiredMode = Schema.RequiredMode.REQUIRED) + private OrderPackageBoxTypeEnum boxType; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderRebate.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderRebate.java new file mode 100644 index 0000000..ae06ba6 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderRebate.java @@ -0,0 +1,68 @@ +package com.xunhong.erp.turbo.api.biz.dto.common; + +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.biz.dto.enums.OrderRebateCalcMethodEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +@Data +@EqualsAndHashCode(callSuper = true) +public class OrderRebate extends DTO { + + /** + * 记录ID + */ + @Schema(title = "记录ID") + private Long orderRebateId; + + /** + * 订单ID + */ + @Schema(title = "订单ID") + private Long orderId; + + /** + * 客户ID + */ + @Schema(title = "客户ID") + private Long customerId; + + /** + * 经销商ID + */ + @Schema(title = "经销商ID") + private Long dealerId; + + /** + * 客户名称 + */ + @Schema(title = "客户名称") + private String name; + + /** + * 返点计算方式:1_按净重计算;2_固定金额; + */ + @Schema(title = "返点计算方式:1_按净重计算;2_固定金额;") + private OrderRebateCalcMethodEnum calcMethod; + + /** + * 返点净重 + */ + @Schema(title = "返点净重") + private BigDecimal netWeight; + + /** + * 返点单价 + */ + @Schema(title = "返点单价") + private BigDecimal unitPrice; + + /** + * 返点金额 + */ + @Schema(title = "返点金额") + private BigDecimal amount; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderSupplier.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderSupplier.java new file mode 100644 index 0000000..d4bee5c --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderSupplier.java @@ -0,0 +1,163 @@ +package com.xunhong.erp.turbo.api.biz.dto.common; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "采购订单供应商信息创建") +@EqualsAndHashCode(callSuper = true) +public class OrderSupplier extends Command { + + /** + * 记录ID + */ + @Schema(title = "记录ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long orderSupplierId; + + /** + * 订单ID + */ + @Schema(title = "订单ID", type = "string") + private Long orderId; + + /** + * 供应商ID + */ + @Schema(title = "供应商ID", type = "string") + private Long supplierId; + + /** + * 供应商姓名 + */ + @Schema(title = "供应商姓名", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 身份证号 + */ + @Schema(title = "身份证号", requiredMode = Schema.RequiredMode.REQUIRED) + private String idCard; + + /** + * 银行卡号 + */ + @Schema(title = "银行卡号", requiredMode = Schema.RequiredMode.REQUIRED) + private String bankCard; + + /** + * 手机号 + */ + @Schema(title = "手机号", requiredMode = Schema.RequiredMode.REQUIRED) + private String phone; + + /** + * 微信二维码 + */ + @Schema(title = "微信二维码") + private String wechatQr; + + /** + * 是否最后一家 + */ + @Schema(title = "是否最后一家", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean isLast; + + /** + * 空磅是否包含纸箱 + */ + @Schema(title = "空磅是否包含纸箱", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean isPaper; + + /** + * 空车重量(kg) + */ + @Schema(title = "空车重量(kg)", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal emptyWeight; + + /** + * 总重量(kg) + */ + @Schema(title = "总重量(kg)", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal totalWeight; + + /** + * 毛重(kg) + */ + @Schema(title = "毛重(kg)", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal grossWeight; + + /** + * 净重(kg) + */ + @Schema(title = "净重(kg)", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal netWeight; + + /** + * 采购单价(元/斤) + */ + @Schema(title = "采购单价(元/斤)", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal purchasePrice; + + /** + * 销售单价(元/斤) + */ + @Schema(title = "销售单价(元/斤)", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal salePrice; + + /** + * 发票金额 + */ + @Schema(title = "发票金额", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal invoiceAmount; + + /** + * 空车照片 + */ + @Schema(title = "空车照片") + private String emptyWeightImg; + + /** + * 满载照片 + */ + @Schema(title = "满载照片") + private String totalWeightImg; + + /** + * 是否上传票证 + */ + @Schema(title = "是否上传票证", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean invoiceUpload; + + /** + * 发票 + */ + @Schema(title = "发票") + private List invoiceImg; + + /** + * 是否上传合同 + */ + @Schema(title = "是否上传合同", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean contractUpload; + + /** + * 合同 + */ + @Schema(title = "合同") + private List contractImg; + + /** + * 采购订单包装箱信息 + */ + @Schema(title = "采购订单包装箱信息") + private List orderPackageList; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderVehicle.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderVehicle.java new file mode 100644 index 0000000..bea698f --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/OrderVehicle.java @@ -0,0 +1,115 @@ +package com.xunhong.erp.turbo.api.biz.dto.common; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.xunhong.erp.turbo.api.biz.dto.enums.OrderVehiclePriceTypeEnum; +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "采购订单车辆运输信息创建") +@EqualsAndHashCode(callSuper = true) +public class OrderVehicle extends Command { + + /** + * 记录ID + */ + @Schema(title = "记录ID", type = "string") + private Long vehicleId; + + /** + * 订单ID + */ + @Schema(title = "订单ID", type = "string") + private Long orderId; + + /** + * 车货编码 + */ + @Schema(title = "车货编码") + private String vehicleNo; + + /** + * 车牌号 + */ + @Schema(title = "车牌号", requiredMode = Schema.RequiredMode.REQUIRED) + private String plate; + + /** + * 司机姓名 + */ + @Schema(title = "司机姓名", requiredMode = Schema.RequiredMode.REQUIRED) + private String driver; + + /** + * 司机电话 + */ + @Schema(title = "司机电话", requiredMode = Schema.RequiredMode.REQUIRED) + private String phone; + + /** + * 出发地 + */ + @Schema(title = "出发地", requiredMode = Schema.RequiredMode.REQUIRED) + private String origin; + + /** + * 目的地 + */ + @Schema(title = "目的地", requiredMode = Schema.RequiredMode.REQUIRED) + private String destination; + + /** + * 运费类型:1-主运费;2-短驳费; + */ + @Schema(title = "运费类型:1-主运费;2-短驳费;") + private OrderVehiclePriceTypeEnum priceType; + + /** + * 运输价格 + */ + @Schema(title = "运输价格", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal price; + + /** + * 经销商ID + */ + @Schema(title = "经销商ID", type = "string") + private Long dealerId; + + /** + * 经销商名称 + */ + @Schema(title = "经销商名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String dealerName; + + /** + * 是否开启草帘 + */ + @Schema(title = "是否开启草帘", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean openStrawCurtain; + + /** + * 草帘费用 + */ + @Schema(title = "草帘费用") + private BigDecimal strawCurtainPrice; + + /** + * 采购日期 + */ + @Schema(title = "采购日期", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate deliveryTime; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/ShipOrderItem.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/ShipOrderItem.java new file mode 100644 index 0000000..09d48aa --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/ShipOrderItem.java @@ -0,0 +1,74 @@ +package com.xunhong.erp.turbo.api.biz.dto.common; + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "发货单子项表") +@EqualsAndHashCode(callSuper = true) +public class ShipOrderItem extends DTO { + + /** + * 发货单子项ID + */ + @Schema(title = "发货单子项ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long itemId; + + /** + * 发货单ID + */ + @Schema(title = "发货单ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long shipOrderId; + + /** + * 毛重(斤) + */ + @Schema(title = "毛重(斤)") + private BigDecimal grossWeight; + + /** + * 箱重(斤) + */ + @Schema(title = "箱重(斤)") + private BigDecimal boxWeight; + + /** + * 净重(斤) + */ + @Schema(title = "净重(斤)") + private BigDecimal netWeight; + + /** + * 单价(元) + */ + @Schema(title = "单价(元)") + private BigDecimal unitPrice; + + /** + * 总金额(元) + */ + @Schema(title = "总金额(元)") + private BigDecimal totalAmount; + + /** + * 西瓜品级 + */ + @Schema(title = "西瓜品级") + private String watermelonGrade; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/ShipOrderPackage.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/ShipOrderPackage.java new file mode 100644 index 0000000..b23d96d --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/common/ShipOrderPackage.java @@ -0,0 +1,80 @@ +package com.xunhong.erp.turbo.api.biz.dto.common; + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "发货单包装表") +@EqualsAndHashCode(callSuper = true) +public class ShipOrderPackage extends DTO { + + /** + * 发货单子项ID + */ + @Schema(title = "发货单子项ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long orderPackageId; + + /** + * 发货单ID + */ + @Schema(title = "发货单ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long shipOrderId; + + /** + * 箱型 + */ + @Schema(title = "箱型") + private String boxCategory; + + /** + * 箱号 + */ + @Schema(title = "箱号") + private String boxProduct; + + /** + * 数量 + */ + @Schema(title = "数量") + private Integer quantity; + + /** + * 单价(元) + */ + @Schema(title = "单价(元)") + private BigDecimal unitPrice; + + /** + * 金额(元) + */ + @Schema(title = "金额(元)") + private BigDecimal itemAmount; + + /** + * 单重(斤) + */ + @Schema(title = "单重(斤)") + private BigDecimal singleWeight; + + /** + * 总重(斤) + */ + @Schema(title = "总重(斤)") + private BigDecimal totalWeight; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/BoxBrandTypeEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/BoxBrandTypeEnum.java new file mode 100644 index 0000000..104909b --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/BoxBrandTypeEnum.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.api.biz.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 品牌类型枚举 + * 1_我方纸箱;2_瓜农纸箱;3_第三方纸箱 + */ +@Getter +@RequiredArgsConstructor +public enum BoxBrandTypeEnum { + /** + * 我方纸箱 + */ + OUR_BOX(1, "我方纸箱"), + + /** + * 瓜农纸箱 + */ + FARMER_BOX(2, "瓜农纸箱"), + + /** + * 第三方纸箱 + */ + THIRD_PARTY_BOX(3, "第三方纸箱"); + + @EnumValue + private final Integer code; + private final String description; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/BoxProductSpecTypeEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/BoxProductSpecTypeEnum.java new file mode 100644 index 0000000..af3e045 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/BoxProductSpecTypeEnum.java @@ -0,0 +1,20 @@ +package com.xunhong.erp.turbo.api.biz.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum BoxProductSpecTypeEnum { + /** + * 规格:1_2粒装;2_4粒装 + */ + TWO_GRAIN(1, "1_2粒装"), + FOUR_GRAIN(2, "2_4粒装"); + + @EnumValue + private final int type; + + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/CompanyPaymentAccountCategoryEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/CompanyPaymentAccountCategoryEnum.java new file mode 100644 index 0000000..e6d54c2 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/CompanyPaymentAccountCategoryEnum.java @@ -0,0 +1,20 @@ +package com.xunhong.erp.turbo.api.biz.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum CompanyPaymentAccountCategoryEnum { + /** + * 账户类别:1_对公账户;2_私人账户 + */ + COMPANY_ACCOUNT(1, "对公账户"), + PRIVATE_ACCOUNT(2, "私人账户"); + + @EnumValue + private final int type; + + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/CompanyPaymentAccountTypeEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/CompanyPaymentAccountTypeEnum.java new file mode 100644 index 0000000..a08d5d2 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/CompanyPaymentAccountTypeEnum.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.api.biz.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum CompanyPaymentAccountTypeEnum { + /** + * 账户类型:1_银行卡;2_支付宝;3_微信 + */ + BANK_CARD(1, "银行卡"), + ALIPAY(2, "支付宝"), + WECHAT(3, "微信"); + + @EnumValue + private final int type; + + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/CompanyPaymentPublicAccountTypeEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/CompanyPaymentPublicAccountTypeEnum.java new file mode 100644 index 0000000..1b4e14a --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/CompanyPaymentPublicAccountTypeEnum.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.biz.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum CompanyPaymentPublicAccountTypeEnum { + /** + * 对公账户类型:1_基本户;2_一般户;3_专用账户;4_临时户 + */ + BASIC_ACCOUNT(1, "基本户"), + GENERAL_ACCOUNT(2, "一般户"), + SPECIAL_ACCOUNT(3, "专用账户"), + TEMPORARY_ACCOUNT(4, "临时户"); + + @EnumValue + private final int type; + + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/CostItemCostTypeEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/CostItemCostTypeEnum.java new file mode 100644 index 0000000..2a98e62 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/CostItemCostTypeEnum.java @@ -0,0 +1,23 @@ +package com.xunhong.erp.turbo.api.biz.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum CostItemCostTypeEnum { + /** + * 费用类型:1_包装材料;2_人工费用;3_其他费用;4_固定费用;4_固定费用 + */ + PACKAGING_MATERIALS(1, "包装材料"), + HUMAN_COST(2, "人工费用"), + OTHER_COST(3, "其他费用"), + FIXED_COST(4, "固定费用"), + ; + + @EnumValue + private final int type; + + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/DealerTypeEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/DealerTypeEnum.java new file mode 100644 index 0000000..d8dc8bd --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/DealerTypeEnum.java @@ -0,0 +1,20 @@ +package com.xunhong.erp.turbo.api.biz.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum DealerTypeEnum { + /** + * 经销商类型:1_市场;2_超市; + */ + MARKET(1, "市场"), + SUPERMARKET(2, "超市"); + + @EnumValue + private final int type; + + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/OrderCostPayerTypeEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/OrderCostPayerTypeEnum.java new file mode 100644 index 0000000..9c0e7ea --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/OrderCostPayerTypeEnum.java @@ -0,0 +1,20 @@ +package com.xunhong.erp.turbo.api.biz.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum OrderCostPayerTypeEnum { + /** + * 付款方类型:1-我方,2-对方 + */ + US(1, "我方"), + OTHER(2, "对方"); + + @EnumValue + private final int type; + + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/OrderPackageBoxTypeEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/OrderPackageBoxTypeEnum.java new file mode 100644 index 0000000..bd0d195 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/OrderPackageBoxTypeEnum.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.biz.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum OrderPackageBoxTypeEnum { + /** + * 箱子类型:1_本次使用;2_额外运输;3_已使用额外运输;4_车上剩余; + */ + USED(1, "本次使用"), + EXTRA(2, "额外运输"), + EXTRA_USED(3, "已使用额外运输"), + REMAIN(4, "车上剩余"); + + @EnumValue + private final int type; + + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/OrderRebateCalcMethodEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/OrderRebateCalcMethodEnum.java new file mode 100644 index 0000000..e799374 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/OrderRebateCalcMethodEnum.java @@ -0,0 +1,20 @@ +package com.xunhong.erp.turbo.api.biz.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum OrderRebateCalcMethodEnum { + /** + * 返点计算方式:1_按净重计算;2_固定金额; + */ + BY_WEIGHT(1, "按净重计算"), + FIXED_AMOUNT(2, "固定金额"); + + @EnumValue + private final int type; + + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/OrderVehiclePriceTypeEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/OrderVehiclePriceTypeEnum.java new file mode 100644 index 0000000..ca864e9 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/OrderVehiclePriceTypeEnum.java @@ -0,0 +1,20 @@ +package com.xunhong.erp.turbo.api.biz.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum OrderVehiclePriceTypeEnum { + /** + * 运费类型:1-主运费;2-短驳费; + */ + MAIN_FREIGHT(1, "主运费"), + SHORT_TRANSPORT(2, "短驳费");; + + @EnumValue + private final int type; + + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/PurchaseOrderPricingMethodEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/PurchaseOrderPricingMethodEnum.java new file mode 100644 index 0000000..921ab9b --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/PurchaseOrderPricingMethodEnum.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.api.biz.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum PurchaseOrderPricingMethodEnum { + /** + * 报价方式:1_按毛重报价;2_按净重报价; + */ + BY_GROSS_WEIGHT(1, "按毛重报价"), + BY_NET_WEIGHT(2, "按净重报价"), + ; + + @EnumValue + private final int type; + + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/PurchaseOrderStateEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/PurchaseOrderStateEnum.java new file mode 100644 index 0000000..a5b19ac --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/PurchaseOrderStateEnum.java @@ -0,0 +1,24 @@ +package com.xunhong.erp.turbo.api.biz.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum PurchaseOrderStateEnum { + /** + * 订单状态: 0-草稿, 1-待审核, 2-待老板审核, 3-已发货(待付款), 4-已付款, 5-已完结 + */ + DRAFT(0, "草稿"), + WAITING_AUDIT(1, "待审核"), + WAITING_BOSS_APPROVE(2, "待老板审核"), + SHIPPING(3, "待付款"), + PAID(4, "已付款"), + COMPLETED(5, "已完结"); + + @EnumValue + private final int type; + + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/ShipOrderStateEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/ShipOrderStateEnum.java new file mode 100644 index 0000000..21e92de --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/enums/ShipOrderStateEnum.java @@ -0,0 +1,23 @@ +package com.xunhong.erp.turbo.api.biz.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum ShipOrderStateEnum { + /** + * 发货单状态:1_待回款;2_部分回款;3_已回款;4_拒收完结;5_已完结; + */ + WAIT_PAYMENT(1, "待回款"), + PARTIAL_PAYMENT(2, "部分回款"), + FULL_PAYMENT(3, "已回款"), + REJECT_FINISH(4, "拒收完结"), + FINISH(5, "已完结"); + + @EnumValue + private final int type; + + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxBrandListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxBrandListQry.java new file mode 100644 index 0000000..ab5834a --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxBrandListQry.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "纸箱品牌列表查询") +@EqualsAndHashCode(callSuper = true) +public class BoxBrandListQry extends Query { + + @Schema(title = "纸箱品牌ID", type = "string") + private Long brandId; + + @Schema(title = "纸箱品牌状态", type = "boolean") + private Boolean status; + + @Schema(title = "是否包含纸箱产品", type = "boolean") + private Boolean withProduct; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxBrandPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxBrandPageQry.java new file mode 100644 index 0000000..738cda7 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxBrandPageQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "纸箱品牌分页查询") +@EqualsAndHashCode(callSuper = true) +public class BoxBrandPageQry extends PageQuery { + + @Schema(title = "纸箱品牌ID", type = "string") + private Long brandId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxBrandShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxBrandShowQry.java new file mode 100644 index 0000000..d8fc250 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxBrandShowQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "纸箱品牌查询") +@EqualsAndHashCode(callSuper = true) +public class BoxBrandShowQry extends Query { + + @Schema(title = "纸箱品牌ID", type = "string") + private Long brandId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxProductListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxProductListQry.java new file mode 100644 index 0000000..b1c39ac --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxProductListQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "纸箱产品列表查询") +@EqualsAndHashCode(callSuper = true) +public class BoxProductListQry extends Query { + + @Schema(title = "纸箱产品ID", type = "string") + private Long productId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxProductPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxProductPageQry.java new file mode 100644 index 0000000..2af4622 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxProductPageQry.java @@ -0,0 +1,33 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.api.biz.dto.enums.BoxProductSpecTypeEnum; +import com.xunhong.erp.turbo.base.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "纸箱产品分页查询") +@EqualsAndHashCode(callSuper = true) +public class BoxProductPageQry extends PageQuery { + + @Schema(title = "纸箱产品ID", type = "string") + private Long productId; + + @Schema(title = "纸箱产品名称", type = "string") + private String name; + + @Schema(title = "纸箱品牌ID", type = "string") + private String brandId; + + /** + * 规格:1_2粒装;2_4粒装 + */ + @Schema(title = "规格:1_2粒装;2_4粒装") + private BoxProductSpecTypeEnum specType; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxProductShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxProductShowQry.java new file mode 100644 index 0000000..b5f25f5 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/BoxProductShowQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "纸箱产品查询") +@EqualsAndHashCode(callSuper = true) +public class BoxProductShowQry extends Query { + + @Schema(title = "纸箱产品ID", type = "string") + private Long productId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyListQry.java new file mode 100644 index 0000000..708336b --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyListQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "公司管理列表查询") +@EqualsAndHashCode(callSuper = true) +public class CompanyListQry extends Query { + + @Schema(title = "公司管理ID", type = "string") + private Long companyId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyPageQry.java new file mode 100644 index 0000000..243d822 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyPageQry.java @@ -0,0 +1,31 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "公司管理分页查询") +@EqualsAndHashCode(callSuper = true) +public class CompanyPageQry extends PageQuery { + + @Schema(title = "公司管理ID", type = "string") + private Long companyId; + + /** + * 公司名称 + */ + @Schema(title = "公司名称") + private String name; + + /** + * 税号 + */ + @Schema(title = "税号") + private String taxNumber; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyPaymentAccountListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyPaymentAccountListQry.java new file mode 100644 index 0000000..df6febf --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyPaymentAccountListQry.java @@ -0,0 +1,35 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.api.biz.dto.enums.CompanyPaymentAccountCategoryEnum; +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "公司付款账户列表查询") +@EqualsAndHashCode(callSuper = true) +public class CompanyPaymentAccountListQry extends Query { + + @Schema(title = "公司付款账户ID", type = "string") + private Long accountId; + + @Schema(title = "公司付款账户名称", type = "string") + private String accountName; + + @Schema(title = "公司名称", type = "string") + private String companyName; + + @Schema(title = "公司ID", type = "string") + private Long companyId; + + /** + * 账户类别:1_对公账户;2_私人账户 + */ + @Schema(title = "账户类别:1_对公账户;2_私人账户") + private CompanyPaymentAccountCategoryEnum accountCategory; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyPaymentAccountPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyPaymentAccountPageQry.java new file mode 100644 index 0000000..774becd --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyPaymentAccountPageQry.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.api.biz.dto.enums.CompanyPaymentAccountCategoryEnum; +import com.xunhong.erp.turbo.base.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "公司付款账户分页查询") +@EqualsAndHashCode(callSuper = true) +public class CompanyPaymentAccountPageQry extends PageQuery { + + @Schema(title = "公司付款账户ID", type = "string") + private Long accountId; + + @Schema(title = "公司ID", type = "string") + private Long companyId; + + @Schema(title = "付款账户名称", type = "string") + private String accountName; + + /** + * 账户类别:1_对公账户;2_私人账户 + */ + @Schema(title = "账户类别:1_对公账户;2_私人账户") + private CompanyPaymentAccountCategoryEnum accountCategory; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyPaymentAccountShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyPaymentAccountShowQry.java new file mode 100644 index 0000000..ac18201 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyPaymentAccountShowQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "公司付款账户查询") +@EqualsAndHashCode(callSuper = true) +public class CompanyPaymentAccountShowQry extends Query { + + @Schema(title = "公司付款账户ID", type = "string") + private Long accountId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyShowQry.java new file mode 100644 index 0000000..6c7d11f --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CompanyShowQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "公司管理查询") +@EqualsAndHashCode(callSuper = true) +public class CompanyShowQry extends Query { + + @Schema(title = "公司管理ID", type = "string") + private Long companyId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CostItemListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CostItemListQry.java new file mode 100644 index 0000000..9919509 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CostItemListQry.java @@ -0,0 +1,38 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.api.biz.dto.enums.CostItemCostTypeEnum; +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "费用项目列表查询") +@EqualsAndHashCode(callSuper = true) +public class CostItemListQry extends Query { + + @Schema(title = "费用项目ID", type = "string") + private Long itemId; + + /** + * 费用类型:1_包装材料;2_人工费用;3_其他费用;4_固定费用 + */ + @Schema(title = "费用类型:1_包装材料;2_人工费用;3_其他费用;4_固定费用") + private CostItemCostTypeEnum costType; + + /** + * 是否在录入时显示 + */ + @Schema(title = "是否在录入时显示") + private Boolean showInEntry; + + /** + * 状态:1_启用;0_禁用 + */ + @Schema(title = "状态:1_启用;0_禁用") + private Boolean status; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CostItemPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CostItemPageQry.java new file mode 100644 index 0000000..486fc67 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CostItemPageQry.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.api.biz.dto.enums.CostItemCostTypeEnum; +import com.xunhong.erp.turbo.base.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "费用项目分页查询") +@EqualsAndHashCode(callSuper = true) +public class CostItemPageQry extends PageQuery { + + @Schema(title = "费用项目ID", type = "string") + private Long itemId; + + /** + * 费用类型:1_包装材料;2_人工费用;3_其他费用;4_固定费用 + */ + @Schema(title = "费用类型:1_包装材料;2_人工费用;3_其他费用;4_固定费用") + private CostItemCostTypeEnum costType; + + /** + * 项目名称 + */ + @Schema(title = "项目名称") + private String name; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CostItemShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CostItemShowQry.java new file mode 100644 index 0000000..fd09dc1 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/CostItemShowQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "费用项目查询") +@EqualsAndHashCode(callSuper = true) +public class CostItemShowQry extends Query { + + @Schema(title = "费用项目ID", type = "string") + private Long itemId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerListQry.java new file mode 100644 index 0000000..35da2f5 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerListQry.java @@ -0,0 +1,33 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.xunhong.erp.turbo.api.biz.dto.enums.DealerTypeEnum; +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商表列表查询") +@EqualsAndHashCode(callSuper = true) +public class DealerListQry extends Query { + + @Schema(title = "经销商表ID", type = "string") + private Long dealerId; + + /** + * 经销商简称 + */ + @Schema(title = "经销商简称") + private String shortName; + + /** + * 经销商类型:1_市场;2_超市; + */ + @TableField(value = "dealer_type") + private DealerTypeEnum dealerType; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerPageQry.java new file mode 100644 index 0000000..8092f8e --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerPageQry.java @@ -0,0 +1,35 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.api.biz.dto.enums.DealerTypeEnum; +import com.xunhong.erp.turbo.base.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商表分页查询") +@EqualsAndHashCode(callSuper = true) +public class DealerPageQry extends PageQuery { + + /** + * 经销商简称 + */ + @Schema(title = "经销商简称") + private String shortName; + + /** + * 经销商全称 + */ + @Schema(title = "经销商全称") + private String fullName; + + /** + * 经销商类型:1_市场;2_超市; + */ + @Schema(title = "经销商类型:1_市场;2_超市;") + private DealerTypeEnum dealerType; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerPaymentAccountListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerPaymentAccountListQry.java new file mode 100644 index 0000000..fab5a9e --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerPaymentAccountListQry.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商付款账户列表查询") +@EqualsAndHashCode(callSuper = true) +public class DealerPaymentAccountListQry extends Query { + + @Schema(title = "经销商ID", type = "string") + private Long dealerId; + + @Schema(title = "关键词", type = "string") + private String keyword; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerPaymentAccountPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerPaymentAccountPageQry.java new file mode 100644 index 0000000..0f9f3c4 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerPaymentAccountPageQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商付款账户分页查询") +@EqualsAndHashCode(callSuper = true) +public class DealerPaymentAccountPageQry extends PageQuery { + + @Schema(title = "经销商ID", type = "string") + private Long dealerId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerPaymentAccountShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerPaymentAccountShowQry.java new file mode 100644 index 0000000..9af5cc7 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerPaymentAccountShowQry.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商付款账户查询") +@EqualsAndHashCode(callSuper = true) +public class DealerPaymentAccountShowQry extends Query { + + @Schema(title = "经销商付款账户ID", type = "string") + private Long accountId; + + @Schema(title = "经销商ID", type = "string") + private Long dealerId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerRebateCustomerListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerRebateCustomerListQry.java new file mode 100644 index 0000000..ba56f75 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerRebateCustomerListQry.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商返点客户列表查询") +@EqualsAndHashCode(callSuper = true) +public class DealerRebateCustomerListQry extends Query { + + @Schema(title = "经销商ID", type = "string") + private Long dealerId; + + @Schema(title = "客户名称", type = "string") + private String name; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerRebateCustomerPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerRebateCustomerPageQry.java new file mode 100644 index 0000000..798f94b --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerRebateCustomerPageQry.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商返点客户分页查询") +@EqualsAndHashCode(callSuper = true) +public class DealerRebateCustomerPageQry extends PageQuery { + + @Schema(title = "经销商ID", type = "string") + private Long dealerId; + + @Schema(title = "客户名称", type = "string") + private String name; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerRebateCustomerShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerRebateCustomerShowQry.java new file mode 100644 index 0000000..8074607 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerRebateCustomerShowQry.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商返点客户查询") +@EqualsAndHashCode(callSuper = true) +public class DealerRebateCustomerShowQry extends Query { + + @Schema(title = "经销商返点客户ID", type = "string") + private Long customerId; + + @Schema(title = "经销商ID", type = "string") + private Long dealerId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerShowQry.java new file mode 100644 index 0000000..3b07962 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerShowQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商表查询") +@EqualsAndHashCode(callSuper = true) +public class DealerShowQry extends Query { + + @Schema(title = "经销商表ID", type = "string") + private Long dealerId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerWarehouseListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerWarehouseListQry.java new file mode 100644 index 0000000..c8610e3 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerWarehouseListQry.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商仓库列表查询") +@EqualsAndHashCode(callSuper = true) +public class DealerWarehouseListQry extends Query { + + @Schema(title = "经销商ID", type = "string") + private Long dealerId; + + @Schema(title = "经销商付款账户ID", type = "string") + private Long accountId; + + @Schema(title = "仓库名称", type = "string") + private String name; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerWarehousePageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerWarehousePageQry.java new file mode 100644 index 0000000..9a82818 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerWarehousePageQry.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商仓库分页查询") +@EqualsAndHashCode(callSuper = true) +public class DealerWarehousePageQry extends PageQuery { + + @Schema(title = "经销商ID", type = "string") + private Long dealerId; + + @Schema(title = "经销商付款账户ID", type = "string") + private Long accountId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerWarehouseShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerWarehouseShowQry.java new file mode 100644 index 0000000..6d918aa --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/DealerWarehouseShowQry.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商仓库查询") +@EqualsAndHashCode(callSuper = true) +public class DealerWarehouseShowQry extends Query { + + @Schema(title = "经销商仓库ID", type = "string") + private Long warehouseId; + + @Schema(title = "经销商付款账户ID", type = "string") + private Long accountId; + + @Schema(title = "经销商ID", type = "string") + private Long dealerId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/GiftBoxListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/GiftBoxListQry.java new file mode 100644 index 0000000..4c2888a --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/GiftBoxListQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "礼盒列表查询") +@EqualsAndHashCode(callSuper = true) +public class GiftBoxListQry extends Query { + + @Schema(title = "礼盒ID", type = "string") + private Long boxId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/GiftBoxPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/GiftBoxPageQry.java new file mode 100644 index 0000000..1159c74 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/GiftBoxPageQry.java @@ -0,0 +1,24 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "礼盒分页查询") +@EqualsAndHashCode(callSuper = true) +public class GiftBoxPageQry extends PageQuery { + + @Schema(title = "礼盒ID", type = "string") + private Long boxId; + + @Schema(title = "礼盒名称", type = "string") + private String name; + + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/GiftBoxShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/GiftBoxShowQry.java new file mode 100644 index 0000000..f1c1795 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/GiftBoxShowQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "礼盒查询") +@EqualsAndHashCode(callSuper = true) +public class GiftBoxShowQry extends Query { + + @Schema(title = "礼盒ID", type = "string") + private Long boxId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/PurchaseOrderCountQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/PurchaseOrderCountQry.java new file mode 100644 index 0000000..6e88f9d --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/PurchaseOrderCountQry.java @@ -0,0 +1,23 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.api.biz.dto.enums.PurchaseOrderStateEnum; +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "采购订单数量查询") +@EqualsAndHashCode(callSuper = true) +public class PurchaseOrderCountQry extends Query { + + /** + * 订单状态: 0-草稿, 1-待审核, 2-待老板审核, 3-已发货(待付款), 4-已付款, 5-已完结 + */ + @Schema(title = "订单状态: 0-草稿, 1-待审核, 2-待老板审核, 3-已发货(待付款), 4-已付款, 5-已完结") + private PurchaseOrderStateEnum state; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/PurchaseOrderListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/PurchaseOrderListQry.java new file mode 100644 index 0000000..11bfa11 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/PurchaseOrderListQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "采购订单列表查询") +@EqualsAndHashCode(callSuper = true) +public class PurchaseOrderListQry extends Query { + + @Schema(title = "采购订单ID", type = "string") + private Long orderId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/PurchaseOrderPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/PurchaseOrderPageQry.java new file mode 100644 index 0000000..1afc3b5 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/PurchaseOrderPageQry.java @@ -0,0 +1,47 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.api.biz.dto.enums.PurchaseOrderStateEnum; +import com.xunhong.erp.turbo.base.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "采购订单分页查询") +@EqualsAndHashCode(callSuper = true) +public class PurchaseOrderPageQry extends PageQuery { + + @Schema(title = "采购订单ID", type = "string") + private Long orderId; + + @Schema(title = "车辆编号", type = "string") + private String vehicleNo; + + @Schema(title = "采购订单编号", type = "string") + private String orderSn; + + /** + * 订单状态: 0-草稿, 1-待审核, 2-待老板审核, 3-已发货(待付款), 4-已付款, 5-已完结 + */ + @Schema(title = "订单状态: 0-草稿, 1-待审核, 2-待老板审核, 3-已发货(待付款), 4-已付款, 5-已完结") + private PurchaseOrderStateEnum state; + + @Schema(title = "供应商名称", type = "string") + private String supplierName; + + @Schema(title = "经销商付款账户ID", type = "string") + private Long dealerPaymentAccountId; + + @Schema(title = "经销商ID", type = "string") + private Long dealerId; + + /** + * 创建人ID + */ + @Schema(title = "创建人ID", type = "string") + private Long createdBy; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/PurchaseOrderShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/PurchaseOrderShowQry.java new file mode 100644 index 0000000..004f7cd --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/PurchaseOrderShowQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "采购订单查询") +@EqualsAndHashCode(callSuper = true) +public class PurchaseOrderShowQry extends Query { + + @Schema(title = "采购订单ID", type = "string") + private Long orderId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/ShipOrderListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/ShipOrderListQry.java new file mode 100644 index 0000000..ffcee51 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/ShipOrderListQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "发货单列表查询") +@EqualsAndHashCode(callSuper = true) +public class ShipOrderListQry extends Query { + + @Schema(title = "发货单ID", type = "string") + private Long shipOrderId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/ShipOrderPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/ShipOrderPageQry.java new file mode 100644 index 0000000..33447cc --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/ShipOrderPageQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "发货单分页查询") +@EqualsAndHashCode(callSuper = true) +public class ShipOrderPageQry extends PageQuery { + + @Schema(title = "发货单ID", type = "string") + private Long shipOrderId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/ShipOrderShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/ShipOrderShowQry.java new file mode 100644 index 0000000..5d26d9e --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/ShipOrderShowQry.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "发货单查询") +@EqualsAndHashCode(callSuper = true) +public class ShipOrderShowQry extends Query { + + @Schema(title = "发货单ID", type = "string") + private Long shipOrderId; + + @Schema(title = "采购单ID", type = "string") + private Long purchaseOrderId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/SupplierListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/SupplierListQry.java new file mode 100644 index 0000000..9e54b93 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/SupplierListQry.java @@ -0,0 +1,28 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "供应商列表查询") +@EqualsAndHashCode(callSuper = true) +public class SupplierListQry extends Query { + + @Schema(title = "供应商ID", type = "string") + private Long supplierId; + + @Schema(title = "供应商名称", type = "string") + private String name; + + /** + * 状态:1_启用;0_禁用; + */ + @Schema(title = "状态:1_启用;0_禁用;") + private Boolean status; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/SupplierPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/SupplierPageQry.java new file mode 100644 index 0000000..55195ab --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/SupplierPageQry.java @@ -0,0 +1,31 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "供应商分页查询") +@EqualsAndHashCode(callSuper = true) +public class SupplierPageQry extends PageQuery { + + @Schema(title = "供应商ID", type = "string") + private Long supplierId; + + @Schema(title = "供应商名称", type = "string") + private String name; + + @Schema(title = "身份证号", type = "string") + private String idCard; + + @Schema(title = "手机号", type = "string") + private String phone; + + @Schema(title = "银行卡号", type = "string") + private String bankCard; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/SupplierShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/SupplierShowQry.java new file mode 100644 index 0000000..5cf9d33 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/qry/SupplierShowQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.biz.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "供应商查询") +@EqualsAndHashCode(callSuper = true) +public class SupplierShowQry extends Query { + + @Schema(title = "供应商ID", type = "string") + private Long supplierId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/BoxBrandVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/BoxBrandVO.java new file mode 100644 index 0000000..8511194 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/BoxBrandVO.java @@ -0,0 +1,68 @@ +package com.xunhong.erp.turbo.api.biz.dto.vo; + +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.biz.dto.enums.BoxBrandTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "纸箱品牌") +@EqualsAndHashCode(callSuper = true) +public class BoxBrandVO extends DTO { + + /** + * 品牌ID + */ + @Schema(title = "品牌ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long brandId; + + /** + * 品牌名称 + */ + @Schema(title = "品牌名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 品牌图片URL + */ + @Schema(title = "品牌图片URL") + private String image; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态:1_启用;0_禁用 + */ + @Schema(title = "状态:1_启用;0_禁用", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + + /** + * 品牌类型:1_我方纸箱;2_瓜农纸箱;3_第三方纸箱 + */ + @Schema(title = "品牌类型:1_我方纸箱;2_瓜农纸箱;3_第三方纸箱", requiredMode = Schema.RequiredMode.REQUIRED) + private BoxBrandTypeEnum type; + + /** + * 纸箱产品列表 + */ + @Schema(title = "纸箱产品列表") + private List boxProductVOList; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + +} \ No newline at end of file diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/BoxProductVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/BoxProductVO.java new file mode 100644 index 0000000..7ae0b27 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/BoxProductVO.java @@ -0,0 +1,87 @@ +package com.xunhong.erp.turbo.api.biz.dto.vo; + +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.biz.dto.enums.BoxBrandTypeEnum; +import com.xunhong.erp.turbo.api.biz.dto.enums.BoxProductSpecTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "纸箱产品") +@EqualsAndHashCode(callSuper = true) +public class BoxProductVO extends DTO { + + /** + * 产品ID + */ + @Schema(title = "产品ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long productId; + + /** + * 纸箱名称 + */ + @Schema(title = "纸箱名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 重量(kg) + */ + @Schema(title = "重量(kg)", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal weight; + + /** + * 成本价 + */ + @Schema(title = "成本价", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal costPrice; + + /** + * 销售价 + */ + @Schema(title = "销售价", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal salePrice; + + /** + * 规格:1_2粒装;2_4粒装 + */ + @Schema(title = "规格:1_2粒装;2_4粒装", requiredMode = Schema.RequiredMode.REQUIRED) + private BoxProductSpecTypeEnum specType; + + /** + * 品牌ID + */ + @Schema(title = "品牌ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long brandId; + + /** + * 品牌类型:1_我方纸箱;2_瓜农纸箱;3_第三方纸箱 + */ + @Schema(title = "品牌类型:1_我方纸箱;2_瓜农纸箱;3_第三方纸箱", requiredMode = Schema.RequiredMode.REQUIRED) + private BoxBrandTypeEnum type; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态:1_启用;0_禁用 + */ + @Schema(title = "状态:1_启用;0_禁用", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + +} \ No newline at end of file diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/CompanyPaymentAccountVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/CompanyPaymentAccountVO.java new file mode 100644 index 0000000..3658f57 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/CompanyPaymentAccountVO.java @@ -0,0 +1,106 @@ +package com.xunhong.erp.turbo.api.biz.dto.vo; + +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.biz.dto.enums.CompanyPaymentAccountCategoryEnum; +import com.xunhong.erp.turbo.api.biz.dto.enums.CompanyPaymentAccountTypeEnum; +import com.xunhong.erp.turbo.api.biz.dto.enums.CompanyPaymentPublicAccountTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "公司付款账户") +@EqualsAndHashCode(callSuper = true) +public class CompanyPaymentAccountVO extends DTO { + + /** + * 账户ID + */ + @Schema(title = "账户ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long accountId; + + /** + * 公司ID + */ + @Schema(title = "公司ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long companyId; + + /** + * 账户类别:1_对公账户;2_私人账户 + */ + @Schema(title = "账户类别:1_对公账户;2_私人账户", requiredMode = Schema.RequiredMode.REQUIRED) + private CompanyPaymentAccountCategoryEnum accountCategory; + + /** + * 账户类型:1_银行卡;2_支付宝;3_微信 + */ + @Schema(title = "账户类型:1_银行卡;2_支付宝;3_微信", requiredMode = Schema.RequiredMode.REQUIRED) + private CompanyPaymentAccountTypeEnum accountType; + + /** + * 银行名称 + */ + @Schema(title = "银行名称") + private String bankName; + + /** + * 支行名称 + */ + @Schema(title = "支行名称") + private String branchName; + + /** + * 对公账户类型:1_基本户;2_一般户;3_专用账户;4_临时户 + */ + @Schema(title = "对公账户类型:1_基本户;2_一般户;3_专用账户;4_临时户") + private CompanyPaymentPublicAccountTypeEnum publicAccountType; + + /** + * 开户公司名称、支付宝昵称、微信号 + */ + @Schema(title = "开户公司名称、支付宝昵称、微信号", requiredMode = Schema.RequiredMode.REQUIRED) + private String accountName; + + /** + * 银行账号、支付宝账号、微信账号 + */ + @Schema(title = "银行账号、支付宝账号、微信账号", requiredMode = Schema.RequiredMode.REQUIRED) + private String accountNumber; + + /** + * 是否主付款账户:0_否;1_是 + */ + @Schema(title = "是否主付款账户:0_否;1_是", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean isPrimary; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态:1_启用;2_禁用; + */ + @Schema(title = "状态:1_启用;2_禁用;", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + + /** + * 公司信息 + */ + @Schema(title = "公司信息") + private CompanyVO companyVO; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/CompanyVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/CompanyVO.java new file mode 100644 index 0000000..bd65075 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/CompanyVO.java @@ -0,0 +1,73 @@ +package com.xunhong.erp.turbo.api.biz.dto.vo; + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "公司管理") +@EqualsAndHashCode(callSuper = true) +public class CompanyVO extends DTO { + + /** + * 公司ID + */ + @Schema(title = "公司ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long companyId; + + /** + * 公司名称 + */ + @Schema(title = "公司名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 税号 + */ + @Schema(title = "税号", requiredMode = Schema.RequiredMode.REQUIRED) + private String taxNumber; + + /** + * 联系人 + */ + @Schema(title = "联系人", requiredMode = Schema.RequiredMode.REQUIRED) + private String contactPerson; + + /** + * 联系电话 + */ + @Schema(title = "联系电话", requiredMode = Schema.RequiredMode.REQUIRED) + private String contactPhone; + + /** + * 发货地址 + */ + @Schema(title = "发货地址", requiredMode = Schema.RequiredMode.REQUIRED) + private String address; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态:1_启用;0_禁用; + */ + @Schema(title = "状态:1_启用;0_禁用;", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/CostItemVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/CostItemVO.java new file mode 100644 index 0000000..b9f9fc7 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/CostItemVO.java @@ -0,0 +1,75 @@ +package com.xunhong.erp.turbo.api.biz.dto.vo; + +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.biz.dto.enums.CostItemCostTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "费用项目") +@EqualsAndHashCode(callSuper = true) +public class CostItemVO extends DTO { + + /** + * 项目ID + */ + @Schema(title = "项目ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long itemId; + + /** + * 费用类型:1_包装材料;2_人工费用;3_其他费用;4_固定费用 + */ + @Schema(title = "费用类型:1_包装材料;2_人工费用;3_其他费用;4_固定费用", requiredMode = Schema.RequiredMode.REQUIRED) + private CostItemCostTypeEnum costType; + + /** + * 项目名称 + */ + @Schema(title = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 单位 + */ + @Schema(title = "单位", requiredMode = Schema.RequiredMode.REQUIRED) + private String unit; + + /** + * 单价 + */ + @Schema(title = "单价", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal price; + + /** + * 是否在录入时显示 + */ + @Schema(title = "是否在录入时显示", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean showInEntry; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态:1_启用;0_禁用 + */ + @Schema(title = "状态:1_启用;0_禁用", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/DealerPaymentAccountVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/DealerPaymentAccountVO.java new file mode 100644 index 0000000..99648a2 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/DealerPaymentAccountVO.java @@ -0,0 +1,91 @@ +package com.xunhong.erp.turbo.api.biz.dto.vo; + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商付款账户") +@EqualsAndHashCode(callSuper = true) +public class DealerPaymentAccountVO extends DTO { + + /** + * 账户ID + */ + @Schema(title = "账户ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long accountId; + + /** + * 经销商ID + */ + @Schema(title = "经销商ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long dealerId; + + /** + * 公司名称 + */ + @Schema(title = "公司名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String companyName; + + /** + * 税号 + */ + @Schema(title = "税号", requiredMode = Schema.RequiredMode.REQUIRED) + private String taxNumber; + + /** + * 银行账号 + */ + @Schema(title = "银行账号", requiredMode = Schema.RequiredMode.REQUIRED) + private String bankAccount; + + /** + * 单位地址 + */ + @Schema(title = "单位地址") + private String companyAddress; + + /** + * 电话 + */ + @Schema(title = "电话") + private String phone; + + /** + * 开户行 + */ + @Schema(title = "开户行") + private String openingBank; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态:1_启用;0_禁用; + */ + @Schema(title = "状态:1_启用;0_禁用;") + private Boolean status; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + + /** + * 经销商信息 + */ + @Schema(title = "经销商信息") + private DealerVO dealerVO; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/DealerRebateCustomerVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/DealerRebateCustomerVO.java new file mode 100644 index 0000000..c5540f7 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/DealerRebateCustomerVO.java @@ -0,0 +1,61 @@ +package com.xunhong.erp.turbo.api.biz.dto.vo; + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商返点客户") +@EqualsAndHashCode(callSuper = true) +public class DealerRebateCustomerVO extends DTO { + + /** + * 客户ID + */ + @Schema(title = "客户ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long customerId; + + /** + * 经销商ID + */ + @Schema(title = "经销商ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long dealerId; + + /** + * 客户名称 + */ + @Schema(title = "客户名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 状态:1_启用;0_禁用; + */ + @Schema(title = "状态:1_启用;0_禁用;", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + + /** + * 经销商信息 + */ + @Schema(title = "经销商信息") + private DealerVO dealerVO; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/DealerVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/DealerVO.java new file mode 100644 index 0000000..102fbb1 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/DealerVO.java @@ -0,0 +1,117 @@ +package com.xunhong.erp.turbo.api.biz.dto.vo; + +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.biz.dto.enums.DealerTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商表") +@EqualsAndHashCode(callSuper = true) +public class DealerVO extends DTO { + + /** + * 经销商ID + */ + @Schema(title = "经销商ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long dealerId; + + /** + * 经销商简称 + */ + @Schema(title = "经销商简称", requiredMode = Schema.RequiredMode.REQUIRED) + private String shortName; + + /** + * 经销商全称 + */ + @Schema(title = "经销商全称") + private String fullName; + + /** + * 经销商类型:1_市场;2_超市; + */ + @Schema(title = "经销商类型:1_市场;2_超市;", requiredMode = Schema.RequiredMode.REQUIRED) + private DealerTypeEnum dealerType; + + /** + * 是否开启分成 + */ + @Schema(title = "是否开启分成") + private Boolean enableShare; + + /** + * 分成比例 + */ + @Schema(title = "分成比例") + private BigDecimal shareRatio; + + /** + * 运费是否作为成本 + */ + @Schema(title = "运费是否作为成本") + private Boolean freightCostFlag; + + /** + * 草帘是否作为成本 + */ + @Schema(title = "草帘是否作为成本") + private Boolean strawMatCostFlag; + + /** + * 发货单合计金额是否含包装费 + */ + @Schema(title = "发货单合计金额是否含包装费") + private Boolean includePackingFlag; + + /** + * 单据类型:delivery-发货单, purchase-采购底单, cost-成本单 + */ + @Schema(title = "单据类型:delivery-发货单, purchase-采购底单, cost-成本单") + private String documentTypes; + + /** + * 应收金额 + */ + @Schema(title = "应收金额") + private BigDecimal receivable; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态:1_启用;0_禁用; + */ + @Schema(title = "状态:1_启用;0_禁用;", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + + /** + * 发货单模板 + */ + @Schema(title = "发货单模板") + private String deliveryTemplate; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + + /** + * 经销商账户列表 + */ + @Schema(title = "经销商账户列表") + private List dealerPaymentAccountVOList; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/DealerWarehouseVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/DealerWarehouseVO.java new file mode 100644 index 0000000..b6ba167 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/DealerWarehouseVO.java @@ -0,0 +1,103 @@ +package com.xunhong.erp.turbo.api.biz.dto.vo; + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "经销商仓库") +@EqualsAndHashCode(callSuper = true) +public class DealerWarehouseVO extends DTO { + + /** + * 仓库ID + */ + @Schema(title = "仓库ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long warehouseId; + + /** + * 经销商ID + */ + @Schema(title = "经销商ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long dealerId; + + /** + * 经销商账户ID + */ + @Schema(title = "经销商账户ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long accountId; + + /** + * 仓库名称 + */ + @Schema(title = "仓库名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 仓库地址 + */ + @Schema(title = "仓库地址", requiredMode = Schema.RequiredMode.REQUIRED) + private String address; + + /** + * 联系人 + */ + @Schema(title = "联系人") + private String contactPerson; + + /** + * 联系电话 + */ + @Schema(title = "联系电话") + private String contactPhone; + + /** + * 收货人姓名 + */ + @Schema(title = "收货人姓名") + private String receiverName; + + /** + * 收货人电话 + */ + @Schema(title = "收货人电话") + private String receiverPhone; + + /** + * 状态:1_启用;0_禁用; + */ + @Schema(title = "状态:1_启用;0_禁用;", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + + /** + * 经销商信息 + */ + @Schema(title = "经销商信息") + private DealerVO dealerVO; + + /** + * 经销商账户信息 + */ + @Schema(title = "经销商账户信息") + private DealerPaymentAccountVO dealerPaymentAccountVO; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/GiftBoxVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/GiftBoxVO.java new file mode 100644 index 0000000..0e5dc28 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/GiftBoxVO.java @@ -0,0 +1,68 @@ +package com.xunhong.erp.turbo.api.biz.dto.vo; + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "礼盒") +@EqualsAndHashCode(callSuper = true) +public class GiftBoxVO extends DTO { + + /** + * 礼盒ID + */ + @Schema(title = "礼盒ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long boxId; + + /** + * 礼盒名称 + */ + @Schema(title = "礼盒名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 成本价 + */ + @Schema(title = "成本价", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal costPrice; + + /** + * 重量(kg) + */ + @Schema(title = "重量(kg)", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal weight; + + /** + * 售价 + */ + @Schema(title = "售价", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal salePrice; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态:1_启用;0_禁用 + */ + @Schema(title = "状态:1_启用;0_禁用", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/PurchaseOrderVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/PurchaseOrderVO.java new file mode 100644 index 0000000..4d45eac --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/PurchaseOrderVO.java @@ -0,0 +1,166 @@ +package com.xunhong.erp.turbo.api.biz.dto.vo; + +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.biz.dto.common.*; +import com.xunhong.erp.turbo.api.biz.dto.enums.PurchaseOrderPricingMethodEnum; +import com.xunhong.erp.turbo.api.biz.dto.enums.PurchaseOrderStateEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "采购订单") +@EqualsAndHashCode(callSuper = true) +public class PurchaseOrderVO extends DTO { + + /** + * 订单ID + */ + @Schema(title = "订单ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long orderId; + + /** + * 订单编号 + */ + @Schema(title = "订单编号", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private String orderSn; + + /** + * 是否是草稿 + */ + @Schema(title = "是否是草稿", type = "boolean", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean draft; + + /** + * 步骤标识 + */ + @Schema(title = "步骤标识") + private Integer active; + + /** + * 产地负责人 + */ + @Schema(title = "产地负责人") + private String originPrincipal; + + /** + * 报价方式:1_按毛重报价;2_按净重报价; + */ + @Schema(title = "报价方式:1_按毛重报价;2_按净重报价;") + private PurchaseOrderPricingMethodEnum pricingMethod; + + /** + * 销售金额 + */ + @Schema(title = "销售金额") + private BigDecimal saleAmount; + + /** + * 包装费 + */ + @Schema(title = "包装费") + private BigDecimal packageFee; + + /** + * 平均单价(元/斤) + */ + @Schema(title = "平均单价(元/斤)") + private BigDecimal avgUnitPrice; + + /** + * 是否返点 + */ + @Schema(title = "是否返点") + private Boolean rebate; + + /** + * 毛重(斤) + */ + @Schema(title = "毛重(斤)") + private BigDecimal grossWeight; + + /** + * 净重(斤) + */ + @Schema(title = "净重(斤)") + private BigDecimal netWeight; + + /** + * 成本合计 + */ + @Schema(title = "成本合计") + private BigDecimal totalCost; + + /** + * 运费 + */ + @Schema(title = "运费") + private BigDecimal freightCharge; + + /** + * 瓜农数量 + */ + @Schema(title = "瓜农数量") + private Integer supplierCount; + + /** + * 订单状态: 0-草稿, 1-待审核, 2-待老板审核, 3-已发货(待付款), 4-已付款, 5-已完结 + */ + @Schema(title = "订单状态: 0-草稿, 1-待审核, 2-待老板审核, 3-已发货(待付款), 4-已付款, 5-已完结") + private PurchaseOrderStateEnum state; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 创建人ID + */ + @Schema(title = "创建人ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long createdBy; + + /** + * 创建人姓名 + */ + @Schema(title = "创建人姓名") + private String createdByName; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + + @Schema(title = "返点信息", requiredMode = Schema.RequiredMode.REQUIRED) + private OrderRebate orderRebate; + + @Schema(title = "车辆信息", requiredMode = Schema.RequiredMode.REQUIRED) + private OrderVehicle orderVehicle; + + @Schema(title = "公司信息", requiredMode = Schema.RequiredMode.REQUIRED) + private OrderCompany orderCompany; + + @Schema(title = "经销商信息", requiredMode = Schema.RequiredMode.REQUIRED) + private OrderDealer orderDealer; + + @Schema(title = "供应商信息", requiredMode = Schema.RequiredMode.REQUIRED) + private List orderSupplierList; + + @Schema(title = "采购订单费用信息", requiredMode = Schema.RequiredMode.REQUIRED) + private List orderCostList; + + @SuppressWarnings("unused") + public Boolean getDraft() { + return state == PurchaseOrderStateEnum.DRAFT; + } +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/ShipOrderVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/ShipOrderVO.java new file mode 100644 index 0000000..9b9709b --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/ShipOrderVO.java @@ -0,0 +1,243 @@ +package com.xunhong.erp.turbo.api.biz.dto.vo; + +import com.alibaba.cola.dto.DTO; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.xunhong.erp.turbo.api.biz.dto.common.ShipOrderItem; +import com.xunhong.erp.turbo.api.biz.dto.common.ShipOrderPackage; +import com.xunhong.erp.turbo.api.biz.dto.enums.ShipOrderStateEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "发货单") +@EqualsAndHashCode(callSuper = true) +public class ShipOrderVO extends DTO { + + /** + * 发货单ID + */ + @Schema(title = "发货单ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long shipOrderId; + + /** + * 采购单ID + */ + @Schema(title = "采购单ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long purchaseOrderId; + + /** + * 发货单编号 + */ + @Schema(title = "发货单编号") + private String orderSn; + + /** + * 经销商ID + */ + @Schema(title = "经销商ID", type = "string") + private Long dealerId; + + /** + * 经销商名称 + */ + @Schema(title = "经销商名称") + private String dealerName; + + /** + * 仓库ID + */ + @Schema(title = "仓库ID", type = "string") + private Long warehouseId; + + /** + * 仓库名称 + */ + @Schema(title = "仓库名称") + private String warehouseName; + + /** + * 车次号 + */ + @Schema(title = "车次号") + private String vehicleNo; + + /** + * 发货地址 + */ + @Schema(title = "发货地址") + private String shippingAddress; + + /** + * 收货地址 + */ + @Schema(title = "收货地址") + private String receivingAddress; + + /** + * 发货日期 + */ + @Schema(title = "发货日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate shippingDate; + + /** + * 预计到仓时间 + */ + @Schema(title = "预计到仓时间") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate estimatedArrivalDate; + + /** + * 西瓜品级 + */ + @Schema(title = "西瓜品级") + private String watermelonGrade; + + /** + * 司机姓名 + */ + @Schema(title = "司机姓名") + private String driverName; + + /** + * 司机手机号 + */ + @Schema(title = "司机手机号") + private String driverPhone; + + /** + * 车牌号码 + */ + @Schema(title = "车牌号码") + private String licensePlate; + + /** + * 运费欠款(元) + */ + @Schema(title = "运费欠款(元)") + private BigDecimal freightDebt; + + /** + * 草帘欠款(元) + */ + @Schema(title = "草帘欠款(元)") + private BigDecimal strawMatDebt; + + /** + * 商标费(元) + */ + @Schema(title = "商标费(元)") + private BigDecimal trademarkFee; + + /** + * 人工费(元) + */ + @Schema(title = "人工费(元)") + private BigDecimal laborFee; + + /** + * 纸箱费(元) + */ + @Schema(title = "纸箱费(元)") + private BigDecimal cartonFee; + + /** + * 打码费(元) + */ + @Schema(title = "打码费(元)") + private BigDecimal codingFee; + + /** + * 计提费(元) + */ + @Schema(title = "计提费(元)") + private BigDecimal provisionFee; + + /** + * 合计金额(元) + */ + @Schema(title = "合计金额(元)") + private BigDecimal totalAmount; + + /** + * 瓜农姓名逗号隔开 + */ + @Schema(title = "瓜农姓名逗号隔开") + private String farmerInfo; + + /** + * 发货单据 + */ + @Schema(title = "发货单据") + private String shipDocument; + + /** + * 采购底单 + */ + @Schema(title = "采购底单") + private String purchaseDocument; + + /** + * 成本单据 + */ + @Schema(title = "成本单据") + private String costDocument; + + /** + * 发货单状态:1_待回款;2_部分回款;3_已回款;4_拒收完结;5_已完结; + */ + @Schema(title = "发货单状态:1_待回款;2_部分回款;3_已回款;4_拒收完结;5_已完结;") + private ShipOrderStateEnum state; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 创建人ID + */ + @Schema(title = "创建人ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long createdBy; + + /** + * 创建人姓名 + */ + @Schema(title = "创建人姓名") + private String createdByName; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + + + /** + * 发货单明细 + */ + @Schema(title = "发货单明细") + private List shipOrderItemList; + + /** + * 发货单子项表 + */ + @Schema(title = "发货单子项表") + private List shipOrderPackageList; + + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/SupplierVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/SupplierVO.java new file mode 100644 index 0000000..525e721 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/biz/dto/vo/SupplierVO.java @@ -0,0 +1,73 @@ +package com.xunhong.erp.turbo.api.biz.dto.vo; + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "供应商") +@EqualsAndHashCode(callSuper = true) +public class SupplierVO extends DTO { + + /** + * 供应商ID + */ + @Schema(title = "供应商ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long supplierId; + + /** + * 姓名 + */ + @Schema(title = "姓名", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 身份证号 + */ + @Schema(title = "身份证号", requiredMode = Schema.RequiredMode.REQUIRED) + private String idCard; + + /** + * 手机号 + */ + @Schema(title = "手机号", requiredMode = Schema.RequiredMode.REQUIRED) + private String phone; + + /** + * 银行卡号 + */ + @Schema(title = "银行卡号", requiredMode = Schema.RequiredMode.REQUIRED) + private String bankCard; + + /** + * 微信收款码URL + */ + @Schema(title = "微信收款码URL") + private String wechatQr; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态:1_启用;0_禁用; + */ + @Schema(title = "状态:1_启用;0_禁用;", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean status; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/DeepSeekServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/DeepSeekServiceI.java new file mode 100644 index 0000000..67b10c5 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/DeepSeekServiceI.java @@ -0,0 +1,8 @@ +package com.xunhong.erp.turbo.api.facade.api; + +import com.xunhong.erp.turbo.api.facade.dto.cmd.VehicleExtractionCmd; +import com.xunhong.erp.turbo.api.facade.dto.vo.VehicleExtractionVO; + +public interface DeepSeekServiceI { + VehicleExtractionVO vehicleExtraction(VehicleExtractionCmd vehicleExtractionCmd); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/WxCpServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/WxCpServiceI.java new file mode 100644 index 0000000..d7591f5 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/WxCpServiceI.java @@ -0,0 +1,7 @@ +package com.xunhong.erp.turbo.api.facade.api; + +import com.xunhong.erp.turbo.api.facade.dto.cmd.WxCpNotifyCmd; + +public interface WxCpServiceI { + void notify(WxCpNotifyCmd wxCpNotifyCmd); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/WxMaServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/WxMaServiceI.java new file mode 100644 index 0000000..aea0629 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/WxMaServiceI.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.api.facade.api; + +import com.xunhong.erp.turbo.api.facade.dto.cmd.WxMaCallbackCmd; +import com.xunhong.erp.turbo.api.facade.dto.qry.WxMaOpenidQry; +import com.xunhong.erp.turbo.api.facade.dto.qry.WxMaPhoneQry; +import com.xunhong.erp.turbo.api.facade.dto.vo.WxMaOcrBankCardVO; +import com.xunhong.erp.turbo.api.facade.dto.vo.WxMaOcrIdCardVO; +import com.xunhong.erp.turbo.api.facade.dto.vo.WxMaOpenidVO; + +public interface WxMaServiceI { + + String callback(WxMaCallbackCmd wxMaCallbackCmd); + + WxMaOpenidVO getOpenId(WxMaOpenidQry wxMaOpenidQry); + + String getPhone(WxMaPhoneQry wxMaPhoneQry); + + WxMaOcrIdCardVO ocrIdCard(String ocrUrl); + + WxMaOcrBankCardVO ocrBankCard(String ocrUrl); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/WxMpServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/WxMpServiceI.java new file mode 100644 index 0000000..bc7b5bf --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/WxMpServiceI.java @@ -0,0 +1,7 @@ +package com.xunhong.erp.turbo.api.facade.api; + +import com.xunhong.erp.turbo.api.facade.dto.cmd.WxMpCallbackCmd; + +public interface WxMpServiceI { + String callback(WxMpCallbackCmd wxMpCallbackCmd); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/WxPayServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/WxPayServiceI.java new file mode 100644 index 0000000..dfdf8e8 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/api/WxPayServiceI.java @@ -0,0 +1,9 @@ +package com.xunhong.erp.turbo.api.facade.api; + + +import com.xunhong.erp.turbo.api.facade.dto.cmd.WxPayCreateCmd; +import com.xunhong.erp.turbo.api.facade.dto.vo.WxPayJsApiVO; + +public interface WxPayServiceI { + WxPayJsApiVO create(WxPayCreateCmd wxPayCreateCmd); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/VehicleExtractionCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/VehicleExtractionCmd.java new file mode 100644 index 0000000..54fb1d1 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/VehicleExtractionCmd.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.api.facade.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "车辆信息抽取") +@EqualsAndHashCode(callSuper = true) +public class VehicleExtractionCmd extends Command { + + @Schema(title = "消息内容", requiredMode = Schema.RequiredMode.REQUIRED) + private String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxCpNotifyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxCpNotifyCmd.java new file mode 100644 index 0000000..ebf0790 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxCpNotifyCmd.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.facade.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "企业微信通知") +@EqualsAndHashCode(callSuper = true) +public class WxCpNotifyCmd extends Command { + + @Schema(title = "企业微信通知key", requiredMode = Schema.RequiredMode.REQUIRED) + private String webhookKey; + + @Schema(title = "通知内容", requiredMode = Schema.RequiredMode.REQUIRED) + private String content; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxMaCallbackCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxMaCallbackCmd.java new file mode 100644 index 0000000..bd4fab9 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxMaCallbackCmd.java @@ -0,0 +1,39 @@ +package com.xunhong.erp.turbo.api.facade.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "微信小程序事件") +@EqualsAndHashCode(callSuper = true) +public class WxMaCallbackCmd extends Command { + + @Schema(title = "授权appid") + private String appId; + + @Schema(title = "第三方平台回调请求体") + private String requestBody; + + @Schema(title = "时间戳") + private String timestamp; + + @Schema(title = "随机字符串") + private String nonce; + + @Schema(title = "openid") + private String openid; + + @Schema(title = "签名") + private String signature; + + @Schema(title = "加密类型") + private String encType; + + @Schema(title = "消息签名") + private String msgSignature; + + @Schema(title = "随机字符串") + private String echostr; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxMaPhoneBindCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxMaPhoneBindCmd.java new file mode 100644 index 0000000..11c1794 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxMaPhoneBindCmd.java @@ -0,0 +1,24 @@ +package com.xunhong.erp.turbo.api.facade.dto.cmd; + + +import com.xunhong.erp.turbo.api.facade.dto.qry.WxMaPhoneQry; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "绑定微信小程序手机号码") +@EqualsAndHashCode(callSuper = true) +public class WxMaPhoneBindCmd extends WxMaPhoneQry { + @Schema(title = "微信code", requiredMode = Schema.RequiredMode.REQUIRED) + private String code; + + @Schema(title = "微信encryptedData", requiredMode = Schema.RequiredMode.REQUIRED) + private String encryptedData; + + @Schema(title = "微信iv", requiredMode = Schema.RequiredMode.REQUIRED) + private String iv; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxMpCallbackCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxMpCallbackCmd.java new file mode 100644 index 0000000..598624d --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxMpCallbackCmd.java @@ -0,0 +1,39 @@ +package com.xunhong.erp.turbo.api.facade.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "微信开放平台事件") +@EqualsAndHashCode(callSuper = true) +public class WxMpCallbackCmd extends Command { + + @Schema(title = "授权appid") + private String appId; + + @Schema(title = "第三方平台回调请求体") + private String requestBody; + + @Schema(title = "时间戳") + private String timestamp; + + @Schema(title = "随机字符串") + private String nonce; + + @Schema(title = "openid") + private String openid; + + @Schema(title = "签名") + private String signature; + + @Schema(title = "加密类型") + private String encType; + + @Schema(title = "消息签名") + private String msgSignature; + + @Schema(title = "随机字符串") + private String echostr; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxPayCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxPayCreateCmd.java new file mode 100644 index 0000000..168a8f1 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxPayCreateCmd.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.api.facade.dto.cmd; + + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "微信支付") +@EqualsAndHashCode(callSuper = true) +public class WxPayCreateCmd extends Command { + + @Schema(title = "微信openid", requiredMode = Schema.RequiredMode.REQUIRED) + private String openid; + + @Schema(title = "微信支付单号", requiredMode = Schema.RequiredMode.REQUIRED) + private String outTradeNo; + + @Schema(title = "微信支付金额", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal totalFee; + + @Schema(title = "微信支付描述", requiredMode = Schema.RequiredMode.REQUIRED) + private String description; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxPayPaymentNotifyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxPayPaymentNotifyCmd.java new file mode 100644 index 0000000..11840c3 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/cmd/WxPayPaymentNotifyCmd.java @@ -0,0 +1,34 @@ +package com.xunhong.erp.turbo.api.facade.dto.cmd; + + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "微信支付回调") +@EqualsAndHashCode(callSuper = true) +public class WxPayPaymentNotifyCmd extends Command { + + @Schema(title = "第三方平台回调请求体", requiredMode = Schema.RequiredMode.REQUIRED) + private String requestBody; + + @Schema(title = "微信支付单号", requiredMode = Schema.RequiredMode.REQUIRED) + private String outTradeNo; + + @Schema(title = "时间戳", requiredMode = Schema.RequiredMode.REQUIRED) + private String timeStamp; + + @Schema(title = "随机字符串", requiredMode = Schema.RequiredMode.REQUIRED) + private String nonce; + + @Schema(title = "签名", requiredMode = Schema.RequiredMode.REQUIRED) + private String signature; + + @Schema(title = "序列号", requiredMode = Schema.RequiredMode.REQUIRED) + private String serial; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/qry/WxMaOpenidQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/qry/WxMaOpenidQry.java new file mode 100644 index 0000000..2d2a6aa --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/qry/WxMaOpenidQry.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.api.facade.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "微信登录查询") +@EqualsAndHashCode(callSuper = true) +public class WxMaOpenidQry extends Query { + + @NotBlank(message = "不能为空") + @Schema(title = "微信code", example = "0c12NPkl25WKmc46nYol2MDsdn12NPkz") + private String code; + + @Schema(title = "maOpenid", example = "0c12NPkl25WKmc46nYol2MDsdn12NPkz", hidden = true) + private String maOpenid; + + @Schema(title = "unionid", example = "0c12NPkl25WKmc46nYol2MDsdn12NPkz", hidden = true) + private String unionid; + + @Schema(title = "mpOpenid", example = "0c12NPkl25WKmc46nYol2MDsdn12NPkz", hidden = true) + private String mpOpenid; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/qry/WxMaPhoneQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/qry/WxMaPhoneQry.java new file mode 100644 index 0000000..51b105b --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/qry/WxMaPhoneQry.java @@ -0,0 +1,24 @@ +package com.xunhong.erp.turbo.api.facade.dto.qry; + + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "绑定微信小程序手机号码") +@EqualsAndHashCode(callSuper = true) +public class WxMaPhoneQry extends DTO { + @Schema(title = "微信code", requiredMode = Schema.RequiredMode.REQUIRED) + private String code; + + @Schema(title = "微信encryptedData", requiredMode = Schema.RequiredMode.REQUIRED) + private String encryptedData; + + @Schema(title = "微信iv", requiredMode = Schema.RequiredMode.REQUIRED) + private String iv; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/VehicleExtractionVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/VehicleExtractionVO.java new file mode 100644 index 0000000..81ce617 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/VehicleExtractionVO.java @@ -0,0 +1,28 @@ +package com.xunhong.erp.turbo.api.facade.dto.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@Schema(title = "车辆信息抽取") +public class VehicleExtractionVO { + @Schema(title = "车牌") + private String plate; + + @Schema(title = "司机") + private String driver; + + @Schema(title = "手机") + private String phone; + + @Schema(title = "出发地") + private String origin; + + @Schema(title = "目的地") + private String destination; + + @Schema(title = "价格") + private BigDecimal price; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/WxMaOcrBankCardVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/WxMaOcrBankCardVO.java new file mode 100644 index 0000000..67933eb --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/WxMaOcrBankCardVO.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.api.facade.dto.vo; + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * @author shenyifei + */ +@Data +@Schema(title = "OCR银行卡") +@EqualsAndHashCode(callSuper = true) +public class WxMaOcrBankCardVO extends DTO { + @Schema(title = "银行卡号", requiredMode = Schema.RequiredMode.REQUIRED) + private String number; + + @Schema(title = "银行卡图片", requiredMode = Schema.RequiredMode.REQUIRED) + private String ocrUrl; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/WxMaOcrIdCardVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/WxMaOcrIdCardVO.java new file mode 100644 index 0000000..69c854a --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/WxMaOcrIdCardVO.java @@ -0,0 +1,24 @@ +package com.xunhong.erp.turbo.api.facade.dto.vo; + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * @author shenyifei + */ +@Data +@Schema(title = "OCR身份证") +@EqualsAndHashCode(callSuper = true) +public class WxMaOcrIdCardVO extends DTO { + @Schema(title = "姓名") + private String name; + + @Schema(title = "身份证号") + private String idCard; + + @Schema(title = "银行卡图片", requiredMode = Schema.RequiredMode.REQUIRED) + private String ocrUrl; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/WxMaOpenidVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/WxMaOpenidVO.java new file mode 100644 index 0000000..86efbc1 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/WxMaOpenidVO.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.api.facade.dto.vo; + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * @author shenyifei + */ +@Data +@Schema(title = "华为云平台表") +@EqualsAndHashCode(callSuper = true) +public class WxMaOpenidVO extends DTO { + @Schema(title = "微信unionid", requiredMode = Schema.RequiredMode.REQUIRED) + private String unionid; + + @Schema(title = "微信openid", requiredMode = Schema.RequiredMode.REQUIRED) + private String openid; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/WxPayJsApiVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/WxPayJsApiVO.java new file mode 100644 index 0000000..f486a80 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/dto/vo/WxPayJsApiVO.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.api.facade.dto.vo; + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "支付信息") +@EqualsAndHashCode(callSuper = true) +public class WxPayJsApiVO extends DTO { + + @Schema(title = "公众号appId", requiredMode = Schema.RequiredMode.REQUIRED) + private String appId; + + @Schema(title = "时间戳", requiredMode = Schema.RequiredMode.REQUIRED) + private String timeStamp; + + @Schema(title = "随机字符串", requiredMode = Schema.RequiredMode.REQUIRED) + private String nonceStr; + + @Schema(title = "支付信息", requiredMode = Schema.RequiredMode.REQUIRED) + private String packageValue; + + @Schema(title = "签名方式", requiredMode = Schema.RequiredMode.REQUIRED) + private String signType; + + @Schema(title = "支付签名", requiredMode = Schema.RequiredMode.REQUIRED) + private String paySign; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/exception/FacadeErrorCode.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/exception/FacadeErrorCode.java new file mode 100644 index 0000000..bd9c121 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/exception/FacadeErrorCode.java @@ -0,0 +1,26 @@ +package com.xunhong.erp.turbo.api.facade.exception; + +import com.xunhong.erp.turbo.base.exception.ErrorCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Getter +public enum FacadeErrorCode implements ErrorCode { + B_FACADE_DEVICE_NOT_EXISTS("B_FACADE_DEVICE_NOT_EXISTS", "设备不存在"), + B_FACADE_DEVICE_EXISTS("B_FACADE_DEVICE_EXISTS", "设备已存在"); + + private final String code; + + private final String message; + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getMessage() { + return this.message; + } +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/exception/FacadeException.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/exception/FacadeException.java new file mode 100644 index 0000000..4ab8b0f --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/facade/exception/FacadeException.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.api.facade.exception; + + +import com.xunhong.erp.turbo.base.exception.BizException; +import com.xunhong.erp.turbo.base.exception.ErrorCode; + +/** + * 文件上传异常 + */ +public class FacadeException extends BizException { + + public FacadeException(ErrorCode errorCode) { + super(errorCode); + } + + public FacadeException(String message, ErrorCode errorCode) { + super(message, errorCode); + } + + public FacadeException(String message, Throwable cause, ErrorCode errorCode) { + super(message, cause, errorCode); + } + + public FacadeException(Throwable cause, ErrorCode errorCode) { + super(cause, errorCode); + } + + public FacadeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, ErrorCode errorCode) { + super(message, cause, enableSuppression, writableStackTrace, errorCode); + } + +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/AgreementServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/AgreementServiceI.java new file mode 100644 index 0000000..d89dee7 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/AgreementServiceI.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.api.infra.api; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.AgreementUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.AgreementListQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.AgreementPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.AgreementShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.AgreementVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface AgreementServiceI { + AgreementVO create(AgreementCreateCmd agreementCreateCmd); + + PageDTO page(AgreementPageQry agreementPageQry); + + List list(AgreementListQry agreementListQry); + + AgreementVO update(AgreementUpdateCmd agreementUpdateCmd); + + AgreementVO show(AgreementShowQry agreementShowQry); + + void destroy(AgreementDestroyCmd agreementDestroyCmd); +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/CategoryServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/CategoryServiceI.java new file mode 100644 index 0000000..73d6734 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/CategoryServiceI.java @@ -0,0 +1,26 @@ +package com.xunhong.erp.turbo.api.infra.api; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.CategoryUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.CategoryPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.CategoryShowQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.CategoryTreeQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.CategoryVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +public interface CategoryServiceI { + List list(CategoryTreeQry categoryTreeQry); + + CategoryVO create(CategoryCreateCmd categoryCreateCmd); + + CategoryVO update(CategoryUpdateCmd categoryUpdateCmd); + + CategoryVO show(CategoryShowQry categoryShowQry); + + void destroy(CategoryDestroyCmd categoryDestroyCmd); + + PageDTO page(CategoryPageQry categoryPageQry); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/ChannelServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/ChannelServiceI.java new file mode 100644 index 0000000..8b7ee54 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/ChannelServiceI.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.api.infra.api; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.ChannelUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.ChannelPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.ChannelShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.ChannelVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +public interface ChannelServiceI { + PageDTO page(ChannelPageQry channelPageQry); + + ChannelVO create(ChannelCreateCmd channelCreateCmd); + + ChannelVO show(ChannelShowQry channelShowQry); + + ChannelVO update(ChannelUpdateCmd channelUpdateCmd); + + void destroy(ChannelDestroyCmd channelDestroyCmd); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/DictionaryServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/DictionaryServiceI.java new file mode 100644 index 0000000..1de0b75 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/DictionaryServiceI.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.api.infra.api; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.DictionaryUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.DictionaryListQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.DictionaryPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.DictionaryShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.DictionaryVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface DictionaryServiceI { + DictionaryVO create(DictionaryCreateCmd dictionaryCreateCmd); + + PageDTO page(DictionaryPageQry dictionaryPageQry); + + List list(DictionaryListQry dictionaryListQry); + + DictionaryVO update(DictionaryUpdateCmd dictionaryUpdateCmd); + + DictionaryVO show(DictionaryShowQry dictionaryShowQry); + + void destroy(DictionaryDestroyCmd dictionaryDestroyCmd); +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/MaterialServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/MaterialServiceI.java new file mode 100644 index 0000000..72a3932 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/MaterialServiceI.java @@ -0,0 +1,35 @@ +package com.xunhong.erp.turbo.api.infra.api; + + +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialBatchAddCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.MaterialUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.MaterialPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.MaterialShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.MaterialVO; +import com.xunhong.erp.turbo.api.user.dto.vo.OssTokenVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * 素材管理 + * + * @author shenyifei + */ +public interface MaterialServiceI { + OssTokenVO ossToken(); + + PageDTO page(MaterialPageQry materialPageQry); + + MaterialVO create(MaterialCreateCmd materialCreateCmd); + + MaterialVO show(MaterialShowQry materialShowQry); + + MaterialVO update(MaterialUpdateCmd materialUpdateCmd); + + void destroy(MaterialDestroyCmd materialDestroyCmd); + + List batchCreate(MaterialBatchAddCmd materialAddCmdList); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/PlatformServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/PlatformServiceI.java new file mode 100644 index 0000000..e598364 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/PlatformServiceI.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.api.infra.api; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.PlatformUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.PlatformListQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.PlatformPageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.PlatformShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.PlatformVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface PlatformServiceI { + PlatformVO create(PlatformCreateCmd platformCreateCmd); + + PageDTO page(PlatformPageQry platformPageQry); + + List list(PlatformListQry platformListQry); + + PlatformVO update(PlatformUpdateCmd platformUpdateCmd); + + PlatformVO show(PlatformShowQry platformShowQry); + + void destroy(PlatformDestroyCmd platformDestroyCmd); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/SettingServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/SettingServiceI.java new file mode 100644 index 0000000..3e437b4 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/SettingServiceI.java @@ -0,0 +1,16 @@ +package com.xunhong.erp.turbo.api.infra.api; + + +import com.xunhong.erp.turbo.api.infra.dto.cmd.SettingUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.SettingShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.SettingVO; + +/** + * @author shenyifei + */ +public interface SettingServiceI { + SettingVO update(SettingUpdateCmd settingUpdateCmd); + + SettingVO show(SettingShowQry settingShowQry); +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/WarehouseServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/WarehouseServiceI.java new file mode 100644 index 0000000..9edc570 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/api/WarehouseServiceI.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.api.infra.api; + +import com.xunhong.erp.turbo.api.infra.dto.cmd.WarehouseCreateCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.WarehouseDestroyCmd; +import com.xunhong.erp.turbo.api.infra.dto.cmd.WarehouseUpdateCmd; +import com.xunhong.erp.turbo.api.infra.dto.qry.WarehouseListQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.WarehousePageQry; +import com.xunhong.erp.turbo.api.infra.dto.qry.WarehouseShowQry; +import com.xunhong.erp.turbo.api.infra.dto.vo.WarehouseVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface WarehouseServiceI { + WarehouseVO create(WarehouseCreateCmd warehouseCreateCmd); + + PageDTO page(WarehousePageQry warehousePageQry); + + List list(WarehouseListQry warehouseListQry); + + WarehouseVO update(WarehouseUpdateCmd warehouseUpdateCmd); + + WarehouseVO show(WarehouseShowQry warehouseShowQry); + + void destroy(WarehouseDestroyCmd warehouseDestroyCmd); +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/AgreementCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/AgreementCreateCmd.java new file mode 100644 index 0000000..bf3ac87 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/AgreementCreateCmd.java @@ -0,0 +1,50 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import com.xunhong.erp.turbo.api.infra.dto.enums.AgreementSceneEnum; +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "协议创建") +@EqualsAndHashCode(callSuper = true) +public class AgreementCreateCmd extends Command { + + /** + * 协议id + */ + @Schema(title = "协议id", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long agreementId; + + /** + * 使用场景 + */ + @Schema(title = "使用场景") + private List scene; + + /** + * 协议标题 + */ + @Schema(title = "协议标题") + private String title; + + /** + * 副标题 + */ + @Schema(title = "副标题") + private String subTitle; + + /** + * 协议内容 + */ + @Schema(title = "协议内容") + private String content; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/AgreementDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/AgreementDestroyCmd.java new file mode 100644 index 0000000..e034fe0 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/AgreementDestroyCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "删除协议") +@EqualsAndHashCode(callSuper = true) +public class AgreementDestroyCmd extends Command { + + @Schema(title = "协议ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long agreementId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/AgreementUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/AgreementUpdateCmd.java new file mode 100644 index 0000000..2131a0c --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/AgreementUpdateCmd.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "协议更新") +@EqualsAndHashCode(callSuper = true) +public class AgreementUpdateCmd extends AgreementCreateCmd { + + @Schema(title = "协议ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long agreementId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/CategoryCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/CategoryCreateCmd.java new file mode 100644 index 0000000..d73ecc8 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/CategoryCreateCmd.java @@ -0,0 +1,26 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import com.xunhong.erp.turbo.api.infra.dto.enums.CategoryTypeEnum; +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +@Data +@Schema(title = "分类创建") +@EqualsAndHashCode(callSuper = true) +public class CategoryCreateCmd extends Command { + + @Schema(title = "分类类型", example = "视频") + private CategoryTypeEnum type; + + @Schema(title = "分类名称", example = "名称") + private String name; + + @Schema(title = "上级分类id", example = "名称", type = "string") + private Long pid; + + @Schema(title = "排序", example = "排序") + private Integer sort; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/CategoryDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/CategoryDestroyCmd.java new file mode 100644 index 0000000..d5bb3d2 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/CategoryDestroyCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import com.xunhong.erp.turbo.api.infra.dto.enums.CategoryTypeEnum; +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "分类删除") +@EqualsAndHashCode(callSuper = true) +public class CategoryDestroyCmd extends Command { + + @Schema(title = "分类Id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + public Long categoryId; + + @Schema(title = "分类类型", hidden = true) + public CategoryTypeEnum type; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/CategoryUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/CategoryUpdateCmd.java new file mode 100644 index 0000000..c3f71fe --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/CategoryUpdateCmd.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +@Data +@Schema(title = "分类") +@EqualsAndHashCode(callSuper = true) +public class CategoryUpdateCmd extends CategoryCreateCmd { + + @Schema(title = "分类Id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + public Long categoryId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/ChannelCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/ChannelCreateCmd.java new file mode 100644 index 0000000..b00d6c4 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/ChannelCreateCmd.java @@ -0,0 +1,49 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "渠道新增") +@EqualsAndHashCode(callSuper = true) +public class ChannelCreateCmd extends Command { + + + /** + * 域名 + */ + @Schema(title = "域名") + private String domain; + + /** + * Logo + */ + @Schema(title = "Logo") + private String logo; + + /** + * 标题 + */ + @Schema(title = "标题") + private String title; + + /** + * 副标题 + */ + @Schema(title = "副标题") + private String subTitle; + + /** + * 背景图片 + */ + @Schema(title = "背景图片") + private String backgroundImageUrl; + + /** + * 技术支持 + */ + @Schema(title = "技术支持") + private String technicalSupport; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/ChannelDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/ChannelDestroyCmd.java new file mode 100644 index 0000000..002b2c0 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/ChannelDestroyCmd.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "渠道删除") +@EqualsAndHashCode(callSuper = true) +public class ChannelDestroyCmd extends Command { + + /** + * 渠道ID + */ + @Schema(title = "渠道ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long channelId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/ChannelUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/ChannelUpdateCmd.java new file mode 100644 index 0000000..6df1afe --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/ChannelUpdateCmd.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "渠道更新") +@EqualsAndHashCode(callSuper = true) +public class ChannelUpdateCmd extends ChannelCreateCmd { + + /** + * 渠道ID + */ + @Schema(title = "渠道ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long channelId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/DictionaryCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/DictionaryCreateCmd.java new file mode 100644 index 0000000..4c0c1ee --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/DictionaryCreateCmd.java @@ -0,0 +1,53 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "字典创建") +@EqualsAndHashCode(callSuper = true) +public class DictionaryCreateCmd extends Command { + + /** + * 自增id + */ + @Schema(title = "自增id") + private Integer id; + + /** + * 代码 + */ + @Schema(title = "代码") + private String code; + + /** + * 字典名称 + */ + @Schema(title = "字典名称") + private String name; + + /** + * 上级id + */ + @Schema(title = "上级id") + private String parentId; + + /** + * 排序号 + */ + @Schema(title = "排序号") + private Integer sortNo; + + /** + * 类型 + */ + @Schema(title = "类型") + private String type; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/DictionaryDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/DictionaryDestroyCmd.java new file mode 100644 index 0000000..a29a4eb --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/DictionaryDestroyCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "删除字典") +@EqualsAndHashCode(callSuper = true) +public class DictionaryDestroyCmd extends Command { + + @Schema(title = "字典ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long dictionaryId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/DictionaryUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/DictionaryUpdateCmd.java new file mode 100644 index 0000000..3b1fb02 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/DictionaryUpdateCmd.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "字典更新") +@EqualsAndHashCode(callSuper = true) +public class DictionaryUpdateCmd extends DictionaryCreateCmd { + + @Schema(title = "字典ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long dictionaryId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/MaterialBatchAddCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/MaterialBatchAddCmd.java new file mode 100644 index 0000000..a51a0a8 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/MaterialBatchAddCmd.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@Schema(title = "创建素材内容") +@EqualsAndHashCode(callSuper = true) +public class MaterialBatchAddCmd extends Command { + + @Schema(title = "创建素材内容") + private List materialCreateCmdList; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/MaterialCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/MaterialCreateCmd.java new file mode 100644 index 0000000..7db8b60 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/MaterialCreateCmd.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import com.xunhong.erp.turbo.api.infra.dto.enums.CategoryTypeEnum; +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "创建素材内容") +@EqualsAndHashCode(callSuper = true) +public class MaterialCreateCmd extends Command { + + @Schema(title = "素材内容标题") + private String name; + + @Schema(title = "分类ID", type = "string") + private Long categoryId; + + @Schema(title = "素材内容路劲") + private String path; + + @Schema(title = "素材类型") + private CategoryTypeEnum type; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/MaterialDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/MaterialDestroyCmd.java new file mode 100644 index 0000000..a57e963 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/MaterialDestroyCmd.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "素材删除") +@EqualsAndHashCode(callSuper = true) +public class MaterialDestroyCmd extends Command { + + @Schema(title = "素材Id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + public Long materialId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/MaterialUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/MaterialUpdateCmd.java new file mode 100644 index 0000000..2a16127 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/MaterialUpdateCmd.java @@ -0,0 +1,14 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "更新素材内容") +@EqualsAndHashCode(callSuper = true) +public class MaterialUpdateCmd extends MaterialCreateCmd { + + @Schema(title = "素材内容ID", type = "string") + private Long materialId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/PlatformCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/PlatformCreateCmd.java new file mode 100644 index 0000000..d189eb8 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/PlatformCreateCmd.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "平台创建") +@EqualsAndHashCode(callSuper = true) +public class PlatformCreateCmd extends Command { + + @Schema(title = "平台名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String platformName; + + @Schema(title = "首页", requiredMode = Schema.RequiredMode.REQUIRED) + private String homePage; + +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/PlatformDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/PlatformDestroyCmd.java new file mode 100644 index 0000000..2aa7a3d --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/PlatformDestroyCmd.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "删除平台") +@EqualsAndHashCode(callSuper = true) +public class PlatformDestroyCmd extends Command { + + @Schema(title = "平台ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long platformId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/PlatformUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/PlatformUpdateCmd.java new file mode 100644 index 0000000..7484d1a --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/PlatformUpdateCmd.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "平台更新") +@EqualsAndHashCode(callSuper = true) +public class PlatformUpdateCmd extends PlatformCreateCmd { + + @Schema(title = "平台ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long platformId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/SettingUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/SettingUpdateCmd.java new file mode 100644 index 0000000..935a213 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/SettingUpdateCmd.java @@ -0,0 +1,26 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import com.xunhong.erp.turbo.api.infra.dto.common.SettingValue; +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "系统设置更新") +@EqualsAndHashCode(callSuper = true) +public class SettingUpdateCmd extends Command { + @Schema(title = "系统设置项ID", type = "string") + private Long settingId; + + @Schema(title = "系统设置项key", requiredMode = Schema.RequiredMode.REQUIRED) + private SettingKeyEnum settingKey; + + @Schema(title = "系统设置项内容", requiredMode = Schema.RequiredMode.REQUIRED) + private SettingValue settingValue; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/WarehouseCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/WarehouseCreateCmd.java new file mode 100644 index 0000000..2f19395 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/WarehouseCreateCmd.java @@ -0,0 +1,55 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "仓库创建") +@EqualsAndHashCode(callSuper = true) +public class WarehouseCreateCmd extends Command { + + /** + * 仓库id + */ + @Schema(title = "仓库id", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long warehouseId; + + /** + * 仓库名称 (e.g., "北京总仓", "上海分仓")。 + */ + @Schema(title = "仓库名称 (e.g., "北京总仓", "上海分仓")。") + private String name; + + /** + * 仓库地址 + */ + @Schema(title = "仓库地址") + private String address; + + /** + * 仓库管理员 + */ + @Schema(title = "仓库管理员") + private String manager; + + /** + * 联系方式 + */ + @Schema(title = "联系方式") + private String contactPhone; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/WarehouseDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/WarehouseDestroyCmd.java new file mode 100644 index 0000000..0132d97 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/WarehouseDestroyCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "删除仓库") +@EqualsAndHashCode(callSuper = true) +public class WarehouseDestroyCmd extends Command { + + @Schema(title = "仓库ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long warehouseId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/WarehouseUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/WarehouseUpdateCmd.java new file mode 100644 index 0000000..c0173d5 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/cmd/WarehouseUpdateCmd.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.infra.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "仓库更新") +@EqualsAndHashCode(callSuper = true) +public class WarehouseUpdateCmd extends WarehouseCreateCmd { + + @Schema(title = "仓库ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long warehouseId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/AliPayConfigValue.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/AliPayConfigValue.java new file mode 100644 index 0000000..d5cafb1 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/AliPayConfigValue.java @@ -0,0 +1,50 @@ +package com.xunhong.erp.turbo.api.infra.dto.common; + +import com.alibaba.cola.dto.DTO; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@JsonTypeName("ALI_PAY_CONFIG") +@Schema(title = "支付宝配置") +@EqualsAndHashCode(callSuper = true) +public class AliPayConfigValue extends DTO implements SettingValue { + + /** + * 支付宝appid + */ + @Schema(title = "支付宝appid", requiredMode = Schema.RequiredMode.REQUIRED) + private String appId; + + /** + * 支付宝私钥 + */ + @Schema(title = "支付宝私钥", requiredMode = Schema.RequiredMode.REQUIRED) + private String privateKey; + + /** + * 支付宝公钥 + */ + @Schema(title = "支付宝公钥", requiredMode = Schema.RequiredMode.REQUIRED) + private String publicKey; + + /** + * 支付宝网关地址 + */ + @Schema(title = "支付宝网关地址", requiredMode = Schema.RequiredMode.REQUIRED) + private String gatewayUrl; + + /** + * 支付宝回调地址 + */ + @Schema(title = "支付宝回调地址", requiredMode = Schema.RequiredMode.REQUIRED) + private String notifyUrl; + + @Override + public SettingKeyEnum getSettingKey() { + return SettingKeyEnum.ALI_PAY_CONFIG; + } +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/ChargingPilePurchaseConfig.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/ChargingPilePurchaseConfig.java new file mode 100644 index 0000000..2812f5a --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/ChargingPilePurchaseConfig.java @@ -0,0 +1,59 @@ +package com.xunhong.erp.turbo.api.infra.dto.common; + +import com.alibaba.cola.dto.DTO; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.util.List; + +@Data +@JsonTypeName("CHARGING_PILE_PURCHASE_CONFIG") +@Schema(title = "充电桩设备购买配置") +@EqualsAndHashCode(callSuper = true) +public class ChargingPilePurchaseConfig extends DTO implements SettingValue { + + /** + * 标题 + */ + @Schema(title = "标题", requiredMode = Schema.RequiredMode.REQUIRED) + private String title; + + /** + * 描述 + */ + @Schema(title = "描述", requiredMode = Schema.RequiredMode.REQUIRED) + private String description; + + /** + * 购买价格 + */ + @Schema(title = "购买价格", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal price; + + /** + * 划线价格 + */ + @Schema(title = "划线价格", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal linePrice; + + /** + * 图片 + */ + @Schema(title = "图片", requiredMode = Schema.RequiredMode.REQUIRED) + private List image; + + /** + * 设备内容 + */ + @Schema(title = "设备内容", requiredMode = Schema.RequiredMode.REQUIRED) + private String content; + + @Override + public SettingKeyEnum getSettingKey() { + return SettingKeyEnum.CHARGING_PILE_PURCHASE_CONFIG; + } +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/CustomMenuConfigValue.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/CustomMenuConfigValue.java new file mode 100644 index 0000000..8d34ef4 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/CustomMenuConfigValue.java @@ -0,0 +1,53 @@ +package com.xunhong.erp.turbo.api.infra.dto.common; + +import com.alibaba.cola.dto.DTO; +import com.alibaba.fastjson2.JSONObject; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@JsonTypeName("CUSTOM_MENU_CONFIG") +@Schema(title = "自定义菜单配置") +@EqualsAndHashCode(callSuper = true) +@JsonIgnoreProperties(ignoreUnknown = true) +public class CustomMenuConfigValue extends DTO implements SettingValue { + + /** + * 自定义菜单是微信小程序底部菜单的配置,配置项为菜单名称、图标、跳转链接,菜单数量不能超过5个。 + */ + @Schema(title = "菜单列表", requiredMode = Schema.RequiredMode.REQUIRED) + private List menuItems; + + @Override + public SettingKeyEnum getSettingKey() { + return SettingKeyEnum.CUSTOM_MENU_CONFIG; + } + + @EqualsAndHashCode(callSuper = true) + @Data + @Schema(title = "菜单项") + @JsonIgnoreProperties(ignoreUnknown = true) + public static class MenuItem extends DTO { + + @Schema(title = "菜单Id", requiredMode = Schema.RequiredMode.REQUIRED) + private String menuId; + + @Schema(title = "菜单名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String menuName; + + @Schema(title = "菜单图标", requiredMode = Schema.RequiredMode.REQUIRED) + private String menuIcon; + + @Schema(title = "菜单路径", requiredMode = Schema.RequiredMode.REQUIRED) + private JSONObject menuRedirect; + + @Schema(title = "菜单排序", requiredMode = Schema.RequiredMode.REQUIRED) + private Integer menuSort; + } +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/CustomThemeConfigValue.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/CustomThemeConfigValue.java new file mode 100644 index 0000000..081e300 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/CustomThemeConfigValue.java @@ -0,0 +1,38 @@ +package com.xunhong.erp.turbo.api.infra.dto.common; + +import com.alibaba.cola.dto.DTO; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@JsonTypeName("CUSTOM_THEME_CONFIG") +@Schema(title = "自定义主题配置") +@EqualsAndHashCode(callSuper = true) +public class CustomThemeConfigValue extends DTO implements SettingValue { + + /** + * 主题名称 + */ + @Schema(title = "主题名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String themeName; + + /** + * 主题颜色 + */ + @Schema(title = "主题颜色", requiredMode = Schema.RequiredMode.REQUIRED) + private String primaryColor; + + /** + * 次要颜色 + */ + @Schema(title = "次要颜色", requiredMode = Schema.RequiredMode.REQUIRED) + private String secondaryColor; + + @Override + public SettingKeyEnum getSettingKey() { + return SettingKeyEnum.CUSTOM_THEME_CONFIG; + } +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/SettingValue.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/SettingValue.java new file mode 100644 index 0000000..90ed042 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/SettingValue.java @@ -0,0 +1,35 @@ +package com.xunhong.erp.turbo.api.infra.dto.common; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; + + +// 使用Jackson的多态类型处理 +@JsonTypeInfo( + use = JsonTypeInfo.Id.NAME, + property = "settingKey", // 这个字段会在序列化/反序列化时作为类型标识 + visible = true // 确保反序列化时能读取到这个字段 +) +@JsonSubTypes({ + @JsonSubTypes.Type(value = WxMaConfigValue.class, name = "WX_MA_CONFIG"), + @JsonSubTypes.Type(value = WxMaMessagePushConfigValue.class, name = "WX_MA_MESSAGE_PUSH_CONFIG"), + @JsonSubTypes.Type(value = WxMaSubscribeMessageConfigValue.class, name = "WX_MA_SUBSCRIBE_MESSAGE_CONFIG"), + @JsonSubTypes.Type(value = WxMaCodeUploadConfigValue.class, name = "WX_MA_CODE_UPLOAD_CONFIG"), + @JsonSubTypes.Type(value = WxPayConfigValue.class, name = "WX_PAY_CONFIG"), + @JsonSubTypes.Type(value = WxMpConfigValue.class, name = "WX_MP_CONFIG"), + @JsonSubTypes.Type(value = WxMpMessagePushConfigValue.class, name = "WX_MP_MESSAGE_PUSH_CONFIG"), + @JsonSubTypes.Type(value = AliPayConfigValue.class, name = "ALI_PAY_CONFIG"), + @JsonSubTypes.Type(value = ChargingPilePurchaseConfig.class, name = "CHARGING_PILE_PURCHASE_CONFIG"), + @JsonSubTypes.Type(value = CustomThemeConfigValue.class, name = "CUSTOM_THEME_CONFIG"), + @JsonSubTypes.Type(value = CustomMenuConfigValue.class, name = "CUSTOM_MENU_CONFIG"), + @JsonSubTypes.Type(value = WxCpNotifyConfigValue.class, name = "WX_CP_NOTIFY_CONFIG"), + @JsonSubTypes.Type(value = TencentMapConfigValue.class, name = "TENCENT_MAP_CONFIG"), +}) +public interface SettingValue { + // 必须包含获取类型标识的方法 + @JsonIgnore + // 避免重复序列化(如果实现类已经有该字段) + SettingKeyEnum getSettingKey(); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/TencentMapConfigValue.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/TencentMapConfigValue.java new file mode 100644 index 0000000..368e084 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/TencentMapConfigValue.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.infra.dto.common; + +import com.alibaba.cola.dto.DTO; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@JsonTypeName("TENCENT_MAP_CONFIG") +@Schema(title = "腾讯地图配置") +@EqualsAndHashCode(callSuper = true) +public class TencentMapConfigValue extends DTO implements SettingValue { + @Schema(title = "腾讯地图AppKey", requiredMode = Schema.RequiredMode.REQUIRED) + private String appKey; + + @Override + public SettingKeyEnum getSettingKey() { + return SettingKeyEnum.TENCENT_MAP_CONFIG; + } +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxCpNotifyConfigValue.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxCpNotifyConfigValue.java new file mode 100644 index 0000000..f29591d --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxCpNotifyConfigValue.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.infra.dto.common; + +import com.alibaba.cola.dto.DTO; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@JsonTypeName("WX_CP_NOTIFY_CONFIG") +@Schema(title = "企业微信通知配置") +@EqualsAndHashCode(callSuper = true) +public class WxCpNotifyConfigValue extends DTO implements SettingValue { + @Schema(title = "小区申请通知key", requiredMode = Schema.RequiredMode.REQUIRED) + private String communityApplyNotifyKey; + + @Override + public SettingKeyEnum getSettingKey() { + return SettingKeyEnum.WX_CP_NOTIFY_CONFIG; + } +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMaCodeUploadConfigValue.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMaCodeUploadConfigValue.java new file mode 100644 index 0000000..c5dd3e5 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMaCodeUploadConfigValue.java @@ -0,0 +1,35 @@ +package com.xunhong.erp.turbo.api.infra.dto.common; + +import com.alibaba.cola.dto.DTO; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@JsonTypeName("WX_MA_CODE_UPLOAD_CONFIG") +@Schema(title = "小程序代码上传配置") +@EqualsAndHashCode(callSuper = true) +public class WxMaCodeUploadConfigValue extends DTO implements SettingValue { + @Schema(title = "小程序APPID", requiredMode = Schema.RequiredMode.REQUIRED) + private String appId; + @Schema(title = "当前版本号", requiredMode = Schema.RequiredMode.REQUIRED) + private String version; + @Schema(title = "更新描述", requiredMode = Schema.RequiredMode.REQUIRED) + private String desc; + @Schema(title = "上传IP白名单", requiredMode = Schema.RequiredMode.REQUIRED) + private String ipWhiteList; + @Schema(title = "页面路径", requiredMode = Schema.RequiredMode.REQUIRED) + private String pagePath; + @Schema(title = "小程序订单中心path", requiredMode = Schema.RequiredMode.REQUIRED) + private String orderCenterPath; + @Schema(title = "小程序代码上传密钥", requiredMode = Schema.RequiredMode.REQUIRED) + private String codeUploadKey; + + @Override + public SettingKeyEnum getSettingKey() { + return SettingKeyEnum.WX_MA_CODE_UPLOAD_CONFIG; + } + +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMaConfigValue.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMaConfigValue.java new file mode 100644 index 0000000..8ae0b21 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMaConfigValue.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.api.infra.dto.common; + +import com.alibaba.cola.dto.DTO; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@JsonTypeName("WX_MA_CONFIG") +@Schema(title = "分类创建") +@EqualsAndHashCode(callSuper = true) +public class WxMaConfigValue extends DTO implements SettingValue { + @Schema(title = "小程序名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String wxMaName; + @Schema(title = "小程序原始ID", requiredMode = Schema.RequiredMode.REQUIRED) + private String wxMaOriginalId; + @Schema(title = "小程序Logo", requiredMode = Schema.RequiredMode.REQUIRED) + private String wxMaLogo; + @Schema(title = "校验文件", requiredMode = Schema.RequiredMode.REQUIRED) + private String wxMaCheckFile; + @Schema(title = "AppID(小程序ID)", requiredMode = Schema.RequiredMode.REQUIRED) + private String appId; + @Schema(title = "AppSecret(小程序密钥)", requiredMode = Schema.RequiredMode.REQUIRED) + private String appSecret; + + @Override + public SettingKeyEnum getSettingKey() { + return SettingKeyEnum.WX_MA_CONFIG; + } +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMaMessagePushConfigValue.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMaMessagePushConfigValue.java new file mode 100644 index 0000000..a870171 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMaMessagePushConfigValue.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.api.infra.dto.common; + +import com.alibaba.cola.dto.DTO; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@JsonTypeName("WX_MA_MESSAGE_PUSH_CONFIG") +@Schema(title = "小程序消息推送配置") +@EqualsAndHashCode(callSuper = true) +public class WxMaMessagePushConfigValue extends DTO implements SettingValue { + @Schema(title = "Token(令牌)", requiredMode = Schema.RequiredMode.REQUIRED) + private String token; + @Schema(title = "EncodingAESKey", requiredMode = Schema.RequiredMode.REQUIRED) + private String encodingAESKey; + @Schema(title = "消息加密方式", requiredMode = Schema.RequiredMode.REQUIRED) + private String msgEncryptMode; + @Schema(title = "数据格式", requiredMode = Schema.RequiredMode.REQUIRED) + private String dataFormat; + @Schema(title = "IP白名单", requiredMode = Schema.RequiredMode.REQUIRED) + private String ipWhiteList; + @Schema(title = "URL(服务器地址)", requiredMode = Schema.RequiredMode.REQUIRED) + private String url; + + @Override + public SettingKeyEnum getSettingKey() { + return SettingKeyEnum.WX_MA_MESSAGE_PUSH_CONFIG; + } +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMaSubscribeMessageConfigValue.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMaSubscribeMessageConfigValue.java new file mode 100644 index 0000000..d13acf2 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMaSubscribeMessageConfigValue.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.infra.dto.common; + +import com.alibaba.cola.dto.DTO; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@JsonTypeName("WX_MA_SUBSCRIBE_MESSAGE_CONFIG") +@Schema(title = "小程序订阅消息配置") +@EqualsAndHashCode(callSuper = true) +public class WxMaSubscribeMessageConfigValue extends DTO implements SettingValue { + @Override + public SettingKeyEnum getSettingKey() { + return SettingKeyEnum.WX_MA_SUBSCRIBE_MESSAGE_CONFIG; + } +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMpConfigValue.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMpConfigValue.java new file mode 100644 index 0000000..6913f7c --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMpConfigValue.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.api.infra.dto.common; + +import com.alibaba.cola.dto.DTO; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@JsonTypeName("WX_MP_CONFIG") +@Schema(title = "微信公众号配置") +@EqualsAndHashCode(callSuper = true) +public class WxMpConfigValue extends DTO implements SettingValue { + @Schema(title = "公众号名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String wxMpName; + @Schema(title = "公众号原始ID", requiredMode = Schema.RequiredMode.REQUIRED) + private String wxMpOriginalId; + @Schema(title = "公众号Logo", requiredMode = Schema.RequiredMode.REQUIRED) + private String wxMpLogo; + @Schema(title = "AppID(公众号ID)", requiredMode = Schema.RequiredMode.REQUIRED) + private String appId; + @Schema(title = "AppSecret(公众号密钥)", requiredMode = Schema.RequiredMode.REQUIRED) + private String appSecret; + + @Override + public SettingKeyEnum getSettingKey() { + return SettingKeyEnum.WX_MP_CONFIG; + } +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMpMessagePushConfigValue.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMpMessagePushConfigValue.java new file mode 100644 index 0000000..426299c --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxMpMessagePushConfigValue.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.api.infra.dto.common; + +import com.alibaba.cola.dto.DTO; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@JsonTypeName("WX_MP_MESSAGE_PUSH_CONFIG") +@Schema(title = "公众号消息推送配置") +@EqualsAndHashCode(callSuper = true) +public class WxMpMessagePushConfigValue extends DTO implements SettingValue { + @Schema(title = "Token(令牌)", requiredMode = Schema.RequiredMode.REQUIRED) + private String token; + @Schema(title = "EncodingAESKey", requiredMode = Schema.RequiredMode.REQUIRED) + private String encodingAESKey; + @Schema(title = "消息加密方式", requiredMode = Schema.RequiredMode.REQUIRED) + private String msgEncryptMode; + @Schema(title = "数据格式", requiredMode = Schema.RequiredMode.REQUIRED) + private String dataFormat; + @Schema(title = "IP白名单", requiredMode = Schema.RequiredMode.REQUIRED) + private String ipWhiteList; + @Schema(title = "URL(服务器地址)", requiredMode = Schema.RequiredMode.REQUIRED) + private String url; + + @Override + public SettingKeyEnum getSettingKey() { + return SettingKeyEnum.WX_MP_MESSAGE_PUSH_CONFIG; + } +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxPayConfigValue.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxPayConfigValue.java new file mode 100644 index 0000000..a4a6f7b --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/common/WxPayConfigValue.java @@ -0,0 +1,91 @@ +package com.xunhong.erp.turbo.api.infra.dto.common; + +import com.alibaba.cola.dto.DTO; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@JsonTypeName("WX_PAY_CONFIG") +@Schema(title = "微信支付配置") +@EqualsAndHashCode(callSuper = true) +public class WxPayConfigValue extends DTO implements SettingValue { + + /** + * 设置微信公众号或者小程序等的appid + * (V3商户模式需要) + */ + @Schema(title = "微信公众号或者小程序等的appid", requiredMode = Schema.RequiredMode.REQUIRED) + private String appId; + + /** + * 微信支付商户号 + * (V3商户模式需要) + */ + @Schema(title = "微信支付商户号", requiredMode = Schema.RequiredMode.REQUIRED) + private String mchId; + + /** + * 微信支付商户密钥 + */ + @Schema(title = "微信支付商户密钥", requiredMode = Schema.RequiredMode.REQUIRED) + private String mchKey; + + /** + * apiclient_cert.p12文件的绝对路径,或者如果放在项目中,请以classpath:开头指定 + */ + @Schema(title = "apiclient_cert.p12文件的绝对路径", requiredMode = Schema.RequiredMode.REQUIRED) + private String keyPath; + + /** + * apiV3 秘钥值 + * (V3商户模式需要) + */ + @Schema(title = "apiV3 秘钥值", requiredMode = Schema.RequiredMode.REQUIRED) + private String apiV3Key; + + /** + * apiV3 证书序列号值 + * (V3商户模式需要) + */ + @Schema(title = "apiV3 证书序列号值", requiredMode = Schema.RequiredMode.REQUIRED) + private String certSerialNo; + + /** + * apiclient_cert.pem证书文件的绝对路径或者以classpath:开头的类路径. + * (V3商户模式需要,这里用的是文件路径,可以用其它base64编码或字节数组参数替代) + */ + @Schema(title = "apiclient_cert.pem证书文件", requiredMode = Schema.RequiredMode.REQUIRED) + private String privateCertString; + + /** + * apiclient_key.pem证书文件的绝对路径或者以classpath:开头的类路径. + * (V3商户模式需要,这里用的是文件路径,可以用其它base64编码或字节数组参数替代) + */ + @Schema(title = "apiclient_key.pem证书文件", requiredMode = Schema.RequiredMode.REQUIRED) + private String privateKeyString; + + /** + * 微信支付公钥,pub_key.pem证书文件的绝对路径或者以classpath:开头的类路径. + * (V3商户模式需要,这里用的是文件路径,可以用其它base64编码或字节数组参数替代,2024.08后的新商户验签需要用此公钥) + */ + @Schema(title = "微信支付公钥,pub_key.pem证书文件", requiredMode = Schema.RequiredMode.REQUIRED) + private String publicKeyString; + + /** + * 微信支付公钥ID + * (V3商户模式需要,2024.08后的新商户验签需要用此公钥ID) + */ + @Schema(title = "微信支付公钥ID", requiredMode = Schema.RequiredMode.REQUIRED) + private String publicKeyId; + + @Schema(title = "微信支付回调地址", requiredMode = Schema.RequiredMode.REQUIRED) + private String notifyUrl; + + @Override + public SettingKeyEnum getSettingKey() { + return SettingKeyEnum.WX_PAY_CONFIG; + } +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/enums/AgreementSceneEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/enums/AgreementSceneEnum.java new file mode 100644 index 0000000..1a1131b --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/enums/AgreementSceneEnum.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.api.infra.dto.enums; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum AgreementSceneEnum { + // 桩主入驻、车主入驻、个人中心 + STAKEHOLDER_SETUP, + CUSTOMER_SETUP, + PERSONAL_CENTER; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/enums/CategoryTypeEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/enums/CategoryTypeEnum.java new file mode 100644 index 0000000..a8ccc17 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/enums/CategoryTypeEnum.java @@ -0,0 +1,52 @@ +package com.xunhong.erp.turbo.api.infra.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + + +/** + * 分类 + */ +@Getter +@RequiredArgsConstructor +public enum CategoryTypeEnum { + /** + * 图片分类 + */ + FILE_IMAGE(1), + + /** + * 视频分类 + */ + FILE_VIDEO(2), + + /** + * 商品分类 + */ + PRODUCT(3), + + /** + * 客户分类 + */ + CUSTOMER_INTENTION(4), + + /** + * 课程分类 + */ + COURSE(5), + + /** + * 房间分类 + */ + ROOM(6), + + /** + * 话术分类 + */ + SPEECH(7), + ; + + @EnumValue + private final int type; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/enums/SettingKeyEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/enums/SettingKeyEnum.java new file mode 100644 index 0000000..2b87690 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/enums/SettingKeyEnum.java @@ -0,0 +1,74 @@ +package com.xunhong.erp.turbo.api.infra.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum SettingKeyEnum { + /** + * 小程序开发信息配置 + */ + WX_MA_CONFIG("WX_MA_CONFIG"), + /** + * 小程序消息推送配置 + */ + WX_MA_MESSAGE_PUSH_CONFIG("WX_MA_MESSAGE_PUSH_CONFIG"), + /** + * 小程序订阅消息配置 + */ + WX_MA_SUBSCRIBE_MESSAGE_CONFIG("WX_MA_SUBSCRIBE_MESSAGE_CONFIG"), + /** + * 小程序代码上传配置 + */ + WX_MA_CODE_UPLOAD_CONFIG("WX_MA_CODE_UPLOAD_CONFIG"), + /** + * 微信支付配置 + */ + WX_PAY_CONFIG("WX_PAY_CONFIG"), + /** + * 腾讯地图配置 + */ + TENCENT_MAP_CONFIG("TENCENT_MAP_CONFIG"), + /** + * 短信配置 + */ + SMS_CONFIG("SMS_CONFIG"), + /** + * 虚拟电话配置 + */ + VIRTUAL_PHONE_CONFIG("VIRTUAL_PHONE_CONFIG"), + /** + * 微信公众号配置 + */ + WX_MP_CONFIG("WX_MP_CONFIG"), + /** + * 微信公众号消息推送配置 + */ + WX_MP_MESSAGE_PUSH_CONFIG("WX_MP_MESSAGE_PUSH_CONFIG"), + /** + * 支付宝配置 + */ + ALI_PAY_CONFIG("ALI_PAY_CONFIG"), + /** + * 充电桩设备购买配置 + */ + CHARGING_PILE_PURCHASE_CONFIG("CHARGING_PILE_PURCHASE_CONFIG"), + /** + * 自定义主题 + */ + CUSTOM_THEME_CONFIG("CUSTOM_THEME_CONFIG"), + /** + * 自定义菜单配置 + */ + CUSTOM_MENU_CONFIG("CUSTOM_MENU_CONFIG"), + /** + * 微信公众号通知配置 + */ + WX_CP_NOTIFY_CONFIG("WX_CP_NOTIFY_CONFIG"); + + + @EnumValue + private final String key; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/AgreementListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/AgreementListQry.java new file mode 100644 index 0000000..e317db2 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/AgreementListQry.java @@ -0,0 +1,23 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.xunhong.erp.turbo.api.infra.dto.enums.AgreementSceneEnum; +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "协议列表查询") +@EqualsAndHashCode(callSuper = true) +public class AgreementListQry extends Query { + + @Schema(title = "协议ID", type = "string") + private Long agreementId; + + @Schema(title = "协议类型") + private AgreementSceneEnum scene; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/AgreementPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/AgreementPageQry.java new file mode 100644 index 0000000..250ef13 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/AgreementPageQry.java @@ -0,0 +1,23 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.xunhong.erp.turbo.api.infra.dto.enums.AgreementSceneEnum; +import com.xunhong.erp.turbo.base.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "协议分页查询") +@EqualsAndHashCode(callSuper = true) +public class AgreementPageQry extends PageQuery { + + @Schema(title = "协议ID", type = "string") + private Long agreementId; + + @Schema(title = "协议类型", type = "string") + private AgreementSceneEnum scene; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/AgreementShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/AgreementShowQry.java new file mode 100644 index 0000000..d4724de --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/AgreementShowQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "协议查询") +@EqualsAndHashCode(callSuper = true) +public class AgreementShowQry extends Query { + + @Schema(title = "协议ID", type = "string") + private Long agreementId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/CategoryPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/CategoryPageQry.java new file mode 100644 index 0000000..7bdf483 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/CategoryPageQry.java @@ -0,0 +1,24 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.xunhong.erp.turbo.api.infra.dto.enums.CategoryTypeEnum; +import com.xunhong.erp.turbo.base.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@Schema(title = "分类") +@EqualsAndHashCode(callSuper = true) +public class CategoryPageQry extends PageQuery { + + @Schema(title = "分类类型", hidden = true) + public CategoryTypeEnum type; + + @Schema(title = "分类类型") + public List typeList; + + @Schema(title = "分类名称") + public String name; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/CategoryShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/CategoryShowQry.java new file mode 100644 index 0000000..c12091d --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/CategoryShowQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.xunhong.erp.turbo.api.infra.dto.enums.CategoryTypeEnum; +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "分类") +@EqualsAndHashCode(callSuper = true) +public class CategoryShowQry extends Query { + + @Schema(title = "分类Id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + public Long categoryId; + + @Schema(title = "分类类型", hidden = true) + public CategoryTypeEnum type; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/CategoryTreeQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/CategoryTreeQry.java new file mode 100644 index 0000000..fa3e379 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/CategoryTreeQry.java @@ -0,0 +1,24 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.xunhong.erp.turbo.api.infra.dto.enums.CategoryTypeEnum; +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@Schema(title = "分类") +@EqualsAndHashCode(callSuper = true) +public class CategoryTreeQry extends Query { + + @Schema(title = "分类类型", hidden = true) + public CategoryTypeEnum type; + + @Schema(title = "分类类型") + public List typeList; + + @Schema(title = "分类名称") + public String name; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/ChannelPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/ChannelPageQry.java new file mode 100644 index 0000000..b8ac2da --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/ChannelPageQry.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.alibaba.cola.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "渠道分页查询") +@EqualsAndHashCode(callSuper = true) +public class ChannelPageQry extends PageQuery { + + /** + * 域名 + */ + @Schema(title = "域名") + private String domain; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/ChannelShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/ChannelShowQry.java new file mode 100644 index 0000000..bea367b --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/ChannelShowQry.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.alibaba.cola.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "渠道查询") +@EqualsAndHashCode(callSuper = true) +public class ChannelShowQry extends Query { + + @Schema(title = "渠道编号", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long channelId; + + @Schema(title = "域名") + private String domain; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/DictionaryListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/DictionaryListQry.java new file mode 100644 index 0000000..413a97a --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/DictionaryListQry.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "字典列表查询") +@EqualsAndHashCode(callSuper = true) +public class DictionaryListQry extends Query { + + @Schema(title = "字典ID", type = "string") + private Long dictionaryId; + + @Schema(title = "字典类型", type = "string") + private String type; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/DictionaryPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/DictionaryPageQry.java new file mode 100644 index 0000000..0fb3677 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/DictionaryPageQry.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.xunhong.erp.turbo.base.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "字典分页查询") +@EqualsAndHashCode(callSuper = true) +public class DictionaryPageQry extends PageQuery { + + @Schema(title = "字典ID", type = "string") + private Long dictionaryId; + + @Schema(title = "字典名称", type = "string") + private String name; + + @Schema(title = "字典类型", type = "string") + private String type; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/DictionaryShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/DictionaryShowQry.java new file mode 100644 index 0000000..01b4d41 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/DictionaryShowQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "字典查询") +@EqualsAndHashCode(callSuper = true) +public class DictionaryShowQry extends Query { + + @Schema(title = "字典ID", type = "string") + private Long dictionaryId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/MaterialPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/MaterialPageQry.java new file mode 100644 index 0000000..4ef427e --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/MaterialPageQry.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.alibaba.cola.dto.PageQuery; +import com.xunhong.erp.turbo.api.infra.dto.enums.CategoryTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "素材内容分页请求") +@EqualsAndHashCode(callSuper = true) +public class MaterialPageQry extends PageQuery { + + @Schema(title = "素材内容标题") + public String title; + + @Schema(title = "素材类型") + public CategoryTypeEnum type; + + @Schema(title = "素材内容ID", type = "string") + public Long materialId; + + @Schema(title = "分类ID", type = "string") + private Long categoryId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/MaterialShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/MaterialShowQry.java new file mode 100644 index 0000000..435ce83 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/MaterialShowQry.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.alibaba.cola.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "素材内容请求") +@EqualsAndHashCode(callSuper = true) +public class MaterialShowQry extends Query { + + @Schema(title = "素材内容ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + public Long materialId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/PlatformListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/PlatformListQry.java new file mode 100644 index 0000000..1e3bc0b --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/PlatformListQry.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.alibaba.cola.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "平台列表查询") +@EqualsAndHashCode(callSuper = true) +public class PlatformListQry extends Query { +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/PlatformPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/PlatformPageQry.java new file mode 100644 index 0000000..2d1c356 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/PlatformPageQry.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.alibaba.cola.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "平台分页查询") +@EqualsAndHashCode(callSuper = true) +public class PlatformPageQry extends PageQuery { + + @Schema(title = "平台ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long platformId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/PlatformShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/PlatformShowQry.java new file mode 100644 index 0000000..1bf233a --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/PlatformShowQry.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.alibaba.cola.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "平台查询") +@EqualsAndHashCode(callSuper = true) +public class PlatformShowQry extends Query { + + @Schema(title = "平台ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long platformId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/SettingShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/SettingShowQry.java new file mode 100644 index 0000000..8c64e09 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/SettingShowQry.java @@ -0,0 +1,20 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "设置查询") +@EqualsAndHashCode(callSuper = true) +public class SettingShowQry extends Query { + + @Schema(title = "系统设置项key", requiredMode = Schema.RequiredMode.REQUIRED) + private SettingKeyEnum settingKey; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/WarehouseListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/WarehouseListQry.java new file mode 100644 index 0000000..f039b52 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/WarehouseListQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "仓库列表查询") +@EqualsAndHashCode(callSuper = true) +public class WarehouseListQry extends Query { + + @Schema(title = "仓库ID", type = "string") + private Long warehouseId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/WarehousePageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/WarehousePageQry.java new file mode 100644 index 0000000..2e552e3 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/WarehousePageQry.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.xunhong.erp.turbo.base.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "仓库分页查询") +@EqualsAndHashCode(callSuper = true) +public class WarehousePageQry extends PageQuery { + + @Schema(title = "仓库ID", type = "string") + private Long warehouseId; + + @Schema(title = "仓库名称", type = "string") + private String name; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/WarehouseShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/WarehouseShowQry.java new file mode 100644 index 0000000..834402e --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/qry/WarehouseShowQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.infra.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "仓库查询") +@EqualsAndHashCode(callSuper = true) +public class WarehouseShowQry extends Query { + + @Schema(title = "仓库ID", type = "string") + private Long warehouseId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/AgreementVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/AgreementVO.java new file mode 100644 index 0000000..9ea54f4 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/AgreementVO.java @@ -0,0 +1,50 @@ +package com.xunhong.erp.turbo.api.infra.dto.vo; + +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.infra.dto.enums.AgreementSceneEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "协议") +@EqualsAndHashCode(callSuper = true) +public class AgreementVO extends DTO { + + /** + * 协议id + */ + @Schema(title = "协议id", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long agreementId; + + /** + * 使用场景 + */ + @Schema(title = "使用场景") + private List scene; + + /** + * 协议标题 + */ + @Schema(title = "协议标题") + private String title; + + /** + * 副标题 + */ + @Schema(title = "副标题") + private String subTitle; + + /** + * 协议内容 + */ + @Schema(title = "协议内容") + private String content; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/CategoryVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/CategoryVO.java new file mode 100644 index 0000000..0c0a7d4 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/CategoryVO.java @@ -0,0 +1,53 @@ +package com.xunhong.erp.turbo.api.infra.dto.vo; + + +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.infra.dto.enums.CategoryTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@Schema(title = "分类响应") +@EqualsAndHashCode(callSuper = true) +public class CategoryVO extends DTO { + + /** + * 分类类型 + */ + @Schema(title = "分类类型", example = "视频") + public CategoryTypeEnum type; + + /** + * 分类id + */ + @Schema(title = "分类", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long categoryId; + /** + * 分类名称 + */ + @Schema(title = "分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "名称") + private String name; + /** + * 上级分类id + */ + @Schema(title = "上级分类id", example = "名称", type = "string") + private Long pid; + + /** + * 排序号 + */ + @Schema(title = "排序号", example = "名称", type = "string") + private Long sort; + + /** + * 下级分类 + */ + @Schema(title = "下级分类") + private List children; + + @Schema(title = "分类关联数量", requiredMode = Schema.RequiredMode.REQUIRED) + private Integer count; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/ChannelVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/ChannelVO.java new file mode 100644 index 0000000..1126cf5 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/ChannelVO.java @@ -0,0 +1,76 @@ +package com.xunhong.erp.turbo.api.infra.dto.vo; + +import com.alibaba.cola.dto.DTO; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +@Data +@Schema(title = "渠道") +@EqualsAndHashCode(callSuper = true) +public class ChannelVO extends DTO { + + /** + * 渠道ID + */ + @Schema(title = "渠道ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long channelId; + + /** + * 域名 + */ + @Schema(title = "域名") + private String domain; + + /** + * Logo + */ + @Schema(title = "Logo") + private String logo; + + /** + * 标题 + */ + @Schema(title = "标题") + private String title; + + /** + * 副标题 + */ + @Schema(title = "副标题") + private String subTitle; + + /** + * 背景图片 + */ + @Schema(title = "背景图片") + private String backgroundImageUrl; + + /** + * 技术支持 + */ + @Schema(title = "技术支持") + private String technicalSupport; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8") + private LocalDateTime createdAt; + + /** + * 微信公众号Id + */ + @Schema(title = "微信公众号Id", type = "string") + private Long wxMpId; + + /** + * 第三方应用Id + */ + @Schema(title = "第三方应用Id", type = "string") + private Long wxOpenId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/DictionaryVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/DictionaryVO.java new file mode 100644 index 0000000..3b1a057 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/DictionaryVO.java @@ -0,0 +1,53 @@ +package com.xunhong.erp.turbo.api.infra.dto.vo; + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "字典") +@EqualsAndHashCode(callSuper = true) +public class DictionaryVO extends DTO { + + /** + * 自增id + */ + @Schema(title = "自增id") + private Integer dictionaryId; + + /** + * 代码 + */ + @Schema(title = "代码") + private String code; + + /** + * 字典名称 + */ + @Schema(title = "字典名称") + private String name; + + /** + * 上级id + */ + @Schema(title = "上级id") + private String parentId; + + /** + * 排序号 + */ + @Schema(title = "排序号") + private Integer sortNo; + + /** + * 类型 + */ + @Schema(title = "类型") + private String type; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/MaterialVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/MaterialVO.java new file mode 100644 index 0000000..7303b6f --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/MaterialVO.java @@ -0,0 +1,42 @@ +package com.xunhong.erp.turbo.api.infra.dto.vo; + +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.infra.dto.enums.CategoryTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "素材内容") +@EqualsAndHashCode(callSuper = true) +public class MaterialVO extends DTO { + + @Schema(title = "素材内容ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long materialId; + + @Schema(title = "素材内容标题", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + @Schema(title = "素材内容路劲", requiredMode = Schema.RequiredMode.REQUIRED) + private String path; + + @Schema(title = "素材内容地址", requiredMode = Schema.RequiredMode.REQUIRED) + private String url; + + @Schema(title = "上级分类id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long categoryId; + + @Schema(title = "素材类型", requiredMode = Schema.RequiredMode.REQUIRED) + private CategoryTypeEnum type; + + @Schema(title = "分类内容") + private CategoryVO categoryVO; + + public String getUrl() { + if (this.type.equals(CategoryTypeEnum.SPEECH)) { + return null; + } + + return "https://img.qilincloud168.com/" + this.path; + } +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/PlatformVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/PlatformVO.java new file mode 100644 index 0000000..3c225df --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/PlatformVO.java @@ -0,0 +1,33 @@ +package com.xunhong.erp.turbo.api.infra.dto.vo; + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "平台") +@EqualsAndHashCode(callSuper = true) +public class PlatformVO extends DTO { + + /** + * 平台id + */ + @Schema(title = "平台id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long platformId; + + /** + * 平台名称 + */ + @Schema(title = "平台名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String platformName; + /** + * 应用首页 + */ + @Schema(title = "应用首页", requiredMode = Schema.RequiredMode.REQUIRED) + private String homePage; + +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/SettingVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/SettingVO.java new file mode 100644 index 0000000..d419444 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/SettingVO.java @@ -0,0 +1,31 @@ +package com.xunhong.erp.turbo.api.infra.dto.vo; + +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.infra.dto.common.SettingValue; +import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "系统设置") +@EqualsAndHashCode(callSuper = true) +public class SettingVO extends DTO { + + /** + * 系统设置项key + */ + @Schema(title = "系统设置项key", requiredMode = Schema.RequiredMode.REQUIRED) + private SettingKeyEnum settingKey; + + /** + * 系统设置项内容 + */ + @Schema(title = "系统设置项内容", requiredMode = Schema.RequiredMode.REQUIRED) + private SettingValue settingValue; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/WarehouseVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/WarehouseVO.java new file mode 100644 index 0000000..5affe00 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/infra/dto/vo/WarehouseVO.java @@ -0,0 +1,55 @@ +package com.xunhong.erp.turbo.api.infra.dto.vo; + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "仓库") +@EqualsAndHashCode(callSuper = true) +public class WarehouseVO extends DTO { + + /** + * 仓库id + */ + @Schema(title = "仓库id", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long warehouseId; + + /** + * 仓库名称 (e.g., "北京总仓", "上海分仓")。 + */ + @Schema(title = "仓库名称 (e.g., "北京总仓", "上海分仓")。") + private String name; + + /** + * 仓库地址 + */ + @Schema(title = "仓库地址") + private String address; + + /** + * 仓库管理员 + */ + @Schema(title = "仓库管理员") + private String manager; + + /** + * 联系方式 + */ + @Schema(title = "联系方式") + private String contactPhone; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/MenuServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/MenuServiceI.java new file mode 100644 index 0000000..9a27bfb --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/MenuServiceI.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.api.rbac.api; + +import cn.hutool.core.lang.tree.Tree; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuDestroyCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuDragCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.MenuUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.qry.MenuListQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.MenuShowQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.MenuTreeQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.MenuVO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface MenuServiceI { + List> tree(MenuTreeQry menuTreeQry); + + MenuVO create(MenuCreateCmd menuCreateCmd); + + MenuVO show(MenuShowQry menuShowQry); + + MenuVO update(MenuUpdateCmd menuUpdateCmd); + + void destroy(MenuDestroyCmd menuDestroyCmd); + + List list(MenuListQry menuListQry); + + void drag(MenuDragCmd menuDragCmd); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/PermissionServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/PermissionServiceI.java new file mode 100644 index 0000000..b0f5608 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/PermissionServiceI.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.api.rbac.api; + + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionDestroyCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.PermissionUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.qry.PermissionListQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.PermissionPageQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.PermissionShowQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.PermissionVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +public interface PermissionServiceI { + List list(PermissionListQry permissionListQry); + + PageDTO page(PermissionPageQry permissionPageQry); + + PermissionVO create(PermissionCreateCmd permissionCreateCmd); + + PermissionVO show(PermissionShowQry permissionShowQry); + + PermissionVO update(PermissionUpdateCmd permissionUpdateCmd); + + void destroy(PermissionDestroyCmd permissionDestroyCmd); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/RoleServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/RoleServiceI.java new file mode 100644 index 0000000..86edd35 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/RoleServiceI.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.api.rbac.api; + + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleDestroyCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.RoleUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleListQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RolePageQry; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleShowQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.RoleVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +public interface RoleServiceI { + List listRole(RoleListQry roleListQry); + + RoleVO createRole(RoleCreateCmd roleCreateCmd); + + RoleVO showRole(RoleShowQry roleShowQry); + + RoleVO updateRole(RoleUpdateCmd roleUpdateCmd); + + void destroyRole(RoleDestroyCmd roleDeleteCmd); + + PageDTO pageRole(RolePageQry rolePageQry); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/UserMenuServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/UserMenuServiceI.java new file mode 100644 index 0000000..4624a09 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/UserMenuServiceI.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.api.rbac.api; + +import cn.hutool.core.lang.tree.Tree; +import com.xunhong.erp.turbo.api.rbac.dto.qry.RoleMenuTreeQry; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface UserMenuServiceI { + List> list(RoleMenuTreeQry roleMenuTreeQry); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/UserPermissionServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/UserPermissionServiceI.java new file mode 100644 index 0000000..b92d5cd --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/UserPermissionServiceI.java @@ -0,0 +1,11 @@ +package com.xunhong.erp.turbo.api.rbac.api; + + +import com.xunhong.erp.turbo.api.rbac.dto.qry.UserPermissionQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.PermissionVO; + +import java.util.List; + +public interface UserPermissionServiceI { + List list(UserPermissionQry userPermissionQry); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/UserRoleServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/UserRoleServiceI.java new file mode 100644 index 0000000..7b27f10 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/api/UserRoleServiceI.java @@ -0,0 +1,16 @@ +package com.xunhong.erp.turbo.api.rbac.api; + +import com.xunhong.erp.turbo.api.rbac.dto.cmd.UserRoleCreateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.cmd.UserRoleUpdateCmd; +import com.xunhong.erp.turbo.api.rbac.dto.qry.UserRoleListQry; +import com.xunhong.erp.turbo.api.rbac.dto.vo.UserRoleVO; + +import java.util.List; + +public interface UserRoleServiceI { + List list(UserRoleListQry userRoleListQry); + + List create(UserRoleCreateCmd userRoleCreateCmd); + + List update(UserRoleUpdateCmd userRoleUpdateCmd); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/MenuCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/MenuCreateCmd.java new file mode 100644 index 0000000..eea2996 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/MenuCreateCmd.java @@ -0,0 +1,45 @@ +package com.xunhong.erp.turbo.api.rbac.dto.cmd; + +import com.alibaba.cola.dto.Command; +import com.xunhong.erp.turbo.api.rbac.dto.enums.MenuTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "创建菜单请求") +@EqualsAndHashCode(callSuper = true) +public class MenuCreateCmd extends Command { + + @Schema(title = "路径", requiredMode = Schema.RequiredMode.REQUIRED) + private String path; + + @Schema(title = "组件", requiredMode = Schema.RequiredMode.REQUIRED) + private String component; + + @Schema(title = "菜单名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + @Schema(title = "上级菜单Id", type = "string") + private Long pid; + + @Schema(title = "菜单类型", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private MenuTypeEnum type; + + @Schema(title = "平台id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long platformId; + + @Schema(title = "角色Id") + private List roleId; + + @Schema(title = "是否隐藏") + private Boolean hideInMenu; + + @Schema(title = "权限Id") + private Long permissionId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/MenuDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/MenuDestroyCmd.java new file mode 100644 index 0000000..8b1788a --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/MenuDestroyCmd.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.api.rbac.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "菜单删除") +@EqualsAndHashCode(callSuper = true) +public class MenuDestroyCmd extends Command { + + @Schema(title = "菜单Id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long menuId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/MenuDragCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/MenuDragCmd.java new file mode 100644 index 0000000..60489ab --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/MenuDragCmd.java @@ -0,0 +1,33 @@ +package com.xunhong.erp.turbo.api.rbac.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "菜单拖拽") +@EqualsAndHashCode(callSuper = true) +public class MenuDragCmd extends Command { + + /** + * 相邻元素 + */ + @Schema(title = "相邻元素前") + private Long prevId; + + /** + * 相邻元素 + */ + @Schema(title = "相邻元素后") + private Long nextId; + + /** + * 当前元素 + */ + @Schema(title = "当前元素") + private Long currentId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/MenuUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/MenuUpdateCmd.java new file mode 100644 index 0000000..f45ec99 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/MenuUpdateCmd.java @@ -0,0 +1,14 @@ +package com.xunhong.erp.turbo.api.rbac.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "更新菜单") +@EqualsAndHashCode(callSuper = true) +public class MenuUpdateCmd extends MenuCreateCmd { + + @Schema(title = "菜单Id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long menuId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/PermissionCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/PermissionCreateCmd.java new file mode 100644 index 0000000..36f92aa --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/PermissionCreateCmd.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.api.rbac.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "权限创建") +@EqualsAndHashCode(callSuper = true) +public class PermissionCreateCmd extends Command { + @Schema(title = "权限标识", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private String slug; + + @Schema(title = "权限名称", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private String name; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/PermissionDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/PermissionDestroyCmd.java new file mode 100644 index 0000000..499bc9b --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/PermissionDestroyCmd.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.api.rbac.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "权限删除") +@EqualsAndHashCode(callSuper = true) +public class PermissionDestroyCmd extends Command { + + @Schema(title = "权限Id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long permissionId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/PermissionUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/PermissionUpdateCmd.java new file mode 100644 index 0000000..8c90d96 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/PermissionUpdateCmd.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.api.rbac.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "权限更新") +@EqualsAndHashCode(callSuper = true) +public class PermissionUpdateCmd extends PermissionCreateCmd { + @Schema(title = "权限Id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long permissionId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/RoleCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/RoleCreateCmd.java new file mode 100644 index 0000000..052f632 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/RoleCreateCmd.java @@ -0,0 +1,33 @@ +package com.xunhong.erp.turbo.api.rbac.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@Schema(title = "角色新增") +@EqualsAndHashCode(callSuper = true) +public class RoleCreateCmd extends Command { + + @Schema(title = "平台id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long platformId; + + @Schema(title = "角色标识", requiredMode = Schema.RequiredMode.REQUIRED) + private String slug; + + @Schema(title = "角色名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + @Schema(title = "角色类型", requiredMode = Schema.RequiredMode.REQUIRED) + private String type; + + @Schema(title = "角色详情", type = "string") + private String description; + + @Schema(title = "角色id", requiredMode = Schema.RequiredMode.REQUIRED) + private List menuId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/RoleDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/RoleDestroyCmd.java new file mode 100644 index 0000000..27ffbf8 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/RoleDestroyCmd.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.api.rbac.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "角色新增") +@EqualsAndHashCode(callSuper = true) +public class RoleDestroyCmd extends Command { + @Schema(title = "角色ID", type = "string") + private Long roleId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/RoleUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/RoleUpdateCmd.java new file mode 100644 index 0000000..0f9c7f3 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/RoleUpdateCmd.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.api.rbac.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "角色新增") +@EqualsAndHashCode(callSuper = true) +public class RoleUpdateCmd extends RoleCreateCmd { + + @Schema(title = "角色ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long roleId; +} + diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/UserRoleCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/UserRoleCreateCmd.java new file mode 100644 index 0000000..2371e4d --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/UserRoleCreateCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.rbac.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@Schema(title = "用户角色") +@EqualsAndHashCode(callSuper = true) +public class UserRoleCreateCmd extends Command { + @Schema(title = "用户ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long userId; + + @Schema(title = "角色ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private List roleId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/UserRoleUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/UserRoleUpdateCmd.java new file mode 100644 index 0000000..2d749c3 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/cmd/UserRoleUpdateCmd.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.api.rbac.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@Schema(title = "用户角色更新") +@EqualsAndHashCode(callSuper = true) +public class UserRoleUpdateCmd extends Command { + @Schema(title = "用户ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long userId; + + @Schema(title = "角色ID") + private List roleIdList; + + /** + * 是否覆盖 + */ + @Schema(title = "是否覆盖", type = "boolean", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean cover; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/constants/PermissionConstant.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/constants/PermissionConstant.java new file mode 100644 index 0000000..f4e53f8 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/constants/PermissionConstant.java @@ -0,0 +1,54 @@ +package com.xunhong.erp.turbo.api.rbac.dto.constants; + +/** + * @author shenyifei + */ +public class PermissionConstant { + + // 查看角色 + public static final String OPERATION_ROLE_VIEW = "operation-role-view"; + // 更新角色 + public static final String OPERATION_ROLE_UPDATE = "operation-role-update"; + // 删除角色 + public static final String OPERATION_ROLE_DELETE = "operation-role-delete"; + // 创建角色 + public static final String OPERATION_ROLE_CREATE = "operation-role-create"; + // 查看平台 + public static final String OPERATION_PLATFORM_VIEW = "operation-platform-view"; + // 更新平台 + public static final String OPERATION_PLATFORM_UPDATE = "operation-platform-update"; + // 删除平台 + public static final String OPERATION_PLATFORM_DELETE = "operation-platform-delete"; + // 创建平台 + public static final String OPERATION_PLATFORM_CREATE = "operation-platform-create"; + // 查看权限 + public static final String OPERATION_PERMISSION_VIEW = "operation-permission-view"; + // 更新权限 + public static final String OPERATION_PERMISSION_UPDATE = "operation-permission-update"; + // 删除权限 + public static final String OPERATION_PERMISSION_DELETE = "operation-permission-delete"; + // 创建权限 + public static final String OPERATION_PERMISSION_CREATE = "operation-permission-create"; + // 查看菜单 + public static final String OPERATION_MENU_VIEW = "operation-menu-view"; + // 更新菜单 + public static final String OPERATION_MENU_UPDATE = "operation-menu-update"; + // 删除菜单 + public static final String OPERATION_MENU_DELETE = "operation-menu-delete"; + // 创建菜单 + public static final String OPERATION_MENU_CREATE = "operation-menu-create"; + // 查看渠道 + public static final String OPERATION_CHANNEL_VIEW = "operation-channel-view"; + // 更新渠道 + public static final String OPERATION_CHANNEL_UPDATE = "operation-channel-update"; + // 删除渠道 + public static final String OPERATION_CHANNEL_DELETE = "operation-channel-delete"; + // 创建渠道 + public static final String OPERATION_CHANNEL_CREATE = "operation-channel-create"; + + // 私有构造函数,防止类被实例化 + private PermissionConstant() { + throw new AssertionError("不能实例化常量类"); + } + +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/constants/RoleConstant.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/constants/RoleConstant.java new file mode 100644 index 0000000..cc1d8fa --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/constants/RoleConstant.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.rbac.dto.constants; + +/** + * @author shenyifei + */ +public class RoleConstant { + + // boss + public static final String SUPERADMIN = "operation"; + + // boss + public static final String BOSS = "boss"; + + // reviewer + public static final String REVIEWER = "reviewer"; + + // market-buyer + public static final String MARKET_BUYER = "market-buyer"; + + // origin-entry + public static final String ORIGIN_ENTRY = "origin-entry"; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/enums/MenuTypeEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/enums/MenuTypeEnum.java new file mode 100644 index 0000000..cb14d6b --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/enums/MenuTypeEnum.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.api.rbac.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum MenuTypeEnum { + /** + * 类型:1:菜单,2:页面,3:按钮 + */ + MENU(1, "菜单"), + PAGE(2, "页面"), + BUTTON(3, "按钮"); + + @EnumValue + private final int type; + + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/MenuListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/MenuListQry.java new file mode 100644 index 0000000..5548373 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/MenuListQry.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.api.rbac.dto.qry; + +import com.alibaba.cola.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "菜单请求") +@EqualsAndHashCode(callSuper = true) +public class MenuListQry extends Query { + + @Schema(title = "平台id", type = "string") + private Long platformId; + + @Schema(title = "父级id", type = "string") + private Long pid; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/MenuShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/MenuShowQry.java new file mode 100644 index 0000000..c2266e8 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/MenuShowQry.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.api.rbac.dto.qry; + +import com.alibaba.cola.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "菜单详情") +@EqualsAndHashCode(callSuper = true) +public class MenuShowQry extends Query { + + @Schema(title = "菜单Id", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long menuId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/MenuTreeQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/MenuTreeQry.java new file mode 100644 index 0000000..c315143 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/MenuTreeQry.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.api.rbac.dto.qry; + +import com.alibaba.cola.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "菜单请求") +@EqualsAndHashCode(callSuper = true) +public class MenuTreeQry extends Query { + + @Schema(title = "平台id", type = "string") + private Long platformId; + + @Schema(title = "父级id", type = "string") + private Long pid; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/PermissionListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/PermissionListQry.java new file mode 100644 index 0000000..a88be42 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/PermissionListQry.java @@ -0,0 +1,12 @@ +package com.xunhong.erp.turbo.api.rbac.dto.qry; + +import com.alibaba.cola.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "权限查询") +@EqualsAndHashCode(callSuper = true) +public class PermissionListQry extends Query { +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/PermissionPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/PermissionPageQry.java new file mode 100644 index 0000000..01c1970 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/PermissionPageQry.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.api.rbac.dto.qry; + +import com.alibaba.cola.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "权限分页查询") +@EqualsAndHashCode(callSuper = true) +public class PermissionPageQry extends PageQuery { + @Schema(title = "权限标识", type = "string") + private String slug; + + @Schema(title = "权限名称", type = "string") + private String name; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/PermissionShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/PermissionShowQry.java new file mode 100644 index 0000000..b8012c8 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/PermissionShowQry.java @@ -0,0 +1,14 @@ +package com.xunhong.erp.turbo.api.rbac.dto.qry; + +import com.alibaba.cola.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "权限查询") +@EqualsAndHashCode(callSuper = true) +public class PermissionShowQry extends Query { + @Schema(title = "权限Id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long permissionId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/RoleListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/RoleListQry.java new file mode 100644 index 0000000..6645a6e --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/RoleListQry.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.api.rbac.dto.qry; + +import com.alibaba.cola.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@Schema(title = "角色查询") +@EqualsAndHashCode(callSuper = true) +public class RoleListQry extends PageQuery { + + @Schema(title = "角色名称", type = "string") + private String name; + + @Schema(title = "用户Id", type = "string") + private Long userId; + + @Schema(title = "角色编号", type = "string") + private Long roleId; + + @Schema(title = "应用角色Id") + private List roleIdList; + + @Schema(title = "平台Id", type = "string") + private Long platformId; + + @Schema(title = "角色类型", type = "integer") + private Integer type; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/RoleMenuTreeQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/RoleMenuTreeQry.java new file mode 100644 index 0000000..0bb182b --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/RoleMenuTreeQry.java @@ -0,0 +1,23 @@ +package com.xunhong.erp.turbo.api.rbac.dto.qry; + +import com.alibaba.cola.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "菜单请求") +@EqualsAndHashCode(callSuper = true) +public class RoleMenuTreeQry extends Query { + + @Schema(title = "角色权限", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "acp") + private List roleId; + + @Schema(title = "平台ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long platformId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/RolePageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/RolePageQry.java new file mode 100644 index 0000000..74f38d2 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/RolePageQry.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.api.rbac.dto.qry; + +import com.alibaba.cola.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "角色分页查询") +@EqualsAndHashCode(callSuper = true) +public class RolePageQry extends PageQuery { + + @Schema(title = "角色名称", type = "string") + private String name; + + @Schema(title = "角色标识", type = "string") + private String slug; + + @Schema(title = "角色类型", type = "string") + private String type; + + @Schema(title = "角色编号", type = "string") + private Long roleId; + + @Schema(title = "平台id", type = "string") + private Long platformId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/RoleShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/RoleShowQry.java new file mode 100644 index 0000000..78ad20f --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/RoleShowQry.java @@ -0,0 +1,14 @@ +package com.xunhong.erp.turbo.api.rbac.dto.qry; + +import com.alibaba.cola.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "角色查询") +@EqualsAndHashCode(callSuper = true) +public class RoleShowQry extends Query { + @Schema(title = "角色编号", type = "string") + private Long roleId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/UserPermissionQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/UserPermissionQry.java new file mode 100644 index 0000000..3777fc0 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/UserPermissionQry.java @@ -0,0 +1,23 @@ +package com.xunhong.erp.turbo.api.rbac.dto.qry; + +import com.alibaba.cola.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@Schema(title = "用户权限列表") +@EqualsAndHashCode(callSuper = true) +public class UserPermissionQry extends Query { + + @Schema(title = "角色标识") + private List roleSlugList; + + @Schema(title = "角色Id") + private List roleIdList; + + @Schema(title = "平台Id") + private Long platformId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/UserRoleListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/UserRoleListQry.java new file mode 100644 index 0000000..bd364fe --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/qry/UserRoleListQry.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.rbac.dto.qry; + +import com.alibaba.cola.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@Schema(title = "微信登录查询") +@EqualsAndHashCode(callSuper = true) +public class UserRoleListQry extends Query { + @Schema(title = "用户Id", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long userId; + + @Schema(title = "用户Id列表", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private List userIdList; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/vo/MenuVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/vo/MenuVO.java new file mode 100644 index 0000000..5da2bd1 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/vo/MenuVO.java @@ -0,0 +1,91 @@ +package com.xunhong.erp.turbo.api.rbac.dto.vo; + +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.rbac.dto.enums.MenuTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "菜单") +@EqualsAndHashCode(callSuper = true) +public class MenuVO extends DTO { + + /** + * 菜单id + */ + @Schema(title = "菜单id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long menuId; + + /** + * 菜单路径 + */ + @Schema(title = "菜单路径", requiredMode = Schema.RequiredMode.REQUIRED) + private String path; + /** + * 菜单路径 + */ + @Schema(title = "组件", requiredMode = Schema.RequiredMode.REQUIRED) + private String component; + + /** + * 菜单名称 + */ + @Schema(title = "菜单名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 父菜单id + */ + @Schema(title = "父菜单id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long pid; + + /** + * 排序 + */ + @Schema(title = "排序", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private BigDecimal sort; + + /** + * 菜单类型 + */ + @Schema(title = "菜单类型", requiredMode = Schema.RequiredMode.REQUIRED) + private MenuTypeEnum type; + + /** + * 平台id + */ + @Schema(title = "平台id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long platformId; + + /** + * display + */ + @Schema(title = "是否隐藏", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean hideInMenu; + + /** + * 子菜单 + */ + @Schema(title = "子菜单") + private List routes; + + /** + * 权限id + */ + @Schema(title = "权限id", requiredMode = Schema.RequiredMode.REQUIRED) + private Long permissionId; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/vo/PermissionVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/vo/PermissionVO.java new file mode 100644 index 0000000..e4512ed --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/vo/PermissionVO.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.api.rbac.dto.vo; + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "权限") +@EqualsAndHashCode(callSuper = true) +public class PermissionVO extends DTO { + + @Schema(title = "权限Id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long permissionId; + + @Schema(title = "权限标识", requiredMode = Schema.RequiredMode.REQUIRED) + private String slug; + + @Schema(title = "权限名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/vo/RoleVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/vo/RoleVO.java new file mode 100644 index 0000000..523f2ec --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/vo/RoleVO.java @@ -0,0 +1,72 @@ +package com.xunhong.erp.turbo.api.rbac.dto.vo; + + +import com.alibaba.cola.dto.DTO; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +@Schema(title = "角色") +@EqualsAndHashCode(callSuper = true) +public class RoleVO extends DTO { + + /** + * 角色id + */ + @Schema(title = "角色id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long roleId; + + /** + * 标识 + */ + @Schema(title = "标识", requiredMode = Schema.RequiredMode.REQUIRED) + private String slug; + + /** + * 名称 + */ + @Schema(title = "名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + + /** + * 类型 + */ + @Schema(title = "类型", requiredMode = Schema.RequiredMode.REQUIRED) + private String type; + + /** + * 描述 + */ + @Schema(title = "描述") + private String description; + + /** + * 平台id + */ + @Schema(title = "平台id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long platformId; + + /** + * 权限列表 + */ + @Schema(title = "权限列表", requiredMode = Schema.RequiredMode.REQUIRED) +// @JsonSerialize(using = LongListToStringListSerializer.class) + private List permissionId; + + /** + * 菜单列表 + */ + @Schema(title = "菜单列表", requiredMode = Schema.RequiredMode.REQUIRED) +// @JsonSerialize(using = LongListToStringListSerializer.class) + private List menuId; + + @Schema(title = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8") + private LocalDateTime createdAt; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/vo/UserRoleVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/vo/UserRoleVO.java new file mode 100644 index 0000000..ab7153d --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/dto/vo/UserRoleVO.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.api.rbac.dto.vo; + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "用户角色") +@EqualsAndHashCode(callSuper = true) +public class UserRoleVO extends DTO { + + @Schema(title = "角色名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + @Schema(title = "角色标识", requiredMode = Schema.RequiredMode.REQUIRED) + private String slug; + + @Schema(title = "角色ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long roleId; + + @Schema(title = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long userId; + + @Schema(title = "描述", requiredMode = Schema.RequiredMode.REQUIRED) + private String description; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/exception/RbacErrorCode.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/exception/RbacErrorCode.java new file mode 100644 index 0000000..b70ded7 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/exception/RbacErrorCode.java @@ -0,0 +1,37 @@ +package com.xunhong.erp.turbo.api.rbac.exception; + +import com.xunhong.erp.turbo.base.exception.ErrorCode; + +/** + * 文件上传错误码 + */ +public enum RbacErrorCode implements ErrorCode { + + /** + * 该权限正在被菜单使用,不能删除 + */ + PERMISSION_USED("PERMISSION_USED", "该权限正在被菜单使用,不能删除"), + B_RBAC_MENU_IN_ROLE_USE("B_RBAC_MENU_IN_ROLE_USE", "该菜单正在被角色使用,不能删除"), + B_RBAC_MENU_NOT_EXIST("B_RBAC_MENU_NOT_EXIST", "菜单不存在"), + B_RBAC_MENU_HAS_CHILDREN("B_RBAC_MENU_HAS_CHILDREN", "该菜单有子菜单,不能删除"); + + + private String code; + + private String message; + + RbacErrorCode(String code, String message) { + this.code = code; + this.message = message; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getMessage() { + return this.message; + } +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/exception/RbacException.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/exception/RbacException.java new file mode 100644 index 0000000..abaecd8 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/rbac/exception/RbacException.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.api.rbac.exception; + + +import com.xunhong.erp.turbo.base.exception.BizException; +import com.xunhong.erp.turbo.base.exception.ErrorCode; + +/** + * 文件上传异常 + */ +public class RbacException extends BizException { + + public RbacException(ErrorCode errorCode) { + super(errorCode); + } + + public RbacException(String message, ErrorCode errorCode) { + super(message, errorCode); + } + + public RbacException(String message, Throwable cause, ErrorCode errorCode) { + super(message, cause, errorCode); + } + + public RbacException(Throwable cause, ErrorCode errorCode) { + super(cause, errorCode); + } + + public RbacException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, ErrorCode errorCode) { + super(message, cause, enableSuppression, writableStackTrace, errorCode); + } + +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/api/AdminServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/api/AdminServiceI.java new file mode 100644 index 0000000..eac8885 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/api/AdminServiceI.java @@ -0,0 +1,11 @@ +package com.xunhong.erp.turbo.api.user.api; + + +import com.xunhong.erp.turbo.api.user.dto.qry.AdminShowQry; +import com.xunhong.erp.turbo.api.user.dto.vo.AdminVO; + +public interface AdminServiceI { + AdminVO show(AdminShowQry adminShowQry); + +// List listStore(StoreListQry storeListQry); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/api/EmployeeServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/api/EmployeeServiceI.java new file mode 100644 index 0000000..012edcd --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/api/EmployeeServiceI.java @@ -0,0 +1,34 @@ + +package com.xunhong.erp.turbo.api.user.api; + +import com.xunhong.erp.turbo.api.user.dto.cmd.*; +import com.xunhong.erp.turbo.api.user.dto.qry.EmployeeListQry; +import com.xunhong.erp.turbo.api.user.dto.qry.EmployeePageQry; +import com.xunhong.erp.turbo.api.user.dto.qry.EmployeeShowQry; +import com.xunhong.erp.turbo.api.user.dto.vo.EmployeeVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface EmployeeServiceI { + EmployeeVO create(EmployeeCreateCmd employeeCreateCmd); + + PageDTO page(EmployeePageQry employeePageQry); + + List list(EmployeeListQry employeeListQry); + + EmployeeVO update(EmployeeUpdateCmd employeeUpdateCmd); + + EmployeeVO show(EmployeeShowQry employeeShowQry); + + void destroy(EmployeeDestroyCmd employeeDestroyCmd); + + void restPassword(EmployeeRestPasswordCmd employeeRestPasswordCmd); + + EmployeeVO disable(EmployeeDisableCmd employeeDisableCmd); + + void updateAvatar(EmployeeUpdateAvatarCmd employeeUpdateAvatarCmd); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/api/UserAuthServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/api/UserAuthServiceI.java new file mode 100644 index 0000000..f5222aa --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/api/UserAuthServiceI.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.user.api; + + +import com.xunhong.erp.turbo.api.facade.dto.qry.WxMaOpenidQry; +import com.xunhong.erp.turbo.api.user.dto.cmd.OpenSafeCmd; +import com.xunhong.erp.turbo.api.user.dto.cmd.UpdatePasswordCmd; +import com.xunhong.erp.turbo.api.user.dto.qry.PasswordLoginQry; +import com.xunhong.erp.turbo.api.user.dto.qry.UserAuthShowQry; +import com.xunhong.erp.turbo.api.user.dto.vo.UserAuthVO; + +public interface UserAuthServiceI { + + UserAuthVO passwordLogin(PasswordLoginQry passwordLoginQry); + + UserAuthVO wxMaCodeLogin(WxMaOpenidQry wxMaOpenidQry); + + void openSafe(OpenSafeCmd openSafeCmd); + + void updatePassword(UpdatePasswordCmd updatePasswordCmd); + + UserAuthVO show(UserAuthShowQry userAuthShowQry); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/api/UserServiceI.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/api/UserServiceI.java new file mode 100644 index 0000000..fac5926 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/api/UserServiceI.java @@ -0,0 +1,34 @@ +package com.xunhong.erp.turbo.api.user.api; + +import com.xunhong.erp.turbo.api.facade.dto.qry.WxMaOpenidQry; +import com.xunhong.erp.turbo.api.user.dto.cmd.*; +import com.xunhong.erp.turbo.api.user.dto.qry.UserListQry; +import com.xunhong.erp.turbo.api.user.dto.qry.UserPageQry; +import com.xunhong.erp.turbo.api.user.dto.qry.UserShowQry; +import com.xunhong.erp.turbo.api.user.dto.vo.UserVO; +import com.xunhong.erp.turbo.base.dto.PageDTO; + +import java.util.List; + +/** + * @author shenyifei + */ +public interface UserServiceI { + UserVO show(UserShowQry userShowQry); + + UserVO update(UserUpdateCmd userUpdateCmd); + + PageDTO page(UserPageQry userPageQry); + + UserVO create(UserCreateCmd userCreateCmd); + + void destroy(UserDestroyCmd userDestroyCmd); + + List list(UserListQry userListQry); + + void disable(UserDisableCmd userDisableCmd); + + void enable(UserEnableCmd userEnableCmd); + + void unsubscribe(WxMaOpenidQry wxMaOpenidQry); +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/AdminCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/AdminCreateCmd.java new file mode 100644 index 0000000..e8166d3 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/AdminCreateCmd.java @@ -0,0 +1,24 @@ +package com.xunhong.erp.turbo.api.user.dto.cmd; + +import com.alibaba.cola.dto.Command; +import com.xunhong.erp.turbo.api.user.dto.enums.AdminTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Builder +@Schema(title = "管理员创建") +@EqualsAndHashCode(callSuper = true) +public class AdminCreateCmd extends Command { + + @Schema(title = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long userId; + + @Schema(title = "管理员名称") + private String name; + + @Schema(title = "管理员类型", type = "string") + private AdminTypeEnum type; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeCreateCmd.java new file mode 100644 index 0000000..c84b405 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeCreateCmd.java @@ -0,0 +1,65 @@ +package com.xunhong.erp.turbo.api.user.dto.cmd; + +import com.alibaba.cola.dto.Command; +import com.xunhong.erp.turbo.base.annotation.Decrypt; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "员工信息创建") +@EqualsAndHashCode(callSuper = true) +public class EmployeeCreateCmd extends Command { + + @Schema(title = "姓名", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "姓名不能为空") + private String name; + + @Schema(title = "工号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "工号不能为空") + private String number; + + @Schema(title = "性别", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "请选择性别") + private Integer gender; + + @Schema(title = "手机号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "手机号不能为空") + @Pattern(regexp = "^(1[3-9])\\d{9}$", message = "手机号格式错误") + private String phone; + + @Schema(title = "备注") + @Size(max = 200, message = "最多200个字符") + private String remark; + + @Schema(title = "状态") + @NotNull(message = "请选择状态") + private Boolean status; + + @Size(min = 4, max = 20, message = "至少4个字符串,至多20个字符串") + @NotBlank(message = "不能为空") + @Schema(title = "登录账号", example = "18367831980") + private String username; + + @Decrypt + @NotBlank + @Size(min = 8, max = 20) + @Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$", message = "密码必须至少8个字符,包含至少一个大写字母、一个小写字母、一个数字和一个特殊字符") + @Schema(title = "登录密码", example = "18367831980") + private String password; + + @Schema(title = "角色ID", requiredMode = Schema.RequiredMode.REQUIRED) + private List roleId; + + @Schema(title = "用户ID", type = "string", hidden = true) + private Long userId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeDestroyCmd.java new file mode 100644 index 0000000..b6e4c5e --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeDestroyCmd.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.user.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "删除员工信息") +@EqualsAndHashCode(callSuper = true) +public class EmployeeDestroyCmd extends Command { + + @Schema(title = "员工信息ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long employeeId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeDisableCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeDisableCmd.java new file mode 100644 index 0000000..70d6f4c --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeDisableCmd.java @@ -0,0 +1,20 @@ +package com.xunhong.erp.turbo.api.user.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "员工封禁") +@EqualsAndHashCode(callSuper = true) +public class EmployeeDisableCmd extends Command { + @Schema(title = "员工信息ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long employeeId; + + @Schema(title = "用户id", hidden = true) + private Long userId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeRestPasswordCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeRestPasswordCmd.java new file mode 100644 index 0000000..230285a --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeRestPasswordCmd.java @@ -0,0 +1,25 @@ +package com.xunhong.erp.turbo.api.user.dto.cmd; + +import com.alibaba.cola.dto.Command; +import com.xunhong.erp.turbo.base.annotation.Decrypt; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Pattern; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "员工信息更新") +@EqualsAndHashCode(callSuper = true) +public class EmployeeRestPasswordCmd extends Command { + + @Decrypt + @Schema(title = "新密码", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + @Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$", message = "密码必须至少8个字符,包含至少一个大写字母、一个小写字母、一个数字和一个特殊字符") + private String password; + + @Schema(title = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long userId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeUpdateAvatarCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeUpdateAvatarCmd.java new file mode 100644 index 0000000..4dcd94c --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeUpdateAvatarCmd.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.api.user.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "员工信息更新") +@EqualsAndHashCode(callSuper = true) +public class EmployeeUpdateAvatarCmd extends Command { + + @Schema(title = "员工信息ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long employeeId; + + @Schema(title = "头像") + private String avatar; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeUpdateCmd.java new file mode 100644 index 0000000..bcb4e01 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/EmployeeUpdateCmd.java @@ -0,0 +1,46 @@ +package com.xunhong.erp.turbo.api.user.dto.cmd; + +import com.alibaba.cola.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "员工信息更新") +@EqualsAndHashCode(callSuper = true) +public class EmployeeUpdateCmd extends Command { + + @Schema(title = "员工信息ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long employeeId; + + @Schema(title = "姓名", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "姓名不能为空") + private String name; + + @Schema(title = "工号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "工号不能为空") + private String number; + + @Schema(title = "性别", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "请选择性别") + private Integer gender; + + @Schema(title = "头像") + private String avatar; + + @Schema(title = "手机号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "手机号不能为空") + @Pattern(regexp = "^(1[3-9])\\d{9}$", message = "手机号格式错误") + private String phone; + + @Schema(title = "备注") + @Size(max = 200, message = "最多200个字符") + private String remark; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/OpenSafeCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/OpenSafeCmd.java new file mode 100644 index 0000000..405a4b2 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/OpenSafeCmd.java @@ -0,0 +1,24 @@ +package com.xunhong.erp.turbo.api.user.dto.cmd; + +import com.alibaba.cola.dto.Command; +import com.xunhong.erp.turbo.base.annotation.Decrypt; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Pattern; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Builder +@Schema(title = "管理员创建") +@EqualsAndHashCode(callSuper = true) +public class OpenSafeCmd extends Command { + + @Decrypt + @Schema(title = "登录密码", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + @Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$", message = "密码必须至少8个字符,包含至少一个大写字母、一个小写字母、一个数字和一个特殊字符") + private String password; + + @Schema(title = "用户id", type = "string", hidden = true) + private Long userId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UpdatePasswordCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UpdatePasswordCmd.java new file mode 100644 index 0000000..27c103f --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UpdatePasswordCmd.java @@ -0,0 +1,34 @@ +package com.xunhong.erp.turbo.api.user.dto.cmd; + +import com.xunhong.erp.turbo.base.annotation.Decrypt; +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Pattern; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "重置密码") +@EqualsAndHashCode(callSuper = true) +public class UpdatePasswordCmd extends Command { + + @Decrypt + @Schema(title = "旧密码", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private String oldPassword; + + @Decrypt + @Schema(title = "新密码", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + @Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$", message = "密码必须至少8个字符,包含至少一个大写字母、一个小写字母、一个数字和一个特殊字符") + private String password; + + @Decrypt + @Schema(title = "确认新密码", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + @Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$", message = "密码必须至少8个字符,包含至少一个大写字母、一个小写字母、一个数字和一个特殊字符") + private String confirmPassword; + + @Schema(title = "验证码 token", hidden = true) + private String token; + + @Schema(title = "用户id", hidden = true) + private Long userId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserAuthCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserAuthCreateCmd.java new file mode 100644 index 0000000..aad7a84 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserAuthCreateCmd.java @@ -0,0 +1,47 @@ +package com.xunhong.erp.turbo.api.user.dto.cmd; + + +import com.alibaba.cola.dto.Command; +import com.xunhong.erp.turbo.api.user.dto.enums.SocialTypeEnum; +import com.xunhong.erp.turbo.base.annotation.Decrypt; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Pattern; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Builder +@Schema(title = "用户认证新增") +@EqualsAndHashCode(callSuper = true) +public class UserAuthCreateCmd extends Command { + + /** + * 账号 + */ + @Schema(title = "账号") + private String username; + + /** + * 密码 + */ + @Decrypt + @Schema(title = "密码") + @Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$", message = "密码必须至少8个字符,包含至少一个大写字母、一个小写字母、一个数字和一个特殊字符") + private String password; + + /** + * 类型 + */ + @Schema(title = "类型") + private SocialTypeEnum socialType; + + /** + * 是否是管理员 + */ + @Schema(title = "是否是管理员") + private Boolean isAdmin; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserCreateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserCreateCmd.java new file mode 100644 index 0000000..2ff04c8 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserCreateCmd.java @@ -0,0 +1,44 @@ +package com.xunhong.erp.turbo.api.user.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@Schema(title = "用户更新命令") +@EqualsAndHashCode(callSuper = true) +public class UserCreateCmd extends Command { + + @Schema(title = "会员名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + @Schema(title = "会员昵称") + private String nickname; + + @Schema(title = "头像") + private String avatar; + + @Schema(title = "会员手机号", requiredMode = Schema.RequiredMode.REQUIRED) + private String phone; + + @Schema(title = "是否注册", hidden = true) + private Boolean register; + + @Schema(title = "会员生日") + private String birthday; + + @Schema(title = "会员性别") + private Integer gender; + + @Schema(title = "会员卡号生成方式:1 系统生成 2 自定义") + private Integer cardType; + + @Schema(title = "备注") + private String remark; + + @Schema(title = "客户标签") + private List labelId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserDestroyCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserDestroyCmd.java new file mode 100644 index 0000000..d6b18ea --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserDestroyCmd.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.user.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "用户删除命令") +@EqualsAndHashCode(callSuper = true) +public class UserDestroyCmd extends Command { + + /** + * 用户ID + */ + @Schema(title = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long userId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserDisableCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserDisableCmd.java new file mode 100644 index 0000000..ff1d2e9 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserDisableCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.user.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +@Data +@Schema(title = "用户封禁") +@EqualsAndHashCode(callSuper = true) +public class UserDisableCmd extends Command { + + /** + * 用户ID + */ + @Schema(title = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long userId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserEnableCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserEnableCmd.java new file mode 100644 index 0000000..37ed946 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserEnableCmd.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.api.user.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +@Data +@Schema(title = "用户启用") +@EqualsAndHashCode(callSuper = true) +public class UserEnableCmd extends Command { + + /** + * 用户ID + */ + @Schema(title = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long userId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserUpdateCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserUpdateCmd.java new file mode 100644 index 0000000..3e7218b --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserUpdateCmd.java @@ -0,0 +1,40 @@ +package com.xunhong.erp.turbo.api.user.dto.cmd; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@Schema(title = "用户更新命令") +@EqualsAndHashCode(callSuper = true) +public class UserUpdateCmd extends UserCreateCmd { + + @Schema(title = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long userId; + + @Schema(title = "会员名称") + private String name; + + @Schema(title = "会员昵称") + private String nickname; + + @Schema(title = "头像") + private String avatar; + + @Schema(title = "会员手机号") + private String phone; + + @Schema(title = "会员生日") + private String birthday; + + @Schema(title = "会员性别") + private Integer gender; + + @Schema(title = "备注") + private String remark; + + @Schema(title = "客户标签") + private List labelId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserUpdateWxCmd.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserUpdateWxCmd.java new file mode 100644 index 0000000..799e37d --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/cmd/UserUpdateWxCmd.java @@ -0,0 +1,33 @@ +package com.xunhong.erp.turbo.api.user.dto.cmd; + +import com.xunhong.erp.turbo.base.dto.Command; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "用户更新微信命令") +@EqualsAndHashCode(callSuper = true) +public class UserUpdateWxCmd extends Command { + + @Schema(title = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long userId; + + /** + * 微信公众号openid + */ + @Schema(title = "微信公众号openid", requiredMode = Schema.RequiredMode.REQUIRED) + private String mpOpenid; + + /** + * 微信小程序openid + */ + @Schema(title = "微信小程序openid", requiredMode = Schema.RequiredMode.REQUIRED) + private String maOpenid; + + /** + * 开放平台unionid + */ + @Schema(title = "开放平台unionid", requiredMode = Schema.RequiredMode.REQUIRED) + private String unionid; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/AdminTypeEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/AdminTypeEnum.java new file mode 100644 index 0000000..0e0cad4 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/AdminTypeEnum.java @@ -0,0 +1,20 @@ +package com.xunhong.erp.turbo.api.user.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum AdminTypeEnum { + /** + * 账号类型 1-超级管理员 2-子账号 + */ + SUPER_ADMIN(1, "超级管理员"), + SUB_ADMIN(2, "子账号"); + + @EnumValue + private final int type; + + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/PlatformTypeEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/PlatformTypeEnum.java new file mode 100644 index 0000000..b7461da --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/PlatformTypeEnum.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.user.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum PlatformTypeEnum { + /** + * 平台类型 1 - 管理员浏览器端 2 - 消费者小程序端 3 - 老板移动端 4 - 收银台端 + */ + ADMIN(1, "管理员浏览器端"), + CONSUMER(2, "消费者小程序端"), + BOSS(3, "老板移动端"), + CASHIER(4, "收银台端"); + + @EnumValue + private final int type; + + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/SocialTypeEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/SocialTypeEnum.java new file mode 100644 index 0000000..661b7c8 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/SocialTypeEnum.java @@ -0,0 +1,28 @@ +package com.xunhong.erp.turbo.api.user.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * @author shenyifei + */ +@Getter +@RequiredArgsConstructor +public enum SocialTypeEnum { + /** + * 类型 + */ + MOBILE(1, "手机号码登录"), + + ACCOUNT(2, "账号密码登录"), + + WX_OPEN_ID(3, "微信OPEN_ID登录"), + + WX_UNION_ID(4, "微信UNION_ID登录"); + + @EnumValue + private final int code; + + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/SourceChannelEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/SourceChannelEnum.java new file mode 100644 index 0000000..8020634 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/SourceChannelEnum.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.user.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum SourceChannelEnum { + /** + * 1:微信 2:管理后台 3:老板端 4:抖音 5:转介绍 + */ + WECHAT("1", "微信"), + MANAGE_BACKEND("2", "管理后台"), + BOSS_END("3", "老板端"), + DOUYIN("4", "抖音"), + INTRODUCE("5", "转介绍"); + + @EnumValue + private final String code; + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/SourceWayEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/SourceWayEnum.java new file mode 100644 index 0000000..97496d6 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/SourceWayEnum.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.user.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum SourceWayEnum { + /** + * 1:手动录入 2:外部导入 3:九宫格抽奖 4:进入领券页 5:进入首页 + */ + MANUAL_ENTRY("1", "手动录入"), + EXTERNAL_IMPORT("2", "外部导入"), + NINE_GRID_LOTTERY("3", "九宫格抽奖"), + ENTER_COUPON_PAGE("4", "进入领券页"), + ENTER_HOME_PAGE("5", "进入首页"); + + @EnumValue + private final String code; + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/UserStateEnum.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/UserStateEnum.java new file mode 100644 index 0000000..7d38579 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/enums/UserStateEnum.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.api.user.dto.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum UserStateEnum { + /** + * 用户状态 1:启用 2:禁用 + */ + ENABLE(1, "启用"), + DISABLE(2, "禁用"), + ; + + @EnumValue + private final int type; + + private final String message; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/AdminShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/AdminShowQry.java new file mode 100644 index 0000000..933bb55 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/AdminShowQry.java @@ -0,0 +1,20 @@ +package com.xunhong.erp.turbo.api.user.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "管理员查询") +@EqualsAndHashCode(callSuper = true) +public class AdminShowQry extends Query { + @Schema(title = "管理员ID", type = "string") + private Long adminId; + + @Schema(title = "用户ID", type = "string") + private Long userId; + + @Schema(title = "管理员类型", type = "string") + private Integer type; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/Captcha.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/Captcha.java new file mode 100644 index 0000000..ee70aa2 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/Captcha.java @@ -0,0 +1,45 @@ +package com.xunhong.erp.turbo.api.user.dto.qry; + + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Builder +@Schema(title = "验证码") +@EqualsAndHashCode(callSuper = true) +public class Captcha extends DTO { + + /** + * 验证的令牌 + */ + @Schema(title = "验证的令牌", example = "123456") + private String token; + + /** + * 验证码类型 + */ + @Schema(title = "验证码类型", example = "geetest") + private String captchaType; + + /** + * 用户滑动验证码的位置数据,JSON格式 + */ + @Schema(title = "用户滑动验证码的位置数据,JSON格式", example = "{\"x\":\"123\",\"y\":\"456\"}") + private String pointJson; + + /** + * 客户端的唯一标识符 + */ + @Schema(title = "客户端的唯一标识符", example = "123456") + private String clientUid; + + /** + * 时间戳,用于防止重放攻击 + */ + @Schema(title = "时间戳,用于防止重放攻击", example = "123456") + private Long ts; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/CaptchaQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/CaptchaQry.java new file mode 100644 index 0000000..573d21a --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/CaptchaQry.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.api.user.dto.qry; + +import com.alibaba.cola.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "验证码校验请求") +@EqualsAndHashCode(callSuper = true) +public class CaptchaQry extends Query { + + @Pattern(regexp = "^(1[3-9])\\d{9}$", message = "格式错误") + @Size(min = 4, max = 20, message = "至少4个字符串,至多20个字符串") + @NotBlank(message = "不能为空") + @Schema(title = "登录账号", example = "18367831980") + private String username; + + @NotBlank(message = "不能为空") + @Schema(title = "验证码内容") + private String captchaKey; + + @NotBlank(message = "不能为空") + @Schema(title = "验证码内容") + private String captchaCode; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/EmployeeListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/EmployeeListQry.java new file mode 100644 index 0000000..b9d47bb --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/EmployeeListQry.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.api.user.dto.qry; + +import com.alibaba.cola.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "员工信息列表查询") +@EqualsAndHashCode(callSuper = true) +public class EmployeeListQry extends Query { + + @Schema(title = "员工信息ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long employeeId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/EmployeePageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/EmployeePageQry.java new file mode 100644 index 0000000..e35040f --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/EmployeePageQry.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.api.user.dto.qry; + +import com.alibaba.cola.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "员工信息分页查询") +@EqualsAndHashCode(callSuper = true) +public class EmployeePageQry extends PageQuery { + + @Schema(title = "员工信息ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long employeeId; + + @Schema(title = "姓名", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + @Schema(title = "工号", requiredMode = Schema.RequiredMode.REQUIRED) + private String number; + + @Schema(title = "手机号", requiredMode = Schema.RequiredMode.REQUIRED) + private String phone; + + @Schema(title = "状态") + private Integer status; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/EmployeeShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/EmployeeShowQry.java new file mode 100644 index 0000000..5ae8c1a --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/EmployeeShowQry.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.api.user.dto.qry; + +import com.alibaba.cola.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "员工信息查询") +@EqualsAndHashCode(callSuper = true) +public class EmployeeShowQry extends Query { + + @Schema(title = "员工信息ID", type = "string") + private Long employeeId; + + @Schema(title = "用户ID", type = "string") + private Long userId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/PasswordLoginQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/PasswordLoginQry.java new file mode 100644 index 0000000..d571b84 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/PasswordLoginQry.java @@ -0,0 +1,35 @@ +package com.xunhong.erp.turbo.api.user.dto.qry; + +import com.alibaba.cola.dto.Query; +import com.xunhong.erp.turbo.base.annotation.Decrypt; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "账号密码登录请求") +@EqualsAndHashCode(callSuper = true) +public class PasswordLoginQry extends Query { + + @Size(min = 4, max = 20, message = "至少4个字符串,至多20个字符串") + @Pattern(regexp = "^[\\w_-]{8,20}$") + @NotBlank(message = "不能为空") + @Schema(title = "登录账号", example = "18367831980") + private String username; + + @Decrypt + @NotBlank + @Size(min = 8, max = 20) + @Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$", message = "密码必须至少8个字符,包含至少一个大写字母、一个小写字母、一个数字和一个特殊字符") + @Schema(title = "登录密码", example = "18367831980") + private String password; + + @Schema(title = "验证码 token") + private String token; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/UserAuthShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/UserAuthShowQry.java new file mode 100644 index 0000000..2d441b3 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/UserAuthShowQry.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.user.dto.qry; + + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "用户认证查询") +@EqualsAndHashCode(callSuper = true) +public class UserAuthShowQry extends Query { + + /** + * 用户Id + */ + @Schema(title = "用户Id") + private Long userId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/UserListQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/UserListQry.java new file mode 100644 index 0000000..18798ed --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/UserListQry.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.api.user.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@Schema(title = "查询用户请求") +@EqualsAndHashCode(callSuper = true) +public class UserListQry extends Query { + /** + * 用户ID + */ + @Schema(title = "用户ID") + private List userIdList; + + @Schema(title = "用户名", type = "string") + private String name; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/UserPageQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/UserPageQry.java new file mode 100644 index 0000000..e27f7d0 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/UserPageQry.java @@ -0,0 +1,77 @@ +package com.xunhong.erp.turbo.api.user.dto.qry; + +import com.xunhong.erp.turbo.api.user.dto.enums.UserStateEnum; +import com.xunhong.erp.turbo.base.dto.PageQuery; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +@Schema(title = "查询用户分页请求") +@EqualsAndHashCode(callSuper = true) +public class UserPageQry extends PageQuery { + + /** + * 关键词 + */ + @Schema(title = "关键词") + private String keyword; + + /** + * 会员卡号 + */ + @Schema(title = "会员卡号") + private String cardNo; + + @Schema(title = "会员手机号码") + private String phone; + + @Schema(title = "会员名称") + private String name; + + @Schema(title = "会员昵称") + private String nickname; + + /** + * 创建时间 + */ + @Schema(title = "查询创建时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private List createdAt; + + @Schema(title = "是否绑定手机号码") + private Boolean isBindPhone; + + @Schema(title = "性别") + private Integer gender; + + @Schema(title = "查询绑定手机号码时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private List bindPhoneAt; + + @Schema(title = "状态") + private List state; + + /** + * 是否是管理员 + */ + @Schema(title = "是否是管理员") + private Boolean isAdmin; + + @Schema(title = "会员id列表") + private List userIdList; + + // 排除的用户 + @Schema(title = "排除的用户id列表") + private List excludeUserIdList; + + @Schema(title = "备注") + private String remark; + + @Schema(title = "小区id") + private Long communityId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/UserShowQry.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/UserShowQry.java new file mode 100644 index 0000000..d3a0e57 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/qry/UserShowQry.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.api.user.dto.qry; + +import com.xunhong.erp.turbo.base.dto.Query; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "查询用户请求") +@EqualsAndHashCode(callSuper = true) +public class UserShowQry extends Query { + /** + * 用户ID + */ + @Schema(title = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long userId; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/AdminVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/AdminVO.java new file mode 100644 index 0000000..fde724a --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/AdminVO.java @@ -0,0 +1,34 @@ +package com.xunhong.erp.turbo.api.user.dto.vo; + +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.user.dto.enums.AdminTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(title = "管理员") +@EqualsAndHashCode(callSuper = true) +public class AdminVO extends DTO { + + /** + * 管理员Id + */ + @Schema(title = "管理员Id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long adminId; + + /** + * 管理员名称 + */ + @Schema(title = "管理员名称", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private String name; + + /** + * 用户Id + */ + @Schema(title = "用户Id", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long userId; + + @Schema(title = "管理员类型", type = "string") + private AdminTypeEnum type; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/EmployeeVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/EmployeeVO.java new file mode 100644 index 0000000..1381dd5 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/EmployeeVO.java @@ -0,0 +1,93 @@ +package com.xunhong.erp.turbo.api.user.dto.vo; + +import cn.monitor4all.logRecord.annotation.LogRecordDiffField; +import cn.monitor4all.logRecord.annotation.LogRecordDiffObject; +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.rbac.dto.vo.UserRoleVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "员工信息") +@EqualsAndHashCode(callSuper = true) +@LogRecordDiffObject(alias = "员工信息") +public class EmployeeVO extends DTO { + + /** + * 员工信息id + */ + @Schema(title = "员工信息", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long employeeId; + + /** + * 姓名 + */ + @Schema(title = "姓名", requiredMode = Schema.RequiredMode.REQUIRED) + @LogRecordDiffField(alias = "姓名") + private String name; + + /** + * 工号 + */ + @Schema(title = "工号", requiredMode = Schema.RequiredMode.REQUIRED) + @LogRecordDiffField(alias = "工号") + private String number; + + @Schema(title = "头像") + @LogRecordDiffField(alias = "头像") + private String avatar; + + /** + * 性别 + */ + @Schema(title = "性别", requiredMode = Schema.RequiredMode.REQUIRED) + @LogRecordDiffField(alias = "性别") + private Integer gender; + + /** + * 手机号 + */ + @Schema(title = "手机号", requiredMode = Schema.RequiredMode.REQUIRED) + @LogRecordDiffField(alias = "手机号") +// @SensitiveStrategyPhone + private String phone; + + /** + * 备注 + */ + @Schema(title = "备注") + @LogRecordDiffField(alias = "备注") + private String remark; + + /** + * 状态 + */ + @Schema(title = "状态") + @LogRecordDiffField(alias = "状态") + private Boolean status; + + /** + * 创建时间 + */ + @Schema(title = "创建时间") + private LocalDateTime createdAt; + + /** + * 用户ID + */ + @Schema(title = "用户ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) + private Long userId; + + @Schema(title = "角色ID", requiredMode = Schema.RequiredMode.REQUIRED) + private List roleIdList; + + @Schema(title = "角色信息") + private List userRoleList; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/OssTokenVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/OssTokenVO.java new file mode 100644 index 0000000..0d204c0 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/OssTokenVO.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.api.user.dto.vo; + +import com.alibaba.cola.dto.DTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "商家响应") +@EqualsAndHashCode(callSuper = true) +public class OssTokenVO extends DTO { + private String securityToken; + private String accessKeySecret; + private String accessKeyId; + private String domain; + private String bucket; + private String region; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/UserAuthVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/UserAuthVO.java new file mode 100644 index 0000000..4ab473c --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/UserAuthVO.java @@ -0,0 +1,50 @@ +package com.xunhong.erp.turbo.api.user.dto.vo; + +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.api.rbac.dto.vo.PermissionVO; +import com.xunhong.erp.turbo.api.rbac.dto.vo.UserRoleVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "账号密码注册响应") +@EqualsAndHashCode(callSuper = true) +public class UserAuthVO extends DTO { + @Schema(title = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long userId; + + @Schema(title = "用户信息", requiredMode = Schema.RequiredMode.REQUIRED) + private UserVO userVO; + + @Schema(title = "用户角色信息", requiredMode = Schema.RequiredMode.REQUIRED) + private List userRoleVOList; + + @Schema(title = "权限信息", requiredMode = Schema.RequiredMode.REQUIRED) + private List permissionVOList; + +// @Schema(title = "商家应用", requiredMode = Schema.RequiredMode.REQUIRED) +// private List merchantAppList; + + @Schema(title = "META扩展", requiredMode = Schema.RequiredMode.REQUIRED) + private Meta meta; + + @Data + @Schema(title = "META扩展") + @EqualsAndHashCode(callSuper = true) + public static class Meta extends DTO { + @Schema(title = "TOKEN") + private String accessToken; + + @Schema(title = "TOKEN类型") + private String tokenType; + + @Schema(title = "过期时间") + private Long expiresIn; + } +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/UserVO.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/UserVO.java new file mode 100644 index 0000000..e1e8126 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/dto/vo/UserVO.java @@ -0,0 +1,126 @@ +package com.xunhong.erp.turbo.api.user.dto.vo; + +import com.alibaba.cola.dto.DTO; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.xunhong.erp.turbo.api.user.dto.enums.UserStateEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@Schema(title = "用户信息") +@EqualsAndHashCode(callSuper = true) +public class UserVO extends DTO { + + /** + * 用户id + */ + @Schema(title = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + private Long userId; + + /** + * 昵称 + */ + @Schema(title = "昵称", requiredMode = Schema.RequiredMode.REQUIRED) + private String nickname; + + /** + * 头像 + */ + @Schema(title = "头像", requiredMode = Schema.RequiredMode.REQUIRED) + private String avatar; + + /** + * 姓名 + */ + @Schema(title = "姓名", requiredMode = Schema.RequiredMode.REQUIRED) + private String name; + + /** + * 性别 + */ + @Schema(title = "性别", requiredMode = Schema.RequiredMode.REQUIRED) + private Integer gender; + + /** + * 生日 + */ + @Schema(title = "生日", requiredMode = Schema.RequiredMode.REQUIRED) + private String birthday; + + /** + * 手机号 + */ +// @SensitiveStrategyPhone + @Schema(title = "手机号", requiredMode = Schema.RequiredMode.REQUIRED) + private String phone; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态 1.启用 2.禁用 + */ + @Schema(title = "状态", requiredMode = Schema.RequiredMode.REQUIRED) + private UserStateEnum state; + + /** + * 是否是管理员 1.是 0.否 + */ + @Schema(title = "是否是管理员", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean isAdmin; + + /** + * 是否是小区合伙人 1.是 0.否 + */ + @Schema(title = "是否是小区合伙人", requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean isPartner; + + @Schema(title = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime createdAt; + + /** + * 绑定手机号码时间 + */ + @Schema(title = "绑定手机号码时间", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime bindPhoneAt; + + /** + * 最后一次登录时间 + */ + @Schema(title = "最后一次登录时间", requiredMode = Schema.RequiredMode.REQUIRED, type = "string") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime lastLoginAt; + + /** + * 微信公众号openid + */ + @Schema(title = "微信公众号openid", requiredMode = Schema.RequiredMode.REQUIRED) + private String mpOpenid; + + /** + * 微信小程序openid + */ + @Schema(title = "微信小程序openid", requiredMode = Schema.RequiredMode.REQUIRED) + private String maOpenid; + + /** + * 开放平台unionid + */ + @Schema(title = "开放平台unionid", requiredMode = Schema.RequiredMode.REQUIRED) + private String unionid; +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/exception/UserErrorCode.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/exception/UserErrorCode.java new file mode 100644 index 0000000..62479b8 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/exception/UserErrorCode.java @@ -0,0 +1,117 @@ +package com.xunhong.erp.turbo.api.user.exception; + +import com.xunhong.erp.turbo.base.exception.ErrorCode; + +/** + * 文件上传错误码 + */ +public enum UserErrorCode implements ErrorCode { + + /** + * 该权限正在被菜单使用,不能删除 + */ + PERMISSION_USED("PERMISSION_USED", "该权限正在被菜单使用,不能删除"), + + /** + * 当前登录账号不存在,请检查登录账号是否正确! + */ + B_USER_USER_AUTH_NULL("B_USER_USER_AUTH_NULL", "当前登录账号不存在,请检查登录账号是否正确!"), + + /** + * 当前登录账号密码不正确,请检查密码是否正确! + */ + B_USER_USER_AUTH_PASSWORD_ERROR("B_USER_USER_AUTH_PASSWORD_ERROR", "当前登录账号密码不正确,请检查密码是否正确!"), + + /** + * 当前登录账号已禁用! + */ + B_USER_USER_AUTH_DISABLE("B_USER_USER_AUTH_DISABLE", "当前登录账号已禁用!"), + + /** + * 当前登录账号已过期! + */ + B_USER_USER_AUTH_EXPIRED("B_USER_USER_AUTH_EXPIRED", "当前登录账号已过期!"), + + /** + * 当前登录账号已锁定! + */ + B_USER_USER_AUTH_LOCKED("B_USER_USER_AUTH_LOCKED", "当前登录账号已锁定!"), + + /** + * 当前账号暂无该应用权限 + */ + B_USER_USER_AUTH_APP_NULL("B_USER_USER_AUTH_APP_NULL", "当前账号暂无应用权限"), + + /** + * 手机号码重复 + */ + B_USER_USER_PHONE_REPEAT("B_USER_USER_PHONE_REPEAT", "手机号码重复"), + + /** + * 客户编号重复 + */ + B_USER_USER_NICKNAME_REPEAT("B_USER_USER_NICKNAME_REPEAT", "客户编号重复"), + + /** + * 客户名称必填 + */ + B_USER_USER_NAME_REQUIRED("B_USER_USER_NAME_REQUIRED", "客户名称必填"), + + /** + * 客户名称重复 + */ + B_USER_USER_NAME_REPEAT("B_USER_USER_NAME_REPEAT", "客户名称重复"), + + /** + * 无法删除客户,该客户存在关联订单。 + */ + B_USER_USER_ORDER_EXISTS("B_USER_USER_ORDER_EXISTS", "无法删除客户,该客户存在关联订单。"), + + /** + * 无法删除客户,该客户存在关联课程。 + */ + B_USER_USER_COURSE_QUOTA_EXISTS("USER_USER_COURSE_QUOTA_EXISTS", "无法删除客户,该客户存在关联课程名额。"), + + /** + * 无法删除客户,该客户存在积分或者余额账户。 + */ + B_USER_USER_ACCOUNT_EXISTS("B_USER_USER_ACCOUNT_EXISTS", "无法删除客户,该客户存在积分或者余额账户。"), + + /** + * 无法删除客户,该客户存在优惠券。 + */ + B_USER_USER_COUPON_EXISTS("B_USER_USER_COUPON_EXISTS", "无法删除客户,该客户存在优惠券。"), + /** + * 小区合伙人申请记录不存在 + */ + B_USER_PARTNER_APPLY_NOT_EXIST("B_USER_PARTNER_APPLY_NOT_EXIST", "小区合伙人申请记录不存在"), + + /** + * 小区合伙人申请已审核通过,不允许操作 + */ + B_USER_PARTNER_APPLY_AUDIT_SUCCESS_NOT_ALLOW_OPERATE("B_USER_PARTNER_APPLY_AUDIT_SUCCESS_NOT_ALLOW_OPERATE", "小区合伙人申请已审核通过,不允许操作"), + B_USER_PARTNER_COMMUNITY_APPLY_NOT_EXIST("B_USER_PARTNER_COMMUNITY_APPLY_NOT_EXIST", "合伙人合作小区申请记录不存在"), + B_USER_PARTNER_COMMUNITY_APPLY_NOT_WAIT_AUDIT("B_USER_PARTNER_COMMUNITY_APPLY_NOT_WAIT_AUDIT", "合伙人合作小区申请记录不是待审核状态"), + B_USER_PARTNER_COMMUNITY_APPLY_NOT_CANCEL("B_USER_PARTNER_COMMUNITY_APPLY_NOT_CANCEL", "合伙人合作小区申请记录不是取消状态"), + B_USER_PARTNER_COMMUNITY_APPLY_NOT_REJECT("B_USER_PARTNER_COMMUNITY_APPLY_NOT_REJECT", "合伙人合作小区申请记录不是拒绝状态"); + + + private final String code; + + private final String message; + + UserErrorCode(String code, String message) { + this.code = code; + this.message = message; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getMessage() { + return this.message; + } +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/exception/UserException.java b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/exception/UserException.java new file mode 100644 index 0000000..f1a5066 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/java/com/xunhong/erp/turbo/api/user/exception/UserException.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.api.user.exception; + + +import com.xunhong.erp.turbo.base.exception.BizException; +import com.xunhong.erp.turbo.base.exception.ErrorCode; + +/** + * 文件上传异常 + */ +public class UserException extends BizException { + + public UserException(ErrorCode errorCode) { + super(errorCode); + } + + public UserException(String message, ErrorCode errorCode) { + super(message, errorCode); + } + + public UserException(String message, Throwable cause, ErrorCode errorCode) { + super(message, cause, errorCode); + } + + public UserException(Throwable cause, ErrorCode errorCode) { + super(cause, errorCode); + } + + public UserException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, ErrorCode errorCode) { + super(message, cause, enableSuppression, writableStackTrace, errorCode); + } + +} diff --git a/erp-turbo-common/erp-turbo-api/src/main/resources/security/serialize.allowlist b/erp-turbo-common/erp-turbo-api/src/main/resources/security/serialize.allowlist new file mode 100644 index 0000000..6b3e330 --- /dev/null +++ b/erp-turbo-common/erp-turbo-api/src/main/resources/security/serialize.allowlist @@ -0,0 +1,3 @@ +com.xunhong.erp.turbo.api.rbac.exception.RbacException +com.xunhong.erp.turbo.api.rbac.exception.RbacErrorCode +com.xunhong.erp.turbo.base.dto.UserSession diff --git a/erp-turbo-common/erp-turbo-apm/pom.xml b/erp-turbo-common/erp-turbo-apm/pom.xml new file mode 100644 index 0000000..6252011 --- /dev/null +++ b/erp-turbo-common/erp-turbo-apm/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-apm + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + + + org.apache.skywalking + apm-toolkit-logback-1.x + 9.2.0 + + + org.apache.skywalking + apm-toolkit-trace + 9.2.0 + + + org.springframework.boot + spring-boot-starter-actuator + + + + diff --git a/erp-turbo-common/erp-turbo-base/pom.xml b/erp-turbo-common/erp-turbo-base/pom.xml new file mode 100644 index 0000000..1b95138 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/pom.xml @@ -0,0 +1,85 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-base + 基础组件 + 1.0.0-SNAPSHOT + + + + + com.alibaba.cola + cola-component-dto + + + + commons-lang + commons-lang + 2.6 + + + + + org.springframework.boot + spring-boot-starter-validation + 3.4.5 + + + + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + org.apache.httpcomponents + httpcore + + + + + org.springframework + spring-web + + + + com.baomidou + mybatis-plus-extension + 3.5.10.1 + + + + org.springdoc + springdoc-openapi-starter-webmvc-api + 2.8.8 + + + + + com.github.houbb + sensitive-logback + + + + com.github.houbb + sensitive-core + + + + com.itextpdf + itextpdf + 5.5.13.3 + + + diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/annotation/Decrypt.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/annotation/Decrypt.java new file mode 100644 index 0000000..e134478 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/annotation/Decrypt.java @@ -0,0 +1,11 @@ +package com.xunhong.erp.turbo.base.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Decrypt { +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/config/AopConfig.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/config/AopConfig.java new file mode 100644 index 0000000..2823222 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/config/AopConfig.java @@ -0,0 +1,13 @@ +package com.xunhong.erp.turbo.base.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.EnableAspectJAutoProxy; + +/** + * @author shenyifei + * @date 2020/9/21 + */ +@EnableAspectJAutoProxy(exposeProxy = true) +@Configuration +public class AopConfig { +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/config/BaseConfiguration.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/config/BaseConfiguration.java new file mode 100644 index 0000000..e76bd6e --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/config/BaseConfiguration.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.base.config; + +import com.xunhong.erp.turbo.base.utils.SpringContextHolder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 通用模块的配置类 + * + * @author shenyifei + */ +@Configuration +public class BaseConfiguration { + + @Bean + public SpringContextHolder springContextHolder() { + return new SpringContextHolder(); + } +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/constant/ProfileConstant.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/constant/ProfileConstant.java new file mode 100644 index 0000000..35ae9a8 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/constant/ProfileConstant.java @@ -0,0 +1,9 @@ +package com.xunhong.erp.turbo.base.constant; + +/** + * @author shenyifei + */ +public class ProfileConstant { + + public static final String PROFILE_DEV = "dev"; +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/Command.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/Command.java new file mode 100644 index 0000000..a9c676d --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/Command.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.base.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class Command extends com.alibaba.cola.dto.Command { + + /** + * 创建人ID + */ + @Schema(title = "创建人ID", type = "string", hidden = true) + private Long createdBy; + + /** + * 创建人名称 + */ + @Schema(title = "创建人名称", type = "string", hidden = true) + private String createdByName; +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/PageDTO.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/PageDTO.java new file mode 100644 index 0000000..0f91784 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/PageDTO.java @@ -0,0 +1,43 @@ +package com.xunhong.erp.turbo.base.dto; + +import com.alibaba.cola.dto.DTO; +import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = true) +public class PageDTO extends DTO { + + /** + * 查询数据列表 + */ + private List records; + + /** + * 总数 + */ + private long total = 0; + + /** + * 每页显示条数,默认 10 + */ + private long size = 10; + + /** + * 当前页 + */ + private long current = 1; + + public static PageDTO of(IPage page) { + PageDTO pageDTO = new PageDTO(); + pageDTO.setCurrent(page.getCurrent()); + pageDTO.setSize(page.getSize()); + pageDTO.setTotal(page.getTotal()); + pageDTO.setRecords(page.getRecords()); + + return pageDTO; + } +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/PageQuery.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/PageQuery.java new file mode 100644 index 0000000..869b101 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/PageQuery.java @@ -0,0 +1,28 @@ +package com.xunhong.erp.turbo.base.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class PageQuery extends com.alibaba.cola.dto.PageQuery { + + @Schema(title = "自定义字段key") + private String customFieldKey; + + @Schema(title = "自定义字段value") + private String customFieldValue; + + /** + * 备注 + */ + @Schema(title = "备注") + private String remark; + + /** + * 状态:1_启用;0_禁用; + */ + @Schema(title = "状态:1_启用;0_禁用;") + private Boolean status; +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/Query.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/Query.java new file mode 100644 index 0000000..cea5d08 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/Query.java @@ -0,0 +1,28 @@ +package com.xunhong.erp.turbo.base.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class Query extends com.alibaba.cola.dto.Query { + + /** + * 状态:1_启用;0_禁用; + */ + @Schema(title = "状态:1_启用;0_禁用;") + private Boolean status; + + /** + * 创建人ID + */ + @Schema(title = "创建人ID", type = "string", hidden = true) + private Long createdBy; + + /** + * 创建人名称 + */ + @Schema(title = "创建人名称", type = "string", hidden = true) + private String createdByName; +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/User.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/User.java new file mode 100644 index 0000000..c44bb74 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/User.java @@ -0,0 +1,80 @@ +package com.xunhong.erp.turbo.base.dto; + +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class User extends DTO { + + /** + * 用户id + */ + private Long userId; + + /** + * 昵称 + */ + private String nickname; + + /** + * 头像 + */ + private String avatar; + + /** + * 姓名 + */ + private String name; + + /** + * 生日 + */ + private String birthday; + + /** + * 性别 + */ + private Integer gender; + + /** + * 手机号 + */ + private String phone; + + /** + * 状态 1.启用 2.禁用 + */ + private Integer state; + + /** + * 备注 + */ + private String remark; + + /** + * 是否是管理员 1.是 0.否 + */ + private Boolean isAdmin; + + /** + * 创建时间 + */ + private LocalDateTime createdAt; + + /** + * 绑定手机号码时间 + */ + private LocalDateTime bindPhoneAt; + + /** + * 最后一次登录时间 + */ + private LocalDateTime lastLoginAt; +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/UserSession.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/UserSession.java new file mode 100644 index 0000000..de01dac --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/dto/UserSession.java @@ -0,0 +1,41 @@ +package com.xunhong.erp.turbo.base.dto; + +import com.alibaba.cola.dto.DTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class UserSession extends DTO { + public static final ThreadLocal USER_THREAD_LOCAL = new ThreadLocal<>(); + + /** + * 用户id + */ + private Long userId; + + /** + * 平台id + */ + private Long platformId; + + /** + * 角色id + */ + private String roleSlug; + + /** + * ip + */ + private String ipAddr; + + /** + * 创建人ID + */ + private Long createdBy; + + /** + * 创建人名称 + */ + private String createdByName; +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/BizErrorCode.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/BizErrorCode.java new file mode 100644 index 0000000..0944043 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/BizErrorCode.java @@ -0,0 +1,70 @@ +package com.xunhong.erp.turbo.base.exception; + +/** + * 业务通用错误码 + * + * @author shenyifei + */ +public enum BizErrorCode implements ErrorCode { + + /** + * HTTP 客户端错误 + */ + HTTP_CLIENT_ERROR("HTTP_CLIENT_ERROR", "HTTP 客户端错误"), + + /** + * HTTP 服务端错误 + */ + HTTP_SERVER_ERROR("HTTP_SERVER_ERROR", "HTTP 服务端错误"), + + /** + * 不允许重复发送通知 + */ + SEND_NOTICE_DUPLICATED("SEND_NOTICE_DUPLICATED", "不允许重复发送通知"), + + /** + * 通知保存失败 + */ + NOTICE_SAVE_FAILED("NOTICE_SAVE_FAILED", "通知保存失败"), + + /** + * 状态机转换失败 + */ + STATE_MACHINE_TRANSITION_FAILED("STATE_MACHINE_TRANSITION_FAILED", "状态机转换失败"), + + /** + * 重复请求 + */ + DUPLICATED("DUPLICATED", "重复请求"), + + /** + * 远程调用返回结果为空 + */ + REMOTE_CALL_RESPONSE_IS_NULL("REMOTE_CALL_RESPONSE_IS_NULL", "远程调用返回结果为空"), + + /** + * 远程调用返回结果失败 + */ + REMOTE_CALL_RESPONSE_IS_FAILED("REMOTE_CALL_RESPONSE_IS_FAILED", "远程调用返回结果失败"); + + + private String code; + + + private String message; + + BizErrorCode(String code, String message) { + this.code = code; + this.message = message; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getMessage() { + return this.message; + } +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/BizException.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/BizException.java new file mode 100644 index 0000000..66603ff --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/BizException.java @@ -0,0 +1,44 @@ +package com.xunhong.erp.turbo.base.exception; + +/** + * 业务异常 + * + * @author shenyifei + */ +public class BizException extends RuntimeException { + + private ErrorCode errorCode; + + public BizException(ErrorCode errorCode) { + super(errorCode.getMessage()); + this.errorCode = errorCode; + } + + public BizException(String message, ErrorCode errorCode) { + super(message); + this.errorCode = errorCode; + } + + public BizException(String message, Throwable cause, ErrorCode errorCode) { + super(message, cause); + this.errorCode = errorCode; + } + + public BizException(Throwable cause, ErrorCode errorCode) { + super(cause); + this.errorCode = errorCode; + } + + public BizException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, ErrorCode errorCode) { + super(message, cause, enableSuppression, writableStackTrace); + this.errorCode = errorCode; + } + + public ErrorCode getErrorCode() { + return errorCode; + } + + public void setErrorCode(ErrorCode errorCode) { + this.errorCode = errorCode; + } +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/ErrorCode.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/ErrorCode.java new file mode 100644 index 0000000..cce4407 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/ErrorCode.java @@ -0,0 +1,23 @@ +package com.xunhong.erp.turbo.base.exception; + +/** + * 错误码 + * + * @author shenyifei + */ +public interface ErrorCode { + + /** + * 错误码 + * + * @return 错误码 + */ + String getCode(); + + /** + * 错误信息 + * + * @return 错误信息 + */ + String getMessage(); +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/RemoteCallException.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/RemoteCallException.java new file mode 100644 index 0000000..d45aa99 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/RemoteCallException.java @@ -0,0 +1,28 @@ +package com.xunhong.erp.turbo.base.exception; + +/** + * @author shenyifei + */ +public class RemoteCallException extends SystemException { + + public RemoteCallException(ErrorCode errorCode) { + super(errorCode); + } + + public RemoteCallException(String message, ErrorCode errorCode) { + super(message, errorCode); + } + + public RemoteCallException(String message, Throwable cause, ErrorCode errorCode) { + super(message, cause, errorCode); + } + + public RemoteCallException(Throwable cause, ErrorCode errorCode) { + super(cause, errorCode); + } + + public RemoteCallException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, ErrorCode errorCode) { + super(message, cause, enableSuppression, writableStackTrace, errorCode); + } + +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/RepoErrorCode.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/RepoErrorCode.java new file mode 100644 index 0000000..d57af22 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/RepoErrorCode.java @@ -0,0 +1,42 @@ +package com.xunhong.erp.turbo.base.exception; + +/** + * 错误码 + * + * @author shenyifei + */ +public enum RepoErrorCode implements ErrorCode { + /** + * 未知错误 + */ + UNKNOWN_ERROR("UNKNOWN_ERROR", "未知错误"), + + /** + * 数据库插入失败 + */ + INSERT_FAILED("INSERT_FAILED", "数据库插入失败"), + + /** + * 数据库更新失败 + */ + UPDATE_FAILED("UPDATE_FAILED", "数据库更新失败"); + + private String code; + + private String message; + + RepoErrorCode(String code, String message) { + this.code = code; + this.message = message; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getMessage() { + return this.message; + } +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/SystemException.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/SystemException.java new file mode 100644 index 0000000..7b13b64 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/exception/SystemException.java @@ -0,0 +1,44 @@ +package com.xunhong.erp.turbo.base.exception; + +/** + * 系统异常 + * + * @author shenyifei + */ +public class SystemException extends RuntimeException { + + private ErrorCode errorCode; + + public SystemException(ErrorCode errorCode) { + super(errorCode.getMessage()); + this.errorCode = errorCode; + } + + public SystemException(String message, ErrorCode errorCode) { + super(message); + this.errorCode = errorCode; + } + + public SystemException(String message, Throwable cause, ErrorCode errorCode) { + super(message, cause); + this.errorCode = errorCode; + } + + public SystemException(Throwable cause, ErrorCode errorCode) { + super(cause); + this.errorCode = errorCode; + } + + public SystemException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, ErrorCode errorCode) { + super(message, cause, enableSuppression, writableStackTrace); + this.errorCode = errorCode; + } + + public ErrorCode getErrorCode() { + return errorCode; + } + + public void setErrorCode(ErrorCode errorCode) { + this.errorCode = errorCode; + } +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/pool/ThreadPoolUtils.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/pool/ThreadPoolUtils.java new file mode 100644 index 0000000..6399668 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/pool/ThreadPoolUtils.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.base.pool; + +import com.google.common.util.concurrent.ThreadFactoryBuilder; + +import java.util.concurrent.*; + +/** + * @author shenyifei + */ +public class ThreadPoolUtils { + private static ThreadFactory smsSendFactory = new ThreadFactoryBuilder() + .setNameFormat("demo-pool-%d").build(); + + private static ExecutorService smsSendPool = new ThreadPoolExecutor(5, 20, + 0L, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue(1024), smsSendFactory, new ThreadPoolExecutor.AbortPolicy()); + + public static ExecutorService getSmsSendPool() { + return smsSendPool; + } +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/statemachine/BaseStateMachine.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/statemachine/BaseStateMachine.java new file mode 100644 index 0000000..b4c9b19 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/statemachine/BaseStateMachine.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.base.statemachine; + +import com.google.common.base.Joiner; +import com.google.common.collect.Maps; +import com.xunhong.erp.turbo.base.exception.BizException; + +import java.util.Map; + +import static com.xunhong.erp.turbo.base.exception.BizErrorCode.STATE_MACHINE_TRANSITION_FAILED; + +/** + * @author shenyifei + */ +public class BaseStateMachine implements StateMachine { + private Map stateTransitions = Maps.newHashMap(); + + protected void putTransition(STATE origin, EVENT event, STATE target) { + stateTransitions.put(Joiner.on("_").join(origin, event), target); + } + + @Override + public STATE transition(STATE state, EVENT event) { + STATE target = stateTransitions.get(Joiner.on("_").join(state, event)); + if (target == null) { + throw new BizException("state = " + state + " , event = " + event, STATE_MACHINE_TRANSITION_FAILED); + } + return target; + } +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/statemachine/StateMachine.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/statemachine/StateMachine.java new file mode 100644 index 0000000..d8e7cb2 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/statemachine/StateMachine.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.base.statemachine; + +/** + * @author shenyifei + */ +public interface StateMachine { + + /** + * 状态机转移 + * + * @param state + * @param event + * @return + */ + public STATE transition(STATE state, EVENT event); +} + diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/BeanNameUtils.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/BeanNameUtils.java new file mode 100644 index 0000000..c687100 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/BeanNameUtils.java @@ -0,0 +1,24 @@ +package com.xunhong.erp.turbo.base.utils; + +import com.google.common.base.CaseFormat; + +/** + * @author shenyifei + */ +public class BeanNameUtils { + + /** + * 把一个策略名称转换成beanName + *
+	 *     如 WEN_CHANG ,ChainService -> wenChangChainService
+	 * 
+ * + * @param strategyName + * @param serviceName + * @return + */ + public static String getBeanName(String strategyName, String serviceName) { + //将服务转换成小写字母开头的驼峰形式,如A_BCD 转成 aBcd + return CaseFormat.UPPER_UNDERSCORE.converterTo(CaseFormat.LOWER_CAMEL).convert(strategyName) + serviceName; + } +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/BeanValidator.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/BeanValidator.java new file mode 100644 index 0000000..40fb56b --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/BeanValidator.java @@ -0,0 +1,33 @@ +package com.xunhong.erp.turbo.base.utils; + + +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.ValidationException; +import jakarta.validation.Validator; +import org.hibernate.validator.HibernateValidator; + +import java.util.Set; + + +/** + * 参数校验工具 + * + * @author shenyifei + */ +public class BeanValidator { + + private static Validator validator = Validation.byProvider(HibernateValidator.class).configure().failFast(true) + .buildValidatorFactory().getValidator(); + + /** + * @param object object + * @param groups groups + */ + public static void validateObject(Object object, Class... groups) throws ValidationException { + Set> constraintViolations = validator.validate(object, groups); + if (constraintViolations.stream().findFirst().isPresent()) { + throw new ValidationException(constraintViolations.stream().findFirst().get().getMessage()); + } + } +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/HttpUtils.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/HttpUtils.java new file mode 100644 index 0000000..3da84fa --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/HttpUtils.java @@ -0,0 +1,276 @@ +package com.xunhong.erp.turbo.base.utils; + +import org.apache.commons.lang.StringUtils; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.message.BasicNameValuePair; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * HttpUtils + * + * @author shenyifei + */ +public class HttpUtils { + + /** + * get + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @return + * @throws Exception + */ + public static HttpResponse doGet(String host, String path, String method, + Map headers, + Map querys) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpGet request = new HttpGet(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + return httpClient.execute(request); + } + + /** + * post form + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param bodys + * @return + * @throws Exception + */ + public static HttpResponse doPost(String host, String path, String method, + Map headers, + Map querys, + Map bodys) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPost request = new HttpPost(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (bodys != null) { + List nameValuePairList = new ArrayList(); + + for (String key : bodys.keySet()) { + nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key))); + } + UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8"); + formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8"); + request.setEntity(formEntity); + } + + return httpClient.execute(request); + } + + /** + * Post String + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPost(String host, String path, String method, + Map headers, + Map querys, + String body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPost request = new HttpPost(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (StringUtils.isNotBlank(body)) { + request.setEntity(new StringEntity(body, "utf-8")); + } + + return httpClient.execute(request); + } + + /** + * Post stream + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPost(String host, String path, String method, + Map headers, + Map querys, + byte[] body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPost request = new HttpPost(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (body != null) { + request.setEntity(new ByteArrayEntity(body)); + } + + return httpClient.execute(request); + } + + /** + * Put String + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPut(String host, String path, String method, + Map headers, + Map querys, + String body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPut request = new HttpPut(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (StringUtils.isNotBlank(body)) { + request.setEntity(new StringEntity(body, "utf-8")); + } + + return httpClient.execute(request); + } + + /** + * Put stream + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPut(String host, String path, String method, + Map headers, + Map querys, + byte[] body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPut request = new HttpPut(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (body != null) { + request.setEntity(new ByteArrayEntity(body)); + } + + return httpClient.execute(request); + } + + /** + * Delete + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @return + * @throws Exception + */ + public static HttpResponse doDelete(String host, String path, String method, + Map headers, + Map querys) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpDelete request = new HttpDelete(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + return httpClient.execute(request); + } + + private static String buildUrl(String host, String path, Map querys) throws UnsupportedEncodingException { + StringBuilder sbUrl = new StringBuilder(); + sbUrl.append(host); + if (!StringUtils.isBlank(path)) { + sbUrl.append(path); + } + if (null != querys) { + StringBuilder sbQuery = new StringBuilder(); + for (Map.Entry query : querys.entrySet()) { + if (0 < sbQuery.length()) { + sbQuery.append("&"); + } + if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) { + sbQuery.append(query.getValue()); + } + if (!StringUtils.isBlank(query.getKey())) { + sbQuery.append(query.getKey()); + if (!StringUtils.isBlank(query.getValue())) { + sbQuery.append("="); + sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8")); + } + } + } + if (0 < sbQuery.length()) { + sbUrl.append("?").append(sbQuery); + } + } + + return sbUrl.toString(); + } + + private static HttpClient wrapClient(String host) { + return HttpClientBuilder.create().build(); + } +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/MoneyUtils.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/MoneyUtils.java new file mode 100644 index 0000000..8b92ea8 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/MoneyUtils.java @@ -0,0 +1,33 @@ +package com.xunhong.erp.turbo.base.utils; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +/** + * @author shenyifei + */ +public class MoneyUtils { + + /** + * 元转分 + * + * @param number + * @return + */ + public static Long yuanToCent(BigDecimal number) { + return number.multiply(new BigDecimal("100")).longValue(); + } + + /** + * 分转元 + * + * @param number + * @return + */ + public static BigDecimal centToYuan(Long number) { + if (number == null) { + return null; + } + return new BigDecimal(number.toString()).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP); + } +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/RemoteCallWrapper.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/RemoteCallWrapper.java new file mode 100644 index 0000000..0aadce6 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/RemoteCallWrapper.java @@ -0,0 +1,143 @@ +package com.xunhong.erp.turbo.base.utils; + +import com.alibaba.fastjson2.JSON; +import com.google.common.collect.ImmutableSet; +import com.xunhong.erp.turbo.base.exception.RemoteCallException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.Assert; +import org.springframework.util.StopWatch; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.function.Function; + +import static com.xunhong.erp.turbo.base.exception.BizErrorCode.REMOTE_CALL_RESPONSE_IS_FAILED; +import static com.xunhong.erp.turbo.base.exception.BizErrorCode.REMOTE_CALL_RESPONSE_IS_NULL; + +/** + * 远程方法调用的包装工具类 + * + * @author shenyifei + */ +public class RemoteCallWrapper { + + private static Logger logger = LoggerFactory.getLogger(RemoteCallWrapper.class); + + private static ImmutableSet SUCCESS_CHECK_METHOD = ImmutableSet.of("isSuccess", "isSucceeded", + "getSuccess"); + + private static ImmutableSet SUCCESS_CODE_METHOD = ImmutableSet.of("getResponseCode"); + + private static ImmutableSet SUCCESS_CODE = ImmutableSet.of("SUCCESS", "DUPLICATE", + "DUPLICATED_REQUEST"); + + public static R call(Function function, T request, boolean checkResponse) { + return call(function, request, request.getClass().getSimpleName(), checkResponse, false); + } + + public static R call(Function function, T request) { + return call(function, request, request.getClass().getSimpleName(), true, false); + } + + public static R call(Function function, T request, String requestName) { + return call(function, request, requestName, true, false); + } + + public static R call(Function function, T request, String requestName, boolean checkResponse) { + return call(function, request, requestName, checkResponse, false); + } + + public static R call(Function function, T request, boolean checkResponse, boolean checkResponseCode) { + return call(function, request, request.getClass().getSimpleName(), checkResponse, checkResponseCode); + } + + public static R call(Function function, T request, String requestName, boolean checkResponse, + boolean checkResponseCode) { + StopWatch stopWatch = new StopWatch(); + R response = null; + try { + + stopWatch.start(); + response = function.apply(request); + stopWatch.stop(); + if (checkResponse) { + + Assert.notNull(response, REMOTE_CALL_RESPONSE_IS_NULL.name()); + + if (!isResponseValid(response)) { + logger.error("Response Invalid on Remote Call request {} , response {}", + JSON.toJSONString(request), + JSON.toJSONString(response)); + + throw new RemoteCallException(JSON.toJSONString(response), REMOTE_CALL_RESPONSE_IS_FAILED); + } + } + if (checkResponseCode) { + + Assert.notNull(response, REMOTE_CALL_RESPONSE_IS_NULL.name()); + + if (!isResponseCodeValid(response)) { + logger.error("Response code Invalid on Remote Call request {} , response {}", + JSON.toJSONString(request), + JSON.toJSONString(response)); + + throw new RemoteCallException(JSON.toJSONString(response), REMOTE_CALL_RESPONSE_IS_FAILED); + } + } + + } catch (IllegalAccessException | InvocationTargetException e) { + logger.error("Catch Exception on Remote Call :" + e.getMessage(), e); + throw new IllegalArgumentException("Catch Exception on Remote Call " + e.getMessage(), e); + } catch (Throwable e) { + logger.error("request exception {}", JSON.toJSONString(request)); + logger.error("Catch Exception on Remote Call :" + e.getMessage(), e); + throw e; + } finally { + if (logger.isInfoEnabled()) { + + logger.info("## Method={} ,## 耗时={}ms ,## [请求报文]:{},## [响应报文]:{}", requestName, + stopWatch.getTotalTimeMillis(), + JSON.toJSONString(request), JSON.toJSONString(response)); + } + } + + return response; + } + + private static boolean isResponseValid(R response) + throws IllegalAccessException, InvocationTargetException { + Method successMethod = null; + Method[] methods = response.getClass().getMethods(); + for (Method method : methods) { + String methodName = method.getName(); + if (SUCCESS_CHECK_METHOD.contains(methodName)) { + successMethod = method; + break; + } + } + if (successMethod == null) { + return true; + } + + return (Boolean) successMethod.invoke(response); + } + + private static boolean isResponseCodeValid(R response) + throws IllegalAccessException, InvocationTargetException { + Method successMethod = null; + Method[] methods = response.getClass().getMethods(); + for (Method method : methods) { + String methodName = method.getName(); + if (SUCCESS_CODE_METHOD.contains(methodName)) { + successMethod = method; + break; + } + } + if (successMethod == null) { + return true; + } + + return SUCCESS_CODE.contains(successMethod.invoke(response)); + } +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/RestClientUtils.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/RestClientUtils.java new file mode 100644 index 0000000..116122c --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/RestClientUtils.java @@ -0,0 +1,81 @@ +package com.xunhong.erp.turbo.base.utils; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatusCode; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestClient; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.Map; + +/** + * RestClient工具 + * + * @author shenyifei + */ +@Slf4j +public class RestClientUtils { + public static HttpHeaders configureHeaders(HttpHeaders headers, Map headersMap) { + headersMap.forEach((k, v) -> headers.add(k.toString(), v.toString())); + return headers; + } + + private static String buildUrl(String path, Map querys) throws + UnsupportedEncodingException { + StringBuilder sbUrl = new StringBuilder(); + if (!StringUtils.isBlank(path)) { + sbUrl.append(path); + } + if (null != querys) { + StringBuilder sbQuery = new StringBuilder(); + for (Map.Entry query : querys.entrySet()) { + if (0 < sbQuery.length()) { + sbQuery.append("&"); + } + if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) { + sbQuery.append(query.getValue()); + } + if (!StringUtils.isBlank(query.getKey())) { + sbQuery.append(query.getKey()); + if (!StringUtils.isBlank(query.getValue())) { + sbQuery.append("="); + sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8")); + } + } + } + if (0 < sbQuery.length()) { + sbUrl.append("?").append(sbQuery); + } + } + + return sbUrl.toString(); + } + + public static ResponseEntity doPost(String host, String path, Map headersMap, + Map querys, + Map bodys) throws Exception { + + + RestClient restClient = RestClient.builder() + .baseUrl(host) + .build(); + + var result = restClient.post() + .uri(buildUrl(path, querys)) + .headers( + headers -> configureHeaders(headers, headersMap)) + .body(bodys) + .retrieve() + .onStatus(HttpStatusCode::is4xxClientError, (request, response) -> { + log.error("http client error, request: {}, response: {}", request, response); + }).onStatus(HttpStatusCode::is5xxServerError, (request, response) -> { + log.error("http server error, request: {}, response: {}", request, response); + }).toBodilessEntity(); + + return result; + } + +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/SpringContextHolder.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/SpringContextHolder.java new file mode 100644 index 0000000..7db83f3 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/SpringContextHolder.java @@ -0,0 +1,30 @@ +package com.xunhong.erp.turbo.base.utils; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +/** + * Spring上下文 + * + * @author shenyifei + */ +@Component +public class SpringContextHolder implements ApplicationContextAware { + + private static ApplicationContext applicationContext; + + public static Object getBean(String name) { + return applicationContext.getBean(name); + } + + public static T getBean(Class name) { + return applicationContext.getBean(name); + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextHolder.applicationContext = applicationContext; + } +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/UrlUtils.java b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/UrlUtils.java new file mode 100644 index 0000000..30e2bfe --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/java/com/xunhong/erp/turbo/base/utils/UrlUtils.java @@ -0,0 +1,54 @@ +package com.xunhong.erp.turbo.base.utils; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class UrlUtils { + public static String queryParam(String url, String paramName) { + // 正则表达式模式:匹配 paramName 及其对应的值 + String regex = "[?&]" + paramName + "=([^&]*)"; + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(url); + + if (matcher.find()) { + return matcher.group(1); + } + return null; + } + + public static String appendParam(String url, String paramName, String paramValue) { + if (url == null || paramName == null || paramValue == null) { + throw new IllegalArgumentException("Base URL, parameter name, and parameter value cannot be null"); + } + + StringBuilder newUrlBuilder = new StringBuilder(url); + + if (url.contains("?")) { + newUrlBuilder.append("&").append(paramName).append("=").append(paramValue); + } else { + newUrlBuilder.append("?").append(paramName).append("=").append(paramValue); + } + + return newUrlBuilder.toString(); + } + + // 替换 + public static String replaceParam(String url, String paramName, String paramValue) { + if (url == null || paramName == null || paramValue == null) { + throw new IllegalArgumentException("Base URL, parameter name, and parameter value cannot be null"); + } + + String regex = "[?&]" + Pattern.quote(paramName) + "=([^&]*)"; + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(url); + + StringBuilder newUrlBuilder = new StringBuilder(url); + if (matcher.find()) { + newUrlBuilder.replace(matcher.start(), matcher.end(), paramName + "=" + paramValue); + } else { + newUrlBuilder.append("?").append(paramName).append("=").append(paramValue); + } + + return newUrlBuilder.toString(); + } +} diff --git a/erp-turbo-common/erp-turbo-base/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/erp-turbo-common/erp-turbo-base/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..d08c843 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.xunhong.erp.turbo.base.config.BaseConfiguration diff --git a/erp-turbo-common/erp-turbo-base/src/main/resources/base.yml b/erp-turbo-common/erp-turbo-base/src/main/resources/base.yml new file mode 100644 index 0000000..ddcbb29 --- /dev/null +++ b/erp-turbo-common/erp-turbo-base/src/main/resources/base.yml @@ -0,0 +1,41 @@ +xunhong: + turbo: + nacos: + server-addr: ${NACOS_SERVER_ADDR:192.168.31.48:8848} + namespace: 9071fd58-229f-492d-b365-d12229bc4ba4 + username: nacos + password: nacos + mysql: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://rm-2zei66o47vfv0010zwo.mysql.rds.aliyuncs.com:3306/qilincloud168?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC + username: qilincloud168 + password: "7rGBi4jL8wdM9Ot2eOZMm3h0bTAwrRi9" + clickhouse: + driver-class-name: com.clickhouse.jdbc.ClickHouseDriver + url: jdbc:clickhouse://121.40.210.33:18123/default + username: qilincloud168 + password: zyy520520 + redis: + host: 101.200.243.98 + port: 6379 + password: redis_byehPk + elasticsearch: + enable: false + url: 192.168.0.1:9200 + username: elastic + password: 123456 + xxl-job: + url: 192.168.0.1:23333 + appName: xxl-job-executor + accessToken: default_token + sentinel: + url: 192.168.110.43:8099 + port: 8719 + nacos: + data-id: qilincloud168-gateway-sentinel + rocketmq: + url: 192.168.0.1:9876 + dubbo: + nacos: + namespace: 1b28e01d-6add-461a-a384-6c8395575faa + group: DUBBO_GROUP diff --git a/erp-turbo-common/erp-turbo-cache/pom.xml b/erp-turbo-common/erp-turbo-cache/pom.xml new file mode 100644 index 0000000..8dff3fd --- /dev/null +++ b/erp-turbo-common/erp-turbo-cache/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-cache + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + + org.redisson + redisson-spring-boot-starter + 3.24.3 + + + + + com.github.ben-manes.caffeine + caffeine + 3.1.8 + + + + + com.alicp.jetcache + jetcache-starter-redisson + 2.7.5 + + + org.springframework.boot + spring-boot-starter-logging + + + + + + + + diff --git a/erp-turbo-common/erp-turbo-cache/src/main/java/com/xunhong/erp/turbo/cache/config/CacheConfiguration.java b/erp-turbo-common/erp-turbo-cache/src/main/java/com/xunhong/erp/turbo/cache/config/CacheConfiguration.java new file mode 100644 index 0000000..5aff363 --- /dev/null +++ b/erp-turbo-common/erp-turbo-cache/src/main/java/com/xunhong/erp/turbo/cache/config/CacheConfiguration.java @@ -0,0 +1,14 @@ +package com.xunhong.erp.turbo.cache.config; + +import com.alicp.jetcache.anno.config.EnableMethodCache; +import org.springframework.context.annotation.Configuration; + +/** + * 缓存配置 + * + * @author shenyifei + */ +@Configuration +@EnableMethodCache(basePackages = "com.xunhong.erp.turbo") +public class CacheConfiguration { +} diff --git a/erp-turbo-common/erp-turbo-cache/src/main/java/com/xunhong/erp/turbo/cache/constant/CacheConstant.java b/erp-turbo-common/erp-turbo-cache/src/main/java/com/xunhong/erp/turbo/cache/constant/CacheConstant.java new file mode 100644 index 0000000..e474b46 --- /dev/null +++ b/erp-turbo-common/erp-turbo-cache/src/main/java/com/xunhong/erp/turbo/cache/constant/CacheConstant.java @@ -0,0 +1,12 @@ +package com.xunhong.erp.turbo.cache.constant; + +/** + * @author shenyifei + */ +public class CacheConstant { + + /** + * 缓存key分隔符 + */ + public static final String CACHE_KEY_SEPARATOR = ":"; +} diff --git a/erp-turbo-common/erp-turbo-cache/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/erp-turbo-common/erp-turbo-cache/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..5edbaa7 --- /dev/null +++ b/erp-turbo-common/erp-turbo-cache/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.xunhong.erp.turbo.cache.config.CacheConfiguration diff --git a/erp-turbo-common/erp-turbo-cache/src/main/resources/cache.yml b/erp-turbo-common/erp-turbo-cache/src/main/resources/cache.yml new file mode 100644 index 0000000..69adeee --- /dev/null +++ b/erp-turbo-common/erp-turbo-cache/src/main/resources/cache.yml @@ -0,0 +1,47 @@ +spring: + data: + redis: + host: ${xunhong.turbo.redis.host} + port: ${xunhong.turbo.redis.port} + password: ${xunhong.turbo.redis.password} + ssl: + enabled: true + redis: + redisson: + config: | + singleServerConfig: + idleConnectionTimeout: 10000 + connectTimeout: 10000 + timeout: 3000 + retryAttempts: 3 + retryInterval: 1500 + password: ${xunhong.turbo.redis.password} + subscriptionsPerConnection: 5 + clientName: null + address: redis://${xunhong.turbo.redis.host}:${xunhong.turbo.redis.port} + subscriptionConnectionMinimumIdleSize: 1 + subscriptionConnectionPoolSize: 50 + connectionMinimumIdleSize: 24 + connectionPoolSize: 64 + database: 0 + dnsMonitoringInterval: 5000 + threads: 16 + nettyThreads: 32 + codec: ! {} + transportMode: "NIO" +jetcache: + statIntervalMinutes: 1 + areaInCacheName: false + local: + default: + type: caffeine + keyConvertor: fastjson2 + remote: + default: + type: redisson + keyConvertor: fastjson2 + broadcastChannel: ${spring.application.name} + keyPrefix: ${spring.application.name} + valueEncoder: java + valueDecoder: java + defaultExpireInMillis: 5000 diff --git a/erp-turbo-common/erp-turbo-captcha/pom.xml b/erp-turbo-common/erp-turbo-captcha/pom.xml new file mode 100644 index 0000000..1750590 --- /dev/null +++ b/erp-turbo-common/erp-turbo-captcha/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-captcha + 1.0.0-SNAPSHOT + + + + com.anji-plus + spring-boot-starter-captcha + 1.3.0 + + + + com.xunhong + erp-turbo-cache + + + diff --git a/erp-turbo-common/erp-turbo-captcha/src/main/java/com/xunhong/erp/turbo/captcha/config/CaptchaConfiguration.java b/erp-turbo-common/erp-turbo-captcha/src/main/java/com/xunhong/erp/turbo/captcha/config/CaptchaConfiguration.java new file mode 100644 index 0000000..b64ab08 --- /dev/null +++ b/erp-turbo-common/erp-turbo-captcha/src/main/java/com/xunhong/erp/turbo/captcha/config/CaptchaConfiguration.java @@ -0,0 +1,124 @@ +package com.xunhong.erp.turbo.captcha.config; + +import com.anji.captcha.model.common.Const; +import com.anji.captcha.properties.AjCaptchaProperties; +import com.anji.captcha.service.CaptchaCacheService; +import com.anji.captcha.service.CaptchaService; +import com.anji.captcha.service.impl.CaptchaServiceFactory; +import com.anji.captcha.util.Base64Utils; +import com.anji.captcha.util.FileCopyUtils; +import com.anji.captcha.util.ImageUtils; +import com.anji.captcha.util.StringUtils; +import com.xunhong.erp.turbo.captcha.service.CaptchaCacheServiceRedisImpl; +import lombok.RequiredArgsConstructor; +import org.redisson.api.RedissonClient; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.DependsOn; +import org.springframework.context.annotation.Primary; +import org.springframework.context.support.ResourceBundleMessageSource; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.core.io.support.ResourcePatternResolver; + +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +/** + * @author shenyifei + */ +@Configuration +@RequiredArgsConstructor +@EnableConfigurationProperties(AjCaptchaProperties.class) +public class CaptchaConfiguration { + private final RedissonClient redissonClient; + + private static void initializeBaseMap(String jigsaw, String picClick) { + System.out.println(jigsaw); + System.out.println(picClick); + ImageUtils.cacheBootImage(getResourcesImagesFile(jigsaw + "/original/*.png"), + getResourcesImagesFile(jigsaw + "/slidingBlock/*.png"), + getResourcesImagesFile(picClick + "/*.png")); + } + + public static Map getResourcesImagesFile(String path) { + Map imgMap = new HashMap<>(); + ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); + try { + Resource[] resources = resolver.getResources(path); + for (Resource resource : resources) { + byte[] bytes = FileCopyUtils.copyToByteArray(resource.getInputStream()); + String string = Base64Utils.encodeToString(bytes); + String filename = resource.getFilename(); + imgMap.put(filename, string); + } + } catch (Exception e) { + e.printStackTrace(); + } + return imgMap; + } + + @Bean(name = "AjCaptchaCacheService") + @Primary + public CaptchaCacheService captchaCacheService(AjCaptchaProperties config) { + CaptchaCacheService ret = CaptchaServiceFactory.getCache(config.getCacheType().name()); + if (ret instanceof CaptchaCacheServiceRedisImpl) { + ((CaptchaCacheServiceRedisImpl) ret).setRedissonClient(redissonClient); + } + return ret; + } + + @Bean + @ConditionalOnMissingBean + public MessageSource messageSource() { + ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); + messageSource.setBasenames("captcha/messages", "captcha/messages"); + messageSource.setDefaultEncoding("UTF-8"); + return messageSource; + } + + @Bean + @DependsOn("AjCaptchaCacheService") + public CaptchaService captchaService() { + Properties config = new Properties(); +// try { +// try (InputStream input = CaptchaConfig.class.getClassLoader() +// .getResourceAsStream("application.properties")) { +// config.load(input); +// } +// }catch (Exception ex){ +// ex.printStackTrace(); +// } + //各种参数设置.... + //缓存类型redis/local/.... + config.put(Const.CAPTCHA_CACHETYPE, "local"); + config.put(Const.CAPTCHA_WATER_MARK, "我的水印"); + config.put(Const.CAPTCHA_FONT_TYPE, "宋体"); + config.put(Const.CAPTCHA_TYPE, "default"); + config.put(Const.CAPTCHA_INTERFERENCE_OPTIONS, "0"); + config.put(Const.ORIGINAL_PATH_JIGSAW, ""); + config.put(Const.ORIGINAL_PATH_PIC_CLICK, ""); + config.put(Const.CAPTCHA_SLIP_OFFSET, "5"); + config.put(Const.CAPTCHA_AES_STATUS, "true"); + config.put(Const.CAPTCHA_WATER_FONT, "宋体"); + config.put(Const.CAPTCHA_CACAHE_MAX_NUMBER, "1000"); + config.put(Const.CAPTCHA_TIMING_CLEAR_SECOND, "180"); + //更多自定义参数,请参考service/springboot/../resources/application.properties + if ((StringUtils.isNotBlank(config.getProperty(Const.ORIGINAL_PATH_JIGSAW)) + && config.getProperty(Const.ORIGINAL_PATH_JIGSAW).startsWith("classpath:")) + || (StringUtils.isNotBlank(config.getProperty(Const.ORIGINAL_PATH_PIC_CLICK)) + && config.getProperty(Const.ORIGINAL_PATH_PIC_CLICK).startsWith("classpath:"))) { + //自定义resources目录下初始化底图 + config.put(Const.CAPTCHA_INIT_ORIGINAL, "true"); + initializeBaseMap(config.getProperty(Const.ORIGINAL_PATH_JIGSAW), + config.getProperty(Const.ORIGINAL_PATH_PIC_CLICK)); + } + CaptchaService s = CaptchaServiceFactory.getInstance(config); + return s; + } + +} diff --git a/erp-turbo-common/erp-turbo-captcha/src/main/java/com/xunhong/erp/turbo/captcha/service/CaptchaCacheServiceRedisImpl.java b/erp-turbo-common/erp-turbo-captcha/src/main/java/com/xunhong/erp/turbo/captcha/service/CaptchaCacheServiceRedisImpl.java new file mode 100644 index 0000000..7289a18 --- /dev/null +++ b/erp-turbo-common/erp-turbo-captcha/src/main/java/com/xunhong/erp/turbo/captcha/service/CaptchaCacheServiceRedisImpl.java @@ -0,0 +1,56 @@ +package com.xunhong.erp.turbo.captcha.service; + +import com.anji.captcha.service.CaptchaCacheService; +import lombok.Setter; +import org.redisson.api.RScript; +import org.redisson.api.RedissonClient; + +import java.util.concurrent.TimeUnit; + +/** + * 对于分布式部署的应用,我们建议应用自己实现CaptchaCacheService,比如用Redis,参考service/spring-boot代码示例。 + * 如果应用是单点的,也没有使用redis,那默认使用内存。 + * 内存缓存只适合单节点部署的应用,否则验证码生产与验证在节点之间信息不同步,导致失败。 + */ +@Setter +public class CaptchaCacheServiceRedisImpl implements CaptchaCacheService { + + private static final String LUA_SCRIPT = "local key = KEYS[1] " + + "local incrementValue = tonumber(ARGV[1]) " + + "if redis.call('EXISTS', key) == 1 then " + + " return redis.call('INCRBY', key, incrementValue) " + + "else " + + " return incrementValue " + + "end"; + private RedissonClient redissonClient; + + @Override + public String type() { + return "redis"; + } + + @Override + public void set(String key, String value, long expiresInSeconds) { + redissonClient.getBucket(key).set(value, expiresInSeconds, TimeUnit.SECONDS); + } + + @Override + public boolean exists(String key) { + return redissonClient.getBucket(key).isExists(); + } + + @Override + public void delete(String key) { + redissonClient.getBucket(key).delete(); + } + + @Override + public String get(String key) { + return (String) redissonClient.getBucket(key).get(); + } + + @Override + public Long increment(String key, long val) { + return redissonClient.getScript().eval(RScript.Mode.READ_WRITE, LUA_SCRIPT, RScript.ReturnType.INTEGER); + } +} diff --git a/erp-turbo-common/erp-turbo-captcha/src/main/resources/META-INF/captcha/messages.properties b/erp-turbo-common/erp-turbo-captcha/src/main/resources/META-INF/captcha/messages.properties new file mode 100644 index 0000000..f915e61 --- /dev/null +++ b/erp-turbo-common/erp-turbo-captcha/src/main/resources/META-INF/captcha/messages.properties @@ -0,0 +1,13 @@ +aj.captcha.0000=\u6210\u529F\u3002 +aj.captcha.9999=\u670D\u52A1\u5668\u5185\u90E8\u5F02\u5E38\u3002 +aj.captcha.0001=\u64CD\u4F5C\u5931\u8D25\u3002 +aj.captcha.0011=token\u4E0D\u80FD\u4E3A\u7A7A\u3002 +aj.captcha.6110=\u9A8C\u8BC1\u7801\u5DF2\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u83B7\u53D6\u3002 +aj.captcha.6111=\u9A8C\u8BC1\u5931\u8D25\u3002 +aj.captcha.6112=\u83B7\u53D6\u9A8C\u8BC1\u7801\u5931\u8D25,\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u3002 +aj.captcha.6113=\u5E95\u56FE\u672A\u521D\u59CB\u5316\u6210\u529F\uFF0C\u8BF7\u68C0\u67E5\u8DEF\u5F84\u3002 +aj.captcha.6201=get\u63A5\u53E3\u8BF7\u6C42\u6B21\u6570\u8D85\u9650\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5! +aj.captcha.6206=\u65E0\u6548\u8BF7\u6C42\uFF0C\u8BF7\u91CD\u65B0\u83B7\u53D6\u9A8C\u8BC1\u7801\u3002 +aj.captcha.6202=\u63A5\u53E3\u9A8C\u8BC1\u5931\u8D25\u6570\u8FC7\u591A\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5\u3002 +aj.captcha.6204=check\u63A5\u53E3\u8BF7\u6C42\u6B21\u6570\u8D85\u9650\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5! +aj.captcha.6205=verify\u8BF7\u6C42\u6B21\u6570\u8D85\u9650\u3002 diff --git a/erp-turbo-common/erp-turbo-captcha/src/main/resources/META-INF/captcha/messages_en_US.properties b/erp-turbo-common/erp-turbo-captcha/src/main/resources/META-INF/captcha/messages_en_US.properties new file mode 100644 index 0000000..7a9ab97 --- /dev/null +++ b/erp-turbo-common/erp-turbo-captcha/src/main/resources/META-INF/captcha/messages_en_US.properties @@ -0,0 +1,13 @@ +aj.captcha.0000=Success +aj.captcha.9999=Internal Server Error +aj.captcha.0001=Operation Failed +aj.captcha.0011=token cannot be empty +aj.captcha.6110=Captcha expired, please try again +aj.captcha.6111=Verification failed +aj.captcha.6112=Failed to get captcha, please contact administrator +aj.captcha.6113=Base map not initialized successfully, please check the path +aj.captcha.6201=GET request limit exceeded, please try again later! +aj.captcha.6206=Invalid request, please try again +aj.captcha.6202=Too many verification failures, please try again later +aj.captcha.6204=CHECK request limit exceeded, please try again later! +aj.captcha.6205=VERIFY request limit exceeded! diff --git a/erp-turbo-common/erp-turbo-captcha/src/main/resources/META-INF/services/com.anji.captcha.service.CaptchaCacheService b/erp-turbo-common/erp-turbo-captcha/src/main/resources/META-INF/services/com.anji.captcha.service.CaptchaCacheService new file mode 100644 index 0000000..111af9e --- /dev/null +++ b/erp-turbo-common/erp-turbo-captcha/src/main/resources/META-INF/services/com.anji.captcha.service.CaptchaCacheService @@ -0,0 +1 @@ +com.xunhong.erp.turbo.captcha.service.CaptchaCacheServiceRedisImpl diff --git a/erp-turbo-common/erp-turbo-captcha/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/erp-turbo-common/erp-turbo-captcha/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..0ed242d --- /dev/null +++ b/erp-turbo-common/erp-turbo-captcha/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.xunhong.erp.turbo.captcha.config.CaptchaConfiguration diff --git a/erp-turbo-common/erp-turbo-captcha/src/main/resources/captcha.properties b/erp-turbo-common/erp-turbo-captcha/src/main/resources/captcha.properties new file mode 100644 index 0000000..e061bf9 --- /dev/null +++ b/erp-turbo-common/erp-turbo-captcha/src/main/resources/captcha.properties @@ -0,0 +1,59 @@ +# ???????????????????? +# ????? +# ??????,?classpath:??,?resource?????,??classpath:images/jigsaw +aj.captcha.jigsaw=classpath:images/jigsaw +#???????????????????? +##????? +# ??????,?classpath:??,?resource?????,??classpath:images/pic-click +aj.captcha.pic-click=classpath:images/pic-click +# ?????????????????????CaptchaCacheService????Redis??memcache? +# ??CaptchaCacheServiceRedisImpl.java +# ??????????????redis????????? +# ?????????????????????????????????????????? +# ??? ???????????spring-boot-starter-data-redis? +# ???CaptchaCacheServiceRedisImpl.java??? +# redis -----> SPI? ?resources????META-INF.services???(??)???????resources? +# ??local/redis... +aj.captcha.cache-type=redis +# local?????,?????????? +aj.captcha.cache-number=1000 +# local????????(???),???0????? +aj.captcha.timing-clear=180 +# ?????default??????? +aj.captcha.type=default +# ??????Unicode,??????@value????????????????;yml??????? +# https://tool.chinaz.com/tools/unicode.aspx ???Unicode +# ???????(????) +aj.captcha.water-mark=\u6211\u7684\u6c34\u5370 +# ???????(??????????????) +# ?????????????jar??????????????? +# ????????OS??????????????? +# ????????????????????resources?fonts??????ttf\ttc\otf?? +# aj.captcha.water-font=WenQuanZhengHei.ttf +# ????????????(?????) +# aj.captcha.font-type=WenQuanZhengHei.ttf +# ?????????????(??5??) +aj.captcha.slip-offset=5 +# aes??????????(true|false) +aj.captcha.aes-status=true +# ?????(0/1/2) +aj.captcha.interference-options=2 +#?????? ??Font.BOLD +aj.captcha.font-style=1 +#???????? +aj.captcha.font-size=25 +#??????,??????????? +#aj.captcha.click-word-count=4 +aj.captcha.history-data-clear-enable=false +# ??????????????? true|false +aj.captcha.req-frequency-limit-enable=false +# ????5??get???? +aj.captcha.req-get-lock-limit=5 +# ????????????,s +aj.captcha.req-get-lock-seconds=360 +# get??????????? +aj.captcha.req-get-minute-limit=30 +# check??????????? +aj.captcha.req-check-minute-limit=60 +# verify??????????? +aj.captcha.req-verify-minute-limit=60 diff --git a/erp-turbo-common/erp-turbo-config/pom.xml b/erp-turbo-common/erp-turbo-config/pom.xml new file mode 100644 index 0000000..9e8bb18 --- /dev/null +++ b/erp-turbo-common/erp-turbo-config/pom.xml @@ -0,0 +1,52 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-config + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + org.springframework.cloud + spring-cloud-starter-netflix-ribbon + + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + + diff --git a/erp-turbo-common/erp-turbo-config/src/main/resources/config.yml b/erp-turbo-common/erp-turbo-config/src/main/resources/config.yml new file mode 100644 index 0000000..0925757 --- /dev/null +++ b/erp-turbo-common/erp-turbo-config/src/main/resources/config.yml @@ -0,0 +1,20 @@ +spring: + cloud: + inetutils: + preferredNetworks: + - 192.168 + - 10.0 + nacos: + discovery: + server-addr: ${xunhong.turbo.nacos.server-addr} + namespace: ${xunhong.turbo.nacos.namespace} + username: ${xunhong.turbo.nacos.username} + password: ${xunhong.turbo.nacos.password} + config: + server-addr: ${xunhong.turbo.nacos.server-addr} + namespace: ${xunhong.turbo.nacos.namespace} + username: ${xunhong.turbo.nacos.username} + password: ${xunhong.turbo.nacos.password} + file-extension: yml + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} diff --git a/erp-turbo-common/erp-turbo-datasource/pom.xml b/erp-turbo-common/erp-turbo-datasource/pom.xml new file mode 100644 index 0000000..632eec6 --- /dev/null +++ b/erp-turbo-common/erp-turbo-datasource/pom.xml @@ -0,0 +1,97 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + erp-turbo-datasource + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + 3.5.10.1 + 4.3.1 + 1.2.20 + + + + + com.xunhong + erp-turbo-base + + + + com.clickhouse + clickhouse-jdbc + 0.4.6 + + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 3.0.4 + + + mybatis + org.mybatis + + + + + + + com.baomidou + mybatis-plus-spring-boot3-starter + ${mybatis-plus-starter.version} + + + + com.baomidou + mybatis-plus-jsqlparser + ${mybatis-plus-starter.version} + + + + com.baomidou + dynamic-datasource-spring-boot3-starter + ${mybatis-plus-datasource.version} + + + + + com.baomidou + mybatis-plus-generator + ${mybatis-plus-starter.version} + + + + + mysql + mysql-connector-java + 8.0.28 + + + + + com.alibaba + druid + 1.2.20 + + + + org.locationtech.jts + jts-core + 1.18.2 + + + diff --git a/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/config/DatasourceConfiguration.java b/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/config/DatasourceConfiguration.java new file mode 100644 index 0000000..e46161f --- /dev/null +++ b/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/config/DatasourceConfiguration.java @@ -0,0 +1,50 @@ +package com.xunhong.erp.turbo.datasource.config; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator; +import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.MySqlDialect; +import com.xunhong.erp.turbo.datasource.interceptor.EmptyListInterceptor; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author shenyifei + */ +@Configuration +@MapperScan(basePackages = "com.xunhong.erp.turbo.*.mapper") +public class DatasourceConfiguration { + + + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(emptyListInterceptor()); + //乐观锁插件 + interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); + //防全表更新与删除插件 + interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); + //分页插件 + //配置mybatis plus分页拦截器,放在租户插件之后,避免租户的id没有拼接 + PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(); + paginationInnerInterceptor.setDbType(DbType.MYSQL); + paginationInnerInterceptor.setDialect(new MySqlDialect()); + interceptor.addInnerInterceptor(paginationInnerInterceptor); + return interceptor; + } + + @Bean + public EmptyListInterceptor emptyListInterceptor() { + return new EmptyListInterceptor(); + } + + @Bean + public IdentifierGenerator identifierGenerator() { + return new DefaultIdentifierGenerator(1, 1); + } +} diff --git a/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/domain/entity/BaseDO.java b/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/domain/entity/BaseDO.java new file mode 100644 index 0000000..dc2ccdb --- /dev/null +++ b/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/domain/entity/BaseDO.java @@ -0,0 +1,39 @@ +package com.xunhong.erp.turbo.datasource.domain.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Setter +@Getter +public abstract class BaseDO> extends Model { + + /** + * 创建时间 + */ + @TableField(value = "created_at", fill = FieldFill.INSERT, updateStrategy = FieldStrategy.NEVER) + protected LocalDateTime createdAt; + /** + * 更新时间 + */ + @TableField(value = "updated_at", fill = FieldFill.INSERT_UPDATE) + protected LocalDateTime updatedAt; + /** + * 逻辑删除时间 + */ + @TableLogic(value = "0", delval = "1") + @TableField(value = "is_delete", fill = FieldFill.INSERT) + protected Integer isDelete; + /** + * 数据版本号(乐观锁) + */ + @Version + @TableField(value = "version", fill = FieldFill.INSERT) + protected Integer version; +} diff --git a/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/AesEncryptTypeHandler.java b/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/AesEncryptTypeHandler.java new file mode 100644 index 0000000..1b94e98 --- /dev/null +++ b/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/AesEncryptTypeHandler.java @@ -0,0 +1,63 @@ +package com.xunhong.erp.turbo.datasource.handler; + +import com.xunhong.erp.turbo.datasource.util.AesUtil; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * AES加密类型处理器 + * + * @author hollis + */ +public class AesEncryptTypeHandler extends BaseTypeHandler { + @Override + public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException { + // 这里使用你的加密方法进行加密 + ps.setString(i, encrypt(parameter)); + } + + @Override + public String getNullableResult(ResultSet rs, String columnName) throws SQLException { + String encrypted = rs.getString(columnName); + return encrypted == null ? null : decrypt(encrypted); + } + + @Override + public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + String encrypted = rs.getString(columnIndex); + return encrypted == null ? null : decrypt(encrypted); + } + + @Override + public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + String encrypted = cs.getString(columnIndex); + return encrypted == null ? null : decrypt(encrypted); + } + + /** + * 加密方法 + * + * @param data + * @return + */ + private String encrypt(String data) { + // 实现数据加密逻辑 + return AesUtil.encrypt(data); + } + + /** + * 解密方法 + * + * @param data + * @return + */ + private String decrypt(String data) { + // 实现数据解密逻辑 + return AesUtil.decrypt(data); + } +} diff --git a/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/GeometryTypeWKBHandler.java b/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/GeometryTypeWKBHandler.java new file mode 100644 index 0000000..38a5e53 --- /dev/null +++ b/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/GeometryTypeWKBHandler.java @@ -0,0 +1,86 @@ +package com.xunhong.erp.turbo.datasource.handler; + +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.locationtech.jts.geom.Geometry; +import org.locationtech.jts.geom.GeometryFactory; +import org.locationtech.jts.geom.PrecisionModel; +import org.locationtech.jts.io.ByteOrderValues; +import org.locationtech.jts.io.ParseException; +import org.locationtech.jts.io.WKBReader; +import org.locationtech.jts.io.WKBWriter; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class GeometryTypeWKBHandler extends BaseTypeHandler { + private static final PrecisionModel PRECISION_MODEL = new PrecisionModel(PrecisionModel.FIXED); + private static final Map GEOMETRY_FACTORIES = new ConcurrentHashMap<>(); + + private static Geometry deserializeGeometry(byte[] bytes) throws ParseException { + if (bytes == null) { + return null; + } + + ByteBuffer buffer = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN); + int srid = buffer.getInt(); + byte[] geometryBytes = new byte[buffer.remaining()]; + buffer.get(geometryBytes); + + GeometryFactory geometryFactory = GEOMETRY_FACTORIES.computeIfAbsent(srid, i -> new GeometryFactory(PRECISION_MODEL, i)); + + WKBReader reader = new WKBReader(geometryFactory); + return reader.read(geometryBytes); + } + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, Geometry parameter, JdbcType jdbcType) throws SQLException { + byte[] bytes = serializeGeometry(parameter); + ps.setBytes(i, bytes); + } + + @Override + public Geometry getNullableResult(ResultSet rs, String columnName) throws SQLException { + byte[] bytes = rs.getBytes(columnName); + try { + return deserializeGeometry(bytes); + } catch (ParseException e) { + throw new SQLException(e); + } + } + + @Override + public Geometry getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + byte[] bytes = rs.getBytes(columnIndex); + try { + return deserializeGeometry(bytes); + } catch (ParseException e) { + throw new SQLException(e); + } + } + + @Override + public Geometry getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + byte[] bytes = cs.getBytes(columnIndex); + try { + return deserializeGeometry(bytes); + } catch (ParseException e) { + throw new SQLException(e); + } + } + + private byte[] serializeGeometry(Geometry geometry) { + int srid = geometry.getSRID(); + byte[] bytes = new WKBWriter(2, ByteOrderValues.LITTLE_ENDIAN).write(geometry); + return ByteBuffer.allocate(bytes.length + 4).order(ByteOrder.LITTLE_ENDIAN) + .putInt(srid) + .put(bytes) + .array(); + } +} diff --git a/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/GeometryTypeWKTHandler.java b/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/GeometryTypeWKTHandler.java new file mode 100644 index 0000000..9d54b27 --- /dev/null +++ b/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/GeometryTypeWKTHandler.java @@ -0,0 +1,66 @@ +package com.xunhong.erp.turbo.datasource.handler; + +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.locationtech.jts.geom.Geometry; +import org.locationtech.jts.geom.GeometryFactory; +import org.locationtech.jts.geom.PrecisionModel; +import org.locationtech.jts.io.ParseException; +import org.locationtech.jts.io.WKTReader; +import org.locationtech.jts.io.WKTWriter; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class GeometryTypeWKTHandler extends BaseTypeHandler { + private static GeometryFactory factory = new GeometryFactory(new PrecisionModel(PrecisionModel.FLOATING), 4326); + + private static String serializeGeometry(Geometry geometry) { + WKTWriter writer = new WKTWriter(2); + return writer.write(geometry); + } + + private static Geometry deserializeGeometry(String wkt) throws ParseException { + return new WKTReader(factory).read(wkt); + } + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, Geometry parameter, JdbcType jdbcType) throws SQLException { + String str = serializeGeometry(parameter); + ps.setString(i, str); + ; + } + + @Override + public Geometry getNullableResult(ResultSet rs, String columnName) throws SQLException { + String str = rs.getString(columnName); + try { + return deserializeGeometry(str); + } catch (ParseException e) { + throw new SQLException(e); + } + } + + @Override + public Geometry getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + String str = rs.getString(columnIndex); + try { + return deserializeGeometry(str); + } catch (ParseException e) { + throw new SQLException(e); + } + } + + @Override + public Geometry getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + String str = cs.getString(columnIndex); + try { + return deserializeGeometry(str); + } catch (ParseException e) { + throw new SQLException(e); + } + } + +} diff --git a/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/MyMetaObjectHandler.java b/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/MyMetaObjectHandler.java new file mode 100644 index 0000000..d44d62d --- /dev/null +++ b/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/MyMetaObjectHandler.java @@ -0,0 +1,26 @@ +package com.xunhong.erp.turbo.datasource.handler; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import org.apache.ibatis.reflection.MetaObject; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * @author shenyifei + */ +@Component +public class MyMetaObjectHandler implements MetaObjectHandler { + @Override + public void insertFill(MetaObject metaObject) { + setFieldValByName("createdAt", LocalDateTime.now(), metaObject); + setFieldValByName("updatedAt", LocalDateTime.now(), metaObject); + setFieldValByName("version", 0, metaObject); + setFieldValByName("isDelete", 0, metaObject); + } + + @Override + public void updateFill(MetaObject metaObject) { + setFieldValByName("updatedAt", LocalDateTime.now(), metaObject); + } +} diff --git a/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/MybatisExceptionHandler.java b/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/MybatisExceptionHandler.java new file mode 100644 index 0000000..1e043f7 --- /dev/null +++ b/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/handler/MybatisExceptionHandler.java @@ -0,0 +1,27 @@ +package com.xunhong.erp.turbo.datasource.handler; + +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.exceptions.TooManyResultsException; +import org.springframework.core.annotation.Order; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * @author shenyifei + */ +@Slf4j +@RestControllerAdvice +@Order(3) +public class MybatisExceptionHandler { + @ResponseBody + @ExceptionHandler(TooManyResultsException.class) + public Response handleTooManyResultsException(TooManyResultsException e) { + log.error("********TooManyResultsException********: mybatis多查:{}", e.toString(), e); + return SingleResponse.buildFailure(HttpStatus.BAD_REQUEST.value() + "", "mybatis多查"); + } + +} diff --git a/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/interceptor/EmptyListInterceptor.java b/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/interceptor/EmptyListInterceptor.java new file mode 100644 index 0000000..3052c8c --- /dev/null +++ b/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/interceptor/EmptyListInterceptor.java @@ -0,0 +1,85 @@ +package com.xunhong.erp.turbo.datasource.interceptor; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; +import com.google.common.collect.Lists; +import lombok.NoArgsConstructor; +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.session.ResultHandler; +import org.apache.ibatis.session.RowBounds; + +import java.sql.SQLException; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @author shenyifei + */ +@NoArgsConstructor +public class EmptyListInterceptor implements InnerInterceptor { + + private static final Pattern PATTERN = Pattern.compile("[\"|'](.*?)[\"|']"); + + /** + * 判断是否存在空list + */ + private static boolean hasEmptyList(String sql) { + sql = removeInterference(sql); + List keywordList = Lists.newArrayList("in", "not in"); + boolean hasEmptyList = Boolean.FALSE; + for (String keyword : keywordList) { + List matcherList = Lists.newArrayList(); + // 获取关键词,关键词前必须为空白字符,但以关键词开头的单词也会被匹配 + // 匹配以" in (" 开头的,")"结尾的最短字符串 + Pattern pattern = Pattern.compile("(?<=\\s" + keyword + "\\s{0,10}\\().*?(?=\\))"); + Matcher matcher = pattern.matcher(sql); + while (matcher.find()) { + matcherList.add(matcher.group()); + } + if (CollectionUtils.isNotEmpty(matcherList)) { + hasEmptyList = checkEmptyList(matcherList); + if (hasEmptyList) { + break; + } + } + } + return hasEmptyList; + } + + /** + * 去除字符中的干扰项,避免字符串中的内容干扰判断。 + */ + private static String removeInterference(String sql) { + Matcher matcher = PATTERN.matcher(sql); + while (matcher.find()) { + String replaceWord = matcher.group(); + sql = sql.replace(replaceWord, "''"); + } + return sql; + } + + /** + * 校验是否有空的字符串 + */ + private static boolean checkEmptyList(List matcherList) { + boolean isHaveEmptyList = Boolean.FALSE; + // 获取()内的内容 + for (String subSql : matcherList) { + // 如果关键词之后无任何sql语句,则sql语句结尾为关键词,此时判定为空列表 + if (StringUtils.isBlank(subSql)) { + isHaveEmptyList = Boolean.TRUE; + break; + } + } + return isHaveEmptyList; + } + + @Override + public boolean willDoQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException { + return !hasEmptyList(boundSql.getSql()); + } +} diff --git a/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/util/AesUtil.java b/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/util/AesUtil.java new file mode 100644 index 0000000..0828b1b --- /dev/null +++ b/erp-turbo-common/erp-turbo-datasource/src/main/java/com/xunhong/erp/turbo/datasource/util/AesUtil.java @@ -0,0 +1,66 @@ +package com.xunhong.erp.turbo.datasource.util; + +import cn.hutool.crypto.SecureUtil; +import cn.hutool.crypto.symmetric.AES; +import org.apache.commons.lang3.StringUtils; + +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import java.security.SecureRandom; +import java.util.Base64; + +/** + * AES加解密 + * + * @author Hollis + */ +public class AesUtil { + + private static String key = "Rmms3apU4mOsnnEFRUG6aNhcaXNEPpImi0BJb2YPNvg="; + private static AES aes = SecureUtil.aes(Base64.getDecoder().decode(key)); + + public static String encrypt(String content) { + //判空修改 + if (StringUtils.isBlank(content)) { + return content; + } + + return aes.encryptHex(content); + } + + public static String decrypt(String content) { + //判空修改 + if (StringUtils.isBlank(content)) { + return content; + } + + try { + return aes.decryptStr(content); + } catch (Exception e) { + return content; + } + } + + private static void generate() throws Exception { + // 生成AES密钥 + KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); + // 使用256位AES密钥 + keyGenerator.init(256); + SecretKey secretKey = keyGenerator.generateKey(); + byte[] keyBytes = secretKey.getEncoded(); + String base64KeyString = Base64.getEncoder().encodeToString(keyBytes); + // 输出 Base64 编码的字符串 + System.out.println(base64KeyString); + // 生成随机IV + // GCM推荐的IV长度是12字节 + byte[] ivs = new byte[12]; + new SecureRandom().nextBytes(ivs); + String base64IvString = Base64.getEncoder().encodeToString(ivs); + // 输出 Base64 编码的字符串 + System.out.println(base64IvString); + } + + public static void main(String[] args) throws Exception { + generate(); + } +} diff --git a/erp-turbo-common/erp-turbo-datasource/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/erp-turbo-common/erp-turbo-datasource/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..6d0ada8 --- /dev/null +++ b/erp-turbo-common/erp-turbo-datasource/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.xunhong.erp.turbo.datasource.config.DatasourceConfiguration diff --git a/erp-turbo-common/erp-turbo-datasource/src/main/resources/datasource.yml b/erp-turbo-common/erp-turbo-datasource/src/main/resources/datasource.yml new file mode 100644 index 0000000..f1ce0af --- /dev/null +++ b/erp-turbo-common/erp-turbo-datasource/src/main/resources/datasource.yml @@ -0,0 +1,53 @@ +spring: + autoconfigure: + exclude: org.apache.shardingsphere.spring.boot.ShardingSphereAutoConfiguration + datasource: + # druid 连接池管理 + type: com.alibaba.druid.pool.DruidDataSource + dynamic: + enabled: true # 开关 + primary: mysql + strict: false + datasource: + mysql: + driver-class-name: ${xunhong.turbo.mysql.driver-class-name} + url: ${xunhong.turbo.mysql.url} + username: ${xunhong.turbo.mysql.username} + password: ${xunhong.turbo.mysql.password} + clickhouse: + driver-class-name: ${xunhong.turbo.clickhouse.driver-class-name} + url: ${xunhong.turbo.clickhouse.url} + username: ${xunhong.turbo.clickhouse.username} + password: ${xunhong.turbo.clickhouse.password} + # Druid连接池配置 + datasource.druid: + initial-size: 5 # 连接池初始化时创建的连接数。默认值为0。 + min-idle: 5 # 连接池中保持的最小空闲连接数量。当连接池中的连接数量小于这个值时,连接池会尝试创建新的连接。默认值为0。 + max-active: 20 # 连接池中允许的最大连接数。如果所有连接都被使用并且没有空闲连接,新的连接请求将被阻塞,直到有连接可用。默认值为8。 + max-wait: 60000 # 获取连接时的最大等待时间,单位为毫秒。如果在指定的时间内无法获取到连接,将抛出异常。默认值为-1,表示无限等待。 + time-between-eviction-runs-millis: 60000 # 连接池每次检测空闲连接的间隔时间,单位为毫秒。默认值为60000毫秒(1分钟)。 + min-evictable-idle-time-millis: 300000 # 连接在连接池中的最小空闲时间,超过这个时间的连接将被回收,单位为毫秒。默认值为300000毫秒(5分钟)。 + validation-query: SELECT 1 # 用于验证连接是否有效的SQL查询语句。Druid会定期执行此查询来检测连接的可用性。默认为"SELECT 1"。 + test-while-idle: true # 是否在连接空闲时检测连接的有效性。如果设置为true,则连接池会定期检测空闲连接,如果连接失效,将被标记为不可用并移除。默认为true。 + test-on-borrow: false # 是否在从连接池借用连接时检测连接的有效性。如果设置为true,每次从连接池借用连接时都会执行连接有效性检测。默认为false。 + test-on-return: false # 是否在归还连接到连接池时检测连接的有效性。如果设置为true,连接在归还到连接池时会进行有效性检测。默认为false。 + pool-prepared-statements: true # 是否开启预处理语句池。预处理语句池可以提高性能,特别是在执行相同SQL语句多次时。默认为true。 + max-pool-prepared-statement-per-connection-size: 20 #每个连接上允许的最大预处理语句数。默认值为20。 + +# MyBatis配置 +mybatis: + configuration: + map-underscore-to-camel-case: true # 将数据库字段的下划线命名转换为驼峰命名 + mapper-locations: classpath:mapper/*.xml # MyBatis映射文件所在的位置,这里是使用XML的配置方式时需要配置的部分 + +mybatis-plus: + # 支持统配符 * 或者 ; 分割 + typeEnumsPackage: com.xunhong.erp.turbo.api.*.dto.enums + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + global-config: + db-config: + logic-delete-field: flag + logic-delete-value: 1 + logic-not-delete-value: 0 + diff --git a/erp-turbo-common/erp-turbo-dify/pom.xml b/erp-turbo-common/erp-turbo-dify/pom.xml new file mode 100644 index 0000000..3c0f48a --- /dev/null +++ b/erp-turbo-common/erp-turbo-dify/pom.xml @@ -0,0 +1,36 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-dify + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + + com.xunhong + erp-turbo-base + + + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + diff --git a/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/ChatClient.java b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/ChatClient.java new file mode 100644 index 0000000..58462ed --- /dev/null +++ b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/ChatClient.java @@ -0,0 +1,159 @@ +package com.xunhong.erp.turbo.dify; + +import com.alibaba.fastjson2.JSONObject; +import org.apache.http.client.methods.CloseableHttpResponse; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * This class represents a client for interacting with the Dify Chat API. + * It provides methods for creating, retrieving, and managing chat messages and conversations. + */ +public class ChatClient extends DifyClient { + + /** + * Constructs a new ChatClient with the provided API key. + * + * @param apiKey The API key to use for authentication. + */ + public ChatClient(String apiKey) { + super(apiKey); + } + + /** + * Constructs a new ChatClient with the provided API key and base URL. + * + * @param apiKey The API key to use for authentication. + * @param baseUrl The base URL of the Dify API. + */ + public ChatClient(String apiKey, String baseUrl) { + super(apiKey, baseUrl); + } + + /** + * Generates query parameters in the form of key-value pairs joined by "&". + * + * @param params The map of query parameter key-value pairs. + * @return A string representation of the generated query parameters. + */ + private String generateQueryParams(Map params) { + List keyValuePairs = new ArrayList<>(); + for (Map.Entry entry : params.entrySet()) { + keyValuePairs.add(entry.getKey() + "=" + entry.getValue()); + } + return String.join("&", keyValuePairs); + } + + /** + * Creates a new chat message. + * + * @param inputs The chat message inputs. + * @param query The query associated with the chat message. + * @param user The user associated with the chat message. + * @param stream Whether to use streaming response mode. + * @param conversation_id The ID of the conversation, if applicable. + * @return The HTTP response containing the result of the API request. + * @throws DifyClientException If an error occurs while sending the request. + */ + public CloseableHttpResponse createChatMessage(String inputs, String query, String user, boolean stream, String conversation_id) throws DifyClientException { + JSONObject json = new JSONObject(); + json.put("inputs", inputs); + json.put("query", query); + json.put("user", user); + json.put("response_mode", stream ? "streaming" : "blocking"); + if (conversation_id != null && !conversation_id.isEmpty()) { + json.put("conversation_id", conversation_id); + } + + return sendRequest(CREATE_CHAT_MESSAGE, null, createJsonPayload(json)); + } + + /** + * Retrieves conversation messages. + * + * @param user The user associated with the conversation. + * @param conversation_id The ID of the conversation. + * @param first_id The ID of the first message to start fetching from. + * @param limit The maximum number of messages to retrieve. + * @return The HTTP response containing the result of the API request. + * @throws DifyClientException If an error occurs while sending the request. + */ + public CloseableHttpResponse getConversationMessages(String user, String conversation_id, String first_id, int limit) throws DifyClientException { + Map queryParams = new HashMap<>(); + queryParams.put("user", user); + + if (conversation_id != null) { + queryParams.put("conversation_id", conversation_id); + } + if (first_id != null) { + queryParams.put("first_id", first_id); + } + if (limit > 0) { + queryParams.put("limit", String.valueOf(limit)); + } + String formattedQueryParams = generateQueryParams(queryParams); + + return sendRequest(GET_CONVERSATION_MESSAGES, new String[]{formattedQueryParams}, null); + } + + /** + * Retrieves conversations. + * + * @param user The user associated with the conversations. + * @param first_id The ID of the first conversation to start fetching from. + * @param limit The maximum number of conversations to retrieve. + * @param pinned The pinned status of conversations to retrieve. + * @return The HTTP response containing the result of the API request. + * @throws DifyClientException If an error occurs while sending the request. + */ + public CloseableHttpResponse getConversations(String user, String first_id, int limit, String pinned) throws DifyClientException { + Map queryParams = new HashMap<>(); + queryParams.put("user", user); + if (first_id != null && !first_id.isEmpty()) { + queryParams.put("first_id", first_id); + } + if (limit > 0) { + queryParams.put("limit", String.valueOf(limit)); + } + if (pinned != null && !pinned.isEmpty()) { + queryParams.put("pinned", pinned); + } + String formattedQueryParams = generateQueryParams(queryParams); + return sendRequest(GET_CONVERSATIONS, new String[]{formattedQueryParams}, null); + } + + /** + * Renames a conversation. + * + * @param conversation_id The ID of the conversation to rename. + * @param name The new name for the conversation. + * @param user The user associated with the conversation. + * @return The HTTP response containing the result of the API request. + * @throws DifyClientException If an error occurs while sending the request. + */ + public CloseableHttpResponse renameConversation(String conversation_id, String name, String user) throws DifyClientException { + JSONObject json = new JSONObject(); + json.put("name", name); + json.put("user", user); + + return sendRequest(RENAME_CONVERSATION, new String[]{conversation_id}, createJsonPayload(json)); + } + + /** + * Deletes a conversation. + * + * @param conversation_id The ID of the conversation to delete. + * @param user The user associated with the conversation. + * @return The HTTP response containing the result of the API request. + * @throws DifyClientException If an error occurs while sending the request. + */ + public CloseableHttpResponse deleteConversation(String conversation_id, String user) throws DifyClientException { + JSONObject json = new JSONObject(); + json.put("user", user); + + return sendRequest(DELETE_CONVERSATION, new String[]{conversation_id}, createJsonPayload(json)); + } +} diff --git a/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/CompletionClient.java b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/CompletionClient.java new file mode 100644 index 0000000..5fb12f7 --- /dev/null +++ b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/CompletionClient.java @@ -0,0 +1,49 @@ +package com.xunhong.erp.turbo.dify; + +import com.alibaba.fastjson2.JSONObject; +import org.apache.http.client.methods.CloseableHttpResponse; + +/** + * This class represents a client for interacting with the Dify Completion API. + * It provides methods for creating completion messages using the API. + */ +public class CompletionClient extends DifyClient { + /** + * Constructs a new CompletionClient with the provided API key. + * + * @param apiKey The API key to use for authentication. + */ + public CompletionClient(String apiKey) { + super(apiKey); + } + + /** + * Constructs a new CompletionClient with the provided API key and base URL. + * + * @param apiKey The API key to use for authentication. + * @param baseUrl The base URL of the Dify API. + */ + public CompletionClient(String apiKey, String baseUrl) { + super(apiKey, baseUrl); + } + + /** + * Creates a new completion message. + * + * @param inputs The input text for which completion is requested. + * @param query The query associated with the completion request. + * @param user The user associated with the completion request. + * @param stream Whether to use streaming response mode. + * @return The HTTP response containing the result of the API request. + * @throws DifyClientException If an error occurs while sending the request. + */ + public CloseableHttpResponse createCompletionMessage(String inputs, String query, String user, boolean stream) throws DifyClientException { + JSONObject json = new JSONObject(); + json.put("inputs", inputs); + json.put("query", query); + json.put("user", user); + json.put("response_mode", stream ? "streaming" : "blocking"); + + return sendRequest(CREATE_COMPLETION_MESSAGE, null, createJsonPayload(json)); + } +} diff --git a/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/DifyClient.java b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/DifyClient.java new file mode 100644 index 0000000..c478a96 --- /dev/null +++ b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/DifyClient.java @@ -0,0 +1,148 @@ +package com.xunhong.erp.turbo.dify; + +import com.alibaba.fastjson2.JSONObject; +import com.xunhong.erp.turbo.dify.constants.DifyServerConstants; +import com.xunhong.erp.turbo.dify.http.DifyRoute; +import org.apache.http.HttpEntity; +import org.apache.http.HttpHost; +import org.apache.http.HttpRequest; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; + +import java.io.IOException; + +/** + * This class serves as a client for interacting with the Dify API. + * It provides methods for sending various types of requests to the API. + */ +public class DifyClient { + + // Constants representing different API routes + public static final DifyRoute APPLICATION = new DifyRoute("GET", "/parameters?user=%s"); + public static final DifyRoute FEEDBACK = new DifyRoute("POST", "/messages/%s/feedbacks"); + public static final DifyRoute CREATE_COMPLETION_MESSAGE = new DifyRoute("POST", "/completion-messages"); + public static final DifyRoute CREATE_CHAT_MESSAGE = new DifyRoute("POST", "/chat-messages"); + public static final DifyRoute GET_CONVERSATION_MESSAGES = new DifyRoute("GET", "/messages?%s"); + public static final DifyRoute GET_CONVERSATIONS = new DifyRoute("GET", "/conversations"); + public static final DifyRoute RENAME_CONVERSATION = new DifyRoute("PATCH", "/conversations/%s"); + public static final DifyRoute DELETE_CONVERSATION = new DifyRoute("DELETE", "/conversations/%s"); + public static final DifyRoute WORKFLOW_RUN = new DifyRoute("POST", "/workflows/run"); + private final String baseUrl; + private final CloseableHttpClient client; + private String apiKey; + + /** + * Constructs a new DifyClient with the provided API key and default base URL. + * + * @param apiKey The API key to use for authentication. + */ + public DifyClient(String apiKey) { + this(apiKey, DifyServerConstants.BASE_URL); + } + + /** + * Constructs a new DifyClient with the provided API key and base URL. + * + * @param apiKey The API key to use for authentication. + * @param baseUrl The base URL of the Dify API. + */ + public DifyClient(String apiKey, String baseUrl) { + this.apiKey = apiKey; + this.baseUrl = baseUrl; + this.client = HttpClients.createDefault(); + } + + /** + * Updates the API key used for authentication. + * + * @param apiKey The new API key. + */ + public void updateApiKey(String apiKey) { + this.apiKey = apiKey; + } + + + /** + * Sends an HTTP request to the Dify API. + * + * @param route The API route to send the request to. + * @param formatArgs Format arguments for route URL placeholders. + * @param body The request body, if applicable. + * @return The HTTP response containing the result of the API request. + * @throws DifyClientException If an error occurs while sending the request. + */ + public CloseableHttpResponse sendRequest(DifyRoute route, String[] formatArgs, HttpEntity body) throws DifyClientException { + try { + String formattedURL = (formatArgs != null && formatArgs.length > 0) + ? String.format(route.url, (Object[]) formatArgs) + : route.url; + + HttpHost target = new HttpHost("ai.xunhong168.com", 443, "https"); + + HttpRequest request; + if (body != null) { + request = new HttpPost(this.baseUrl + formattedURL); + ((HttpPost) request).setEntity(body); + } else { + request = new HttpGet(this.baseUrl + formattedURL); + } + + request.setHeader("Authorization", "Bearer " + apiKey); + request.setHeader("Content-Type", "application/json"); + + CloseableHttpResponse response = client.execute(target, request); + + if (response.getStatusLine().getStatusCode() >= 400) { + throw new DifyRequestException("Request failed with status: " + response.getStatusLine()); + } + + return response; + } catch (IOException e) { + throw new DifyClientException("Error occurred while sending request: " + e.getMessage()); + } + } + + + /** + * Sends a message feedback to the Dify API. + * + * @param messageId The ID of the message to provide feedback for. + * @param rating The feedback rating. + * @param user The user providing the feedback. + * @return The HTTP response containing the result of the API request. + * @throws DifyClientException If an error occurs while sending the request. + */ + public CloseableHttpResponse messageFeedback(String messageId, String rating, String user) throws DifyClientException { + JSONObject json = new JSONObject(); + json.put("rating", rating); + json.put("user", user); + + return sendRequest(FEEDBACK, new String[]{messageId}, createJsonPayload(json)); + } + + /** + * Retrieves application parameters from the Dify API. + * + * @param user The user for whom the application parameters are retrieved. + * @return The HTTP response containing the result of the API request. + * @throws DifyClientException If an error occurs while sending the request. + */ + public CloseableHttpResponse getApplicationParameters(String user) throws DifyClientException { + return sendRequest(APPLICATION, new String[]{user}, null); + } + + /** + * Creates a request body with the given JSON object. + * + * @param jsonObject The JSON object to be used in the request body. + * @return The created request body. + */ + HttpEntity createJsonPayload(JSONObject jsonObject) { + return new StringEntity(jsonObject.toString(), ContentType.APPLICATION_JSON); + } +} diff --git a/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/DifyClientException.java b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/DifyClientException.java new file mode 100644 index 0000000..4404643 --- /dev/null +++ b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/DifyClientException.java @@ -0,0 +1,16 @@ +package com.xunhong.erp.turbo.dify; + +/** + * This exception class represents a general exception that may occur while using the Dify API client. + * It is used to handle errors related to the Dify API interactions. + */ +public class DifyClientException extends Exception { + /** + * Constructs a new DifyClientException with the provided error message. + * + * @param message The error message describing the reason for the exception. + */ + public DifyClientException(String message) { + super(message); + } +} diff --git a/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/DifyRequestException.java b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/DifyRequestException.java new file mode 100644 index 0000000..8ecf67e --- /dev/null +++ b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/DifyRequestException.java @@ -0,0 +1,16 @@ +package com.xunhong.erp.turbo.dify; + +/** + * This exception class represents an exception that occurs specifically during Dify API request operations. + * It is used to handle errors related to sending requests to the Dify API. + */ +class DifyRequestException extends DifyClientException { + /** + * Constructs a new DifyRequestException with the provided error message. + * + * @param message The error message describing the reason for the request exception. + */ + public DifyRequestException(String message) { + super(message); + } +} diff --git a/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/WorkflowClient.java b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/WorkflowClient.java new file mode 100644 index 0000000..7087c99 --- /dev/null +++ b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/WorkflowClient.java @@ -0,0 +1,34 @@ +package com.xunhong.erp.turbo.dify; + +import com.alibaba.fastjson2.JSONObject; +import org.apache.http.client.methods.CloseableHttpResponse; + +public class WorkflowClient extends DifyClient { + /** + * Constructs a new CompletionClient with the provided API key. + * + * @param apiKey The API key to use for authentication. + */ + public WorkflowClient(String apiKey) { + super(apiKey); + } + + /** + * Constructs a new CompletionClient with the provided API key and base URL. + * + * @param apiKey The API key to use for authentication. + * @param baseUrl The base URL of the Dify API. + */ + public WorkflowClient(String apiKey, String baseUrl) { + super(apiKey, baseUrl); + } + + public CloseableHttpResponse createWorkflowRun(String inputs, String user, boolean stream) throws DifyClientException { + JSONObject json = new JSONObject(); + json.put("inputs", JSONObject.parseObject(inputs)); + json.put("user", user); + json.put("response_mode", stream ? "streaming" : "blocking"); + + return sendRequest(WORKFLOW_RUN, null, createJsonPayload(json)); + } +} diff --git a/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/constants/DifyServerConstants.java b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/constants/DifyServerConstants.java new file mode 100644 index 0000000..16fb634 --- /dev/null +++ b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/constants/DifyServerConstants.java @@ -0,0 +1,12 @@ +package com.xunhong.erp.turbo.dify.constants; + +/** + * This class contains constant values related to the Dify server configuration. + * It provides a centralized place to manage server-related constants, such as the base URL of the Dify API. + */ +public class DifyServerConstants { + /** + * The base URL of the Dify API. + */ + public static final String BASE_URL = "https://ai.xunhong168.com/v1"; +} diff --git a/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/dto/DataDTO.java b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/dto/DataDTO.java new file mode 100644 index 0000000..5a5f6ce --- /dev/null +++ b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/dto/DataDTO.java @@ -0,0 +1,40 @@ +package com.xunhong.erp.turbo.dify.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +// Data部分的DTO类 +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class DataDTO { + private String id; + + @JsonProperty("workflow_id") + private String workflowId; + + private String status; + + private OutputDTO outputs; + + private Object error; + + @JsonProperty("elapsed_time") + private Double elapsedTime; + + @JsonProperty("total_tokens") + private Integer totalTokens; + + @JsonProperty("total_steps") + private Integer totalSteps; + + @JsonProperty("created_at") + private Long createdAt; + + @JsonProperty("finished_at") + private Long finishedAt; +} diff --git a/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/dto/OutputDTO.java b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/dto/OutputDTO.java new file mode 100644 index 0000000..de32d5f --- /dev/null +++ b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/dto/OutputDTO.java @@ -0,0 +1,14 @@ +package com.xunhong.erp.turbo.dify.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class OutputDTO { + private T output; +} diff --git a/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/dto/ResponseDTO.java b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/dto/ResponseDTO.java new file mode 100644 index 0000000..f676d3a --- /dev/null +++ b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/dto/ResponseDTO.java @@ -0,0 +1,4 @@ +package com.xunhong.erp.turbo.dify.dto; + +public class ResponseDTO { +} diff --git a/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/dto/WorkflowResponseDTO.java b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/dto/WorkflowResponseDTO.java new file mode 100644 index 0000000..8db7af6 --- /dev/null +++ b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/dto/WorkflowResponseDTO.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.dify.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.*; + +@Data +@EqualsAndHashCode(callSuper = true) +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class WorkflowResponseDTO extends ResponseDTO { + @JsonProperty("task_id") + private String taskId; + + @JsonProperty("workflow_run_id") + private String workflowRunId; + + private DataDTO data; +} diff --git a/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/http/DifyRoute.java b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/http/DifyRoute.java new file mode 100644 index 0000000..0a29f31 --- /dev/null +++ b/erp-turbo-common/erp-turbo-dify/src/main/java/com/xunhong/erp/turbo/dify/http/DifyRoute.java @@ -0,0 +1,14 @@ +package com.xunhong.erp.turbo.dify.http; + +/** + * @author Ziyao_Zhu + */ +public class DifyRoute { + public String method; + public String url; + + public DifyRoute(String method, String url) { + this.method = method; + this.url = url; + } +} diff --git a/erp-turbo-common/erp-turbo-es/pom.xml b/erp-turbo-common/erp-turbo-es/pom.xml new file mode 100644 index 0000000..c0d004c --- /dev/null +++ b/erp-turbo-common/erp-turbo-es/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-es + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + + org.springframework.boot + spring-boot-starter-data-elasticsearch + + + + org.elasticsearch.client + elasticsearch-rest-high-level-client + 7.17.20 + + + + org.dromara.easy-es + easy-es-boot-starter + 2.0.0-beta8 + + + + diff --git a/erp-turbo-common/erp-turbo-es/src/main/java/com/xunhong/erp/turbo/es/config/EsConfiguration.java b/erp-turbo-common/erp-turbo-es/src/main/java/com/xunhong/erp/turbo/es/config/EsConfiguration.java new file mode 100644 index 0000000..2a0b9fa --- /dev/null +++ b/erp-turbo-common/erp-turbo-es/src/main/java/com/xunhong/erp/turbo/es/config/EsConfiguration.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.es.config; + +import org.dromara.easyes.starter.register.EsMapperScan; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Configuration; + +/** + * ES配置 + * + * @author shenyifei + */ +@Configuration +@EsMapperScan("com.xunhong.erp.turbo.*.infrastructure.es.mapper") +@ConditionalOnProperty(value = "easy-es.enable", havingValue = "true") +public class EsConfiguration { + +} diff --git a/erp-turbo-common/erp-turbo-es/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/erp-turbo-common/erp-turbo-es/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..0d9d730 --- /dev/null +++ b/erp-turbo-common/erp-turbo-es/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.xunhong.erp.turbo.es.config.EsConfiguration diff --git a/erp-turbo-common/erp-turbo-es/src/main/resources/es.yml b/erp-turbo-common/erp-turbo-es/src/main/resources/es.yml new file mode 100644 index 0000000..7576e58 --- /dev/null +++ b/erp-turbo-common/erp-turbo-es/src/main/resources/es.yml @@ -0,0 +1,11 @@ +spring: + elasticsearch: + enable: ${xunhong.turbo.elasticsearch.enable} + uris: http://${xunhong.turbo.elasticsearch.url} + username: ${xunhong.turbo.elasticsearch.username} + password: ${xunhong.turbo.elasticsearch.password} +easy-es: + enable: ${xunhong.turbo.elasticsearch.enable} + address: ${xunhong.turbo.elasticsearch.url} + username: ${xunhong.turbo.elasticsearch.username} + password: ${xunhong.turbo.elasticsearch.password} diff --git a/erp-turbo-common/erp-turbo-file/pom.xml b/erp-turbo-common/erp-turbo-file/pom.xml new file mode 100644 index 0000000..66cf1df --- /dev/null +++ b/erp-turbo-common/erp-turbo-file/pom.xml @@ -0,0 +1,57 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-file + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + + com.xunhong + erp-turbo-base + + + org.apache.httpcomponents + httpclient + + + + + + + + com.aliyun.oss + aliyun-sdk-oss + 3.15.1 + + + + javax.xml.bind + jaxb-api + 2.3.1 + + + + org.glassfish.jaxb + jaxb-runtime + 2.3.3 + + + + + diff --git a/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/FileService.java b/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/FileService.java new file mode 100644 index 0000000..5bba291 --- /dev/null +++ b/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/FileService.java @@ -0,0 +1,34 @@ +package com.xunhong.erp.turbo.file; + +import com.aliyuncs.auth.sts.AssumeRoleResponse; + +import java.io.File; +import java.io.InputStream; + +/** + * 文件 服务 + * + * @author shenyifei + */ +public interface FileService { + + AssumeRoleResponse.Credentials getOssToken(); + + /** + * 文件上传 + * + * @param path + * @param fileStream + * @return + */ + boolean upload(String path, InputStream fileStream); + + /** + * 文件上传 + * + * @param path + * @param file + * @return + */ + boolean upload(String path, File file); +} diff --git a/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/MockFileServiceImpl.java b/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/MockFileServiceImpl.java new file mode 100644 index 0000000..450fc7c --- /dev/null +++ b/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/MockFileServiceImpl.java @@ -0,0 +1,35 @@ +package com.xunhong.erp.turbo.file; + +import com.aliyuncs.auth.sts.AssumeRoleResponse; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; + +import java.io.File; +import java.io.InputStream; + +/** + * oss 服务 + * + * @author shenyifei + */ +@Slf4j +@Setter +public class MockFileServiceImpl implements FileService { + + + @Override + public AssumeRoleResponse.Credentials getOssToken() { + return null; + } + + @Override + public boolean upload(String path, InputStream fileStream) { + return true; + } + + @Override + public boolean upload(String path, File file) { + return true; + } + +} diff --git a/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/OssServiceImpl.java b/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/OssServiceImpl.java new file mode 100644 index 0000000..0a4c385 --- /dev/null +++ b/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/OssServiceImpl.java @@ -0,0 +1,154 @@ +package com.xunhong.erp.turbo.file; + +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; +import com.aliyun.oss.common.auth.CredentialsProvider; +import com.aliyun.oss.common.auth.DefaultCredentialProvider; +import com.aliyun.oss.model.PutObjectRequest; +import com.aliyun.oss.model.PutObjectResult; +import com.aliyuncs.DefaultAcsClient; +import com.aliyuncs.auth.sts.AssumeRoleRequest; +import com.aliyuncs.auth.sts.AssumeRoleResponse; +import com.aliyuncs.exceptions.ClientException; +import com.aliyuncs.http.MethodType; +import com.aliyuncs.profile.DefaultProfile; +import com.xunhong.erp.turbo.base.exception.BizException; +import com.xunhong.erp.turbo.file.infrastructure.exception.FileErrorCode; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.io.File; +import java.io.InputStream; + +/** + * oss 服务 + * + * @author shenyifei + */ +@Slf4j +@Setter +public class OssServiceImpl implements FileService { + private String roleArn; + + private String region; + + private String bucket; + + private String stsEndPoint; + + private String ossEndPoint; + + private String accessKey; + + private String accessSecret; + + private String policy; + + + @Override + public AssumeRoleResponse.Credentials getOssToken() { + String endPoint = stsEndPoint; + try { + DefaultProfile.addEndpoint("", region, "Sts", endPoint); + DefaultProfile profile = DefaultProfile.getProfile(region, accessKey, accessSecret); + DefaultAcsClient client = new DefaultAcsClient(profile); + AssumeRoleRequest assumeRoleRequest = this.getAssumeRoleRequest(); + AssumeRoleResponse acsResponse = client.getAcsResponse(assumeRoleRequest); + if (null == acsResponse) { + throw new BizException(FileErrorCode.OSS_TOKEN_FAIL); + } + + return acsResponse.getCredentials(); + } catch (ClientException e) { + throw new BizException(FileErrorCode.OSS_TOKEN_FAIL); + } + } + + private AssumeRoleRequest getAssumeRoleRequest() { + AssumeRoleRequest assumeRoleRequest = new AssumeRoleRequest(); + assumeRoleRequest.setMethod(MethodType.POST); + assumeRoleRequest.setRoleArn(roleArn); + assumeRoleRequest.setRoleSessionName(bucket); + assumeRoleRequest.setPolicy(policy); + + assumeRoleRequest.setDurationSeconds(3600L); + return assumeRoleRequest; + } + + @Override + public boolean upload(String path, InputStream fileStream) { + // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。 + String endpoint = ossEndPoint; + // 从环境变量中获取RAM用户的访问密钥(AccessKey ID和AccessKey Secret)。 + String accessKeyId = accessKey; + String accessKeySecret = accessSecret; + // 使用代码嵌入的RAM用户的访问密钥配置访问凭证。 + CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret); + + // 填写Bucket名称,例如examplebucket。 + String bucketName = bucket; + // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。 + String objectName = path; + + // 创建OSSClient实例。 + OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); + boolean uploadRes = false; + try { + + // 创建PutObjectRequest对象。 + PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, fileStream); + + // 上传字符串。 + PutObjectResult result = ossClient.putObject(putObjectRequest); + if (StringUtils.isNotBlank(result.getRequestId())) { + uploadRes = true; + } + } catch (Exception e) { + log.error("OssUtil upload error,path=" + path, e); + } finally { + if (ossClient != null) { + ossClient.shutdown(); + } + } + return uploadRes; + } + + @Override + public boolean upload(String path, File file) { + // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。 + String endpoint = ossEndPoint; + // 从环境变量中获取RAM用户的访问密钥(AccessKey ID和AccessKey Secret)。 + String accessKeyId = accessKey; + String accessKeySecret = accessSecret; + // 使用代码嵌入的RAM用户的访问密钥配置访问凭证。 + CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret); + + // 填写Bucket名称,例如examplebucket。 + String bucketName = bucket; + // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。 + String objectName = path; + + // 创建OSSClient实例。 + OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); + boolean uploadRes = false; + try { + + // 创建PutObjectRequest对象。 + PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, file); + + // 上传字符串。 + PutObjectResult result = ossClient.putObject(putObjectRequest); + if (StringUtils.isNotBlank(result.getRequestId())) { + uploadRes = true; + } + } catch (Exception e) { + log.error("OssUtil upload error,path=" + path, e); + } finally { + if (ossClient != null) { + ossClient.shutdown(); + } + } + return uploadRes; + } +} diff --git a/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/config/OssConfiguration.java b/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/config/OssConfiguration.java new file mode 100644 index 0000000..de0aafd --- /dev/null +++ b/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/config/OssConfiguration.java @@ -0,0 +1,44 @@ +package com.xunhong.erp.turbo.file.config; + +import com.xunhong.erp.turbo.file.FileService; +import com.xunhong.erp.turbo.file.OssServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author shenyifei + */ +@Configuration +@EnableConfigurationProperties(OssProperties.class) +@RequiredArgsConstructor +public class OssConfiguration { + private final OssProperties properties; + + @Bean + @ConditionalOnMissingBean + @ConditionalOnProperty(prefix = OssProperties.PREFIX, value = "enabled", havingValue = "true") +// @Profile({"default", "prod"}) + public FileService ossService() { + OssServiceImpl ossService = new OssServiceImpl(); + ossService.setBucket(properties.getBucket()); + ossService.setRegion(properties.getRegion()); + ossService.setRoleArn(properties.getRoleArn()); + ossService.setStsEndPoint(properties.getStsEndPoint()); + ossService.setOssEndPoint(properties.getOssEndPoint()); + ossService.setAccessKey(properties.getAccessKey()); + ossService.setAccessSecret(properties.getAccessSecret()); + ossService.setPolicy(properties.getPolicy()); + return ossService; + } + +// @Bean +// @ConditionalOnMissingBean +// @Profile({"dev", "test"}) +// public FileService mockFileService() { +// return new MockFileServiceImpl(); +// } +} diff --git a/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/config/OssProperties.java b/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/config/OssProperties.java new file mode 100644 index 0000000..5a1fa28 --- /dev/null +++ b/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/config/OssProperties.java @@ -0,0 +1,35 @@ +package com.xunhong.erp.turbo.file.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * oss配置 + * + * @author shenyifei + */ +@Data +@ConfigurationProperties(prefix = OssProperties.PREFIX) +public class OssProperties { + public static final String PREFIX = "spring.oss"; + + private String roleArn; + + private String region; + + private String bucket; + + private String domain; + + private String stsEndPoint; + + private String ossEndPoint; + + private String accessKey; + + private String accessSecret; + + private String policy; + + private boolean enabled; +} diff --git a/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/infrastructure/exception/FileErrorCode.java b/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/infrastructure/exception/FileErrorCode.java new file mode 100644 index 0000000..cf74805 --- /dev/null +++ b/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/infrastructure/exception/FileErrorCode.java @@ -0,0 +1,35 @@ +package com.xunhong.erp.turbo.file.infrastructure.exception; + +import com.xunhong.erp.turbo.base.exception.ErrorCode; + +/** + * 文件上传错误码 + */ +public enum FileErrorCode implements ErrorCode { + + /** + * 获取OSS临时秘钥失败 + */ + OSS_TOKEN_FAIL("OSS_TOKEN_FAIL", "获取OSS临时秘钥失败"), + ; + + + private String code; + + private String message; + + FileErrorCode(String code, String message) { + this.code = code; + this.message = message; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getMessage() { + return this.message; + } +} diff --git a/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/infrastructure/exception/FileException.java b/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/infrastructure/exception/FileException.java new file mode 100644 index 0000000..4b0dd6e --- /dev/null +++ b/erp-turbo-common/erp-turbo-file/src/main/java/com/xunhong/erp/turbo/file/infrastructure/exception/FileException.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.file.infrastructure.exception; + + +import com.xunhong.erp.turbo.base.exception.BizException; +import com.xunhong.erp.turbo.base.exception.ErrorCode; + +/** + * 文件上传异常 + */ +public class FileException extends BizException { + + public FileException(ErrorCode errorCode) { + super(errorCode); + } + + public FileException(String message, ErrorCode errorCode) { + super(message, errorCode); + } + + public FileException(String message, Throwable cause, ErrorCode errorCode) { + super(message, cause, errorCode); + } + + public FileException(Throwable cause, ErrorCode errorCode) { + super(cause, errorCode); + } + + public FileException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, ErrorCode errorCode) { + super(message, cause, enableSuppression, writableStackTrace, errorCode); + } + +} diff --git a/erp-turbo-common/erp-turbo-file/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/erp-turbo-common/erp-turbo-file/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..6ff71c3 --- /dev/null +++ b/erp-turbo-common/erp-turbo-file/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.xunhong.erp.turbo.file.config.OssConfiguration diff --git a/erp-turbo-common/erp-turbo-job/pom.xml b/erp-turbo-common/erp-turbo-job/pom.xml new file mode 100644 index 0000000..4b57af6 --- /dev/null +++ b/erp-turbo-common/erp-turbo-job/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + erp-turbo-job + 1.0.0-SNAPSHOT + + + + com.xunhong + erp-turbo-base + + + + com.xuxueli + xxl-job-core + 2.4.1 + + + + diff --git a/erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/config/XxlJobConfiguration.java b/erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/config/XxlJobConfiguration.java new file mode 100644 index 0000000..b651b53 --- /dev/null +++ b/erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/config/XxlJobConfiguration.java @@ -0,0 +1,52 @@ +package com.xunhong.erp.turbo.job.config; + +import com.xunhong.erp.turbo.job.handler.XxlJobHandler; +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author shenyifei + */ +@Configuration +@EnableConfigurationProperties(XxlJobProperties.class) +@RequiredArgsConstructor +public class XxlJobConfiguration { + + private static final Logger logger = LoggerFactory.getLogger(XxlJobConfiguration.class); + + private final XxlJobProperties properties; + + @Bean + @ConditionalOnMissingBean + @ConditionalOnProperty(prefix = XxlJobProperties.PREFIX, value = "enabled", havingValue = "true") + public XxlJobSpringExecutor xxlJobExecutor() { + logger.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(properties.getAdminAddresses()); + xxlJobSpringExecutor.setAppname(properties.getAppName()); + xxlJobSpringExecutor.setIp(properties.getIp()); + xxlJobSpringExecutor.setPort(properties.getPort()); + xxlJobSpringExecutor.setAccessToken(properties.getAccessToken()); + xxlJobSpringExecutor.setLogPath(properties.getLogPath()); + xxlJobSpringExecutor.setLogRetentionDays(properties.getLogRetentionDays()); + return xxlJobSpringExecutor; + } + + @Bean + @ConditionalOnProperty(prefix = XxlJobProperties.PREFIX, value = "enabled", havingValue = "true") + public XxlJobHandler xxlJobHandler() { + XxlJobHandler xxlJobHandler = new XxlJobHandler(); + xxlJobHandler.setAdminAddresses(properties.getAdminAddresses()); + xxlJobHandler.setUserName(properties.getUserName()); + xxlJobHandler.setPassword(properties.getPassword()); + + return xxlJobHandler; + } +} diff --git a/erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/config/XxlJobProperties.java b/erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/config/XxlJobProperties.java new file mode 100644 index 0000000..8a1cece --- /dev/null +++ b/erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/config/XxlJobProperties.java @@ -0,0 +1,36 @@ +package com.xunhong.erp.turbo.job.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * @author shenyifei + */ +@Setter +@Getter +@ConfigurationProperties(prefix = XxlJobProperties.PREFIX) +public class XxlJobProperties { + + public static final String PREFIX = "spring.xxl.job"; + + private boolean enabled; + + private String adminAddresses; + + private String userName; + + private String password; + + private String accessToken; + + private String appName; + + private String ip; + + private int port; + + private String logPath; + + private int logRetentionDays = 30; +} diff --git a/erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/handler/JobGroupDto.java b/erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/handler/JobGroupDto.java new file mode 100644 index 0000000..0231b13 --- /dev/null +++ b/erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/handler/JobGroupDto.java @@ -0,0 +1,31 @@ +package com.xunhong.erp.turbo.job.handler; + +import lombok.Data; +import lombok.RequiredArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * @author shenyifei + * @date 2022/3/22 11:24 + */ +@Data +@RequiredArgsConstructor +public class JobGroupDto implements Serializable { + private static final long serialVersionUID = -9089142404300118236L; + + private String addressList; + + private Integer addressType; + + private String appname; + + private Integer id; + + private List registryList; + + private String title; + + private String updateTime; +} diff --git a/erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/handler/JobGroupRunner.java b/erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/handler/JobGroupRunner.java new file mode 100644 index 0000000..84d97f9 --- /dev/null +++ b/erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/handler/JobGroupRunner.java @@ -0,0 +1,49 @@ +package com.xunhong.erp.turbo.job.handler; + +import com.alibaba.fastjson2.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; + +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @author shenyifei + * @date 2022/3/22 11:18 + */ +@Slf4j +@ConditionalOnMissingBean(JobGroupRunner.class) +@RequiredArgsConstructor +public class JobGroupRunner implements ApplicationRunner { + + private static final ConcurrentHashMap JOB_GROUP_MAP = new ConcurrentHashMap<>(); + private final XxlJobHandler xxlJobHandler; + @Value("${spring.profiles.active:local}") + private String active; + @Value("${spring.application.name:}") + private String applicationName; + + @Override + public void run(ApplicationArguments args) throws Exception { + xxlJobHandler.getCookie(); + List jobGroupDtoList = xxlJobHandler.pageList(0, 100); + + jobGroupDtoList.forEach(jobGroupDto -> JOB_GROUP_MAP.put(jobGroupDto.getAppname(), jobGroupDto.getId())); + + log.info("----JOB_GROUP_MAP----:{}", JSONObject.toJSONString(JOB_GROUP_MAP)); + } + + /** + * 获取默认的执行器 + * + * @return 返回默认执行器 + */ + @SuppressWarnings("unused") + public Integer getJobGroup() { + return JOB_GROUP_MAP.get(applicationName + "-" + active); + } +} diff --git a/erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/handler/XxlJobConstant.java b/erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/handler/XxlJobConstant.java new file mode 100644 index 0000000..8289725 --- /dev/null +++ b/erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/handler/XxlJobConstant.java @@ -0,0 +1,88 @@ +package com.xunhong.erp.turbo.job.handler; + +/** + * @author shenyifei + * @date 2021/12/13 10:29 AM + */ +public interface XxlJobConstant { + + /** + * 负责人 + */ + String AUTHOR = "admin"; + + /** + * 报警邮件 + */ + String ALARM_EMAIL = ""; + + /** + * 调度类型 + */ + String SCHEDULE_TYPE = "CRON"; + + /** + * 调度过期策略 + */ + String MISFIRE_STRATEGY = "DO_NOTHING"; + + /** + * 执行器路由策略 + */ + String EXECUTOR_ROUTE_STRATEGY = "CONSISTENT_HASH"; + + /** + * 阻塞处理策略 + */ + String EXECUTOR_BLOCK_STRATEGY = "SERIAL_EXECUTION"; + + /** + * 任务执行超时时间,单位秒 + */ + int EXECUTOR_TIMEOUT = 0; + + /** + * 失败重试次数 + */ + int EXECUTOR_FAIL_RETRY_COUNT = 0; + + /** + * GLUE类型 #com.xxl.job.core.glue.GlueTypeEnum + */ + String GLUE_TYPE = "BEAN"; + + /** + * GLUE备注 + */ + String GLUE_REMARK = "GLUE代码初始化"; + + /** + * 调度状态:0-停止,1-运行 + */ + int TRIGGER_STATUS = 1; + + /** + * 登录获取cookie域名地址 + */ + String LOGIN_URL = "/login"; + + /** + * 添加任务域名地址 + */ + String ADD_URL = "/jobinfo/add"; + + /** + * 删除任务域名地址 + */ + String REMOVE_URL = "/jobinfo/remove"; + + /** + * 执行器管理 + */ + String JOB_GROUP_PAGE_LIST = "/jobgroup/pageList"; + + /** + * 接口返回值字段名 + */ + String RESULT_PARAM_NAME = "content"; +} diff --git a/erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/handler/XxlJobHandler.java b/erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/handler/XxlJobHandler.java new file mode 100644 index 0000000..1159520 --- /dev/null +++ b/erp-turbo-common/erp-turbo-job/src/main/java/com/xunhong/erp/turbo/job/handler/XxlJobHandler.java @@ -0,0 +1,163 @@ +package com.xunhong.erp.turbo.job.handler; + + +import cn.hutool.http.HttpException; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpStatus; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.net.HttpCookie; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author shenyifei + */ +@Data +@Slf4j +public class XxlJobHandler { + private String adminAddresses; + + private String userName; + + private String password; + + /** + * 查询目前的定时器 + * + * @param start 开始 + * @param length 结束 + * @return 返回定时器列表 + */ + public List pageList(Integer start, Integer length) { + String path = adminAddresses + XxlJobConstant.JOB_GROUP_PAGE_LIST; + Map paramMap = new HashMap<>(2); + paramMap.put("start", start); + paramMap.put("length", length); + HttpResponse response = HttpRequest.post(path).form(paramMap).execute(); + if (HttpStatus.HTTP_OK != response.getStatus()) { + log.info("----XxlJobHandler----:获取执行器失败,请求数据为{}", paramMap); + } + JSONObject jsonObject = JSONObject.parseObject(response.body()); + JSONArray data = jsonObject.getJSONArray("data"); + return JSONArray.parseArray(JSONArray.toJSONString(data), JobGroupDto.class); + } + + + /** + * 添加任务 + * + * @param cron 定时任务表达式 + * @param executorHandler 执行器,任务Handler名称Ø + * @param executorParam 执行参数 + * @param jobDesc 任务名称 + * @return 返回任务ID + */ + @SuppressWarnings("unused") + public int addXxlJob(String cron, String executorHandler, String executorParam, String jobDesc, Integer jobGroup) { + String path = adminAddresses + XxlJobConstant.ADD_URL; + Map paramMap = new HashMap<>(20); + paramMap.put("jobGroup", jobGroup); + paramMap.put("jobDesc", jobDesc); + paramMap.put("author", XxlJobConstant.AUTHOR); + paramMap.put("alarmEmail", XxlJobConstant.ALARM_EMAIL); + //参数 + paramMap.put("executorParam", executorParam); + paramMap.put("scheduleType", XxlJobConstant.SCHEDULE_TYPE); + paramMap.put("scheduleConf", cron); + paramMap.put("glueType", XxlJobConstant.GLUE_TYPE); + paramMap.put("executorHandler", executorHandler); + paramMap.put("executorRouteStrategy", XxlJobConstant.EXECUTOR_ROUTE_STRATEGY); + paramMap.put("misfireStrategy", XxlJobConstant.MISFIRE_STRATEGY); + paramMap.put("executorBlockStrategy", XxlJobConstant.EXECUTOR_BLOCK_STRATEGY); + paramMap.put("executorTimeout", XxlJobConstant.EXECUTOR_TIMEOUT); + paramMap.put("executorFailRetryCount", XxlJobConstant.EXECUTOR_FAIL_RETRY_COUNT); + paramMap.put("glueRemark", XxlJobConstant.GLUE_REMARK); + paramMap.put("triggerStatus", XxlJobConstant.TRIGGER_STATUS); + HttpResponse response = HttpRequest.post(path).form(paramMap).execute(); + if (HttpStatus.HTTP_OK != response.getStatus()) { + log.info("----XxlJobHandler----:任务创建失败,任务数据为{}", executorParam); + } + JSONObject jsonObject = JSONObject.parseObject(response.body()); + return jsonObject.getIntValue(XxlJobConstant.RESULT_PARAM_NAME); + } + + /** + * 移除任务 + * + * @param jobId 任务ID + * @return 返回是否移除 + */ + @SuppressWarnings("unused") + public boolean removeJob(int jobId) { + try { + String path = adminAddresses + XxlJobConstant.REMOVE_URL; + Map paramMap = new HashMap<>(1); + paramMap.put("id", jobId); + getCookie(); + HttpResponse response = HttpRequest.post(path).form(paramMap).execute(); + JSONObject jsonObject = JSONObject.parseObject(response.body()); + return jsonObject != null && jsonObject.getIntValue("code") == 200; + } catch (HttpException e) { + e.printStackTrace(); + } + return false; + } + + /** + * 获取admin项目 登录的cookie + * + * @return 返回Cookie + */ + @SuppressWarnings("unused") + public String getCookie() { + String path = adminAddresses + XxlJobConstant.LOGIN_URL; + Map hashMap = new HashMap<>(2); + hashMap.put("userName", userName); + hashMap.put("password", password); + HttpResponse response = HttpRequest.post(path).form(hashMap).execute(); + List cookies = response.getCookies(); + StringBuilder sb = new StringBuilder(); + for (HttpCookie cookie : cookies) { + sb.append(cookie.toString()); + } + return sb.toString(); + } + + + /*** + * 生成 日期对应的 cron表达式 + * convert Date to cron ,eg. "0 06 10 15 1 ? 2014" + * @param date : 时间点 + * @return 返回定时任务cron表达式 + */ + @SuppressWarnings("unused") + public String getCron(Date date) { + String dateFormat = "ss mm HH dd MM ? yyyy"; + return formatDateByPattern(date, dateFormat); + } + + /*** + * 获取时间 + * + * @param date 日期 + * @param dateFormat : e.g:yyyy-MM-dd HH:mm:ss + * @return 返回时间 + */ + @SuppressWarnings("unused") + private String formatDateByPattern(Date date, String dateFormat) { + SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); + String formatTimeStr = null; + if (date != null) { + formatTimeStr = sdf.format(date); + } + return formatTimeStr; + } +} diff --git a/erp-turbo-common/erp-turbo-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/erp-turbo-common/erp-turbo-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..a678014 --- /dev/null +++ b/erp-turbo-common/erp-turbo-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.xunhong.erp.turbo.job.config.XxlJobConfiguration diff --git a/erp-turbo-common/erp-turbo-job/src/main/resources/job.yml b/erp-turbo-common/erp-turbo-job/src/main/resources/job.yml new file mode 100644 index 0000000..cbd37b7 --- /dev/null +++ b/erp-turbo-common/erp-turbo-job/src/main/resources/job.yml @@ -0,0 +1,7 @@ +spring: + xxl: + job: + enabled: true + adminAddresses: http://${xunhong.turbo.xxl-job.url}/xxl-job-admin/ + appName: ${xunhong.turbo.xxl-job.appName} + accessToken: ${xunhong.turbo.xxl-job.accessToken} diff --git a/erp-turbo-common/erp-turbo-limiter/pom.xml b/erp-turbo-common/erp-turbo-limiter/pom.xml new file mode 100644 index 0000000..a3acfa2 --- /dev/null +++ b/erp-turbo-common/erp-turbo-limiter/pom.xml @@ -0,0 +1,68 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-limiter + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + + + com.xunhong + erp-turbo-cache + + + + + com.alibaba.cloud + spring-cloud-alibaba-sentinel-gateway + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + com.alibaba.cloud + spring-cloud-alibaba-sentinel-datasource + + + + com.alibaba.csp + sentinel-datasource-nacos + 1.8.8 + + + + org.springframework.boot + spring-boot-starter-test + test + + + + junit + junit + test + + + + + + diff --git a/erp-turbo-common/erp-turbo-limiter/src/main/java/com/xunhong/erp/turbo/limiter/RateLimiter.java b/erp-turbo-common/erp-turbo-limiter/src/main/java/com/xunhong/erp/turbo/limiter/RateLimiter.java new file mode 100644 index 0000000..7670133 --- /dev/null +++ b/erp-turbo-common/erp-turbo-limiter/src/main/java/com/xunhong/erp/turbo/limiter/RateLimiter.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.limiter; + +/** + * 限流服务 + * + * @author shenyifei + */ +public interface RateLimiter { + + /** + * 判断一个key是否可以通过 + * + * @param key 限流的key + * @param limit 限流的数量 + * @param windowSize 窗口大小,单位为秒 + * @return + */ + public Boolean tryAcquire(String key, int limit, int windowSize); +} diff --git a/erp-turbo-common/erp-turbo-limiter/src/main/java/com/xunhong/erp/turbo/limiter/SlidingWindowRateLimiter.java b/erp-turbo-common/erp-turbo-limiter/src/main/java/com/xunhong/erp/turbo/limiter/SlidingWindowRateLimiter.java new file mode 100644 index 0000000..e7ef629 --- /dev/null +++ b/erp-turbo-common/erp-turbo-limiter/src/main/java/com/xunhong/erp/turbo/limiter/SlidingWindowRateLimiter.java @@ -0,0 +1,32 @@ +package com.xunhong.erp.turbo.limiter; + +import org.redisson.api.RRateLimiter; +import org.redisson.api.RateIntervalUnit; +import org.redisson.api.RateType; +import org.redisson.api.RedissonClient; + +/** + * 滑动窗口限流服务 + * + * @author shenyifei + */ +public class SlidingWindowRateLimiter implements RateLimiter { + + private static final String LIMIT_KEY_PREFIX = "nft:turbo:limit:"; + private final RedissonClient redissonClient; + + public SlidingWindowRateLimiter(RedissonClient redissonClient) { + this.redissonClient = redissonClient; + } + + @Override + public Boolean tryAcquire(String key, int limit, int windowSize) { + RRateLimiter rRateLimiter = redissonClient.getRateLimiter(LIMIT_KEY_PREFIX + key); + + if (!rRateLimiter.isExists()) { + rRateLimiter.trySetRate(RateType.OVERALL, limit, windowSize, RateIntervalUnit.SECONDS); + } + + return rRateLimiter.tryAcquire(); + } +} diff --git a/erp-turbo-common/erp-turbo-limiter/src/main/java/com/xunhong/erp/turbo/limiter/configuration/RateLimiterConfiguration.java b/erp-turbo-common/erp-turbo-limiter/src/main/java/com/xunhong/erp/turbo/limiter/configuration/RateLimiterConfiguration.java new file mode 100644 index 0000000..dae0c14 --- /dev/null +++ b/erp-turbo-common/erp-turbo-limiter/src/main/java/com/xunhong/erp/turbo/limiter/configuration/RateLimiterConfiguration.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.limiter.configuration; + +import com.xunhong.erp.turbo.limiter.SlidingWindowRateLimiter; +import org.redisson.api.RedissonClient; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author shenyifei + */ +@Configuration +public class RateLimiterConfiguration { + + @Bean + public SlidingWindowRateLimiter slidingWindowRateLimiter(RedissonClient redisson) { + return new SlidingWindowRateLimiter(redisson); + } +} diff --git a/erp-turbo-common/erp-turbo-limiter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/erp-turbo-common/erp-turbo-limiter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..cb1443d --- /dev/null +++ b/erp-turbo-common/erp-turbo-limiter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.xunhong.erp.turbo.limiter.configuration.RateLimiterConfiguration diff --git a/erp-turbo-common/erp-turbo-limiter/src/main/resources/limiter.yml b/erp-turbo-common/erp-turbo-limiter/src/main/resources/limiter.yml new file mode 100644 index 0000000..8d1587e --- /dev/null +++ b/erp-turbo-common/erp-turbo-limiter/src/main/resources/limiter.yml @@ -0,0 +1,18 @@ +spring: + cloud: + sentinel: + eager: true + transport: + dashboard: ${xunhong.turbo.sentinel.url} + port: ${xunhong.turbo.sentinel.port} + datasource: + ds: + nacos: + server-addr: ${xunhong.turbo.nacos.server-addr} + namespace: ${xunhong.turbo.nacos.namespace} + username: ${xunhong.turbo.nacos.username} + password: ${xunhong.turbo.nacos.password} + data-id: ${xunhong.turbo.sentinel.nacos.data-id} + group-id: SENTINEL_GROUP + data-type: json + rule-type: flow # 也可以是 degrade, param-flow, etc. diff --git a/erp-turbo-common/erp-turbo-lock/pom.xml b/erp-turbo-common/erp-turbo-lock/pom.xml new file mode 100644 index 0000000..e1ddbbd --- /dev/null +++ b/erp-turbo-common/erp-turbo-lock/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-lock + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + + com.xunhong + erp-turbo-cache + + + diff --git a/erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/DistributeLock.java b/erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/DistributeLock.java new file mode 100644 index 0000000..3fd9239 --- /dev/null +++ b/erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/DistributeLock.java @@ -0,0 +1,57 @@ +package com.xunhong.erp.turbo.lock; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 分布式锁注解 + * + * @author Hollis + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface DistributeLock { + + /** + * 锁的场景 + * + * @return + */ + public String scene(); + + /** + * 加锁的key,优先取key(),如果没有,则取keyExpression() + * + * @return + */ + public String key() default DistributeLockConstant.NONE_KEY; + + /** + * SPEL表达式: + *
+	 *     #id
+	 *     #insertResult.id
+	 * 
+ * + * @return + */ + public String keyExpression() default DistributeLockConstant.NONE_KEY; + + /** + * 超时时间,毫秒 + * 默认情况下不设置超时时间,会自动续期 + * + * @return + */ + public int expireTime() default DistributeLockConstant.DEFAULT_EXPIRE_TIME; + + /** + * 加锁等待时长,毫秒 + * 默认情况下不设置等待时长,不做等待 + * + * @return + */ + public int waitTime() default DistributeLockConstant.DEFAULT_WAIT_TIME; +} diff --git a/erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/DistributeLockAspect.java b/erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/DistributeLockAspect.java new file mode 100644 index 0000000..0ab93f2 --- /dev/null +++ b/erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/DistributeLockAspect.java @@ -0,0 +1,114 @@ +package com.xunhong.erp.turbo.lock; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.StandardReflectionParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.Expression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; +import java.util.concurrent.TimeUnit; + +/** + * 分布式锁切面 + * + * @author hollis + */ +@Aspect +@Component +public class DistributeLockAspect { + + private static final Logger LOG = LoggerFactory.getLogger(DistributeLockAspect.class); + private RedissonClient redissonClient; + + public DistributeLockAspect(RedissonClient redissonClient) { + this.redissonClient = redissonClient; + } + + @Around("@annotation(com.xunhong.erp.turbo.lock.DistributeLock)") + public Object process(ProceedingJoinPoint pjp) throws Exception { + Object response = null; + Method method = ((MethodSignature) pjp.getSignature()).getMethod(); + DistributeLock distributeLock = method.getAnnotation(DistributeLock.class); + + String key = distributeLock.key(); + if (DistributeLockConstant.NONE_KEY.equals(key)) { + if (DistributeLockConstant.NONE_KEY.equals(distributeLock.keyExpression())) { + throw new DistributeLockException("no lock key found..."); + } + SpelExpressionParser parser = new SpelExpressionParser(); + Expression expression = parser.parseExpression(distributeLock.keyExpression()); + + EvaluationContext context = new StandardEvaluationContext(); + // 获取参数值 + Object[] args = pjp.getArgs(); + + // 获取运行时参数的名称 + StandardReflectionParameterNameDiscoverer discoverer + = new StandardReflectionParameterNameDiscoverer(); + String[] parameterNames = discoverer.getParameterNames(method); + + // 将参数绑定到context中 + if (parameterNames != null) { + for (int i = 0; i < parameterNames.length; i++) { + context.setVariable(parameterNames[i], args[i]); + } + } + + // 解析表达式,获取结果 + key = String.valueOf(expression.getValue(context)); + } + + String scene = distributeLock.scene(); + + String lockKey = scene + "#" + key; + + int expireTime = distributeLock.expireTime(); + int waitTime = distributeLock.waitTime(); + RLock rLock = redissonClient.getLock(lockKey); + boolean lockResult = false; + if (waitTime == DistributeLockConstant.DEFAULT_WAIT_TIME) { + if (expireTime == DistributeLockConstant.DEFAULT_EXPIRE_TIME) { + LOG.info(String.format("lock for key : %s", lockKey)); + rLock.lock(); + } else { + LOG.info(String.format("lock for key : %s , expire : %s", lockKey, expireTime)); + rLock.lock(expireTime, TimeUnit.MILLISECONDS); + } + lockResult = true; + } else { + if (expireTime == DistributeLockConstant.DEFAULT_EXPIRE_TIME) { + LOG.info(String.format("try lock for key : %s , wait : %s", lockKey, waitTime)); + lockResult = rLock.tryLock(waitTime, TimeUnit.MILLISECONDS); + } else { + LOG.info(String.format("try lock for key : %s , expire : %s , wait : %s", lockKey, expireTime, waitTime)); + lockResult = rLock.tryLock(waitTime, expireTime, TimeUnit.MILLISECONDS); + } + } + + if (!lockResult) { + LOG.warn(String.format("lock failed for key : %s , expire : %s", lockKey, expireTime)); + throw new DistributeLockException("acquire lock failed... key : " + lockKey); + } + + try { + LOG.info(String.format("lock success for key : %s , expire : %s", lockKey, expireTime)); + response = pjp.proceed(); + } catch (Throwable e) { + throw new Exception(e); + } finally { + rLock.unlock(); + LOG.info(String.format("unlock for key : %s , expire : %s", lockKey, expireTime)); + } + return response; + } +} diff --git a/erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/DistributeLockConstant.java b/erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/DistributeLockConstant.java new file mode 100644 index 0000000..f693a1b --- /dev/null +++ b/erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/DistributeLockConstant.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.lock; + +/** + * 分布式锁常量 + * + * @author hollis + */ +public class DistributeLockConstant { + + public static final String NONE_KEY = "NONE"; + + public static final String DEFAULT_OWNER = "DEFAULT"; + + public static final int DEFAULT_EXPIRE_TIME = -1; + + public static final int DEFAULT_WAIT_TIME = -1; +} diff --git a/erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/DistributeLockException.java b/erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/DistributeLockException.java new file mode 100644 index 0000000..d09aea4 --- /dev/null +++ b/erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/DistributeLockException.java @@ -0,0 +1,28 @@ +package com.xunhong.erp.turbo.lock; + +/** + * 分布式锁异常 + * + * @author hollis + */ +public class DistributeLockException extends RuntimeException { + + public DistributeLockException() { + } + + public DistributeLockException(String message) { + super(message); + } + + public DistributeLockException(String message, Throwable cause) { + super(message, cause); + } + + public DistributeLockException(Throwable cause) { + super(cause); + } + + public DistributeLockException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/config/DistributeLockConfiguration.java b/erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/config/DistributeLockConfiguration.java new file mode 100644 index 0000000..df01a30 --- /dev/null +++ b/erp-turbo-common/erp-turbo-lock/src/main/java/com/xunhong/erp/turbo/lock/config/DistributeLockConfiguration.java @@ -0,0 +1,20 @@ +package com.xunhong.erp.turbo.lock.config; + +import com.xunhong.erp.turbo.lock.DistributeLockAspect; +import org.redisson.api.RedissonClient; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author Hollis + */ +@Configuration +public class DistributeLockConfiguration { + + @Bean + @ConditionalOnMissingBean + public DistributeLockAspect distributeLockAspect(RedissonClient redisson) { + return new DistributeLockAspect(redisson); + } +} diff --git a/erp-turbo-common/erp-turbo-lock/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/erp-turbo-common/erp-turbo-lock/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..66c3bb7 --- /dev/null +++ b/erp-turbo-common/erp-turbo-lock/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.xunhong.erp.turbo.lock.config.DistributeLockConfiguration diff --git a/erp-turbo-common/erp-turbo-logback/pom.xml b/erp-turbo-common/erp-turbo-logback/pom.xml new file mode 100644 index 0000000..810dcb8 --- /dev/null +++ b/erp-turbo-common/erp-turbo-logback/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + erp-turbo-logback + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + + + com.github.houbb + sensitive-logback + 1.7.0 + + + + diff --git a/erp-turbo-common/erp-turbo-logback/src/main/resources/logback-spring.xml b/erp-turbo-common/erp-turbo-logback/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..9ba5d80 --- /dev/null +++ b/erp-turbo-common/erp-turbo-logback/src/main/resources/logback-spring.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + + + + + + ${LOG_PATH}/${APP_NAME}-error.log + + + ${LOG_PATH}/bak/%d{yyyy-MM}/${APP_NAME}-info-error-%d{yyyy-MM-dd}.%i.log.gz + + 10 + 10MB + 1GB + + true + + + ${FILE_LOG_PATTERN} + + UTF-8 + + + ERROR + ACCEPT + DENY + + + + + ${LOG_PATH}/${APP_NAME}-info.log + + + ${LOG_PATH}/bak/%d{yyyy-MM}/${APP_NAME}-info-%d{yyyy-MM-dd}.%i.log.gz + + 10 + 10MB + 1GB + + true + + + ${FILE_LOG_PATTERN} + + UTF-8 + + + INFO + ACCEPT + DENY + + + + + + + + + + + + diff --git a/erp-turbo-common/erp-turbo-logback/src/main/resources/logging.yml b/erp-turbo-common/erp-turbo-logback/src/main/resources/logging.yml new file mode 100644 index 0000000..5697ba4 --- /dev/null +++ b/erp-turbo-common/erp-turbo-logback/src/main/resources/logging.yml @@ -0,0 +1,4 @@ +logging: + config: classpath:logback-spring.xml + level: + global: info \ No newline at end of file diff --git a/erp-turbo-common/erp-turbo-mq/pom.xml b/erp-turbo-common/erp-turbo-mq/pom.xml new file mode 100644 index 0000000..02d9ce9 --- /dev/null +++ b/erp-turbo-common/erp-turbo-mq/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-mq + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + + + com.alibaba.cloud + spring-cloud-starter-stream-rocketmq + + + + diff --git a/erp-turbo-common/erp-turbo-mq/src/main/java/com/xunhong/erp/turbo/stream/config/StreamConfiguration.java b/erp-turbo-common/erp-turbo-mq/src/main/java/com/xunhong/erp/turbo/stream/config/StreamConfiguration.java new file mode 100644 index 0000000..acb36f3 --- /dev/null +++ b/erp-turbo-common/erp-turbo-mq/src/main/java/com/xunhong/erp/turbo/stream/config/StreamConfiguration.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.stream.config; + +import com.xunhong.erp.turbo.stream.producer.StreamProducer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author shenyifei + */ +@Configuration +public class StreamConfiguration { + @Bean + public StreamProducer streamProducer() { + StreamProducer streamProducer = new StreamProducer(); + return streamProducer; + } +} diff --git a/erp-turbo-common/erp-turbo-mq/src/main/java/com/xunhong/erp/turbo/stream/param/Message.java b/erp-turbo-common/erp-turbo-mq/src/main/java/com/xunhong/erp/turbo/stream/param/Message.java new file mode 100644 index 0000000..3ed1f90 --- /dev/null +++ b/erp-turbo-common/erp-turbo-mq/src/main/java/com/xunhong/erp/turbo/stream/param/Message.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.stream.param; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 消息 + * + * @author shenyifei + */ +@Data +@Accessors(chain = true) +public class Message { + /** + * 消息id + */ + private String msgId; + /** + * 消息体 + */ + private String body; +} diff --git a/erp-turbo-common/erp-turbo-mq/src/main/java/com/xunhong/erp/turbo/stream/param/MessageBody.java b/erp-turbo-common/erp-turbo-mq/src/main/java/com/xunhong/erp/turbo/stream/param/MessageBody.java new file mode 100644 index 0000000..6efd46a --- /dev/null +++ b/erp-turbo-common/erp-turbo-mq/src/main/java/com/xunhong/erp/turbo/stream/param/MessageBody.java @@ -0,0 +1,22 @@ +package com.xunhong.erp.turbo.stream.param; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 消息体 + * + * @author shenyifei + */ +@Data +@Accessors(chain = true) +public class MessageBody { + /** + * 幂等号 + */ + private String identifier; + /** + * 消息体 + */ + private String body; +} diff --git a/erp-turbo-common/erp-turbo-mq/src/main/java/com/xunhong/erp/turbo/stream/producer/StreamProducer.java b/erp-turbo-common/erp-turbo-mq/src/main/java/com/xunhong/erp/turbo/stream/producer/StreamProducer.java new file mode 100644 index 0000000..713bbcc --- /dev/null +++ b/erp-turbo-common/erp-turbo-mq/src/main/java/com/xunhong/erp/turbo/stream/producer/StreamProducer.java @@ -0,0 +1,46 @@ +package com.xunhong.erp.turbo.stream.producer; + +import com.alibaba.fastjson.JSON; +import com.xunhong.erp.turbo.stream.param.MessageBody; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.stream.function.StreamBridge; +import org.springframework.messaging.support.MessageBuilder; + +import java.util.UUID; + +/** + * @author shenyifei + */ +public class StreamProducer { + + private static Logger logger = LoggerFactory.getLogger(StreamProducer.class); + + @Autowired + private StreamBridge streamBridge; + + public boolean send(String bingingName, String tag, String msg) { + // 构建消息对象 + MessageBody message = new MessageBody() + .setIdentifier(UUID.randomUUID().toString()) + .setBody(msg); + logger.info("send message : {} , {}", bingingName, JSON.toJSONString(message)); + boolean result = streamBridge.send(bingingName, MessageBuilder.withPayload(message).setHeader("TAGS", tag) + .build()); + logger.info("send result : {} , {}", bingingName, result); + return result; + } + + public boolean send(String bingingName, String tag, String msg, String headerKey, String headerValue) { + // 构建消息对象 + MessageBody message = new MessageBody() + .setIdentifier(UUID.randomUUID().toString()) + .setBody(msg); + logger.info("send message : {} , {}", bingingName, JSON.toJSONString(message)); + boolean result = streamBridge.send(bingingName, MessageBuilder.withPayload(message).setHeader("TAGS", tag).setHeader(headerKey, headerValue) + .build()); + logger.info("send result : {} , {}", bingingName, result); + return result; + } +} diff --git a/erp-turbo-common/erp-turbo-mq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/erp-turbo-common/erp-turbo-mq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..cc6ab10 --- /dev/null +++ b/erp-turbo-common/erp-turbo-mq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.xunhong.erp.turbo.stream.config.StreamConfiguration diff --git a/erp-turbo-common/erp-turbo-mq/src/main/resources/stream.yml b/erp-turbo-common/erp-turbo-mq/src/main/resources/stream.yml new file mode 100644 index 0000000..55e8010 --- /dev/null +++ b/erp-turbo-common/erp-turbo-mq/src/main/resources/stream.yml @@ -0,0 +1,6 @@ +spring: + cloud: + stream: + rocketmq: + binder: + name-server: ${xunhong.turbo.rocketmq.url} diff --git a/erp-turbo-common/erp-turbo-quartz/pom.xml b/erp-turbo-common/erp-turbo-quartz/pom.xml new file mode 100644 index 0000000..c512380 --- /dev/null +++ b/erp-turbo-common/erp-turbo-quartz/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-quartz + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + + + + org.springframework.boot + spring-boot-starter-quartz + + + + diff --git a/erp-turbo-common/erp-turbo-quartz/src/main/resources/quartz.yml b/erp-turbo-common/erp-turbo-quartz/src/main/resources/quartz.yml new file mode 100644 index 0000000..e69de29 diff --git a/erp-turbo-common/erp-turbo-rpc/pom.xml b/erp-turbo-common/erp-turbo-rpc/pom.xml new file mode 100644 index 0000000..464d94f --- /dev/null +++ b/erp-turbo-common/erp-turbo-rpc/pom.xml @@ -0,0 +1,46 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + erp-turbo-rpc + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + + + org.apache.dubbo + dubbo-spring-boot-starter + + + + org.apache.dubbo + dubbo-registry-nacos + + + + com.xunhong + erp-turbo-base + + + + com.xunhong + erp-turbo-sa-token + + + + + diff --git a/erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/config/RpcConfiguration.java b/erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/config/RpcConfiguration.java new file mode 100644 index 0000000..aa4f021 --- /dev/null +++ b/erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/config/RpcConfiguration.java @@ -0,0 +1,23 @@ +package com.xunhong.erp.turbo.rpc.config; + +import com.xunhong.erp.turbo.rpc.facade.FacadeAspect; +import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Rpc 配置 + * + * @author shenyifei + */ +@Configuration +@ConditionalOnProperty(name = "dubbo.enabled", havingValue = "true") +@EnableDubbo(scanBasePackages = "com.xunhong.erp.turbo") +public class RpcConfiguration { + + @Bean + public FacadeAspect facadeAspect() { + return new FacadeAspect(); + } +} diff --git a/erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/facade/Facade.java b/erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/facade/Facade.java new file mode 100644 index 0000000..92bb44e --- /dev/null +++ b/erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/facade/Facade.java @@ -0,0 +1,7 @@ +package com.xunhong.erp.turbo.rpc.facade; + +/** + * @author shenyifei + */ +public @interface Facade { +} diff --git a/erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/facade/FacadeAspect.java b/erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/facade/FacadeAspect.java new file mode 100644 index 0000000..d905be6 --- /dev/null +++ b/erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/facade/FacadeAspect.java @@ -0,0 +1,183 @@ +package com.xunhong.erp.turbo.rpc.facade; + +import com.alibaba.cola.dto.Response; +import com.alibaba.fastjson2.JSON; +import com.xunhong.erp.turbo.base.exception.BizException; +import com.xunhong.erp.turbo.base.exception.SystemException; +import com.xunhong.erp.turbo.base.utils.BeanValidator; +import jakarta.validation.ValidationException; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.StopWatch; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Arrays; + +/** + * Facade的切面处理类,统一统计进行参数校验及异常捕获 + * + * @author shenyifei + */ +@Aspect +@Component +public class FacadeAspect { + + private static final Logger LOGGER = LoggerFactory.getLogger(FacadeAspect.class); + + @Around("@annotation(com.xunhong.erp.turbo.rpc.facade.Facade)") + public Object facade(ProceedingJoinPoint pjp) throws Exception { + + StopWatch stopWatch = new StopWatch(); + stopWatch.start(); + + Method method = ((MethodSignature) pjp.getSignature()).getMethod(); + Object[] args = pjp.getArgs(); + LOGGER.info("start to execute , method = " + method.getName() + " , args = " + JSON.toJSONString(args)); + + Class returnType = ((MethodSignature) pjp.getSignature()).getMethod().getReturnType(); + + //循环遍历所有参数,进行参数校验 + for (Object parameter : args) { + try { + BeanValidator.validateObject(parameter); + } catch (ValidationException e) { + printLog(stopWatch, method, args, "failed to validate", null, e); + return getFailedResponse(returnType, e); + } + } + + try { + // 目标方法执行 + Object response = pjp.proceed(); + enrichObject(response); + printLog(stopWatch, method, args, "end to execute", response, null); + return response; + } catch (Throwable throwable) { + // 如果执行异常,则返回一个失败的response + printLog(stopWatch, method, args, "failed to execute", null, throwable); + return getFailedResponse(returnType, throwable); + } + } + + /** + * 日志打印 + * + * @param stopWatch + * @param method + * @param args + * @param action + * @param response + */ + private void printLog(StopWatch stopWatch, Method method, Object[] args, String action, Object response, + Throwable throwable) { + try { + //因为此处有JSON.toJSONString,可能会有异常,需要进行捕获,避免影响主干流程 + LOGGER.info(getInfoMessage(action, stopWatch, method, args, response, throwable), throwable); + // 如果校验失败,则返回一个失败的response + } catch (Exception e1) { + LOGGER.error("log failed", e1); + } + } + + /** + * 统一格式输出,方便做日志统计 + *

+ * *** 如果调整此处的格式,需要同步调整日志监控 *** + * + * @param action 行为 + * @param stopWatch 耗时 + * @param method 方法 + * @param args 参数 + * @param response 响应 + * @return 拼接后的字符串 + */ + private String getInfoMessage(String action, StopWatch stopWatch, Method method, Object[] args, Object response, + Throwable exception) { + + StringBuilder stringBuilder = new StringBuilder(action); + stringBuilder.append(" ,method = "); + stringBuilder.append(method.getName()); + stringBuilder.append(" ,cost = "); + stringBuilder.append(stopWatch.getTime()).append(" ms"); + if (response instanceof Response) { + stringBuilder.append(" ,success = "); + stringBuilder.append(((Response) response).isSuccess()); + } + if (exception != null) { + stringBuilder.append(" ,success = "); + stringBuilder.append(false); + } + stringBuilder.append(" ,args = "); + stringBuilder.append(JSON.toJSONString(Arrays.toString(args))); + + if (response != null) { + stringBuilder.append(" ,resp = "); + stringBuilder.append(JSON.toJSONString(response)); + } + + if (exception != null) { + stringBuilder.append(" ,exception = "); + stringBuilder.append(exception.getMessage()); + } + + if (response instanceof Response baseResponse) { + if (!baseResponse.isSuccess()) { + stringBuilder.append(" , execute_failed"); + } + } + + return stringBuilder.toString(); + } + + /** + * 将response的信息补全,主要是code和message + * + * @param response + */ + private void enrichObject(Object response) { + if (response instanceof Response) { + if (!((Response) response).isSuccess()) { + //如果状态是成功的,需要将未设置的responseCode设置成BIZ_ERROR + if (StringUtils.isEmpty(((Response) response).getErrCode())) { +// ((Response) response).setErrCode(ResponseCode.BIZ_ERROR.name()); + } + } + } + } + + /** + * 定义并返回一个通用的失败响应 + */ + private Object getFailedResponse(Class returnType, Throwable throwable) + throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { + + //如果返回值的类型为BaseResponse 的子类,则创建一个通用的失败响应 + if (returnType.getDeclaredConstructor().newInstance() instanceof Response) { + Response response = (Response) returnType.getDeclaredConstructor().newInstance(); + response.setSuccess(false); + if (throwable instanceof BizException bizException) { + response.setErrMessage(bizException.getErrorCode().getMessage()); + response.setErrCode(bizException.getErrorCode().getCode()); + } else if (throwable instanceof SystemException systemException) { + response.setErrMessage(systemException.getErrorCode().getMessage()); + response.setErrCode(systemException.getErrorCode().getCode()); + } else { + response.setErrMessage(throwable.toString()); +// response.setErrCode(ResponseCode.BIZ_ERROR.name()); + } + + return response; + } + + LOGGER.error( + "failed to getFailedResponse , returnType (" + returnType + ") is not instanceof BaseResponse"); + return null; + } +} diff --git a/erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/filter/DubboConsumerFilter.java b/erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/filter/DubboConsumerFilter.java new file mode 100644 index 0000000..b79f1df --- /dev/null +++ b/erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/filter/DubboConsumerFilter.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.rpc.filter; + +import cn.dev33.satoken.same.SaSameUtil; +import com.xunhong.erp.turbo.base.dto.UserSession; +import org.apache.dubbo.common.constants.CommonConstants; +import org.apache.dubbo.common.extension.Activate; +import org.apache.dubbo.rpc.*; + +/** + * Sa-Token 整合 Dubbo Consumer端过滤器 + */ +@Activate(group = {CommonConstants.CONSUMER}, order = -10000) +public class DubboConsumerFilter implements Filter { + + @Override + public Result invoke(Invoker invoker, Invocation invocation) throws RpcException { + + // 追加 Same-Token 参数 + String token = SaSameUtil.getToken(); + RpcContext.getClientAttachment().setAttachment(SaSameUtil.SAME_TOKEN, token); + + // 如果有其他自定义附加数据,如租户 + RpcContext.getClientAttachment().setAttachment("USER-SESSION", UserSession.USER_THREAD_LOCAL.get()); + + // 开始调用 + return invoker.invoke(invocation); + } + +} diff --git a/erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/filter/DubboProviderFilter.java b/erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/filter/DubboProviderFilter.java new file mode 100644 index 0000000..466ecff --- /dev/null +++ b/erp-turbo-common/erp-turbo-rpc/src/main/java/com/xunhong/erp/turbo/rpc/filter/DubboProviderFilter.java @@ -0,0 +1,29 @@ +package com.xunhong.erp.turbo.rpc.filter; + +import cn.dev33.satoken.same.SaSameUtil; +import com.xunhong.erp.turbo.base.dto.UserSession; +import org.apache.dubbo.common.constants.CommonConstants; +import org.apache.dubbo.common.extension.Activate; +import org.apache.dubbo.rpc.*; + +/** + * Sa-Token 整合 Dubbo Provider端过滤器 + */ +@Activate(group = {CommonConstants.PROVIDER}, order = -10000) +public class DubboProviderFilter implements Filter { + + @Override + public Result invoke(Invoker invoker, Invocation invocation) throws RpcException { + // 取出 Same-Token 进行校验 + String sameToken = invocation.getAttachment(SaSameUtil.SAME_TOKEN); + SaSameUtil.checkToken(sameToken); + + // 取出其他自定义附加数据 + UserSession userSession = (UserSession) invocation.getObjectAttachment("USER-SESSION"); + UserSession.USER_THREAD_LOCAL.set(userSession); + + // 开始调用 + return invoker.invoke(invocation); + } + +} diff --git a/erp-turbo-common/erp-turbo-rpc/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter b/erp-turbo-common/erp-turbo-rpc/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter new file mode 100644 index 0000000..15e32c6 --- /dev/null +++ b/erp-turbo-common/erp-turbo-rpc/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter @@ -0,0 +1,2 @@ +dubboProviderFilter=com.xunhong.erp.turbo.rpc.filter.DubboProviderFilter +dubboConsumerFilter=com.xunhong.erp.turbo.rpc.filter.DubboConsumerFilter diff --git a/erp-turbo-common/erp-turbo-rpc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/erp-turbo-common/erp-turbo-rpc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..2b9dfa4 --- /dev/null +++ b/erp-turbo-common/erp-turbo-rpc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.xunhong.erp.turbo.rpc.config.RpcConfiguration diff --git a/erp-turbo-common/erp-turbo-rpc/src/main/resources/rpc.yml b/erp-turbo-common/erp-turbo-rpc/src/main/resources/rpc.yml new file mode 100644 index 0000000..dfcd956 --- /dev/null +++ b/erp-turbo-common/erp-turbo-rpc/src/main/resources/rpc.yml @@ -0,0 +1,19 @@ +dubbo: + consumer: + timeout: 3000 + check: false + retries: 0 + protocol: + name: dubbo + port: -1 + registry: + address: nacos://${xunhong.turbo.nacos.server-addr} + parameters: + namespace: ${xunhong.turbo.dubbo.nacos.namespace} + group: ${xunhong.turbo.dubbo.nacos.group} + username: ${xunhong.turbo.nacos.username} + password: ${xunhong.turbo.nacos.password} + application: + name: ${spring.application.name} + qos-enable: false + qos-accept-foreign-ip: false diff --git a/erp-turbo-common/erp-turbo-rpc/src/main/resources/security/serialize.allowlist b/erp-turbo-common/erp-turbo-rpc/src/main/resources/security/serialize.allowlist new file mode 100644 index 0000000..5e452c2 --- /dev/null +++ b/erp-turbo-common/erp-turbo-rpc/src/main/resources/security/serialize.allowlist @@ -0,0 +1,2 @@ +com.xunhong.erp.turbo.api.user.exception.UserException +com.xunhong.erp.turbo.api.user.exception.UserErrorCode diff --git a/erp-turbo-common/erp-turbo-sa-token/pom.xml b/erp-turbo-common/erp-turbo-sa-token/pom.xml new file mode 100644 index 0000000..c955263 --- /dev/null +++ b/erp-turbo-common/erp-turbo-sa-token/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + erp-turbo-sa-token + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + + com.xunhong + erp-turbo-base + + + + + cn.dev33 + sa-token-spring-boot3-starter + 1.39.0 + + + + + cn.dev33 + sa-token-sso + 1.39.0 + + + + cn.dev33 + sa-token-redis-jackson + 1.39.0 + + + + org.apache.commons + commons-pool2 + + + + cn.dev33 + sa-token-jwt + 1.39.0 + + + cn.hutool + hutool-jwt + + + + + + cn.dev33 + sa-token-alone-redis + 1.39.0 + + + + + cn.dev33 + sa-token-dubbo + 1.39.0 + + + + diff --git a/erp-turbo-common/erp-turbo-sa-token/src/main/java/com/xunhong/erp/turbo/satoken/SaTokenConfigure.java b/erp-turbo-common/erp-turbo-sa-token/src/main/java/com/xunhong/erp/turbo/satoken/SaTokenConfigure.java new file mode 100644 index 0000000..35f307b --- /dev/null +++ b/erp-turbo-common/erp-turbo-sa-token/src/main/java/com/xunhong/erp/turbo/satoken/SaTokenConfigure.java @@ -0,0 +1,15 @@ +package com.xunhong.erp.turbo.satoken; + +import cn.dev33.satoken.jwt.StpLogicJwtForSimple; +import cn.dev33.satoken.stp.StpLogic; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class SaTokenConfigure { + // Sa-Token 整合 jwt (Simple 简单模式) + @Bean + public StpLogic getStpLogicJwt() { + return new StpLogicJwtForSimple(); + } +} diff --git a/erp-turbo-common/erp-turbo-sa-token/src/main/java/com/xunhong/erp/turbo/satoken/SaTokenExceptionHandler.java b/erp-turbo-common/erp-turbo-sa-token/src/main/java/com/xunhong/erp/turbo/satoken/SaTokenExceptionHandler.java new file mode 100644 index 0000000..1a0bb63 --- /dev/null +++ b/erp-turbo-common/erp-turbo-sa-token/src/main/java/com/xunhong/erp/turbo/satoken/SaTokenExceptionHandler.java @@ -0,0 +1,44 @@ +package com.xunhong.erp.turbo.satoken; + +import cn.dev33.satoken.exception.NotLoginException; +import cn.dev33.satoken.exception.NotPermissionException; +import cn.dev33.satoken.exception.NotRoleException; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * @author shenyifei + */ +@Slf4j +@RestControllerAdvice +@Order(2) +public class SaTokenExceptionHandler { + + @ExceptionHandler({NotLoginException.class}) + @ResponseStatus(value = HttpStatus.OK) + public Response notLoginException(NotLoginException e) { + log.error("not login", e); + return SingleResponse.buildFailure(HttpStatus.UNAUTHORIZED.value() + "", e.getMessage()); + } + + @ExceptionHandler({NotRoleException.class}) + @ResponseStatus(value = HttpStatus.OK) + public Response notRoleException(NotRoleException e) { + log.error("not role", e); + return SingleResponse.buildFailure(HttpStatus.FORBIDDEN.value() + "", e.getMessage()); + } + + @ExceptionHandler({NotPermissionException.class}) + @ResponseStatus(value = HttpStatus.OK) + public Response notNotPermissionException(NotPermissionException e) { + log.error("not permission", e); + return SingleResponse.buildFailure(HttpStatus.FORBIDDEN.value() + "", e.getMessage()); + } + +} diff --git a/erp-turbo-common/erp-turbo-sa-token/src/main/java/com/xunhong/erp/turbo/satoken/StpInterfaceImpl.java b/erp-turbo-common/erp-turbo-sa-token/src/main/java/com/xunhong/erp/turbo/satoken/StpInterfaceImpl.java new file mode 100644 index 0000000..efdef39 --- /dev/null +++ b/erp-turbo-common/erp-turbo-sa-token/src/main/java/com/xunhong/erp/turbo/satoken/StpInterfaceImpl.java @@ -0,0 +1,47 @@ +package com.xunhong.erp.turbo.satoken; + +import cn.dev33.satoken.stp.StpInterface; +import cn.dev33.satoken.stp.StpUtil; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.xunhong.erp.turbo.base.dto.UserSession; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 自定义权限加载接口实现类 + * + * @author shenyifei + */ +@Component +@ConditionalOnMissingClass +@RequiredArgsConstructor +public class StpInterfaceImpl implements StpInterface { + + /** + * 返回一个账号所拥有的权限码集合 + */ + @Override + public List getPermissionList(Object loginId, String loginType) { + Long platformId = UserSession.USER_THREAD_LOCAL.get().getPlatformId(); + + return JSONArray.from(StpUtil.getSessionByLoginId(loginId).get("platformId:" + platformId)).stream() + .map(permissionVO -> JSONObject.from(permissionVO).getString("slug")) + .toList(); + } + + /** + * 返回一个账号所拥有的角色标识集合 (权限与角色可分开校验) + */ + @Override + public List getRoleList(Object loginId, String loginType) { + Object userAuthVO = StpUtil.getSessionByLoginId(loginId).get("userAuth"); + + return JSONObject.from(userAuthVO).getJSONArray("userRoleVOList").stream() + .map(userRoleVO -> JSONObject.from(userRoleVO).getString("slug")) + .toList(); + } +} diff --git a/erp-turbo-common/erp-turbo-sa-token/src/main/resources/sa-token.yml b/erp-turbo-common/erp-turbo-sa-token/src/main/resources/sa-token.yml new file mode 100644 index 0000000..67022ce --- /dev/null +++ b/erp-turbo-common/erp-turbo-sa-token/src/main/resources/sa-token.yml @@ -0,0 +1,37 @@ +sa-token: + # ------- SSO-模式一相关配置 (非模式一不需要配置) + cookie: + # 配置 Cookie 作用域 + domain: erp.qilincloud168.com + sign: + # API 接口调用秘钥 + secret-key: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor + # ---- 除了以上配置项,你还需要为 Sa-Token 配置http请求处理器(文档有步骤说明) + sso-client: + # SSO-Server端 统一认证地址 + auth-url: https://account.erp.qilincloud168.com + + + jwt-secret-key: shenyifeizhouyunyun520520 + token-name: satoken + timeout: 2592000 + active-timeout: -1 + is-concurrent: true + is-share: true + token-style: uuid + is-log: false + + # 配置 Sa-Token 单独使用的 Redis 连接 + alone-redis: + # Redis数据库索引(默认为0) + database: 1 + # Redis服务器地址 + host: 101.200.243.98 + # Redis服务器连接端口 + port: 6379 + # Redis用户名 + username: + # Redis服务器连接密码(默认为空) + password: redis_byehPk + # 连接超时时间 + timeout: 10s diff --git a/erp-turbo-common/erp-turbo-swagger/pom.xml b/erp-turbo-common/erp-turbo-swagger/pom.xml new file mode 100644 index 0000000..d5f35bb --- /dev/null +++ b/erp-turbo-common/erp-turbo-swagger/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-swagger + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + + com.xunhong + erp-turbo-base + + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.8.8 + + + org.springdoc + springdoc-openapi-starter-webmvc-api + 2.8.8 + + + + + diff --git a/erp-turbo-common/erp-turbo-web/pom.xml b/erp-turbo-common/erp-turbo-web/pom.xml new file mode 100644 index 0000000..4588eb3 --- /dev/null +++ b/erp-turbo-common/erp-turbo-web/pom.xml @@ -0,0 +1,58 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-web + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + + + com.xunhong + erp-turbo-base + + + + com.xunhong + erp-turbo-sa-token + + + + com.xunhong + erp-turbo-cache + + + + com.xunhong + erp-turbo-swagger + + + + cn.monitor4all + log-record-springboot3-starter + + + + + org.springframework.boot + spring-boot-starter-web + + + + + diff --git a/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/annotation/CacheControl.java b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/annotation/CacheControl.java new file mode 100644 index 0000000..1468466 --- /dev/null +++ b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/annotation/CacheControl.java @@ -0,0 +1,19 @@ +package com.xunhong.erp.turbo.web.annotation; + + +import com.xunhong.erp.turbo.web.enums.CachePolicy; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.TYPE, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface CacheControl { + CachePolicy[] policy() default {CachePolicy.NO_CACHE}; + + int maxAge() default 0; + + int sharedMaxAge() default -1; +} diff --git a/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/annotation/RepeatSubmit.java b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/annotation/RepeatSubmit.java new file mode 100644 index 0000000..a03acc0 --- /dev/null +++ b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/annotation/RepeatSubmit.java @@ -0,0 +1,21 @@ +package com.xunhong.erp.turbo.web.annotation; + +import java.lang.annotation.*; + +/** + * 因为ApiOperation是api文档的注解 接口上必定会有 + * 加这个注解是标记此接口不用记录操作日志 + * + * @author zhangyinghui + */ +@Target({ElementType.METHOD, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RepeatSubmit { + /** + * 时间限制,单位为秒,默认3 + * + * @return long + */ + long limitTime() default 3L; +} diff --git a/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/aspect/MerchantIdAspect.java b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/aspect/MerchantIdAspect.java new file mode 100644 index 0000000..8b47e68 --- /dev/null +++ b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/aspect/MerchantIdAspect.java @@ -0,0 +1,73 @@ +package com.xunhong.erp.turbo.web.aspect; + +import com.alibaba.cola.dto.DTO; +import com.xunhong.erp.turbo.base.dto.UserSession; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; +import java.util.Objects; + +@Aspect +@Component +public class MerchantIdAspect { + + private static void setParam(DTO dto, String methodName, Long methodNameValue) { + if (methodNameValue == null) { + return; + } + + try { + if (Objects.nonNull(dto.getClass().getMethod("get" + methodName).invoke(dto))) { + return; + } + + Method method = dto.getClass().getMethod("set" + methodName, Long.class); + method.invoke(dto, methodNameValue); + } catch (Exception e) { + // ignore + } + } + + private static void setParam(DTO dto, String methodName, String methodNameValue) { + if (methodNameValue == null) { + return; + } + + try { + if (Objects.nonNull(dto.getClass().getMethod("get" + methodName).invoke(dto))) { + return; + } + + Method method = dto.getClass().getMethod("set" + methodName, String.class); + method.invoke(dto, methodNameValue); + } catch (Exception e) { + // ignore + } + } + + @Around("@annotation(org.springframework.web.bind.annotation.RequestMapping) " + + "|| @annotation(org.springframework.web.bind.annotation.PatchMapping) " + + "|| @annotation(org.springframework.web.bind.annotation.PostMapping) " + + "|| @annotation(org.springframework.web.bind.annotation.DeleteMapping) " + + "|| @annotation(org.springframework.web.bind.annotation.GetMapping) " + + "|| @annotation(org.springframework.web.bind.annotation.PutMapping)") + public Object handleRequestMapping(ProceedingJoinPoint joinPoint) throws Throwable { + // 获取方法参数列表 + Object[] args = joinPoint.getArgs(); + + // 获取方法的第一个参数对象 + if (args.length > 0 && args[0] instanceof DTO dto) { + + // platformId + setParam(dto, "PlatformId", UserSession.USER_THREAD_LOCAL.get().getPlatformId()); + setParam(dto, "CreatedBy", UserSession.USER_THREAD_LOCAL.get().getCreatedBy()); + setParam(dto, "CreatedByName", UserSession.USER_THREAD_LOCAL.get().getCreatedByName()); + } + + // 继续执行原方法 + return joinPoint.proceed(args); + } +} diff --git a/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/config/ApplicationConfigurer.java b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/config/ApplicationConfigurer.java new file mode 100644 index 0000000..e886503 --- /dev/null +++ b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/config/ApplicationConfigurer.java @@ -0,0 +1,160 @@ +package com.xunhong.erp.turbo.web.config; + +import cn.dev33.satoken.interceptor.SaInterceptor; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; +import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; +import com.xunhong.erp.turbo.web.interceptor.CacheControlHandlerInterceptor; +import com.xunhong.erp.turbo.web.interceptor.UserInterceptor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.ResourceBundleMessageSource; +import org.springframework.core.annotation.Order; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.validation.Validator; +import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; +import org.springframework.web.filter.ShallowEtagHeaderFilter; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; + +import java.math.BigInteger; +import java.nio.charset.StandardCharsets; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author shenyifei + */ +@Configuration +@Order(1) +public class ApplicationConfigurer implements WebMvcConfigurer { + + @Value("${jsonDateFormat:yyyy-MM-dd HH:mm:ss}") + private String jsonDateFormat; + + @Autowired + private UserInterceptor userInterceptor; + +// @SneakyThrows +// @Bean +// public Searcher searcher() { +// File file = ResourceUtils.getFile("./ipdb/ip2region.xdb"); +// String dbPath = file.getCanonicalPath(); +// return Searcher.newWithFileOnly(dbPath); +// } + + @Bean + public FilterRegistrationBean shallowEtagHeaderFilter() { + FilterRegistrationBean filterRegistrationBean + = new FilterRegistrationBean<>(new ShallowEtagHeaderFilter()); + filterRegistrationBean.addUrlPatterns("/*"); + filterRegistrationBean.setName("etagFilter"); + return filterRegistrationBean; + } + + @Bean + public LocaleChangeInterceptor localeChangeInterceptor() { + LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor(); + interceptor.setParamName("lang"); + return interceptor; + } + + @Bean + public CacheControlHandlerInterceptor cacheControlHandlerInterceptor() { + return new CacheControlHandlerInterceptor(); + } + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(localeChangeInterceptor()).addPathPatterns("/**"); + registry.addInterceptor(cacheControlHandlerInterceptor()).addPathPatterns("/**"); + registry.addInterceptor(userInterceptor).addPathPatterns("/**"); + registry.addInterceptor(new SaInterceptor()).addPathPatterns("/**"); + WebMvcConfigurer.super.addInterceptors(registry); + } + + @Bean + public MappingJackson2HttpMessageConverter customJackson2HttpMessageConverter() { + MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + objectMapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + objectMapper.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + + LocalDateTimeDeserializer dateTimeDeserializer = new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + LocalDateTimeSerializer dateTimeSerializer = new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + LocalTimeDeserializer localTimeDeserializer = new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss")); + LocalTimeSerializer localTimeSerializer = new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss")); + + + SimpleModule simpleModule = new SimpleModule() + .addSerializer(BigInteger.class, ToStringSerializer.instance) + .addSerializer(Long.class, ToStringSerializer.instance) + .addSerializer(Long.TYPE, ToStringSerializer.instance) + .addSerializer(LocalDateTime.class, dateTimeSerializer) + .addDeserializer(LocalDateTime.class, dateTimeDeserializer) + .addSerializer(LocalTime.class, localTimeSerializer) + .addDeserializer(LocalTime.class, localTimeDeserializer); + + // 解决Feign时间LocalDateTime转换问题 + objectMapper.registerModule(new JavaTimeModule()) + .registerModule(new ParameterNamesModule()) + .registerModule(simpleModule); + jsonConverter.setObjectMapper(objectMapper); + + return jsonConverter; + } + + @Override + public void configureMessageConverters(List> converters) { + converters.add(customJackson2HttpMessageConverter()); + converters.add(new StringHttpMessageConverter(StandardCharsets.UTF_8)); + WebMvcConfigurer.super.configureMessageConverters(converters); + } + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/**") + .addResourceLocations("classpath:/static/"); + registry.addResourceHandler("/webjars/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/"); + registry.addResourceHandler("/swagger-ui/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/4.18.1/"); + } + + @Override + public Validator getValidator() { + // 国际化语言 + ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); + messageSource.setBasename("i18n/messages"); + LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); + validator.setValidationMessageSource(messageSource); + + // 快速失败,遇到第一个错误就抛出异常 + Map validationProperties = new HashMap<>(1); + validationProperties.put("hibernate.validator.fail_fast", "true"); + validator.setValidationPropertyMap(validationProperties); + + return validator; + } +} diff --git a/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/config/TomcatConfig.java b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/config/TomcatConfig.java new file mode 100644 index 0000000..0ecfe5e --- /dev/null +++ b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/config/TomcatConfig.java @@ -0,0 +1,20 @@ +package com.xunhong.erp.turbo.web.config; + +import org.apache.catalina.connector.Connector; +import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class TomcatConfig { + + @Bean + public TomcatServletWebServerFactory webServerFactory() { + TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(); + factory.addConnectorCustomizers((Connector connector) -> { + connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}"); + connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}"); + }); + return factory; + } +} diff --git a/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/enums/CachePolicy.java b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/enums/CachePolicy.java new file mode 100644 index 0000000..493315d --- /dev/null +++ b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/enums/CachePolicy.java @@ -0,0 +1,24 @@ +package com.xunhong.erp.turbo.web.enums; + +public enum CachePolicy { + NO_CACHE("no-cache"), + NO_STORE("no-store"), + MUST_REVALIDATE("must-revalidate"), + PROXY_REVALIDATE("proxy-revalidate"), + PRIVATE("private"), + PUBLIC("public"); + + private final String policy; + + private CachePolicy() { + this.policy = null; + } + + private CachePolicy(String policy) { + this.policy = policy; + } + + public String policy() { + return this.policy; + } +} diff --git a/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/handler/DecryptControllerAdvice.java b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/handler/DecryptControllerAdvice.java new file mode 100644 index 0000000..1e58430 --- /dev/null +++ b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/handler/DecryptControllerAdvice.java @@ -0,0 +1,50 @@ +package com.xunhong.erp.turbo.web.handler; + +import cn.hutool.crypto.SecureUtil; +import cn.hutool.crypto.symmetric.AES; +import com.xunhong.erp.turbo.base.annotation.Decrypt; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.InitBinder; + +import java.lang.reflect.Field; + +@ControllerAdvice +public class DecryptControllerAdvice { + + @InitBinder + public void initBinder(WebDataBinder binder) { + Object target = binder.getTarget(); + if (target != null) { + decryptObject(target); + } + } + + private void decryptObject(Object obj) { + try { + Class clazz = obj.getClass(); + for (Field field : clazz.getDeclaredFields()) { + if (field.isAnnotationPresent(Decrypt.class)) { + field.setAccessible(true); + String encryptedValue = (String) field.get(obj); + String decryptedValue = decrypt(encryptedValue); + field.set(obj, decryptedValue); + } + } + } catch (IllegalAccessException e) { + throw new RuntimeException("Decryption failed", e); + } + } + + /** + * 解密方法 + * + * @param encryptedText 加密的字符串 + * @return 解密后的字符串 + */ + public String decrypt(String encryptedText) { + AES aes = SecureUtil.aes("weKANfYbTTqZCve0".getBytes()); + + return aes.decryptStr(encryptedText); + } +} diff --git a/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/handler/GlobalExceptionHandler.java b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..0dd56f3 --- /dev/null +++ b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/handler/GlobalExceptionHandler.java @@ -0,0 +1,151 @@ +package com.xunhong.erp.turbo.web.handler; + + +import cn.dev33.satoken.exception.NotLoginException; +import cn.dev33.satoken.exception.NotPermissionException; +import cn.dev33.satoken.exception.NotRoleException; +import cn.dev33.satoken.exception.NotSafeException; +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import com.xunhong.erp.turbo.base.exception.BizException; +import com.xunhong.erp.turbo.base.exception.ErrorCode; +import com.xunhong.erp.turbo.base.exception.SystemException; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.http.HttpStatus; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import java.lang.annotation.Annotation; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + + +/** + * 接口异常统一处理 + * + * @author shenyifei + */ +@Slf4j +@RestControllerAdvice +@Order(4) +public class GlobalExceptionHandler { + + @ResponseBody + @ExceptionHandler(NullPointerException.class) + public Response handleException(NullPointerException e) { + log.error("********NullPointerException********: 空指针:{}", e.toString(), e); + return SingleResponse.buildFailure(HttpStatus.BAD_REQUEST.value() + "", "空指针异常"); + } + + @ResponseBody + @ExceptionHandler(BizException.class) + public Response handleBizException(BizException e) { + log.error("********BizException********: 业务异常:{}", e.toString(), e); + ErrorCode errorCode = e.getErrorCode(); + String message = e.getMessage(); + if (Objects.isNull(message)) { + message = errorCode.getMessage(); + } + return SingleResponse.buildFailure(errorCode.getCode(), message); + } + + + @ExceptionHandler({NotLoginException.class}) + @ResponseStatus(value = HttpStatus.OK) + public Response notLoginException(NotLoginException e) { + return SingleResponse.buildFailure(HttpStatus.UNAUTHORIZED.value() + "", e.getMessage()); + } + + @ExceptionHandler({NotRoleException.class}) + @ResponseStatus(value = HttpStatus.OK) + public Response notRoleException(NotRoleException e) { + return SingleResponse.buildFailure(HttpStatus.FORBIDDEN.value() + "", e.getMessage()); + } + + @ExceptionHandler({NotPermissionException.class}) + @ResponseStatus(value = HttpStatus.OK) + public Response notNotPermissionException(NotPermissionException e) { + return SingleResponse.buildFailure(HttpStatus.FORBIDDEN.value() + "", e.getMessage()); + } + + @ExceptionHandler({NotSafeException.class}) + @ResponseStatus(value = HttpStatus.OK) + public Response systemException(NotSafeException e) { + Response response = Response.buildSuccess(); + response.setErrMessage("请完成二级认证后再次访问接口"); + response.setErrCode("401"); + response.setSuccess(true); + + return response; + } + + @ExceptionHandler({MethodArgumentNotValidException.class}) + @ResponseStatus(value = HttpStatus.OK) + public SingleResponse> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { + log.error("********MethodArgumentNotValidException********: 校验异常:{}", e.toString(), e); + List allErrors = e.getBindingResult().getFieldErrors(); + Object target = e.getBindingResult().getTarget(); + + HashMap hashMap = new HashMap<>(); + + allErrors.forEach(i -> { + String fieldName = ""; + + if (Objects.nonNull(target)) { + try { + Annotation[] annotations = target.getClass().getDeclaredField(i.getField()).getAnnotations(); + for (Annotation annotation : annotations) { + if (annotation instanceof Schema data) { + fieldName = data.title(); + } + } + } catch (NoSuchFieldException ignored) { + } + } + + hashMap.put(i.getField(), hashMap.getOrDefault(i.getField(), fieldName) + i.getDefaultMessage()); + }); + + SingleResponse> singleResponse = SingleResponse.of(hashMap); + singleResponse.setErrMessage(String.join(",", hashMap.values())); + singleResponse.setErrCode(HttpStatus.BAD_REQUEST.value() + ""); + singleResponse.setSuccess(false); + return singleResponse; + + } + + + /** + * 自定义系统异常处理器 + * + * @param systemException + * @return + */ + @ResponseBody + @ExceptionHandler(SystemException.class) + public Response systemExceptionHandler(SystemException systemException) { + log.error("systemException occurred.", systemException); + return SingleResponse.buildFailure(systemException.getErrorCode().getCode(), systemException.getErrorCode().getMessage()); + } + + /** + * 自定义系统异常处理器 + * + * @param throwable + * @return + */ + @ResponseBody + @ExceptionHandler(Throwable.class) + public Response throwableHandler(Throwable throwable) { + log.error("throwable occurred.", throwable); + return SingleResponse.buildFailure("500", "哎呀,当前网络比较拥挤,请您稍后再试~"); + } +} diff --git a/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/handler/SensitiveResponseBodyAdvice.java b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/handler/SensitiveResponseBodyAdvice.java new file mode 100644 index 0000000..abb6841 --- /dev/null +++ b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/handler/SensitiveResponseBodyAdvice.java @@ -0,0 +1,76 @@ +package com.xunhong.erp.turbo.web.handler; + +import com.alibaba.cola.dto.*; +import com.github.houbb.sensitive.core.api.SensitiveUtil; +import io.swagger.v3.oas.annotations.media.Schema; +import org.springframework.beans.propertyeditors.StringTrimmerEditor; +import org.springframework.core.MethodParameter; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; + +import java.util.Objects; + +/** + * 脱敏响应体处理 + * + * @author hollis + */ +@ControllerAdvice +public class SensitiveResponseBodyAdvice implements ResponseBodyAdvice { + /** + * 处理空格 + * + * @param binder + */ + @InitBinder + public void initBinder(WebDataBinder binder) { + binder.registerCustomEditor(String.class, new StringTrimmerEditor(true)); + } + + @Override + public boolean supports(MethodParameter returnType, Class converterType) { + // 只对特定类型的返回值执行处理逻辑,这里可以根据需要调整判断条件 + return Response.class.isAssignableFrom(returnType.getParameterType()); + } + + @Override + public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { + try { + if (body instanceof SingleResponse) { + SingleResponse singleResponse = (SingleResponse) body; + if (Objects.nonNull(singleResponse.getData())) { + Schema annotation = singleResponse.getData().getClass().getAnnotation(Schema.class); + if (Objects.nonNull(annotation) && annotation.title().equals("系统设置")) { + return body; + } + + singleResponse.setData(SensitiveUtil.desCopy(singleResponse.getData())); + } + } + + if (body instanceof MultiResponse) { + MultiResponse multiResponse = (MultiResponse) body; + if (Objects.nonNull(multiResponse.getData())) { + multiResponse.setData(SensitiveUtil.desCopyCollection(multiResponse.getData())); + } + } + + if (body instanceof PageResponse) { + PageResponse pageResponse = (PageResponse) body; + if (Objects.nonNull(pageResponse.getData())) { + pageResponse.setData(SensitiveUtil.desCopyCollection(pageResponse.getData())); + } + } + } catch (Exception ignored) { + + } + + return body; + } +} diff --git a/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/interceptor/CacheControlHandlerInterceptor.java b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/interceptor/CacheControlHandlerInterceptor.java new file mode 100644 index 0000000..b41f038 --- /dev/null +++ b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/interceptor/CacheControlHandlerInterceptor.java @@ -0,0 +1,98 @@ +package com.xunhong.erp.turbo.web.interceptor; + +import com.xunhong.erp.turbo.web.annotation.CacheControl; +import com.xunhong.erp.turbo.web.enums.CachePolicy; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; + +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.TimeZone; + +public class CacheControlHandlerInterceptor implements HandlerInterceptor { + private static final String HEADER_EXPIRES = "Expires"; + private static final String HEADER_CACHE_CONTROL = "Cache-Control"; + private boolean useExpiresHeader = true; + + public CacheControlHandlerInterceptor() { + } + + protected final void assignCacheControlHeader(HttpServletRequest request, HttpServletResponse response, Object handler) { + CacheControl cacheControl = this.getCacheControl(request, response, handler); + String cacheControlHeader = this.createCacheControlHeader(cacheControl); + if (cacheControlHeader != null) { + response.setHeader("Cache-Control", cacheControlHeader); + if (this.useExpiresHeader) { + response.setDateHeader("Expires", this.createExpiresHeader(cacheControl)); + } + } + + } + + protected final String createCacheControlHeader(CacheControl cacheControl) { + StringBuilder builder = new StringBuilder(); + if (cacheControl == null) { + return null; + } else { + CachePolicy[] policies = cacheControl.policy(); + if (cacheControl.maxAge() >= 0) { + builder.append("max-age=").append(cacheControl.maxAge()); + } + + if (cacheControl.sharedMaxAge() >= 0) { + if (builder.length() > 0) { + builder.append(", "); + } + + builder.append("s-maxage=").append(cacheControl.sharedMaxAge()); + } + + if (policies != null) { + CachePolicy[] arr$ = policies; + int len$ = policies.length; + + for (int i$ = 0; i$ < len$; ++i$) { + CachePolicy policy = arr$[i$]; + if (builder.length() > 0) { + builder.append(", "); + } + + builder.append(policy.policy()); + } + } + + return builder.length() > 0 ? builder.toString() : null; + } + } + + protected final long createExpiresHeader(CacheControl cacheControl) { + Calendar expires = new GregorianCalendar(TimeZone.getTimeZone("GMT")); + if (cacheControl.maxAge() >= 0) { + expires.add(13, cacheControl.maxAge()); + } + + return expires.getTime().getTime(); + } + + protected final CacheControl getCacheControl(HttpServletRequest request, HttpServletResponse response, Object handler) { + if (handler != null && handler instanceof HandlerMethod) { + HandlerMethod handlerMethod = (HandlerMethod) handler; + CacheControl cacheControl = (CacheControl) handlerMethod.getMethodAnnotation(CacheControl.class); + return cacheControl == null ? (CacheControl) handlerMethod.getBeanType().getAnnotation(CacheControl.class) : cacheControl; + } else { + return null; + } + } + + public final boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + this.assignCacheControlHeader(request, response, handler); + + return true; + } + + public final void setUseExpiresHeader(boolean useExpiresHeader) { + this.useExpiresHeader = useExpiresHeader; + } +} diff --git a/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/interceptor/RepeatSubmitInterceptor.java b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/interceptor/RepeatSubmitInterceptor.java new file mode 100644 index 0000000..064cdb1 --- /dev/null +++ b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/interceptor/RepeatSubmitInterceptor.java @@ -0,0 +1,94 @@ +package com.xunhong.erp.turbo.web.interceptor; + +import com.xunhong.erp.turbo.web.annotation.RepeatSubmit; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.AsyncHandlerInterceptor; + +import java.lang.reflect.Method; +import java.util.Map; +import java.util.Objects; + +/** + * @author shenyifei + */ +@Slf4j +@Component +public class RepeatSubmitInterceptor implements AsyncHandlerInterceptor { + + public static final String SET_VAL = "1"; + + @Autowired + private RedisTemplate redisTemplate; + + /** + * 根据请求获取客户端Ip地址 + * + * @param request Servlet请求 + * @return 返回IP地址 + */ + public static String getClientIp(HttpServletRequest request) { + String unknown = "unknown"; + if (request == null) { + return unknown; + } + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Forwarded-For"); + } + if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Real-IP"); + } + + if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + return ip; + } + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { + //如果没有映射到方法直接通过 + if (!(handler instanceof HandlerMethod)) { + return true; + } + HandlerMethod handlerMethod = (HandlerMethod) handler; + Method method = handlerMethod.getMethod(); + RepeatSubmit repeatSubmit = method.getAnnotation(RepeatSubmit.class); + if (Objects.isNull(repeatSubmit)) { + return true; + } + long limitTime = repeatSubmit.limitTime(); + String ip = getClientIp(request); + //获取请求参数 + Map query = request.getParameterMap(); + //目标类、方法 + String className = method.getDeclaringClass().getName(); + String name = method.getName(); + String ipKey = String.format("%s#%s#%s#%s", ip, className, name, query); + log.info("className:{},name:{},ip:{},query:{}", className, name, ip, query.toString()); + int hashCode = Math.abs(ipKey.hashCode()); + String key = String.format("%s_%d", ip, hashCode); + Object objValue = redisTemplate.opsForValue().get(key); + if (Objects.nonNull(objValue)) { + String strValue = objValue.toString(); + if (SET_VAL.equals(strValue)) { + log.error("路径:{},访问:{}重复", request.getServletPath(), ipKey); + throw new RuntimeException("可能存在重复操作,请稍后再试"); + } + } + redisTemplate.opsForValue().set(key, SET_VAL, limitTime); + return true; + } +} diff --git a/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/interceptor/UserInterceptor.java b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/interceptor/UserInterceptor.java new file mode 100644 index 0000000..c13d906 --- /dev/null +++ b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/interceptor/UserInterceptor.java @@ -0,0 +1,69 @@ +package com.xunhong.erp.turbo.web.interceptor; + +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.text.CharSequenceUtil; +import com.alibaba.fastjson2.JSONObject; +import com.xunhong.erp.turbo.base.dto.UserSession; +import com.xunhong.erp.turbo.web.utils.IPUtils; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.AsyncHandlerInterceptor; + +/** + * @author shenyifei + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class UserInterceptor implements AsyncHandlerInterceptor { + + /** + * This implementation always returns {@code true}. + * + * @param request 请求 + * @param response 响应 + * @param handler + */ + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { + boolean login = StpUtil.isLogin(); + + UserSession userSession = new UserSession(); + if (login) { + Long userId = Long.parseLong(StpUtil.getLoginId().toString()); + userSession.setUserId(userId); + + userSession.setCreatedBy(StpUtil.getSession().getLong("createdBy")); + userSession.setCreatedByName(StpUtil.getSession().getString("createdByName")); + } + + String ipAddr = IPUtils.getIpAddr(request); + if (CharSequenceUtil.isNotBlank(ipAddr)) { + userSession.setIpAddr(ipAddr); + } + + String platformStr = request.getHeader("Xh-Platform-Id"); + if (CharSequenceUtil.isNotBlank(platformStr)) { + userSession.setPlatformId(Long.parseLong(platformStr)); + } + + String roleSlug = request.getHeader("Xh-Role-Slug"); + if (CharSequenceUtil.isNotBlank(roleSlug)) { + userSession.setRoleSlug(roleSlug); + + Object userAuthVO = StpUtil.getSession().get("userAuth"); + + if (JSONObject.from(userAuthVO).getJSONArray("userRoleVOList").stream().noneMatch(userRoleVO -> JSONObject.from(userRoleVO).getString("slug").equals(roleSlug))) { + throw new RuntimeException("用户权限不足"); + } + } + + UserSession.USER_THREAD_LOCAL.set(userSession); + + return true; + } + +} diff --git a/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/service/OperationLogGetService.java b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/service/OperationLogGetService.java new file mode 100644 index 0000000..2127885 --- /dev/null +++ b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/service/OperationLogGetService.java @@ -0,0 +1,18 @@ +package com.xunhong.erp.turbo.web.service; + +import cn.monitor4all.logRecord.bean.LogDTO; +import cn.monitor4all.logRecord.service.IOperationLogGetService; +import com.alibaba.fastjson2.JSON; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +public class OperationLogGetService implements IOperationLogGetService { + @Override + public boolean createLog(LogDTO logDTO) { + log.info("logDTO: [{}]", JSON.toJSONString(logDTO)); + + return true; + } +} diff --git a/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/utils/IPUtils.java b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/utils/IPUtils.java new file mode 100644 index 0000000..29c3f45 --- /dev/null +++ b/erp-turbo-common/erp-turbo-web/src/main/java/com/xunhong/erp/turbo/web/utils/IPUtils.java @@ -0,0 +1,50 @@ +package com.xunhong.erp.turbo.web.utils; + +import cn.hutool.core.util.StrUtil; +import jakarta.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; + + +@Slf4j +public class IPUtils { + + /** + * 获取IP地址 + *

+ * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址 + * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址 + */ + public static String getIpAddr(HttpServletRequest request) { + String ip = null; + try { + ip = request.getHeader("x-forwarded-for"); + if (StrUtil.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (StrUtil.isEmpty(ip) || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (StrUtil.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (StrUtil.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (StrUtil.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + } catch (Exception e) { + log.error("IPUtils ERROR:", e); + } + + //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 + if (!StrUtil.isEmpty(ip) && ip.length() > 15) { + if (ip.indexOf(",") > 0) { + ip = ip.substring(0, ip.indexOf(",")); + } + } + + return ip; + } +} + diff --git a/erp-turbo-common/erp-turbo-weixin/pom.xml b/erp-turbo-common/erp-turbo-weixin/pom.xml new file mode 100644 index 0000000..1a10932 --- /dev/null +++ b/erp-turbo-common/erp-turbo-weixin/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + + + com.xunhong + erp-turbo-common + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-weixin + 1.0.0-SNAPSHOT + + + + 21 + 21 + UTF-8 + + + + + + com.github.binarywang + weixin-java-mp + 4.7.7.B + + + + com.github.binarywang + weixin-java-miniapp + 4.7.7.B + + + + com.github.binarywang + weixin-java-pay + 4.7.7.B + + + + com.github.binarywang + weixin-java-cp + 4.7.7.B + + + + com.xunhong + erp-turbo-web + + + diff --git a/erp-turbo-common/erp-turbo-weixin/src/main/java/com/xunhong/erp/turbo/weixin/handler/WeixinExceptionHandler.java b/erp-turbo-common/erp-turbo-weixin/src/main/java/com/xunhong/erp/turbo/weixin/handler/WeixinExceptionHandler.java new file mode 100644 index 0000000..304568d --- /dev/null +++ b/erp-turbo-common/erp-turbo-weixin/src/main/java/com/xunhong/erp/turbo/weixin/handler/WeixinExceptionHandler.java @@ -0,0 +1,23 @@ +package com.xunhong.erp.turbo.weixin.handler; + +import com.alibaba.cola.dto.Response; +import com.alibaba.cola.dto.SingleResponse; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.error.WxErrorException; +import org.springframework.core.annotation.Order; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@Slf4j +@RestControllerAdvice +@Order(1) +public class WeixinExceptionHandler { + + @ResponseBody + @ExceptionHandler(WxErrorException.class) + public Response handleWxErrorException(WxErrorException e) { + return SingleResponse.buildFailure(HttpStatus.BAD_REQUEST.value() + "", e.getMessage()); + } +} diff --git a/erp-turbo-common/pom.xml b/erp-turbo-common/pom.xml new file mode 100644 index 0000000..9c6a891 --- /dev/null +++ b/erp-turbo-common/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + + com.xunhong + ERPTurbo + 1.0.0-SNAPSHOT + ../pom.xml + + + com.xunhong + pom + erp-turbo-common + 1.0.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + erp-turbo-base + erp-turbo-rpc + erp-turbo-datasource + erp-turbo-sa-token + erp-turbo-job + erp-turbo-swagger + erp-turbo-cache + erp-turbo-api + erp-turbo-config + erp-turbo-limiter + erp-turbo-web + erp-turbo-file + erp-turbo-apm + erp-turbo-logback + erp-turbo-es + erp-turbo-mq + erp-turbo-lock + erp-turbo-weixin + erp-turbo-dify + erp-turbo-quartz + erp-turbo-captcha + erp-turbo-ai + + + + + + org.springframework.boot + spring-boot-starter + + + + org.projectlombok + lombok + + + + com.alibaba.fastjson2 + fastjson2 + + + + com.google.guava + guava + + + + org.mapstruct + mapstruct + + + + cn.hutool + hutool-all + 5.8.25 + + + + org.aspectj + aspectjrt + + + + org.aspectj + aspectjweaver + + + + org.apache.commons + commons-lang3 + 3.14.0 + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + junit + junit + test + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + true + + + + + diff --git a/erp-turbo-schedule/pom.xml b/erp-turbo-schedule/pom.xml new file mode 100644 index 0000000..b7382e1 --- /dev/null +++ b/erp-turbo-schedule/pom.xml @@ -0,0 +1,141 @@ + + + 4.0.0 + + + com.xunhong + ERPTurbo + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-schedule + 1.0.0-SNAPSHOT + + + erp-turbo-schedule + 21 + 21 + UTF-8 + + + + + org.springframework.boot + spring-boot-starter + + + + com.xunhong + erp-turbo-base + + + + com.xunhong + erp-turbo-config + + + + com.xunhong + erp-turbo-file + + + + com.xunhong + erp-turbo-api + + + + com.xunhong + erp-turbo-rpc + + + + com.xunhong + erp-turbo-web + + + + com.xunhong + erp-turbo-sa-token + + + + com.xunhong + erp-turbo-apm + + + + com.xunhong + erp-turbo-logback + + + + com.xunhong + erp-turbo-quartz + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + junit + junit + test + + + + + com.h2database + h2 + 1.4.200 + test + + + com.baomidou + mybatis-mate-annotation + 1.3.4 + + + + + + + ${application.name} + + + org.springframework.boot + spring-boot-maven-plugin + + true + + com.xunhong.erp.turbo.schedule.ErpTurboScheduleApplication + + + true + + ../layers/layers.xml + + + + + + + package + + repackage + + + + + + + + + diff --git a/erp-turbo-schedule/src/main/java/com/xunhong/erp/turbo/schedule/ErpTurboScheduleApplication.java b/erp-turbo-schedule/src/main/java/com/xunhong/erp/turbo/schedule/ErpTurboScheduleApplication.java new file mode 100644 index 0000000..2c9e64e --- /dev/null +++ b/erp-turbo-schedule/src/main/java/com/xunhong/erp/turbo/schedule/ErpTurboScheduleApplication.java @@ -0,0 +1,17 @@ +package com.xunhong.erp.turbo.schedule; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * Spring Boot Starter + * + * @author shenyifei + */ +@SpringBootApplication(scanBasePackages = {"com.xunhong.erp.turbo", "com.alibaba.cola"}) +public class ErpTurboScheduleApplication { + + public static void main(String[] args) { + SpringApplication.run(ErpTurboScheduleApplication.class, args); + } +} diff --git a/erp-turbo-schedule/src/main/java/com/xunhong/erp/turbo/schedule/config/QuartzConfig.java b/erp-turbo-schedule/src/main/java/com/xunhong/erp/turbo/schedule/config/QuartzConfig.java new file mode 100644 index 0000000..3f2d412 --- /dev/null +++ b/erp-turbo-schedule/src/main/java/com/xunhong/erp/turbo/schedule/config/QuartzConfig.java @@ -0,0 +1,7 @@ +package com.xunhong.erp.turbo.schedule.config; + +import org.springframework.context.annotation.Configuration; + +@Configuration +public class QuartzConfig { +} diff --git a/erp-turbo-schedule/src/main/resources/application.yml b/erp-turbo-schedule/src/main/resources/application.yml new file mode 100644 index 0000000..9abd8dc --- /dev/null +++ b/erp-turbo-schedule/src/main/resources/application.yml @@ -0,0 +1,10 @@ +spring: + application: + name: @application.name@ + profiles: + active: dev + config: + import: classpath:cache.yml,classpath:rpc.yml,classpath:sa-token.yml + +server: + port: 8089 diff --git a/erp-turbo-schedule/src/main/resources/bootstrap.yml b/erp-turbo-schedule/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..c93901e --- /dev/null +++ b/erp-turbo-schedule/src/main/resources/bootstrap.yml @@ -0,0 +1,7 @@ +spring: + application: + name: @application.name@ + profiles: + active: dev + config: + import: classpath:base.yml,classpath:logging.yml,classpath:config.yml diff --git a/erp-turbo-svc/.gitignore b/erp-turbo-svc/.gitignore new file mode 100644 index 0000000..5fc9b29 --- /dev/null +++ b/erp-turbo-svc/.gitignore @@ -0,0 +1,5 @@ +src/main +src/test +!src/main/java/com/xunhong/erp/turbo/ErpTurboSvcApplication.java +!src/main/resources/application.yml +!src/main/resources/bootstrap.yml diff --git a/erp-turbo-svc/pom.xml b/erp-turbo-svc/pom.xml new file mode 100644 index 0000000..fd9edc1 --- /dev/null +++ b/erp-turbo-svc/pom.xml @@ -0,0 +1,259 @@ + + + 4.0.0 + + + com.xunhong + ERPTurbo + 1.0.0-SNAPSHOT + + + com.xunhong + erp-turbo-svc + 1.0.0-SNAPSHOT + + + erp-turbo-svc + 22 + 22 + UTF-8 + + + + + org.springframework.boot + spring-boot-starter + + + + com.xunhong + erp-turbo-base + + + + + + + + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + com.xunhong + erp-turbo-file + + + + com.xunhong + erp-turbo-ai + + + + com.xunhong + erp-turbo-api + + + + com.xunhong + erp-turbo-rpc + + + + com.xunhong + erp-turbo-web + + + + com.xunhong + erp-turbo-sa-token + + + + com.xunhong + erp-turbo-apm + + + + com.xunhong + erp-turbo-logback + + + + com.xunhong + erp-turbo-limiter + + + + com.xunhong + erp-turbo-datasource + + + + com.xunhong + erp-turbo-weixin + + + + com.xunhong + erp-turbo-dify + + + + com.xunhong + erp-turbo-quartz + + + + com.xunhong + erp-turbo-captcha + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + junit + junit + test + + + + + com.h2database + h2 + 1.4.200 + test + + + com.baomidou + mybatis-mate-annotation + 1.3.4 + + + + + com.alibaba.cola + cola-component-domain-starter + + + com.alibaba.cola + cola-component-exception + + + + + + ${application.name} + + + + org.apache.maven.plugins + maven-clean-plugin + 3.3.2 + + + + + + ${project.basedir}/src/main/java/com/xunhong/erp/turbo + + + **/* + + + **/ErpTurboSvcApplication.java + + + false + + + + ${project.basedir}/src/test + + **/* + + false + + + + + ${project.basedir}/src/main/resources/mapper + + + **/*.xml + + false + + + + + + org.apache.maven.plugins + maven-antrun-plugin + 3.1.0 + + + copy-sources + generate-sources + + run + + + + + + + + + + + + + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + true + + com.xunhong.erp.turbo.ErpTurboSvcApplication + + + true + + ../layers/layers.xml + + + + + + package + + repackage + + + + + + + diff --git a/layers/layers.xml b/layers/layers.xml new file mode 100644 index 0000000..b0d7e4f --- /dev/null +++ b/layers/layers.xml @@ -0,0 +1,43 @@ + + + + + + org/springframework/boot/loader/** + + + + + + *:*:*SNAPSHOT + + + com.xunhong:*:* + + + + + dependencies + spring-boot-loader + modules-dependencies + snapshot-dependencies + application + + diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..f16d2d4 --- /dev/null +++ b/mvnw @@ -0,0 +1,310 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://mirrors.cloud.tencent.com/nexus/repository/maven-public/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..8c1d6a2 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://mirrors.cloud.tencent.com/nexus/repository/maven-public/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/output.pdf b/output.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0e3c8674bef39b5ffc5f307976483bb63f7a7180 GIT binary patch literal 3865 zcmc&%2~-nV78O)PKm@UoMW7UsJ*iZ7#UP781Qn8i(gY++MS_rE5_S|7K~NTDQ$R!! zM3IhS07W(xMNm+&6>Jcf4$CN@EDDV_I0?sY?RI8PpXqaE{`sd;_4EFFuYTUU_r}D{ zk!+1Z;8je1mfrtS1qA{iz-I=i*w`S++&~d5K#~I)BG?gT@!2ra73OUh`2!dfi6j&W zU`CKi_;Je~h&Jnbfe0~s?(Df#7wQ^g)w!x#4r^3h;tFVDjCd_#Ry=#2hYHMNf8Haz zlZU|ml~4pM@vB%rWYzMzLAAIr+qm1IXO|!OFqEY@ ze{w5wr|dbAXJ;`bnUZdBS*dYdqpvfE6%svq^!B@V$!uWisT5XJwI`O8-MBhA!b(#t zQVA8;JKsI9`M!}+ees1+TyDG?#XOF+v#o*{%%(Vly3{URj{BfmIy3uJY|@HM*BO1eV??A)U1)CgMz?KFbCM1> zeS5T7Qb%wJ314vPuYrRIOATB(OVxjAvbkh#-*1ziW~H}JciKu#?j{*jwiTzsvYjy>2PQ21+FNlRN+R8_#E z_2NkBqh9x>lqQ+r+uZ(HQlz4^g; zmH5#l_VR)#C!FHE@Ku^^mN{oCkr%_}?P!$}DOm~dQhe!sDG_@_Oo+IUh(Wj9oiDjj zKGgTKN^8|osX=L`k;ap%*ovN4OU*4aV7<%HC+?LUAe6`WzSrQgk7;Tl)UwCaFR~m9 zBlJOLzj`B+aZ5G>?1Cn3wooZ3$IHzCU>?k|4uJ)?O?Z-=yDGE+$Zz)DT z?y@&q65moY@5u=C;QhE!jn$E;h$5?)V4)mT zWWMAdC;&I}9T@`f@*9$DAZY?_(7$m=iwK5gUbn*}k~~*AexOjYjsGL8BL0<7Cf$HaBtbEH2ZqC zMh-it^lV?Nu_Tl6(^{A=b)VI~S9r2GaaGbl*_hvR^m^Ug-eG2mdau;NsQU^3FhU`^ zK%I41gUhrZz2crp+t8|Uzms0vkf@PEGkpbGGj?B2e><1=d<{air9e67S+O7AQcY}; zq~Jl?q2p$%icsa;*gm9~pEKgs@QWMj(K!C%qgHCuu6 zlD;TX!BIJK@8QNQ^i5@V%?g%lp4CmO6E2SW>Ha+%7FFbmC4IXJ!dW897^zK4YWAX8 z?kb4TuHJk60Vb1f;eT#;ReM6JqgF|>3~ny%>{8W5BwH0N&!#pTD>b*2bR=h2yuBZ( z7ptkm6B4}!)ZCZl^&hSkKd?FLvR>mKVTBt%7>?dmdl;ea?AdrS(&to!8*9Q&UmM6f zUJ=@O_E?X<+WC&}at~m6hJ_F7Zx_}b6Rb?RGe3ICnpbyPrFtJV6cNFSXU$DT3)okc zUSo%qEF#l3OCGMJ)rWERM;0|@-n6@hngy<%9vv?zOet_B>D1*9g+zYnJd`GU?3xx* zNp5du3R|nG`UMkj7Iske56+2Os93%>uk?!5F&EP02XK$yl3(gttjw0t)?U!{GgU<% z;tY~rFcdU`L&u%fG9Ng{KWbKNxuJ_!A=Iw*kITb~_MJ^=s{GMco2h;OiExkhN5do2 z_;rr$X0uAsk%^`5&je}fwsIHWl7x%>bMBPV%5!3LJEERgT<{K5B(tkGRcKpEm)?pt#QK^ObmWO~5t|etE zo1I5+OeQhCo1%f z+NF$j*_l2x+a8;A5jp4%>Taw@Xx!_fI!mV_&v9Gy07AKS=fO?OrS*j-4eo+oy=V?$ z@-4`X96w;p_bQtZL|=Bbdyp2F>67@25xZWCG%sjmwf~OicHRS~*gDnZDv9OuNy(#A zffj}^by#ETuCPS|9b+--JG+ykKP8Fhq<%{`N1%a%TO^i}nm5ET>#qgdkXG zZO;#6BiHd{TAs_>j@-iK+3|$j-=C==Op%;s%~1`vKpDO><^R6qa)smM6884n#rU*r7q0`uUR`8io2c1`Z>WOMmo- zLZiNo0it9w>rZx&T=M+3CK52Xfv`aSPtDm8@V3EWK?Vj#AaWQ?0v=*xSxf>1a~Kee z2Qd&1jc4FFOeP)!6PYX!%Y<-P433TG;P4n62g~L_L_7y%;m{Doz{!pahVeu!p1@#& z93m6NhFMGq12b_b91bF~F?f(gU|^X<77+~-Fl;o0$6!&U|9=KPNM|0056D|xraJk2 v5io;1NGdlHmX(OCYD{K&)%tU*TF + + 4.0.0 + + com.xunhong + ERPTurbo + 1.0.0-SNAPSHOT + pom + A ERP Turbo + + + 21 + UTF-8 + UTF-8 + + 21 + 3.4.5 + 2024.0.1 + 2023.0.3.3 + 3.2.10 + 5.0.0 + + + + org.springframework.boot + spring-boot-starter-parent + 3.4.5 + + + + + + erp-turbo-common + + + erp-turbo-auth + + erp-turbo-schedule + + + erp-turbo-admin + erp-turbo-business + + erp-turbo-svc + + + + + + com.alibaba.cola + cola-components-bom + ${cola.components.version} + pom + import + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${spring-cloud-alibaba.version} + pom + import + + + + org.springframework.ai + spring-ai-bom + 1.0.3 + pom + import + + + com.itextpdf + itext7-core + 8.0.3 + pom + import + + + + org.projectlombok + lombok + 1.18.30 + + + + com.xunhong + erp-turbo-base + ${project.version} + + + + com.xunhong + erp-turbo-datasource + ${project.version} + + + + com.xunhong + erp-turbo-job + ${project.version} + + + + com.xunhong + erp-turbo-rpc + ${project.version} + + + + com.xunhong + erp-turbo-swagger + ${project.version} + + + + com.xunhong + erp-turbo-cache + ${project.version} + + + + com.xunhong + erp-turbo-file + ${project.version} + + + + com.xunhong + erp-turbo-web + ${project.version} + + + + com.xunhong + erp-turbo-sa-token + ${project.version} + + + + com.xunhong + erp-turbo-limiter + ${project.version} + + + + com.xunhong + erp-turbo-config + ${project.version} + + + + com.xunhong + erp-turbo-ai + ${project.version} + + + + com.xunhong + erp-turbo-api + ${project.version} + + + + com.xunhong + erp-turbo-apm + ${project.version} + + + + com.xunhong + erp-turbo-logback + ${project.version} + + + + com.xunhong + erp-turbo-weixin + ${project.version} + + + + com.xunhong + erp-turbo-dify + ${project.version} + + + + com.xunhong + erp-turbo-schedule + ${project.version} + + + + com.xunhong + erp-turbo-captcha + ${project.version} + + + + com.xunhong + erp-turbo-quartz + ${project.version} + + + + com.xunhong + erp-turbo-user + ${project.version} + + + + com.xunhong + erp-turbo-rbac + ${project.version} + + + + com.xunhong + erp-turbo-infra + ${project.version} + + + + com.xunhong + erp-turbo-facade + ${project.version} + + + + com.xunhong + erp-turbo-auth + ${project.version} + + + + com.xunhong + erp-turbo-admin + ${project.version} + + + + org.apache.dubbo + dubbo-spring-boot-starter + ${dubbo.version} + + + + org.apache.dubbo + dubbo-registry-nacos + ${dubbo.version} + + + + com.alibaba.fastjson2 + fastjson2 + 2.0.42 + + + + com.google.guava + guava + 32.1.3-jre + + + + org.mapstruct + mapstruct + 1.5.5.Final + + + + org.mapstruct + mapstruct-processor + 1.5.5.Final + + + + cn.monitor4all + log-record-springboot3-starter + 1.6.2 + + + + + com.github.houbb + sensitive-logback + 1.7.0 + + + + com.github.houbb + sensitive-core + 1.7.0 + + + + + + + + com.guardsquare + proguard-base + 7.1.1 + + + + com.guardsquare + proguard-retrace + 7.1.1 + + + + + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 21 + 21 + + + org.projectlombok + lombok + 1.18.30 + + + org.mapstruct + mapstruct-processor + 1.5.5.Final + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.apache.maven.plugins + maven-resources-plugin + 3.1.0 + + + p12 + pem + + + + + + + + src/main/resources + + */** + + + + true + + + + diff --git a/proguard.cfg b/proguard.cfg new file mode 100644 index 0000000..0c9fe10 --- /dev/null +++ b/proguard.cfg @@ -0,0 +1,43 @@ +#指定Java的版本 +-target 1.8 +#proguard会对代码进行优化压缩,他会删除从未使用的类或者类成员变量等 +-dontshrink +#是否关闭字节码级别的优化,如果不开启则设置如下配置 +-dontoptimize +#混淆时不生成大小写混合的类名,默认是可以大小写混合 +-dontusemixedcaseclassnames +# 对于类成员的命名的混淆采取唯一策略 +-useuniqueclassmembernames +#混淆时不生成大小写混合的类名,默认是可以大小写混合 +-dontusemixedcaseclassnames +#混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代 +-adaptclassstrings + +#对异常、注解信息予以保留 +-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod +# 此选项将保存接口中的所有原始名称(不混淆)--> +-keepnames interface ** { *; } +# 此选项将保存所有软件包中的所有原始接口文件(不进行混淆) +#-keep interface * extends * { *; } +#保留参数名,因为控制器,或者Mybatis等接口的参数如果混淆会导致无法接受参数,xml文件找不到参数 +-keepparameternames +# 保留枚举成员及方法 +-keepclassmembers enum * { *; } +# 不混淆所有类,保存原始定义的注释- +-keepclassmembers class * { + @org.springframework.context.annotation.Bean *; + @org.springframework.beans.factory.annotation.Autowired *; + @org.springframework.beans.factory.annotation.Value *; + @org.springframework.stereotype.Service *; + @org.springframework.stereotype.Component *; + } + +#忽略warn消息 +-ignorewarnings +#忽略note消息 +-dontnote +#打印配置信息 +-printconfiguration +-keep public class com.example.proguard.ProguardApplication { + public static void main(java.lang.String[]); + } diff --git a/webpage.pdf b/webpage.pdf new file mode 100644 index 0000000..e69de29