From 17edb17de9c7190bb000b6ab52cb26811b3049e9 Mon Sep 17 00:00:00 2001 From: nsnail Date: Thu, 28 Aug 2025 11:47:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E2=9C=A8=20=E6=A1=86=E6=9E=B6=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=90=8C=E6=AD=A5=20(#344)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: tk --- .editorconfig | 2 + CHANGELOG.md | 331 +- Dockerfile | 2 +- NetAdmin.slnx.DotSettings | 40 + assets/res/NetAdmin.Fields.ln | 3 + assets/seed-data/Sys_Menu.json | 6 +- assets/seed-data/Sys_UserInvite.json | 3 + build/stylecop.analyzers.ruleset | 4 +- scripts/fn_GetChannelDealer.sql | 26 + scripts/gen.cs.tt | 7 +- scripts/gen.resx.tt | 3 +- .../Extensions/ISelectExtensions.cs | 14 +- .../Extensions/UnitOfWorkManagerExtensions.cs | 11 +- .../Repositories/BasicRepository.cs | 2 +- .../Services/RedisService.cs | 26 +- .../Services/RepositoryService.cs | 154 +- .../Services/ServiceBase.cs | 9 +- .../NetAdmin.Cache/DistributedCache.cs | 28 +- .../DataValidation/AlipayAttribute.cs | 6 +- .../DataValidation/ApiIdAttribute.cs | 9 +- .../DataValidation/CertificateAttribute.cs | 5 +- .../DataValidation/ChineseNameAttribute.cs | 5 +- .../DataValidation/CronAttribute.cs | 5 +- .../DataValidation/EmailAttribute.cs | 5 +- .../DataValidation/InviteCodeAttribute.cs | 5 +- .../DataValidation/JsonStringAttribute.cs | 6 +- .../DataValidation/MobileAttribute.cs | 5 +- .../DataValidation/PasswordAttribute.cs | 5 +- .../DataValidation/PayPasswordAttribute.cs | 5 +- .../DataValidation/PortAttribute.cs | 5 +- .../DataValidation/RegexAttribute.cs | 5 +- .../DataValidation/SpecificDeptAttribute.cs | 6 +- .../DataValidation/TelephoneAttribute.cs | 5 +- .../DataValidation/UserIdAttribute.cs | 9 +- .../DataValidation/UserNameAttribute.cs | 8 +- .../DataValidation/VerifyCodeAttribute.cs | 5 +- .../Contexts/ContextUserInfo.cs | 6 +- .../Contexts/ContextUserToken.cs | 19 +- .../NetAdmin.Domain/DataAbstraction.cs | 21 +- .../DbMaps/Dependency/ImmutableEntity.cs | 4 - .../DbMaps/Dependency/LiteImmutableEntity.cs | 3 - .../DbMaps/Dependency/LiteMutableEntity.cs | 3 - .../DbMaps/Dependency/LiteVersionEntity.cs | 3 - .../DbMaps/Dependency/MutableEntity.cs | 6 - .../DbMaps/Dependency/SimpleEntity.cs | 1 - .../DbMaps/Dependency/VersionEntity.cs | 6 - .../NetAdmin.Domain/DbMaps/Sys/Sys_Api.cs | 11 +- .../DbMaps/Sys/Sys_CodeTemplate.cs | 9 - .../NetAdmin.Domain/DbMaps/Sys/Sys_Config.cs | 11 - .../DbMaps/Sys/Sys_DepositOrder.cs | 20 +- .../NetAdmin.Domain/DbMaps/Sys/Sys_Dept.cs | 8 - .../DbMaps/Sys/Sys_DicCatalog.cs | 7 +- .../DbMaps/Sys/Sys_DicContent.cs | 6 - .../DbMaps/Sys/Sys_DocCatalog.cs | 10 +- .../DbMaps/Sys/Sys_DocContent.cs | 9 - .../NetAdmin.Domain/DbMaps/Sys/Sys_Job.cs | 18 - .../DbMaps/Sys/Sys_JobRecord.cs | 17 +- .../DbMaps/Sys/Sys_LoginLog.cs | 22 +- .../NetAdmin.Domain/DbMaps/Sys/Sys_Menu.cs | 19 +- .../DbMaps/Sys/Sys_RequestLog.cs | 23 +- .../DbMaps/Sys/Sys_RequestLogDetail.cs | 14 +- .../NetAdmin.Domain/DbMaps/Sys/Sys_Role.cs | 35 +- .../NetAdmin.Domain/DbMaps/Sys/Sys_RoleApi.cs | 4 - .../DbMaps/Sys/Sys_RoleDept.cs | 4 - .../DbMaps/Sys/Sys_RoleMenu.cs | 4 - .../NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsg.cs | 33 +- .../DbMaps/Sys/Sys_SiteMsgDept.cs | 4 - .../DbMaps/Sys/Sys_SiteMsgFlag.cs | 3 - .../DbMaps/Sys/Sys_SiteMsgRole.cs | 4 - .../DbMaps/Sys/Sys_SiteMsgUser.cs | 4 - .../NetAdmin.Domain/DbMaps/Sys/Sys_User.cs | 48 +- .../DbMaps/Sys/Sys_UserInvite.cs | 23 +- .../DbMaps/Sys/Sys_UserProfile.cs | 41 +- .../DbMaps/Sys/Sys_UserRole.cs | 4 - .../DbMaps/Sys/Sys_UserWallet.cs | 7 - .../DbMaps/Sys/Sys_VerifyCode.cs | 6 - .../DbMaps/Sys/Sys_WalletFrozen.cs | 10 - .../DbMaps/Sys/Sys_WalletTrade.cs | 9 - .../NetAdmin.Domain/Dto/Dependency/JobReq.cs | 11 + .../Dto/Dependency/QueryReq.cs | 27 +- .../NetAdmin/NetAdmin.Domain/Dto/DfBuilder.cs | 3 +- .../NetAdmin.Domain/Dto/DynamicFilterInfo.cs | 36 +- .../Dto/Sys/Api/ExportApiRsp.cs | 31 +- .../Dto/Sys/Cache/CacheStatisticsRsp.cs | 20 +- .../Dto/Sys/Config/ExportConfigRsp.cs | 56 +- .../Sys/DepositOrder/CreateDepositOrderReq.cs | 5 +- .../Sys/DepositOrder/ExportDepositOrderRsp.cs | 61 + .../Sys/DepositOrder/QueryDepositOrderRsp.cs | 2 +- .../Dto/Sys/Dept/ExportDeptRsp.cs | 43 +- .../Sys/Dic/Content/ExportDicContentRsp.cs | 33 +- .../Sys/Doc/Content/ExportDocContentRsp.cs | 27 +- .../Dto/Sys/Job/ExportJobRsp.cs | 78 +- .../Dto/Sys/Job/FinishJobReq.cs | 3 +- .../Dto/Sys/Job/QueryJobRsp.cs | 7 +- .../Dto/Sys/JobRecord/ExportJobRecordRsp.cs | 53 +- .../Dto/Sys/JobRecord/QueryJobRecordRsp.cs | 2 +- .../Dto/Sys/LoginLog/CreateLoginLogReq.cs | 45 +- .../Dto/Sys/LoginLog/ExportLoginLogRsp.cs | 51 +- .../NetAdmin.Domain/Dto/Sys/Menu/MetaInfo.cs | 26 +- .../Dto/Sys/Menu/QueryMenuRsp.cs | 9 +- .../Dto/Sys/RequestLog/ExportRequestLogRsp.cs | 77 +- .../Dto/Sys/Role/CreateRoleReq.cs | 3 +- .../Dto/Sys/Role/ExportRoleRsp.cs | 53 +- .../Dto/Sys/Role/QueryRoleRsp.cs | 36 +- .../Dto/Sys/SiteMsg/ExportSiteMsgRsp.cs | 56 +- .../Dto/Sys/User/CreateUserReq.cs | 12 +- .../Dto/Sys/User/ExportUserRsp.cs | 82 +- .../Dto/Sys/User/LoginByUserIdReq.cs | 17 + .../NetAdmin.Domain/Dto/Sys/User/LoginRsp.cs | 5 +- .../Dto/Sys/User/QueryUserRsp.cs | 15 +- .../Dto/Sys/User/UserInfoRsp.cs | 18 +- .../Dto/Sys/UserInvite/CreateUserInviteReq.cs | 2 +- .../Dto/Sys/UserInvite/QueryUserInviteRsp.cs | 13 +- .../Dto/Sys/UserInvite/SetInviterReq.cs | 3 +- ...owedReq.cs => SetSelfDepositAllowedReq.cs} | 6 +- .../Sys/UserInvite/SetUserInviteEnabledReq.cs | 12 + .../Dto/Sys/UserWallet/ExportUserWalletRsp.cs | 67 + .../Dto/Sys/VerifyCode/SendVerifyCodeReq.cs | 3 +- .../Sys/WalletTrade/CreateWalletTradeReq.cs | 11 +- .../Sys/WalletTrade/ExportWalletTradeRsp.cs | 79 + .../Sys/WalletTrade/QueryWalletTradeRsp.cs | 1 - .../Dto/Sys/WalletTrade/TransferReq.cs | 3 +- .../Enums/DynamicFilterLogics.cs | 2 +- .../Enums/DynamicFilterOperators.cs | 36 +- .../NetAdmin.Domain/Enums/HttpMethods.cs | 16 +- .../Enums/Sys/ArchiveVisibilities.cs | 6 +- .../NetAdmin.Domain/Enums/Sys/DataScopes.cs | 10 +- .../Enums/Sys}/DepositOrderStatues.cs | 12 +- .../NetAdmin.Domain/Enums/Sys/JobStatues.cs | 2 +- .../NetAdmin.Domain/Enums/Sys/MenuTypes.cs | 6 +- .../NetAdmin.Domain/Enums/Sys/SiteMsgTypes.cs | 6 +- .../Enums/Sys/UserSiteMsgStatues.cs | 4 +- .../Enums/Sys/VerifyCodeDeviceTypes.cs | 2 +- .../Enums/Sys/VerifyCodeStatues.cs | 6 +- .../Enums/Sys/VerifyCodeTypes.cs | 8 +- .../Enums/Sys/WalletFrozenReasons.cs | 2 +- .../Enums/Sys/WalletFrozenStatues.cs | 2 +- .../NetAdmin.Domain/Events/EventData.cs | 3 +- .../Events/SeedDataInsertedEvent.cs | 5 +- .../Events/SqlCommandAfterEvent.cs | 8 +- .../Events/SqlCommandBeforeEvent.cs | 8 +- .../NetAdmin.Domain/Events/SqlCommandEvent.cs | 8 +- .../Events/SyncStructureAfterEvent.cs | 8 +- .../Events/SyncStructureBeforeEvent.cs | 8 +- .../Events/Sys/RequestLogEvent.cs | 5 +- .../Events/Sys/UserCreatedEvent.cs | 5 +- .../Events/Sys/UserRegisteredEvent.cs | 5 +- .../Events/Sys/UserUpdatedEvent.cs | 5 +- .../Events/Sys/VerifyCodeCreatedEvent.cs | 5 +- .../Extensions/ISelectExtensions.cs | 56 +- .../NetAdmin.Domain/NetAdmin.Domain.csproj | 4 +- .../NetAdmin/NetAdmin.Domain/ProjectUsings.cs | 3 - .../Attributes/TransactionAttribute.cs | 24 +- .../BackgroundRunning/WorkBase.cs | 43 +- .../Controllers/ControllerBase.cs | 2 +- .../Controllers/ProbeController.cs | 15 +- .../Extensions/HttpContextExtensions.cs | 7 +- .../IApplicationBuilderExtensions.cs | 53 +- .../Extensions/IMvcBuilderExtensions.cs | 47 +- .../Extensions/MethodInfoExtensions.cs | 14 +- .../ResourceExecutingContextExtensions.cs | 11 +- .../Extensions/ServiceCollectionExtensions.cs | 186 +- .../NetAdmin.Host/Filters/ApiResultHandler.cs | 89 +- .../Filters/DefaultApiResultHandler.cs | 6 +- .../Filters/GlobalExceptionHandler.cs | 3 +- .../Filters/TransactionInterceptor.cs | 23 +- .../Middlewares/EnvironmentInfoMiddleware.cs | 3 +- .../Middlewares/RemoveNullNodeMiddleware.cs | 3 +- .../Middlewares/SafetyShopHostMiddleware.cs | 17 +- src/backend/NetAdmin/NetAdmin.Host/Startup.cs | 15 +- .../NetAdmin.Host/Subscribers/SqlProfiler.cs | 15 +- .../Utils/CollectionJsonTypeInfoResolver.cs | 44 +- .../Utils/SwaggerEnumSchemaFixer.cs | 10 +- .../Utils/ToNullIfEmptyStringConverter.cs | 14 +- .../NetAdmin.Infrastructure/Constant/Chars.cs | 172 +- .../Constant/Numbers.cs | 40 +- .../Enums/AdminTradeTypes.cs | 6 +- .../Enums/CertificateTypes.cs | 8 +- .../Enums/CountryCodes.cs | 2746 ++++++++++------- .../Enums/Educations.cs | 16 +- .../Enums/EnumExtensions.cs | 3 +- .../Enums/ErrorCodes.cs | 16 +- .../Enums/FreeSqlInitMethods.cs | 6 +- .../NetAdmin.Infrastructure/Enums/Genders.cs | 4 +- .../Enums/Indicates.cs | 10 +- .../Enums/LogLevels.cs | 10 +- .../Enums/MarriageStatues.cs | 6 +- .../Enums/ModuleTypes.cs | 2 +- .../NetAdmin.Infrastructure/Enums/Nations.cs | 110 +- .../NetAdmin.Infrastructure/Enums/Orders.cs | 6 +- .../Enums/PaymentModes.cs | 4 +- .../Enums/PoliticalStatues.cs | 4 +- .../Enums/TradeDirections.cs | 2 +- .../Enums/TradeTypes.cs | 25 +- .../Enums/TypeExtensions.cs | 10 +- .../EventBus/DefaultEventPublisher.cs | 38 +- .../Exceptions/NetAdminException.cs | 9 +- .../NetAdminExternalErrorException.cs | 4 +- .../Exceptions/NetAdminGetLockerException.cs | 4 +- .../NetAdminInvalidInputException.cs | 4 +- .../NetAdminInvalidOperationException.cs | 4 +- .../Extensions/CountryCodesExtensions.cs | 3 +- .../Extensions/HttpContextExtensions.cs | 13 +- .../HttpRequestMessageExtensions.cs | 9 +- .../Extensions/HttpRequestPartExtensions.cs | 26 +- .../HttpResponseMessageExtensions.cs | 27 +- .../Extensions/ObjectExtensions.cs | 3 +- .../Extensions/StringExtensions.cs | 15 +- .../NetAdmin.Infrastructure/GlobalStatic.cs | 18 +- .../NetAdmin.Infrastructure.csproj | 2 +- .../Rpc/TronScan/ITronScanClient.cs | 25 +- .../Utils/ApplicationHelper.cs | 10 +- .../Utils/CaptchaImageHelper.cs | 95 +- .../Utils/FreeSqlBuilder.cs | 142 +- .../Utils/JsonIgnoreRemover.cs | 50 +- .../Utils/LogHelper.cs | 3 +- .../Utils/MimeTypeHelper.cs | 10 +- .../Utils/MinioHelper.cs | 29 +- .../Utils/PhoneNumberHelper.cs | 28 +- .../Utils/RedisLocker.cs | 25 +- .../Utils/UserAgentParser.cs | 413 ++- .../Utils/XmlCommentReader.cs | 64 +- .../Modules/Sys/IApiModule.cs | 6 +- .../Modules/Sys/ICodeTemplateModule.cs | 6 +- .../Modules/Sys/IConfigModule.cs | 6 +- .../Modules/Sys/IDepositOrderModule.cs | 6 +- .../Modules/Sys/IDeptModule.cs | 6 +- .../Modules/Sys/IDicCatalogModule.cs | 6 +- .../Modules/Sys/IDicContentModule.cs | 6 +- .../Modules/Sys/IDocCatalogModule.cs | 6 +- .../Modules/Sys/IDocContentModule.cs | 6 +- .../Modules/Sys/IJobModule.cs | 6 +- .../Modules/Sys/IJobRecordModule.cs | 6 +- .../Modules/Sys/ILoginLogModule.cs | 6 +- .../Modules/Sys/IMenuModule.cs | 6 +- .../Modules/Sys/IRequestLogDetailModule.cs | 6 +- .../Modules/Sys/IRequestLogModule.cs | 6 +- .../Modules/Sys/IRoleModule.cs | 6 +- .../Modules/Sys/ISiteMsgDeptModule.cs | 6 +- .../Modules/Sys/ISiteMsgFlagModule.cs | 6 +- .../Modules/Sys/ISiteMsgModule.cs | 6 +- .../Modules/Sys/ISiteMsgRoleModule.cs | 6 +- .../Modules/Sys/ISiteMsgUserModule.cs | 6 +- .../Modules/Sys/IUserInviteModule.cs | 15 +- .../Modules/Sys/IUserModule.cs | 11 +- .../Modules/Sys/IUserProfileModule.cs | 6 +- .../Modules/Sys/IUserRoleModule.cs | 6 +- .../Modules/Sys/IUserWalletModule.cs | 6 +- .../Modules/Sys/IVerifyCodeModule.cs | 6 +- .../Modules/Sys/IWalletFrozenModule.cs | 6 +- .../Modules/Sys/IWalletTradeModule.cs | 6 +- .../Services/Sys/ApiService.cs | 127 +- .../Services/Sys/CacheService.cs | 83 +- .../Services/Sys/CaptchaService.cs | 20 +- .../Services/Sys/CodeTemplateService.cs | 78 +- .../Services/Sys/ConfigService.cs | 94 +- .../Services/Sys/ConstantService.cs | 71 +- .../Services/Sys/Dependency/IDeptService.cs | 2 +- .../Sys/Dependency/IUserInviteService.cs | 5 +- .../Services/Sys/Dependency/IUserService.cs | 5 - .../Services/Sys/DepositOrderService.cs | 297 +- .../Services/Sys/DeptService.cs | 83 +- .../Services/Sys/DevService.cs | 1188 +++---- .../Services/Sys/DicCatalogService.cs | 73 +- .../Services/Sys/DicContentService.cs | 98 +- .../Services/Sys/DicService.cs | 82 +- .../Services/Sys/DocCatalogService.cs | 68 +- .../Services/Sys/DocContentService.cs | 80 +- .../Services/Sys/DocService.cs | 57 +- .../Services/Sys/FileService.cs | 10 +- .../Services/Sys/JobRecordService.cs | 129 +- .../Services/Sys/JobService.cs | 285 +- .../Services/Sys/LoginLogService.cs | 94 +- .../Services/Sys/MenuService.cs | 81 +- .../Services/Sys/RequestLogDetailService.cs | 72 +- .../Services/Sys/RequestLogService.cs | 170 +- .../Services/Sys/RoleService.cs | 97 +- .../Services/Sys/SiteMsgDeptService.cs | 67 +- .../Services/Sys/SiteMsgFlagService.cs | 70 +- .../Services/Sys/SiteMsgRoleService.cs | 67 +- .../Services/Sys/SiteMsgService.cs | 294 +- .../Services/Sys/SiteMsgUserService.cs | 67 +- .../Services/Sys/ToolsService.cs | 42 +- .../Services/Sys/UserInviteService.cs | 227 +- .../Services/Sys/UserProfileService.cs | 237 +- .../Services/Sys/UserRoleService.cs | 69 +- .../Services/Sys/UserService.cs | 392 ++- .../Services/Sys/UserWalletService.cs | 206 +- .../Services/Sys/VerifyCodeService.cs | 110 +- .../Services/Sys/WalletFrozenService.cs | 159 +- .../Services/Sys/WalletTradeService.cs | 264 +- .../Sys/ApiCache.cs | 42 +- .../Sys/CacheCache.cs | 21 +- .../Sys/CaptchaCache.cs | 11 +- .../Sys/CodeTemplateCache.cs | 33 +- .../Sys/ConfigCache.cs | 44 +- .../Sys/ConstantCache.cs | 14 +- .../Sys/Dependency/IUserCache.cs | 7 - .../Sys/DepositOrderCache.cs | 42 +- .../Sys/DeptCache.cs | 39 +- .../Sys/DevCache.cs | 24 +- .../Sys/DicCache.cs | 61 +- .../Sys/DicCatalogCache.cs | 35 +- .../Sys/DicContentCache.cs | 44 +- .../Sys/DocCache.cs | 57 +- .../Sys/DocCatalogCache.cs | 33 +- .../Sys/DocContentCache.cs | 36 +- .../Sys/FileCache.cs | 6 +- .../Sys/JobCache.cs | 84 +- .../Sys/JobRecordCache.cs | 33 +- .../Sys/LoginLogCache.cs | 33 +- .../Sys/MenuCache.cs | 39 +- .../Sys/RequestLogCache.cs | 69 +- .../Sys/RequestLogDetailCache.cs | 33 +- .../Sys/RoleCache.cs | 48 +- .../Sys/SiteMsgCache.cs | 45 +- .../Sys/SiteMsgDeptCache.cs | 33 +- .../Sys/SiteMsgFlagCache.cs | 33 +- .../Sys/SiteMsgRoleCache.cs | 33 +- .../Sys/SiteMsgUserCache.cs | 33 +- .../Sys/ToolsCache.cs | 21 +- .../Sys/UserCache.cs | 112 +- .../Sys/UserInviteCache.cs | 63 +- .../Sys/UserProfileCache.cs | 35 +- .../Sys/UserWalletCache.cs | 33 +- .../Sys/VerifyCodeCache.cs | 41 +- .../Sys/WalletFrozenCache.cs | 36 +- .../Sys/WalletTradeCache.cs | 39 +- .../Controllers/Sys/ApiController.cs | 39 +- .../Controllers/Sys/CacheController.cs | 15 +- .../Controllers/Sys/CaptchaController.cs | 6 +- .../Controllers/Sys/CodeTemplateController.cs | 33 +- .../Controllers/Sys/ConfigController.cs | 42 +- .../Controllers/Sys/ConstantController.cs | 28 +- .../Controllers/Sys/DepositOrderController.cs | 44 +- .../Controllers/Sys/DeptController.cs | 36 +- .../Controllers/Sys/DevController.cs | 21 +- .../Controllers/Sys/DicController.cs | 54 +- .../Controllers/Sys/DocController.cs | 54 +- .../Controllers/Sys/FileController.cs | 3 +- .../Controllers/Sys/JobController.cs | 63 +- .../Controllers/Sys/LoginLogController.cs | 33 +- .../Controllers/Sys/MenuController.cs | 36 +- .../Controllers/Sys/RequestLogController.cs | 42 +- .../Controllers/Sys/RoleController.cs | 45 +- .../Controllers/Sys/SiteMsgController.cs | 45 +- .../Controllers/Sys/ToolsController.cs | 18 +- .../Controllers/Sys/UserController.cs | 108 +- .../Controllers/Sys/UserInviteController.cs | 65 +- .../Controllers/Sys/UserWalletController.cs | 34 +- .../Controllers/Sys/VerifyCodeController.cs | 39 +- .../Controllers/Sys/WalletFrozenController.cs | 37 +- .../Controllers/Sys/WalletTradeController.cs | 40 +- .../Extensions/ServiceCollectionExtensions.cs | 88 +- .../Jobs/FreeScheduledJob.cs | 9 +- .../Jobs/ScheduledJob.cs | 99 +- .../Middlewares/RequestAuditMiddleware.cs | 27 +- .../Middlewares/VersionCheckerMiddleware.cs | 11 +- .../Subscribers/ApiSynchronizer.cs | 3 +- .../Subscribers/EmailCodeSender.cs | 8 +- .../Subscribers/SmsCodeSender.cs | 8 +- .../Utils/RequestLogger.cs | 76 +- .../Utils/SqlAuditor.cs | 55 +- .../NetAdmin.Tests/NetAdmin.Tests.csproj | 4 +- .../NetAdmin.Tests/PriorityOrderer.cs | 19 +- src/backend/UnitTests/Sys/ApiTests.cs | 39 +- src/backend/UnitTests/Sys/CacheTests.cs | 15 +- src/backend/UnitTests/Sys/CaptchaTests.cs | 6 +- src/backend/UnitTests/Sys/ConfigTests.cs | 42 +- src/backend/UnitTests/Sys/ConstantTests.cs | 12 +- src/backend/UnitTests/Sys/DeptTests.cs | 36 +- src/backend/UnitTests/Sys/DevTests.cs | 21 +- src/backend/UnitTests/Sys/DicTests.cs | 55 +- src/backend/UnitTests/Sys/DocTests.cs | 55 +- src/backend/UnitTests/Sys/FileTests.cs | 3 +- src/backend/UnitTests/Sys/JobTests.cs | 64 +- src/backend/UnitTests/Sys/LoginLogTests.cs | 33 +- src/backend/UnitTests/Sys/MenuTests.cs | 36 +- src/backend/UnitTests/Sys/RequestLogTests.cs | 42 +- src/backend/UnitTests/Sys/RoleTests.cs | 45 +- src/backend/UnitTests/Sys/SiteMsgTests.cs | 45 +- src/backend/UnitTests/Sys/ToolsTests.cs | 18 +- src/backend/UnitTests/Sys/UserTests.cs | 107 +- src/backend/UnitTests/Sys/VerifyCodeTests.cs | 39 +- src/backend/UnitTests/WebApiTestBase.cs | 43 +- .../ProjectUsings.cs | 1 - .../IApplicationBuilderExtensions.cs | 14 +- .../Extensions/ServiceCollectionExtensions.cs | 40 +- .../Filters/JwtHandler.cs | 5 +- .../YourSolution.AdmServer.Host/Startup.cs | 89 +- src/frontend/admin/package.json | 14 +- .../admin/src/api/sys/depositorder.js | 22 + src/frontend/admin/src/api/sys/user.js | 11 + src/frontend/admin/src/api/sys/userinvite.js | 19 +- src/frontend/admin/src/api/sys/userwallet.js | 11 + .../admin/src/api/sys/walletfrozen.js | 11 + src/frontend/admin/src/api/sys/wallettrade.js | 11 + .../admin/src/assets/icon/business.vue | 2 +- .../admin/src/assets/icon/deposit.vue | 16 + src/frontend/admin/src/assets/icon/income.vue | 16 +- src/frontend/admin/src/assets/icon/index.js | 3 +- src/frontend/admin/src/assets/icon/order.vue | 2 +- .../admin/src/assets/icon/template.vue | 2 +- .../admin/src/assets/icon/transfer.vue | 2 +- .../admin/src/components/na-col-id/index.vue | 2 +- .../admin/src/components/na-col-user/core.vue | 41 +- .../admin/src/components/na-search/index.vue | 11 +- .../src/components/na-table-page/detail.vue | 27 +- .../src/components/na-table-page/index.vue | 108 +- .../src/components/na-user-select/index.vue | 4 +- .../admin/src/components/sc-dialog/index.vue | 2 +- .../admin/src/components/sc-table/index.vue | 31 +- src/frontend/admin/src/config/icon-select.js | 2 +- src/frontend/admin/src/config/table.js | 3 +- .../admin/src/layout/components/user-bar.vue | 38 +- src/frontend/admin/src/style/app.scss | 9 + src/frontend/admin/src/utils/preload.js | 28 +- .../src/views/profile/account/set-email.vue | 1 - .../views/profile/message/components/list.vue | 5 + .../src/views/sys/dev/template/index.vue | 11 +- .../src/views/sys/finance/deposit/index.vue | 311 ++ .../views/sys/finance/deposit/save-step.vue | 328 ++ .../sys/finance/{order => deposit}/save.vue | 93 +- .../src/views/sys/finance/order/index.vue | 350 --- .../views/sys/finance/trade/frozen/index.vue | 122 +- .../list/components/business-order-number.vue | 28 + .../views/sys/finance/trade/list/index.vue | 226 +- .../src/views/sys/finance/wallet/index.vue | 194 +- .../src/views/sys/finance/wallet/trade.vue | 71 +- .../src/views/sys/finance/wallet/transfer.vue | 123 + .../src/views/sys/log/operation/index.vue | 1 - .../market/invite/components/user-enabled.vue | 32 + .../src/views/sys/market/invite/index.vue | 120 +- .../src/views/sys/market/invite/user.vue | 76 + .../admin/src/views/sys/power/user/index.vue | 52 +- .../admin/src/views/sys/power/user/save.vue | 62 +- src/frontend/admin/vite.config.js | 2 +- 437 files changed, 10376 insertions(+), 9601 deletions(-) create mode 100644 scripts/fn_GetChannelDealer.sql create mode 100644 src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/DepositOrder/ExportDepositOrderRsp.cs create mode 100644 src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/LoginByUserIdReq.cs rename src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/{SetSelfRechargeAllowedReq.cs => SetSelfDepositAllowedReq.cs} (72%) create mode 100644 src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/SetUserInviteEnabledReq.cs create mode 100644 src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserWallet/ExportUserWalletRsp.cs create mode 100644 src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/WalletTrade/ExportWalletTradeRsp.cs rename src/backend/NetAdmin/{NetAdmin.Infrastructure/Enums => NetAdmin.Domain/Enums/Sys}/DepositOrderStatues.cs (73%) create mode 100644 src/frontend/admin/src/assets/icon/deposit.vue create mode 100644 src/frontend/admin/src/views/sys/finance/deposit/index.vue create mode 100644 src/frontend/admin/src/views/sys/finance/deposit/save-step.vue rename src/frontend/admin/src/views/sys/finance/{order => deposit}/save.vue (53%) delete mode 100644 src/frontend/admin/src/views/sys/finance/order/index.vue create mode 100644 src/frontend/admin/src/views/sys/finance/trade/list/components/business-order-number.vue create mode 100644 src/frontend/admin/src/views/sys/finance/wallet/transfer.vue create mode 100644 src/frontend/admin/src/views/sys/market/invite/components/user-enabled.vue create mode 100644 src/frontend/admin/src/views/sys/market/invite/user.vue diff --git a/.editorconfig b/.editorconfig index 0c64ba71..08635b1a 100644 --- a/.editorconfig +++ b/.editorconfig @@ -18,6 +18,8 @@ indent_size = 2 # 对于 JSON 和 YAML 文件,缩进大小为 2 个空格 [*.cs] dotnet_analyzer_diagnostic.severity = warning # 设置 C# 文件中所有 dotnet_analyzer_diagnostic 的严重性级别为 warning +[{*.g.cs,*.generated.cs}] +dotnet_analyzer_diagnostic.severity = none # 对于生成的文件,取消所有 dotnet_analyzer_diagnostic 的警告 # ReSharper properties resharper_align_linq_query = true # 启用对LINQ查询的对齐 diff --git a/CHANGELOG.md b/CHANGELOG.md index e9d70dc8..afb2f473 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,10 @@ # Changelog -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +All notable changes to this project will be documented in this file. +See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. ## [2.4.0](https://github.com/nsnail/NetAdmin/compare/v2.1.0...v2.4.0) (2025-07-02) - ### ⚠ BREAKING CHANGES * [skip ci] @@ -14,38 +14,46 @@ All notable changes to this project will be documented in this file. See [standa * ✨ 表格操作栏按钮下拉菜单 ([51cc9fa](https://github.com/nsnail/NetAdmin/commit/51cc9fa80ca296fa6c320d0a47ed51ee0aaef1ce)) * ✨ 表格右键菜单增加排序功能 ([a202595](https://github.com/nsnail/NetAdmin/commit/a2025956878d4e8fb935659f4db0adee02cd8071)) * ✨ 财务管理 ([94d0b70](https://github.com/nsnail/NetAdmin/commit/94d0b7028f8a0d31af67b435f5ed14f7eb2de0b4)) -* ✨ 菜单复制 ([#214](https://github.com/nsnail/NetAdmin/issues/214)) ([81d9b0b](https://github.com/nsnail/NetAdmin/commit/81d9b0b3bb280661ceffa61aa6e9d612fb7ec52c)) +* ✨ + 菜单复制 ([#214](https://github.com/nsnail/NetAdmin/issues/214)) ([81d9b0b](https://github.com/nsnail/NetAdmin/commit/81d9b0b3bb280661ceffa61aa6e9d612fb7ec52c)) * ✨ 分组统计功能 ([0b036e9](https://github.com/nsnail/NetAdmin/commit/0b036e9d67ffdf7a07c772606009f02744e6a3c3)) * ✨ 框架代码同步 ([098cfc1](https://github.com/nsnail/NetAdmin/commit/098cfc135e781a0cf172cd1289e5e871c7a76419)) * ✨ 框架代码同步 ([7256626](https://github.com/nsnail/NetAdmin/commit/725662693b7b47f6fae4c1917dd8d80220c7640a)) -* ✨ 文档管理 ([#221](https://github.com/nsnail/NetAdmin/issues/221)) ([7ed3040](https://github.com/nsnail/NetAdmin/commit/7ed30406c9f721a12f0b756ec8884a1882242b93)) +* ✨ + 文档管理 ([#221](https://github.com/nsnail/NetAdmin/issues/221)) ([7ed3040](https://github.com/nsnail/NetAdmin/commit/7ed30406c9f721a12f0b756ec8884a1882242b93)) * ✨ 移动国家代码 ([2ff1466](https://github.com/nsnail/NetAdmin/commit/2ff146664e539c395d98530856783f33d3bbd6f2)) * ✨ 营销管理 ([62ac779](https://github.com/nsnail/NetAdmin/commit/62ac7790e80408c9194a71b032f7597c5d8c16cf)) * ✨ 营销管理-返佣比率 ([e5a0f92](https://github.com/nsnail/NetAdmin/commit/e5a0f925a0650a263b79de0e5793b8db2348a7ae)) * ✨ 自助充值 ([e621532](https://github.com/nsnail/NetAdmin/commit/e62153289fd13c5588518a5ee7cfc05c799df6b9)) * ✨ 作业增加请求地址显示查询 ([585f8f4](https://github.com/nsnail/NetAdmin/commit/585f8f4e43ae7fe0c9c387cc41f629f4f279740a)) -* ✨ select-filter badge icon ([#217](https://github.com/nsnail/NetAdmin/issues/217)) ([4d857f1](https://github.com/nsnail/NetAdmin/commit/4d857f1861b1256980e7cc59e2ab6a5f7d966da2)) - +* ✨ select-filter badge + icon ([#217](https://github.com/nsnail/NetAdmin/issues/217)) ([4d857f1](https://github.com/nsnail/NetAdmin/commit/4d857f1861b1256980e7cc59e2ab6a5f7d966da2)) ### Bug Fixes -* 🐛 按钮文字提示 ([#227](https://github.com/nsnail/NetAdmin/issues/227)) ([c88c8d2](https://github.com/nsnail/NetAdmin/commit/c88c8d293d44f2707f3b5232e6a40a141af9981c)) +* 🐛 + 按钮文字提示 ([#227](https://github.com/nsnail/NetAdmin/issues/227)) ([c88c8d2](https://github.com/nsnail/NetAdmin/commit/c88c8d293d44f2707f3b5232e6a40a141af9981c)) * 🐛 初次访问时前端js错误 ([9b6e053](https://github.com/nsnail/NetAdmin/commit/9b6e053721c95cf5fbdfa11112892a51e047af59)) * 🐛 档案管理空列表loading状态 ([ac4bb50](https://github.com/nsnail/NetAdmin/commit/ac4bb50b66034f9841ba2398a168ed746c673aea)) -* 🐛 导出界面报错 ([#213](https://github.com/nsnail/NetAdmin/issues/213)) ([ef2f0de](https://github.com/nsnail/NetAdmin/commit/ef2f0de095e314f34bec21c0a2ccdb51423a163b)) -* 🐛 导出文件的responseType ([#205](https://github.com/nsnail/NetAdmin/issues/205)) ([841a419](https://github.com/nsnail/NetAdmin/commit/841a4195e77aa96e3c6c72626c1add3f71a310aa)) +* 🐛 + 导出界面报错 ([#213](https://github.com/nsnail/NetAdmin/issues/213)) ([ef2f0de](https://github.com/nsnail/NetAdmin/commit/ef2f0de095e314f34bec21c0a2ccdb51423a163b)) +* 🐛 + 导出文件的responseType ([#205](https://github.com/nsnail/NetAdmin/issues/205)) ([841a419](https://github.com/nsnail/NetAdmin/commit/841a4195e77aa96e3c6c72626c1add3f71a310aa)) * 🐛 个性主题色冲突 ([4e4a1d0](https://github.com/nsnail/NetAdmin/commit/4e4a1d0dff7f3698e9a9cfcf46368260cfd70cbd)) * 🐛 前端警告 ([9c81ce6](https://github.com/nsnail/NetAdmin/commit/9c81ce6f9fe9573c33a99eb86fcf727ed0cbf9f0)) -* 🐛 请求日志批量插入,漏写了登录日志 ([#210](https://github.com/nsnail/NetAdmin/issues/210)) ([6c71c74](https://github.com/nsnail/NetAdmin/commit/6c71c74a27617c7d0530a5f6eaff650ecfd4eaec)) +* 🐛 + 请求日志批量插入,漏写了登录日志 ([#210](https://github.com/nsnail/NetAdmin/issues/210)) ([6c71c74](https://github.com/nsnail/NetAdmin/commit/6c71c74a27617c7d0530a5f6eaff650ecfd4eaec)) * 🐛 文件下载编码匹配 ([541c061](https://github.com/nsnail/NetAdmin/commit/541c0616bf5d405a62eac0c5eb967f0ddd4c5139)) * 🐛 修复一些样式问题 ([442a69f](https://github.com/nsnail/NetAdmin/commit/442a69f90de179539f78c01d967572f83bd2eff8)) * 🐛 样式问题 ([377c28c](https://github.com/nsnail/NetAdmin/commit/377c28c57049d453108f9da41b168e1fdb64d7e1)) -* 🐛 用户选择器报错 ([#220](https://github.com/nsnail/NetAdmin/issues/220)) ([71bfdaa](https://github.com/nsnail/NetAdmin/commit/71bfdaafa8176cf686b03244ee758de058080a71)) +* 🐛 + 用户选择器报错 ([#220](https://github.com/nsnail/NetAdmin/issues/220)) ([71bfdaa](https://github.com/nsnail/NetAdmin/commit/71bfdaafa8176cf686b03244ee758de058080a71)) * 🐛 种子数据 ([f6aee1b](https://github.com/nsnail/NetAdmin/commit/f6aee1be0f05113cf1b798e23a176c02686348b5)) * 🐛 build err ([60e8451](https://github.com/nsnail/NetAdmin/commit/60e8451048a42cfa47d7c82b038eb8db7e017697)) * 🐛 build error ([278e10d](https://github.com/nsnail/NetAdmin/commit/278e10d8fc750eeb0933a86b64d69f5cc7e0b1cb)) * 🐛 editUser ([ef2a0c3](https://github.com/nsnail/NetAdmin/commit/ef2a0c3280532ac24889279e4780a1b1a2561a6b)) -* 🐛 idd ([#208](https://github.com/nsnail/NetAdmin/issues/208)) ([4e9f605](https://github.com/nsnail/NetAdmin/commit/4e9f605ea2cc6fe394068cfea5638e51920b9096)) +* 🐛 + idd ([#208](https://github.com/nsnail/NetAdmin/issues/208)) ([4e9f605](https://github.com/nsnail/NetAdmin/commit/4e9f605ea2cc6fe394068cfea5638e51920b9096)) * 🐛 scTable dataChanged ([52e7f93](https://github.com/nsnail/NetAdmin/commit/52e7f93cc2de967a7a90448813b4c1030996d170)) * 🐛 version 条件重复指定 ([01058ba](https://github.com/nsnail/NetAdmin/commit/01058ba7288bcc645f66de2f78e1d659d55333cf)) * 🐛 version lock ([4eecc0b](https://github.com/nsnail/NetAdmin/commit/4eecc0b4ce09f620f83109949e4c2b67b7f8ba90)) @@ -54,233 +62,302 @@ All notable changes to this project will be documented in this file. See [standa ### [2.3.1](https://github.com/nsnail/NetAdmin/compare/v2.1.0...v2.3.1) (2024-12-13) - ### Features -* ✨ 菜单复制 ([#214](https://github.com/nsnail/NetAdmin/issues/214)) ([81d9b0b](https://github.com/nsnail/NetAdmin/commit/81d9b0b3bb280661ceffa61aa6e9d612fb7ec52c)) +* ✨ + 菜单复制 ([#214](https://github.com/nsnail/NetAdmin/issues/214)) ([81d9b0b](https://github.com/nsnail/NetAdmin/commit/81d9b0b3bb280661ceffa61aa6e9d612fb7ec52c)) * ✨ 分组统计功能 ([0b036e9](https://github.com/nsnail/NetAdmin/commit/0b036e9d67ffdf7a07c772606009f02744e6a3c3)) * ✨ 框架代码同步 ([098cfc1](https://github.com/nsnail/NetAdmin/commit/098cfc135e781a0cf172cd1289e5e871c7a76419)) * ✨ 框架代码同步 ([7256626](https://github.com/nsnail/NetAdmin/commit/725662693b7b47f6fae4c1917dd8d80220c7640a)) -* ✨ 文档管理 ([#221](https://github.com/nsnail/NetAdmin/issues/221)) ([7ed3040](https://github.com/nsnail/NetAdmin/commit/7ed30406c9f721a12f0b756ec8884a1882242b93)) -* ✨ select-filter badge icon ([#217](https://github.com/nsnail/NetAdmin/issues/217)) ([4d857f1](https://github.com/nsnail/NetAdmin/commit/4d857f1861b1256980e7cc59e2ab6a5f7d966da2)) - +* ✨ + 文档管理 ([#221](https://github.com/nsnail/NetAdmin/issues/221)) ([7ed3040](https://github.com/nsnail/NetAdmin/commit/7ed30406c9f721a12f0b756ec8884a1882242b93)) +* ✨ select-filter badge + icon ([#217](https://github.com/nsnail/NetAdmin/issues/217)) ([4d857f1](https://github.com/nsnail/NetAdmin/commit/4d857f1861b1256980e7cc59e2ab6a5f7d966da2)) ### Bug Fixes -* 🐛 按钮文字提示 ([#227](https://github.com/nsnail/NetAdmin/issues/227)) ([c88c8d2](https://github.com/nsnail/NetAdmin/commit/c88c8d293d44f2707f3b5232e6a40a141af9981c)) -* 🐛 导出界面报错 ([#213](https://github.com/nsnail/NetAdmin/issues/213)) ([ef2f0de](https://github.com/nsnail/NetAdmin/commit/ef2f0de095e314f34bec21c0a2ccdb51423a163b)) -* 🐛 导出文件的responseType ([#205](https://github.com/nsnail/NetAdmin/issues/205)) ([841a419](https://github.com/nsnail/NetAdmin/commit/841a4195e77aa96e3c6c72626c1add3f71a310aa)) +* 🐛 + 按钮文字提示 ([#227](https://github.com/nsnail/NetAdmin/issues/227)) ([c88c8d2](https://github.com/nsnail/NetAdmin/commit/c88c8d293d44f2707f3b5232e6a40a141af9981c)) +* 🐛 + 导出界面报错 ([#213](https://github.com/nsnail/NetAdmin/issues/213)) ([ef2f0de](https://github.com/nsnail/NetAdmin/commit/ef2f0de095e314f34bec21c0a2ccdb51423a163b)) +* 🐛 + 导出文件的responseType ([#205](https://github.com/nsnail/NetAdmin/issues/205)) ([841a419](https://github.com/nsnail/NetAdmin/commit/841a4195e77aa96e3c6c72626c1add3f71a310aa)) * 🐛 个性主题色冲突 ([4e4a1d0](https://github.com/nsnail/NetAdmin/commit/4e4a1d0dff7f3698e9a9cfcf46368260cfd70cbd)) -* 🐛 请求日志批量插入,漏写了登录日志 ([#210](https://github.com/nsnail/NetAdmin/issues/210)) ([6c71c74](https://github.com/nsnail/NetAdmin/commit/6c71c74a27617c7d0530a5f6eaff650ecfd4eaec)) +* 🐛 + 请求日志批量插入,漏写了登录日志 ([#210](https://github.com/nsnail/NetAdmin/issues/210)) ([6c71c74](https://github.com/nsnail/NetAdmin/commit/6c71c74a27617c7d0530a5f6eaff650ecfd4eaec)) * 🐛 修复一些样式问题 ([442a69f](https://github.com/nsnail/NetAdmin/commit/442a69f90de179539f78c01d967572f83bd2eff8)) -* 🐛 用户选择器报错 ([#220](https://github.com/nsnail/NetAdmin/issues/220)) ([71bfdaa](https://github.com/nsnail/NetAdmin/commit/71bfdaafa8176cf686b03244ee758de058080a71)) +* 🐛 + 用户选择器报错 ([#220](https://github.com/nsnail/NetAdmin/issues/220)) ([71bfdaa](https://github.com/nsnail/NetAdmin/commit/71bfdaafa8176cf686b03244ee758de058080a71)) * 🐛 editUser ([ef2a0c3](https://github.com/nsnail/NetAdmin/commit/ef2a0c3280532ac24889279e4780a1b1a2561a6b)) -* 🐛 idd ([#208](https://github.com/nsnail/NetAdmin/issues/208)) ([4e9f605](https://github.com/nsnail/NetAdmin/commit/4e9f605ea2cc6fe394068cfea5638e51920b9096)) +* 🐛 + idd ([#208](https://github.com/nsnail/NetAdmin/issues/208)) ([4e9f605](https://github.com/nsnail/NetAdmin/commit/4e9f605ea2cc6fe394068cfea5638e51920b9096)) * 🐛 version 条件重复指定 ([01058ba](https://github.com/nsnail/NetAdmin/commit/01058ba7288bcc645f66de2f78e1d659d55333cf)) * 🐛 version lock ([4eecc0b](https://github.com/nsnail/NetAdmin/commit/4eecc0b4ce09f620f83109949e4c2b67b7f8ba90)) ## [2.3.0](https://github.com/nsnail/NetAdmin/compare/v2.1.0...v2.3.0) (2024-12-12) - ### Features -* ✨ 菜单复制 ([#214](https://github.com/nsnail/NetAdmin/issues/214)) ([81d9b0b](https://github.com/nsnail/NetAdmin/commit/81d9b0b3bb280661ceffa61aa6e9d612fb7ec52c)) +* ✨ + 菜单复制 ([#214](https://github.com/nsnail/NetAdmin/issues/214)) ([81d9b0b](https://github.com/nsnail/NetAdmin/commit/81d9b0b3bb280661ceffa61aa6e9d612fb7ec52c)) * ✨ 分组统计功能 ([0b036e9](https://github.com/nsnail/NetAdmin/commit/0b036e9d67ffdf7a07c772606009f02744e6a3c3)) * ✨ 框架代码同步 ([098cfc1](https://github.com/nsnail/NetAdmin/commit/098cfc135e781a0cf172cd1289e5e871c7a76419)) * ✨ 框架代码同步 ([7256626](https://github.com/nsnail/NetAdmin/commit/725662693b7b47f6fae4c1917dd8d80220c7640a)) -* ✨ 文档管理 ([#221](https://github.com/nsnail/NetAdmin/issues/221)) ([7ed3040](https://github.com/nsnail/NetAdmin/commit/7ed30406c9f721a12f0b756ec8884a1882242b93)) -* ✨ select-filter badge icon ([#217](https://github.com/nsnail/NetAdmin/issues/217)) ([4d857f1](https://github.com/nsnail/NetAdmin/commit/4d857f1861b1256980e7cc59e2ab6a5f7d966da2)) - +* ✨ + 文档管理 ([#221](https://github.com/nsnail/NetAdmin/issues/221)) ([7ed3040](https://github.com/nsnail/NetAdmin/commit/7ed30406c9f721a12f0b756ec8884a1882242b93)) +* ✨ select-filter badge + icon ([#217](https://github.com/nsnail/NetAdmin/issues/217)) ([4d857f1](https://github.com/nsnail/NetAdmin/commit/4d857f1861b1256980e7cc59e2ab6a5f7d966da2)) ### Bug Fixes -* 🐛 按钮文字提示 ([#227](https://github.com/nsnail/NetAdmin/issues/227)) ([c88c8d2](https://github.com/nsnail/NetAdmin/commit/c88c8d293d44f2707f3b5232e6a40a141af9981c)) -* 🐛 导出界面报错 ([#213](https://github.com/nsnail/NetAdmin/issues/213)) ([ef2f0de](https://github.com/nsnail/NetAdmin/commit/ef2f0de095e314f34bec21c0a2ccdb51423a163b)) -* 🐛 导出文件的responseType ([#205](https://github.com/nsnail/NetAdmin/issues/205)) ([841a419](https://github.com/nsnail/NetAdmin/commit/841a4195e77aa96e3c6c72626c1add3f71a310aa)) +* 🐛 + 按钮文字提示 ([#227](https://github.com/nsnail/NetAdmin/issues/227)) ([c88c8d2](https://github.com/nsnail/NetAdmin/commit/c88c8d293d44f2707f3b5232e6a40a141af9981c)) +* 🐛 + 导出界面报错 ([#213](https://github.com/nsnail/NetAdmin/issues/213)) ([ef2f0de](https://github.com/nsnail/NetAdmin/commit/ef2f0de095e314f34bec21c0a2ccdb51423a163b)) +* 🐛 + 导出文件的responseType ([#205](https://github.com/nsnail/NetAdmin/issues/205)) ([841a419](https://github.com/nsnail/NetAdmin/commit/841a4195e77aa96e3c6c72626c1add3f71a310aa)) * 🐛 个性主题色冲突 ([4e4a1d0](https://github.com/nsnail/NetAdmin/commit/4e4a1d0dff7f3698e9a9cfcf46368260cfd70cbd)) -* 🐛 请求日志批量插入,漏写了登录日志 ([#210](https://github.com/nsnail/NetAdmin/issues/210)) ([6c71c74](https://github.com/nsnail/NetAdmin/commit/6c71c74a27617c7d0530a5f6eaff650ecfd4eaec)) -* 🐛 用户选择器报错 ([#220](https://github.com/nsnail/NetAdmin/issues/220)) ([71bfdaa](https://github.com/nsnail/NetAdmin/commit/71bfdaafa8176cf686b03244ee758de058080a71)) +* 🐛 + 请求日志批量插入,漏写了登录日志 ([#210](https://github.com/nsnail/NetAdmin/issues/210)) ([6c71c74](https://github.com/nsnail/NetAdmin/commit/6c71c74a27617c7d0530a5f6eaff650ecfd4eaec)) +* 🐛 + 用户选择器报错 ([#220](https://github.com/nsnail/NetAdmin/issues/220)) ([71bfdaa](https://github.com/nsnail/NetAdmin/commit/71bfdaafa8176cf686b03244ee758de058080a71)) * 🐛 editUser ([ef2a0c3](https://github.com/nsnail/NetAdmin/commit/ef2a0c3280532ac24889279e4780a1b1a2561a6b)) -* 🐛 idd ([#208](https://github.com/nsnail/NetAdmin/issues/208)) ([4e9f605](https://github.com/nsnail/NetAdmin/commit/4e9f605ea2cc6fe394068cfea5638e51920b9096)) +* 🐛 + idd ([#208](https://github.com/nsnail/NetAdmin/issues/208)) ([4e9f605](https://github.com/nsnail/NetAdmin/commit/4e9f605ea2cc6fe394068cfea5638e51920b9096)) * 🐛 version 条件重复指定 ([01058ba](https://github.com/nsnail/NetAdmin/commit/01058ba7288bcc645f66de2f78e1d659d55333cf)) * 🐛 version lock ([4eecc0b](https://github.com/nsnail/NetAdmin/commit/4eecc0b4ce09f620f83109949e4c2b67b7f8ba90)) ### [2.2.1](https://github.com/nsnail/NetAdmin/compare/v2.1.0...v2.2.1) (2024-12-04) - ### Features -* ✨ 菜单复制 ([#214](https://github.com/nsnail/NetAdmin/issues/214)) ([81d9b0b](https://github.com/nsnail/NetAdmin/commit/81d9b0b3bb280661ceffa61aa6e9d612fb7ec52c)) -* ✨ 文档管理 ([#221](https://github.com/nsnail/NetAdmin/issues/221)) ([7ed3040](https://github.com/nsnail/NetAdmin/commit/7ed30406c9f721a12f0b756ec8884a1882242b93)) -* ✨ select-filter badge icon ([#217](https://github.com/nsnail/NetAdmin/issues/217)) ([4d857f1](https://github.com/nsnail/NetAdmin/commit/4d857f1861b1256980e7cc59e2ab6a5f7d966da2)) - +* ✨ + 菜单复制 ([#214](https://github.com/nsnail/NetAdmin/issues/214)) ([81d9b0b](https://github.com/nsnail/NetAdmin/commit/81d9b0b3bb280661ceffa61aa6e9d612fb7ec52c)) +* ✨ + 文档管理 ([#221](https://github.com/nsnail/NetAdmin/issues/221)) ([7ed3040](https://github.com/nsnail/NetAdmin/commit/7ed30406c9f721a12f0b756ec8884a1882242b93)) +* ✨ select-filter badge + icon ([#217](https://github.com/nsnail/NetAdmin/issues/217)) ([4d857f1](https://github.com/nsnail/NetAdmin/commit/4d857f1861b1256980e7cc59e2ab6a5f7d966da2)) ### Bug Fixes -* 🐛 按钮文字提示 ([#227](https://github.com/nsnail/NetAdmin/issues/227)) ([c88c8d2](https://github.com/nsnail/NetAdmin/commit/c88c8d293d44f2707f3b5232e6a40a141af9981c)) -* 🐛 导出界面报错 ([#213](https://github.com/nsnail/NetAdmin/issues/213)) ([ef2f0de](https://github.com/nsnail/NetAdmin/commit/ef2f0de095e314f34bec21c0a2ccdb51423a163b)) -* 🐛 导出文件的responseType ([#205](https://github.com/nsnail/NetAdmin/issues/205)) ([841a419](https://github.com/nsnail/NetAdmin/commit/841a4195e77aa96e3c6c72626c1add3f71a310aa)) -* 🐛 请求日志批量插入,漏写了登录日志 ([#210](https://github.com/nsnail/NetAdmin/issues/210)) ([6c71c74](https://github.com/nsnail/NetAdmin/commit/6c71c74a27617c7d0530a5f6eaff650ecfd4eaec)) -* 🐛 用户选择器报错 ([#220](https://github.com/nsnail/NetAdmin/issues/220)) ([71bfdaa](https://github.com/nsnail/NetAdmin/commit/71bfdaafa8176cf686b03244ee758de058080a71)) +* 🐛 + 按钮文字提示 ([#227](https://github.com/nsnail/NetAdmin/issues/227)) ([c88c8d2](https://github.com/nsnail/NetAdmin/commit/c88c8d293d44f2707f3b5232e6a40a141af9981c)) +* 🐛 + 导出界面报错 ([#213](https://github.com/nsnail/NetAdmin/issues/213)) ([ef2f0de](https://github.com/nsnail/NetAdmin/commit/ef2f0de095e314f34bec21c0a2ccdb51423a163b)) +* 🐛 + 导出文件的responseType ([#205](https://github.com/nsnail/NetAdmin/issues/205)) ([841a419](https://github.com/nsnail/NetAdmin/commit/841a4195e77aa96e3c6c72626c1add3f71a310aa)) +* 🐛 + 请求日志批量插入,漏写了登录日志 ([#210](https://github.com/nsnail/NetAdmin/issues/210)) ([6c71c74](https://github.com/nsnail/NetAdmin/commit/6c71c74a27617c7d0530a5f6eaff650ecfd4eaec)) +* 🐛 + 用户选择器报错 ([#220](https://github.com/nsnail/NetAdmin/issues/220)) ([71bfdaa](https://github.com/nsnail/NetAdmin/commit/71bfdaafa8176cf686b03244ee758de058080a71)) * 🐛 editUser ([ef2a0c3](https://github.com/nsnail/NetAdmin/commit/ef2a0c3280532ac24889279e4780a1b1a2561a6b)) -* 🐛 idd ([#208](https://github.com/nsnail/NetAdmin/issues/208)) ([4e9f605](https://github.com/nsnail/NetAdmin/commit/4e9f605ea2cc6fe394068cfea5638e51920b9096)) +* 🐛 + idd ([#208](https://github.com/nsnail/NetAdmin/issues/208)) ([4e9f605](https://github.com/nsnail/NetAdmin/commit/4e9f605ea2cc6fe394068cfea5638e51920b9096)) * 🐛 version 条件重复指定 ([01058ba](https://github.com/nsnail/NetAdmin/commit/01058ba7288bcc645f66de2f78e1d659d55333cf)) * 🐛 version lock ([4eecc0b](https://github.com/nsnail/NetAdmin/commit/4eecc0b4ce09f620f83109949e4c2b67b7f8ba90)) ## [2.2.0](https://github.com/nsnail/NetAdmin/compare/v2.1.0...v2.2.0) (2024-11-27) - ### Features -* ✨ 菜单复制 ([#214](https://github.com/nsnail/NetAdmin/issues/214)) ([81d9b0b](https://github.com/nsnail/NetAdmin/commit/81d9b0b3bb280661ceffa61aa6e9d612fb7ec52c)) -* ✨ 文档管理 ([#221](https://github.com/nsnail/NetAdmin/issues/221)) ([7ed3040](https://github.com/nsnail/NetAdmin/commit/7ed30406c9f721a12f0b756ec8884a1882242b93)) -* ✨ select-filter badge icon ([#217](https://github.com/nsnail/NetAdmin/issues/217)) ([4d857f1](https://github.com/nsnail/NetAdmin/commit/4d857f1861b1256980e7cc59e2ab6a5f7d966da2)) - +* ✨ + 菜单复制 ([#214](https://github.com/nsnail/NetAdmin/issues/214)) ([81d9b0b](https://github.com/nsnail/NetAdmin/commit/81d9b0b3bb280661ceffa61aa6e9d612fb7ec52c)) +* ✨ + 文档管理 ([#221](https://github.com/nsnail/NetAdmin/issues/221)) ([7ed3040](https://github.com/nsnail/NetAdmin/commit/7ed30406c9f721a12f0b756ec8884a1882242b93)) +* ✨ select-filter badge + icon ([#217](https://github.com/nsnail/NetAdmin/issues/217)) ([4d857f1](https://github.com/nsnail/NetAdmin/commit/4d857f1861b1256980e7cc59e2ab6a5f7d966da2)) ### Bug Fixes -* 🐛 导出界面报错 ([#213](https://github.com/nsnail/NetAdmin/issues/213)) ([ef2f0de](https://github.com/nsnail/NetAdmin/commit/ef2f0de095e314f34bec21c0a2ccdb51423a163b)) -* 🐛 导出文件的responseType ([#205](https://github.com/nsnail/NetAdmin/issues/205)) ([841a419](https://github.com/nsnail/NetAdmin/commit/841a4195e77aa96e3c6c72626c1add3f71a310aa)) -* 🐛 请求日志批量插入,漏写了登录日志 ([#210](https://github.com/nsnail/NetAdmin/issues/210)) ([6c71c74](https://github.com/nsnail/NetAdmin/commit/6c71c74a27617c7d0530a5f6eaff650ecfd4eaec)) -* 🐛 用户选择器报错 ([#220](https://github.com/nsnail/NetAdmin/issues/220)) ([71bfdaa](https://github.com/nsnail/NetAdmin/commit/71bfdaafa8176cf686b03244ee758de058080a71)) -* 🐛 idd ([#208](https://github.com/nsnail/NetAdmin/issues/208)) ([4e9f605](https://github.com/nsnail/NetAdmin/commit/4e9f605ea2cc6fe394068cfea5638e51920b9096)) +* 🐛 + 导出界面报错 ([#213](https://github.com/nsnail/NetAdmin/issues/213)) ([ef2f0de](https://github.com/nsnail/NetAdmin/commit/ef2f0de095e314f34bec21c0a2ccdb51423a163b)) +* 🐛 + 导出文件的responseType ([#205](https://github.com/nsnail/NetAdmin/issues/205)) ([841a419](https://github.com/nsnail/NetAdmin/commit/841a4195e77aa96e3c6c72626c1add3f71a310aa)) +* 🐛 + 请求日志批量插入,漏写了登录日志 ([#210](https://github.com/nsnail/NetAdmin/issues/210)) ([6c71c74](https://github.com/nsnail/NetAdmin/commit/6c71c74a27617c7d0530a5f6eaff650ecfd4eaec)) +* 🐛 + 用户选择器报错 ([#220](https://github.com/nsnail/NetAdmin/issues/220)) ([71bfdaa](https://github.com/nsnail/NetAdmin/commit/71bfdaafa8176cf686b03244ee758de058080a71)) +* 🐛 + idd ([#208](https://github.com/nsnail/NetAdmin/issues/208)) ([4e9f605](https://github.com/nsnail/NetAdmin/commit/4e9f605ea2cc6fe394068cfea5638e51920b9096)) ## [2.1.0](https://github.com/nsnail/NetAdmin/compare/v2.0.0...v2.1.0) (2024-11-15) - ### Features -* ✨ 首页仪表板自定义布局 ([#201](https://github.com/nsnail/NetAdmin/issues/201)) ([2f30028](https://github.com/nsnail/NetAdmin/commit/2f300285aa2afbfaea1fd9ffe299cc2badf98e0f)) -* ✨ 用户选择器 ([#189](https://github.com/nsnail/NetAdmin/issues/189)) ([8479f69](https://github.com/nsnail/NetAdmin/commit/8479f69bdccac93a497e039dd01e18333ec2bbdc)) - +* ✨ + 首页仪表板自定义布局 ([#201](https://github.com/nsnail/NetAdmin/issues/201)) ([2f30028](https://github.com/nsnail/NetAdmin/commit/2f300285aa2afbfaea1fd9ffe299cc2badf98e0f)) +* ✨ + 用户选择器 ([#189](https://github.com/nsnail/NetAdmin/issues/189)) ([8479f69](https://github.com/nsnail/NetAdmin/commit/8479f69bdccac93a497e039dd01e18333ec2bbdc)) ### Bug Fixes -* 🐛 --el-color-primary 变量有闪烁现象 ([#194](https://github.com/nsnail/NetAdmin/issues/194)) ([26e3698](https://github.com/nsnail/NetAdmin/commit/26e3698f57a2986f3b727fa38f293ca40c89f3ab)) -* 🐛 404 ([#198](https://github.com/nsnail/NetAdmin/issues/198)) ([d8dbb28](https://github.com/nsnail/NetAdmin/commit/d8dbb28cfc8ad427062eb8d81be67cc25ded6fb6)) -* 🐛 module name ([#193](https://github.com/nsnail/NetAdmin/issues/193)) ([3069b8f](https://github.com/nsnail/NetAdmin/commit/3069b8fbc451c4c257becf0523ab6ea6cc9af7e2)) +* 🐛 --el-color-primary + 变量有闪烁现象 ([#194](https://github.com/nsnail/NetAdmin/issues/194)) ([26e3698](https://github.com/nsnail/NetAdmin/commit/26e3698f57a2986f3b727fa38f293ca40c89f3ab)) +* 🐛 + 404 ([#198](https://github.com/nsnail/NetAdmin/issues/198)) ([d8dbb28](https://github.com/nsnail/NetAdmin/commit/d8dbb28cfc8ad427062eb8d81be67cc25ded6fb6)) +* 🐛 module + name ([#193](https://github.com/nsnail/NetAdmin/issues/193)) ([3069b8f](https://github.com/nsnail/NetAdmin/commit/3069b8fbc451c4c257becf0523ab6ea6cc9af7e2)) ## [2.0.0](https://github.com/nsnail/NetAdmin/compare/v1.6.0...v2.0.0) (2024-11-04) - ### Features * ✨ 查询过滤器保存 ([779d8e5](https://github.com/nsnail/NetAdmin/commit/779d8e511a84d2be91d74ea308c22b969d6963f3)) -* ✨ 框架代码同步 ([#173](https://github.com/nsnail/NetAdmin/issues/173)) ([c088492](https://github.com/nsnail/NetAdmin/commit/c088492cfabada198ad563e43278ab7e869029bc)) -* ✨ 框架代码同步 ([#178](https://github.com/nsnail/NetAdmin/issues/178)) ([58e4572](https://github.com/nsnail/NetAdmin/commit/58e4572723ba68700fb6414167cb27b03c864db1)) - +* ✨ + 框架代码同步 ([#173](https://github.com/nsnail/NetAdmin/issues/173)) ([c088492](https://github.com/nsnail/NetAdmin/commit/c088492cfabada198ad563e43278ab7e869029bc)) +* ✨ + 框架代码同步 ([#178](https://github.com/nsnail/NetAdmin/issues/178)) ([58e4572](https://github.com/nsnail/NetAdmin/commit/58e4572723ba68700fb6414167cb27b03c864db1)) ### Bug Fixes -* 🐛 public const int SECS_CACHE_LOGIN_BY_USER_ID = 3600 * 24 * 30; // 秒:缓存时间-通过用户编号登录的用户信息 ([#179](https://github.com/nsnail/NetAdmin/issues/179)) ([000e3d6](https://github.com/nsnail/NetAdmin/commit/000e3d68a85eaee7758b4160d1d0ffa52aa4aae0)) +* 🐛 public const int SECS_CACHE_LOGIN_BY_USER_ID = 3600 * 24 * 30; + 秒:缓存时间-通过用户编号登录的用户信息 ([#179](https://github.com/nsnail/NetAdmin/issues/179)) ([000e3d6](https://github.com/nsnail/NetAdmin/commit/000e3d68a85eaee7758b4160d1d0ffa52aa4aae0)) ## [1.6.0](https://github.com/nsnail/NetAdmin/compare/v1.5.0...v1.6.0) (2024-08-12) - ### Features -* ✨ 移除RedLocker,更改为自实现 ([#169](https://github.com/nsnail/NetAdmin/issues/169)) ([cd8ed67](https://github.com/nsnail/NetAdmin/commit/cd8ed674e0615b33fc0e025b9412c2f16d252f0f)) - +* ✨ + 移除RedLocker,更改为自实现 ([#169](https://github.com/nsnail/NetAdmin/issues/169)) ([cd8ed67](https://github.com/nsnail/NetAdmin/commit/cd8ed674e0615b33fc0e025b9412c2f16d252f0f)) ### Bug Fixes -* 🐛 站内信角标颜色 ([#167](https://github.com/nsnail/NetAdmin/issues/167)) ([e00c30c](https://github.com/nsnail/NetAdmin/commit/e00c30c96123769d8a9e6f30cc9a2c3e8099e34c)) -* 🐛 ip归属地查询接口地址更新 ([#168](https://github.com/nsnail/NetAdmin/issues/168)) ([4733ade](https://github.com/nsnail/NetAdmin/commit/4733adede5e8993f741e9b94541aafeb6a733859)) -* 🐛 ip显示问题 ([#166](https://github.com/nsnail/NetAdmin/issues/166)) ([6b63250](https://github.com/nsnail/NetAdmin/commit/6b6325003924b1605b610f759b2131c15013ffa0)) -* 🐛 trimSuffix ([#163](https://github.com/nsnail/NetAdmin/issues/163)) ([7c56c8d](https://github.com/nsnail/NetAdmin/commit/7c56c8d571d4f29fcb20f238893dbf61e5e538f0)) +* 🐛 + 站内信角标颜色 ([#167](https://github.com/nsnail/NetAdmin/issues/167)) ([e00c30c](https://github.com/nsnail/NetAdmin/commit/e00c30c96123769d8a9e6f30cc9a2c3e8099e34c)) +* 🐛 + ip归属地查询接口地址更新 ([#168](https://github.com/nsnail/NetAdmin/issues/168)) ([4733ade](https://github.com/nsnail/NetAdmin/commit/4733adede5e8993f741e9b94541aafeb6a733859)) +* 🐛 + ip显示问题 ([#166](https://github.com/nsnail/NetAdmin/issues/166)) ([6b63250](https://github.com/nsnail/NetAdmin/commit/6b6325003924b1605b610f759b2131c15013ffa0)) +* 🐛 + trimSuffix ([#163](https://github.com/nsnail/NetAdmin/issues/163)) ([7c56c8d](https://github.com/nsnail/NetAdmin/commit/7c56c8d571d4f29fcb20f238893dbf61e5e538f0)) ## [1.5.0](https://github.com/nsnail/NetAdmin/compare/v1.4.0...v1.5.0) (2024-07-26) - ### Features -* ✨ 登录日志独立存储 ([#161](https://github.com/nsnail/NetAdmin/issues/161)) ([faaf5aa](https://github.com/nsnail/NetAdmin/commit/faaf5aa0fc5299633ca4f384d6287171bb241ff4)) -* ✨ 框架代码同步 ([#158](https://github.com/nsnail/NetAdmin/issues/158)) ([1a28e8d](https://github.com/nsnail/NetAdmin/commit/1a28e8d5a62aeab7e4fda5049b4f733a16480b67)) -* ✨ 请求日志增加TraceId ([#154](https://github.com/nsnail/NetAdmin/issues/154)) ([aaea283](https://github.com/nsnail/NetAdmin/commit/aaea28389a56566e055b6651cf48a89194a72cb7)) -* ✨ cron表达式的自然语言表达 ([#156](https://github.com/nsnail/NetAdmin/issues/156)) ([6d4ccf3](https://github.com/nsnail/NetAdmin/commit/6d4ccf344595e128a445f1cb7596a7a1c28fd4cd)) -* ✨ logoBar显示程序版本号 ([#153](https://github.com/nsnail/NetAdmin/issues/153)) ([be5b9a1](https://github.com/nsnail/NetAdmin/commit/be5b9a160d1f06cfdf36cea4e5eb95908523fed2)) - +* ✨ + 登录日志独立存储 ([#161](https://github.com/nsnail/NetAdmin/issues/161)) ([faaf5aa](https://github.com/nsnail/NetAdmin/commit/faaf5aa0fc5299633ca4f384d6287171bb241ff4)) +* ✨ + 框架代码同步 ([#158](https://github.com/nsnail/NetAdmin/issues/158)) ([1a28e8d](https://github.com/nsnail/NetAdmin/commit/1a28e8d5a62aeab7e4fda5049b4f733a16480b67)) +* ✨ + 请求日志增加TraceId ([#154](https://github.com/nsnail/NetAdmin/issues/154)) ([aaea283](https://github.com/nsnail/NetAdmin/commit/aaea28389a56566e055b6651cf48a89194a72cb7)) +* ✨ + cron表达式的自然语言表达 ([#156](https://github.com/nsnail/NetAdmin/issues/156)) ([6d4ccf3](https://github.com/nsnail/NetAdmin/commit/6d4ccf344595e128a445f1cb7596a7a1c28fd4cd)) +* ✨ + logoBar显示程序版本号 ([#153](https://github.com/nsnail/NetAdmin/issues/153)) ([be5b9a1](https://github.com/nsnail/NetAdmin/commit/be5b9a160d1f06cfdf36cea4e5eb95908523fed2)) ### Bug Fixes -* 🐛 error CS0117: 'Numbers' does not contain a definition for 'SECS_CACHE_DIC_CATALOG_CODE' ([#155](https://github.com/nsnail/NetAdmin/issues/155)) ([1733802](https://github.com/nsnail/NetAdmin/commit/1733802e02b7e69e4c8646f259da5098b87888f7)) +* 🐛 error CS0117: 'Numbers' does not contain a definition for ' + SECS_CACHE_DIC_CATALOG_CODE' ([#155](https://github.com/nsnail/NetAdmin/issues/155)) ([1733802](https://github.com/nsnail/NetAdmin/commit/1733802e02b7e69e4c8646f259da5098b87888f7)) ## [1.4.0](https://github.com/nsnail/NetAdmin/compare/v1.3.0...v1.4.0) (2024-07-03) - ### Features -* ✨ 框架代码同步 ([#150](https://github.com/nsnail/NetAdmin/issues/150)) ([e1b0030](https://github.com/nsnail/NetAdmin/commit/e1b0030193556fa0564ea059657b4b43c98085c2)) +* ✨ + 框架代码同步 ([#150](https://github.com/nsnail/NetAdmin/issues/150)) ([e1b0030](https://github.com/nsnail/NetAdmin/commit/e1b0030193556fa0564ea059657b4b43c98085c2)) ## [1.3.0](https://github.com/nsnail/NetAdmin/compare/v1.2.0...v1.3.0) (2024-06-24) - ### Features -* ✨ 补充多语种文件 ([#146](https://github.com/nsnail/NetAdmin/issues/146)) ([1442e0a](https://github.com/nsnail/NetAdmin/commit/1442e0a37cb2f27d8ba7b77bed91feaa5d7b1fdd)) -* ✨ 更新实体增加sql过滤参数 ([#140](https://github.com/nsnail/NetAdmin/issues/140)) ([a3ab970](https://github.com/nsnail/NetAdmin/commit/a3ab97019dd1fc2267db987ade80fa6749e24e4d)) -* ✨ 框架代码同步 ([#139](https://github.com/nsnail/NetAdmin/issues/139)) ([608a1de](https://github.com/nsnail/NetAdmin/commit/608a1ded5c0e9987161444efd48597a687c693e1)) -* ✨ 框架代码同步 ([#144](https://github.com/nsnail/NetAdmin/issues/144)) ([ae2d1c4](https://github.com/nsnail/NetAdmin/commit/ae2d1c4932bf1229ea36d28d486beaee8de16d53)) -* ✨ 框架代码同步 ([#148](https://github.com/nsnail/NetAdmin/issues/148)) ([8bc8aa9](https://github.com/nsnail/NetAdmin/commit/8bc8aa960cdd1ed5036927bd508fce4c218618c7)) -* ✨ 前端版本更新器 ([#145](https://github.com/nsnail/NetAdmin/issues/145)) ([6100e9e](https://github.com/nsnail/NetAdmin/commit/6100e9e9c88005d6a2f3c2706ca750a6ad62d2c7)) - +* ✨ + 补充多语种文件 ([#146](https://github.com/nsnail/NetAdmin/issues/146)) ([1442e0a](https://github.com/nsnail/NetAdmin/commit/1442e0a37cb2f27d8ba7b77bed91feaa5d7b1fdd)) +* ✨ + 更新实体增加sql过滤参数 ([#140](https://github.com/nsnail/NetAdmin/issues/140)) ([a3ab970](https://github.com/nsnail/NetAdmin/commit/a3ab97019dd1fc2267db987ade80fa6749e24e4d)) +* ✨ + 框架代码同步 ([#139](https://github.com/nsnail/NetAdmin/issues/139)) ([608a1de](https://github.com/nsnail/NetAdmin/commit/608a1ded5c0e9987161444efd48597a687c693e1)) +* ✨ + 框架代码同步 ([#144](https://github.com/nsnail/NetAdmin/issues/144)) ([ae2d1c4](https://github.com/nsnail/NetAdmin/commit/ae2d1c4932bf1229ea36d28d486beaee8de16d53)) +* ✨ + 框架代码同步 ([#148](https://github.com/nsnail/NetAdmin/issues/148)) ([8bc8aa9](https://github.com/nsnail/NetAdmin/commit/8bc8aa960cdd1ed5036927bd508fce4c218618c7)) +* ✨ + 前端版本更新器 ([#145](https://github.com/nsnail/NetAdmin/issues/145)) ([6100e9e](https://github.com/nsnail/NetAdmin/commit/6100e9e9c88005d6a2f3c2706ca750a6ad62d2c7)) ### Bug Fixes -* 🐛 补充多语种文件 ([#147](https://github.com/nsnail/NetAdmin/issues/147)) ([d00f0d2](https://github.com/nsnail/NetAdmin/commit/d00f0d2d9cc2243908a8b6979b9c4a5811b2a57e)) -* 🐛 操作日志不显示userName ([#141](https://github.com/nsnail/NetAdmin/issues/141)) ([705d027](https://github.com/nsnail/NetAdmin/commit/705d027da44af159d29db9c93e47b549317c793e)) +* 🐛 + 补充多语种文件 ([#147](https://github.com/nsnail/NetAdmin/issues/147)) ([d00f0d2](https://github.com/nsnail/NetAdmin/commit/d00f0d2d9cc2243908a8b6979b9c4a5811b2a57e)) +* 🐛 + 操作日志不显示userName ([#141](https://github.com/nsnail/NetAdmin/issues/141)) ([705d027](https://github.com/nsnail/NetAdmin/commit/705d027da44af159d29db9c93e47b549317c793e)) ## [1.2.0](https://github.com/nsnail/NetAdmin/compare/v1.1.1...v1.2.0) (2024-06-06) - ### Features -* ✨ 计划作业-上次执行耗时 ([#133](https://github.com/nsnail/NetAdmin/issues/133)) ([57b71e1](https://github.com/nsnail/NetAdmin/commit/57b71e1354ab8b0be995b5f563dd8c3fb7965d5f)) -* ✨ 框架代码同步 ([#129](https://github.com/nsnail/NetAdmin/issues/129)) ([b01b8b2](https://github.com/nsnail/NetAdmin/commit/b01b8b24ba574c08ba5605e103ff2ccf15e5830a)) -* ✨ 框架代码同步 ([#130](https://github.com/nsnail/NetAdmin/issues/130)) ([5edcf63](https://github.com/nsnail/NetAdmin/commit/5edcf63e24f6b13f5515e01ee8cf120b1a814d40)) -* ✨ 默认头像根据用户名绘制svg ([#132](https://github.com/nsnail/NetAdmin/issues/132)) ([127f6e9](https://github.com/nsnail/NetAdmin/commit/127f6e9f6c8c12974e5340e9697281250737bed3)) -* ✨ 手动执行计划作业 ([#122](https://github.com/nsnail/NetAdmin/issues/122)) ([3b83361](https://github.com/nsnail/NetAdmin/commit/3b8336105a908ba6bc300bec6ac4f49747ea66e9)) -* ✨ 增强作业执行记录页面 ([#135](https://github.com/nsnail/NetAdmin/issues/135)) ([7ae473d](https://github.com/nsnail/NetAdmin/commit/7ae473d492b9ba60cbb1c355894917d14f5ffa8f)) -* ✨ naColId组件 ([#118](https://github.com/nsnail/NetAdmin/issues/118)) ([47e67dd](https://github.com/nsnail/NetAdmin/commit/47e67dd503dd0ba6818e8b798e41c62420363f58)) -* **frontend:** ✨ 手机端分页控件显示总条数 ([#124](https://github.com/nsnail/NetAdmin/issues/124)) ([e0d15f8](https://github.com/nsnail/NetAdmin/commit/e0d15f8039a74a9826a0395983960ab620308899)) - +* ✨ + 计划作业-上次执行耗时 ([#133](https://github.com/nsnail/NetAdmin/issues/133)) ([57b71e1](https://github.com/nsnail/NetAdmin/commit/57b71e1354ab8b0be995b5f563dd8c3fb7965d5f)) +* ✨ + 框架代码同步 ([#129](https://github.com/nsnail/NetAdmin/issues/129)) ([b01b8b2](https://github.com/nsnail/NetAdmin/commit/b01b8b24ba574c08ba5605e103ff2ccf15e5830a)) +* ✨ + 框架代码同步 ([#130](https://github.com/nsnail/NetAdmin/issues/130)) ([5edcf63](https://github.com/nsnail/NetAdmin/commit/5edcf63e24f6b13f5515e01ee8cf120b1a814d40)) +* ✨ + 默认头像根据用户名绘制svg ([#132](https://github.com/nsnail/NetAdmin/issues/132)) ([127f6e9](https://github.com/nsnail/NetAdmin/commit/127f6e9f6c8c12974e5340e9697281250737bed3)) +* ✨ + 手动执行计划作业 ([#122](https://github.com/nsnail/NetAdmin/issues/122)) ([3b83361](https://github.com/nsnail/NetAdmin/commit/3b8336105a908ba6bc300bec6ac4f49747ea66e9)) +* ✨ + 增强作业执行记录页面 ([#135](https://github.com/nsnail/NetAdmin/issues/135)) ([7ae473d](https://github.com/nsnail/NetAdmin/commit/7ae473d492b9ba60cbb1c355894917d14f5ffa8f)) +* ✨ + naColId组件 ([#118](https://github.com/nsnail/NetAdmin/issues/118)) ([47e67dd](https://github.com/nsnail/NetAdmin/commit/47e67dd503dd0ba6818e8b798e41c62420363f58)) +* **frontend:** ✨ + 手机端分页控件显示总条数 ([#124](https://github.com/nsnail/NetAdmin/issues/124)) ([e0d15f8](https://github.com/nsnail/NetAdmin/commit/e0d15f8039a74a9826a0395983960ab620308899)) ### Bug Fixes -* 🐛 字段顺序 ([#131](https://github.com/nsnail/NetAdmin/issues/131)) ([d1951db](https://github.com/nsnail/NetAdmin/commit/d1951dbcb5fa50a7ff308f6b6d554da5f791bcf2)) -* 🐛 字段长度 ([#134](https://github.com/nsnail/NetAdmin/issues/134)) ([c20a6c3](https://github.com/nsnail/NetAdmin/commit/c20a6c369d7b6d6dcfd07b3f3eaeab0fa309e766)) +* 🐛 + 字段顺序 ([#131](https://github.com/nsnail/NetAdmin/issues/131)) ([d1951db](https://github.com/nsnail/NetAdmin/commit/d1951dbcb5fa50a7ff308f6b6d554da5f791bcf2)) +* 🐛 + 字段长度 ([#134](https://github.com/nsnail/NetAdmin/issues/134)) ([c20a6c3](https://github.com/nsnail/NetAdmin/commit/c20a6c369d7b6d6dcfd07b3f3eaeab0fa309e766)) * 🐛 take count ([c08ea62](https://github.com/nsnail/NetAdmin/commit/c08ea62064cc522d7cca9c90a5f15f23d833b6e3)) -* **backend:** 🐛 更新计划作业在sqlite数据库环境报错 ([#120](https://github.com/nsnail/NetAdmin/issues/120)) ([3152a8d](https://github.com/nsnail/NetAdmin/commit/3152a8d3e8054524470883c336fb6e93903a8426)) +* **backend:** 🐛 + 更新计划作业在sqlite数据库环境报错 ([#120](https://github.com/nsnail/NetAdmin/issues/120)) ([3152a8d](https://github.com/nsnail/NetAdmin/commit/3152a8d3e8054524470883c336fb6e93903a8426)) ### [1.1.1](https://github.com/nsnail/NetAdmin/compare/v1.1.0...v1.1.1) (2024-04-29) ## [1.1.0](https://github.com/nsnail/NetAdmin/compare/v1.0.0...v1.1.0) (2024-04-29) - ### Features -* ✨ 版本更新日志组件 ([#96](https://github.com/nsnail/NetAdmin/issues/96)) ([a37acc4](https://github.com/nsnail/NetAdmin/commit/a37acc4b55c91d57d51c7fa079da8700530412a5)) -* ✨ 计划作业 ([#87](https://github.com/nsnail/NetAdmin/issues/87)) ([8293ec0](https://github.com/nsnail/NetAdmin/commit/8293ec0297875ebc9ad75cce9465bd587929c0bf)) -* ✨ 计划作业执行记录 ([#89](https://github.com/nsnail/NetAdmin/issues/89)) ([6f89015](https://github.com/nsnail/NetAdmin/commit/6f890151989ad733e35653933b7597eec478cc3b)) -* ✨ 将数据库结构同步和种子数据初始化作为命令行开关 ([#78](https://github.com/nsnail/NetAdmin/issues/78)) ([05ed3d3](https://github.com/nsnail/NetAdmin/commit/05ed3d3746aa274a0f88f7afadfea12a3c8a80ff)) -* ✨ 快捷启用/禁用用户 ([#91](https://github.com/nsnail/NetAdmin/issues/91)) ([6c2d167](https://github.com/nsnail/NetAdmin/commit/6c2d1676e45b9f1ecf3be3ae5a172db49b62a81d)) -* ✨ 前端表格高级筛选 ([#100](https://github.com/nsnail/NetAdmin/issues/100)) ([3847d6f](https://github.com/nsnail/NetAdmin/commit/3847d6fdbbd27efb53921bcc8374157f0da47155)) -* ✨ 日志管理独立出来、增加登录日志界面 ([#65](https://github.com/nsnail/NetAdmin/issues/65)) ([9134c4f](https://github.com/nsnail/NetAdmin/commit/9134c4fe01165a87ebc7e2cbd0a2abff3c9fb3ea)) -* ✨ 首页仪表面板 ([#103](https://github.com/nsnail/NetAdmin/issues/103)) ([149e1af](https://github.com/nsnail/NetAdmin/commit/149e1afa533b142a3666a325ec84a091d53c1840)) -* ✨ cron表达式选择器 ([#92](https://github.com/nsnail/NetAdmin/issues/92)) ([bde9fb1](https://github.com/nsnail/NetAdmin/commit/bde9fb1ea264bd0b786ac68d590691892d7ce067)) - +* ✨ + 版本更新日志组件 ([#96](https://github.com/nsnail/NetAdmin/issues/96)) ([a37acc4](https://github.com/nsnail/NetAdmin/commit/a37acc4b55c91d57d51c7fa079da8700530412a5)) +* ✨ + 计划作业 ([#87](https://github.com/nsnail/NetAdmin/issues/87)) ([8293ec0](https://github.com/nsnail/NetAdmin/commit/8293ec0297875ebc9ad75cce9465bd587929c0bf)) +* ✨ + 计划作业执行记录 ([#89](https://github.com/nsnail/NetAdmin/issues/89)) ([6f89015](https://github.com/nsnail/NetAdmin/commit/6f890151989ad733e35653933b7597eec478cc3b)) +* ✨ + 将数据库结构同步和种子数据初始化作为命令行开关 ([#78](https://github.com/nsnail/NetAdmin/issues/78)) ([05ed3d3](https://github.com/nsnail/NetAdmin/commit/05ed3d3746aa274a0f88f7afadfea12a3c8a80ff)) +* ✨ + 快捷启用/禁用用户 ([#91](https://github.com/nsnail/NetAdmin/issues/91)) ([6c2d167](https://github.com/nsnail/NetAdmin/commit/6c2d1676e45b9f1ecf3be3ae5a172db49b62a81d)) +* ✨ + 前端表格高级筛选 ([#100](https://github.com/nsnail/NetAdmin/issues/100)) ([3847d6f](https://github.com/nsnail/NetAdmin/commit/3847d6fdbbd27efb53921bcc8374157f0da47155)) +* ✨ + 日志管理独立出来、增加登录日志界面 ([#65](https://github.com/nsnail/NetAdmin/issues/65)) ([9134c4f](https://github.com/nsnail/NetAdmin/commit/9134c4fe01165a87ebc7e2cbd0a2abff3c9fb3ea)) +* ✨ + 首页仪表面板 ([#103](https://github.com/nsnail/NetAdmin/issues/103)) ([149e1af](https://github.com/nsnail/NetAdmin/commit/149e1afa533b142a3666a325ec84a091d53c1840)) +* ✨ + cron表达式选择器 ([#92](https://github.com/nsnail/NetAdmin/issues/92)) ([bde9fb1](https://github.com/nsnail/NetAdmin/commit/bde9fb1ea264bd0b786ac68d590691892d7ce067)) ### Bug Fixes -* 🐛 'Numbers' does not contain a definition for 'CACHE_SECS_DEFAULT' ([#102](https://github.com/nsnail/NetAdmin/issues/102)) ([8f69c29](https://github.com/nsnail/NetAdmin/commit/8f69c2907be282b1b39f4a179badb11502aa2403)) -* 🐛 低版本jetbrains.resharper.globaltools搞乱了代码 ([#97](https://github.com/nsnail/NetAdmin/issues/97)) ([c117ddf](https://github.com/nsnail/NetAdmin/commit/c117ddfe7a433215b3449cdd6b19318a1f3cbf37)) -* 🐛 前端样式问题 ([#84](https://github.com/nsnail/NetAdmin/issues/84)) ([6615df3](https://github.com/nsnail/NetAdmin/commit/6615df339934f6d19880c9822b44d5305c2f2a75)) -* 🐛 请求日志客户端IP显示不正确 ([#60](https://github.com/nsnail/NetAdmin/issues/60)) ([ec698ce](https://github.com/nsnail/NetAdmin/commit/ec698ce4db49861eaaeb8bf5080764939e6d7231)) -* 🐛 时区问题 ([#107](https://github.com/nsnail/NetAdmin/issues/107)) ([59c85ce](https://github.com/nsnail/NetAdmin/commit/59c85cef217c121b36d52993b6b5a774fe22df9e)) -* 🐛 小问题 ([#76](https://github.com/nsnail/NetAdmin/issues/76)) ([52ddf27](https://github.com/nsnail/NetAdmin/commit/52ddf273c856d8f7e363ce23e5886b9eedf4604f)) -* 🐛 在弹窗界面中引用的列表组件,点击重置搜索条件按钮时,会关闭弹窗的bug ([#95](https://github.com/nsnail/NetAdmin/issues/95)) ([8fee14c](https://github.com/nsnail/NetAdmin/commit/8fee14cd6ebd86456956fc59bbb61c545faa1fdd)) -* 🐛 tinymce editor css 加载路径错误 ([#93](https://github.com/nsnail/NetAdmin/issues/93)) ([5fe7387](https://github.com/nsnail/NetAdmin/commit/5fe73878a2a53dc5e7e2dcbcbf22f91ffb4376dd)) -* 🐛 tinymce editor css 加载路径错误 ([#94](https://github.com/nsnail/NetAdmin/issues/94)) ([802251e](https://github.com/nsnail/NetAdmin/commit/802251e42347bfe4fa0bcb4867b615d7c03abf19)) +* 🐛 'Numbers' does not contain a definition for ' + CACHE_SECS_DEFAULT' ([#102](https://github.com/nsnail/NetAdmin/issues/102)) ([8f69c29](https://github.com/nsnail/NetAdmin/commit/8f69c2907be282b1b39f4a179badb11502aa2403)) +* 🐛 + 低版本jetbrains.resharper.globaltools搞乱了代码 ([#97](https://github.com/nsnail/NetAdmin/issues/97)) ([c117ddf](https://github.com/nsnail/NetAdmin/commit/c117ddfe7a433215b3449cdd6b19318a1f3cbf37)) +* 🐛 + 前端样式问题 ([#84](https://github.com/nsnail/NetAdmin/issues/84)) ([6615df3](https://github.com/nsnail/NetAdmin/commit/6615df339934f6d19880c9822b44d5305c2f2a75)) +* 🐛 + 请求日志客户端IP显示不正确 ([#60](https://github.com/nsnail/NetAdmin/issues/60)) ([ec698ce](https://github.com/nsnail/NetAdmin/commit/ec698ce4db49861eaaeb8bf5080764939e6d7231)) +* 🐛 + 时区问题 ([#107](https://github.com/nsnail/NetAdmin/issues/107)) ([59c85ce](https://github.com/nsnail/NetAdmin/commit/59c85cef217c121b36d52993b6b5a774fe22df9e)) +* 🐛 + 小问题 ([#76](https://github.com/nsnail/NetAdmin/issues/76)) ([52ddf27](https://github.com/nsnail/NetAdmin/commit/52ddf273c856d8f7e363ce23e5886b9eedf4604f)) +* 🐛 + 在弹窗界面中引用的列表组件,点击重置搜索条件按钮时,会关闭弹窗的bug ([#95](https://github.com/nsnail/NetAdmin/issues/95)) ([8fee14c](https://github.com/nsnail/NetAdmin/commit/8fee14cd6ebd86456956fc59bbb61c545faa1fdd)) +* 🐛 tinymce editor css + 加载路径错误 ([#93](https://github.com/nsnail/NetAdmin/issues/93)) ([5fe7387](https://github.com/nsnail/NetAdmin/commit/5fe73878a2a53dc5e7e2dcbcbf22f91ffb4376dd)) +* 🐛 tinymce editor css + 加载路径错误 ([#94](https://github.com/nsnail/NetAdmin/issues/94)) ([802251e](https://github.com/nsnail/NetAdmin/commit/802251e42347bfe4fa0bcb4867b615d7c03abf19)) ## 1.0.0 (2023-11-17) diff --git a/Dockerfile b/Dockerfile index 026634c5..d1d1dece 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/dotnet/aspnet:9.0.7 AS base +FROM mcr.microsoft.com/dotnet/aspnet:9.0.8 AS base WORKDIR /app EXPOSE 8080 RUN apt update diff --git a/NetAdmin.slnx.DotSettings b/NetAdmin.slnx.DotSettings index 5c519c14..bb52006d 100644 --- a/NetAdmin.slnx.DotSettings +++ b/NetAdmin.slnx.DotSettings @@ -16,18 +16,57 @@ HINT DO_NOT_SHOW DO_NOT_SHOW + USUAL_INDENT + USUAL_INDENT + END_OF_LINE + False + False + False + False + False + False + True + False + False + False + False + False + False + True + True + True + True + True + True + True + True + True + True + False + False 1 1 + 1 + 10000 + 10000 Required Required Required Required + EXPANDED + END_OF_LINE NEVER NEVER NEVER NEVER + WRAP_IF_LONG + CHOP_IF_LONG + CHOP_IF_LONG + CHOP_IF_LONG + CHOP_ALWAYS + CHOP_IF_LONG AD AE AF @@ -262,6 +301,7 @@ UG UM US + USDT UY UZ VA diff --git a/assets/res/NetAdmin.Fields.ln b/assets/res/NetAdmin.Fields.ln index f5170936..78c9445f 100644 --- a/assets/res/NetAdmin.Fields.ln +++ b/assets/res/NetAdmin.Fields.ln @@ -21,6 +21,7 @@ USDT 以什么结束 作业名称 作业状态 +佣金收入 信息 倒序排序 充值成功 @@ -28,6 +29,7 @@ USDT 全部数据 公告 共青团员 +内部错误 出生证 创建时间 初中 @@ -123,6 +125,7 @@ USDT 登录日志导出 硕士 离异 +私信 空闲 站内信导出 等于 diff --git a/assets/seed-data/Sys_Menu.json b/assets/seed-data/Sys_Menu.json index 556f2cac..c435a0c3 100644 --- a/assets/seed-data/Sys_Menu.json +++ b/assets/seed-data/Sys_Menu.json @@ -97,12 +97,12 @@ "Type": 1, }, { - "Component": "sys/finance/order", + "Component": "sys/finance/deposit", "Icon": "el-icon-shopping-cart", "Id": 690907673255944, - "Name": "sys/finance/order", + "Name": "sys/finance/deposit", "ParentId": 690906994118665, - "Path": "/finance/order", + "Path": "/finance/deposit", "Sort": 98, "Title": "自助充值", "Type": 1, diff --git a/assets/seed-data/Sys_UserInvite.json b/assets/seed-data/Sys_UserInvite.json index ffca242a..521b5304 100644 --- a/assets/seed-data/Sys_UserInvite.json +++ b/assets/seed-data/Sys_UserInvite.json @@ -1,15 +1,18 @@ [ { "Id": 370942943322181, + "SelfDepositAllowed": true, }, { "Id": 560217289236492, "OwnerDeptId": 372119301627909, "OwnerId": 370942943322181, + "SelfDepositAllowed": true, }, { "Id": 664362432344581, "OwnerDeptId": 372119301627909, "OwnerId": 370942943322181, + "SelfDepositAllowed": true, } ] \ No newline at end of file diff --git a/build/stylecop.analyzers.ruleset b/build/stylecop.analyzers.ruleset index b8faaff9..ed0f5234 100644 --- a/build/stylecop.analyzers.ruleset +++ b/build/stylecop.analyzers.ruleset @@ -16,7 +16,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/scripts/fn_GetChannelDealer.sql b/scripts/fn_GetChannelDealer.sql new file mode 100644 index 00000000..6f3028db --- /dev/null +++ b/scripts/fn_GetChannelDealer.sql @@ -0,0 +1,26 @@ +CREATE FUNCTION [RM].[fn_GetChannelDealer] (@UserId BIGINT) RETURNS TABLE AS RETURN ( + WITH [as_tree_cte] AS ( + SELECT + 0 AS cte_level, + a.[Id], + a.[OwnerId] + FROM + [RM].[Sys_UserInvite] a + WHERE + (a.[Id] = @UserId) UNION ALL + SELECT + wct1.cte_level + 1 AS cte_level, + wct2.[Id], + wct2.[OwnerId] + FROM + [as_tree_cte] wct1 + INNER JOIN [RM].[Sys_UserInvite] wct2 ON wct2.[Id] = wct1.[OwnerId] + ) SELECT TOP + 1 a.[Id] AS ChannelDealerId + FROM + [as_tree_cte] a + WHERE + a.id <> 370942943322181 + ORDER BY + a.cte_level DESC +) \ No newline at end of file diff --git a/scripts/gen.cs.tt b/scripts/gen.cs.tt index b75c4dcc..85ab9f5a 100644 --- a/scripts/gen.cs.tt +++ b/scripts/gen.cs.tt @@ -6,7 +6,6 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // @@ -64,14 +63,12 @@ public sealed class Ln <# var xml = new XmlDocument(); xml.Load("../assets/res/Ln.resx"); - foreach (XmlNode data in xml.SelectNodes("//root/data")!) - { + foreach (XmlNode data in xml.SelectNodes("//root/data")!) { #> /// /// <#= data.SelectSingleNode("value")?.InnerText #> /// - public static string <#= - data.Attributes!["name"].Value.Replace(" ", "_") #> => ResourceManager.GetString("<#= data.Attributes!["name"].Value #>", Culture); + public static string <#= data.Attributes!["name"].Value.Replace(" ", "_") #> => ResourceManager.GetString("<#= data.Attributes!["name"].Value #>", Culture); <# } #> diff --git a/scripts/gen.resx.tt b/scripts/gen.resx.tt index 29f8b5cd..c752fde4 100644 --- a/scripts/gen.resx.tt +++ b/scripts/gen.resx.tt @@ -29,8 +29,7 @@ <# var regex = new Regex(@"^\d", RegexOptions.Compiled); - foreach (var line in Directory.GetFiles("../assets/res/", "*.ln").SelectMany(x => File.ReadLines(x)).Distinct()) - { + foreach (var line in Directory.GetFiles("../assets/res/", "*.ln").SelectMany(x => File.ReadLines(x)).Distinct()) { #> <#= line #>" xml:space="preserve"><#= line #> <# diff --git a/src/backend/NetAdmin/NetAdmin.Application/Extensions/ISelectExtensions.cs b/src/backend/NetAdmin/NetAdmin.Application/Extensions/ISelectExtensions.cs index 0df019af..394ca974 100644 --- a/src/backend/NetAdmin/NetAdmin.Application/Extensions/ISelectExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.Application/Extensions/ISelectExtensions.cs @@ -11,12 +11,16 @@ public static class ISelectExtensions /// /// 附加其他过滤条件 /// - public static ISelect AppendOtherFilters(this ISelect me, QueryReq req) - where TQuery : DataAbstraction, new() - { + public static ISelect AppendOtherFilters( + this ISelect me + , QueryReq req + ) + where TQuery : DataAbstraction, new() { if (req.IgnoreOwner) { - me = me.DisableGlobalFilter(Chars.FLG_FREE_SQL_GLOBAL_FILTER_SELF, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT - , Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_CHILDREN, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_SON); + me = me.DisableGlobalFilter( + Chars.FLG_FREE_SQL_GLOBAL_FILTER_SELF, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_CHILDREN + , Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_SON + ); } return me; diff --git a/src/backend/NetAdmin/NetAdmin.Application/Extensions/UnitOfWorkManagerExtensions.cs b/src/backend/NetAdmin/NetAdmin.Application/Extensions/UnitOfWorkManagerExtensions.cs index be782b30..121afe87 100644 --- a/src/backend/NetAdmin/NetAdmin.Application/Extensions/UnitOfWorkManagerExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.Application/Extensions/UnitOfWorkManagerExtensions.cs @@ -8,11 +8,14 @@ public static class UnitOfWorkManagerExtensions /// /// 事务操作 /// - public static async Task AtomicOperateAsync(this UnitOfWorkManager me, Func handle, Func onErrorHandle = null) - { - var logger = LogHelper.Get(); + public static async Task AtomicOperateAsync( + this UnitOfWorkManager me + , Func handle + , Func onErrorHandle = null + ) { + var logger = LogHelper.Get(); using var unitOfWork = me.Begin(); - var hashCode = unitOfWork.GetHashCode(); + var hashCode = unitOfWork.GetHashCode(); try { #if DEBUG logger?.Debug($"{Ln.开始事务}: {hashCode}"); diff --git a/src/backend/NetAdmin/NetAdmin.Application/Repositories/BasicRepository.cs b/src/backend/NetAdmin/NetAdmin.Application/Repositories/BasicRepository.cs index 779faee2..39ae2c81 100644 --- a/src/backend/NetAdmin/NetAdmin.Application/Repositories/BasicRepository.cs +++ b/src/backend/NetAdmin/NetAdmin.Application/Repositories/BasicRepository.cs @@ -8,7 +8,7 @@ namespace NetAdmin.Application.Repositories; /// public sealed class BasicRepository(IFreeSql fSql, UnitOfWorkManager uowManger, ContextUserToken userToken) : DefaultRepository(fSql, uowManger) - where TEntity : EntityBase // + where TEntity : EntityBase where TPrimary : IEquatable { /// diff --git a/src/backend/NetAdmin/NetAdmin.Application/Services/RedisService.cs b/src/backend/NetAdmin/NetAdmin.Application/Services/RedisService.cs index dc7c304b..6c8dbda4 100644 --- a/src/backend/NetAdmin/NetAdmin.Application/Services/RedisService.cs +++ b/src/backend/NetAdmin/NetAdmin.Application/Services/RedisService.cs @@ -13,31 +13,33 @@ namespace NetAdmin.Application.Services; /// public abstract class RedisService(BasicRepository rpo) : RepositoryService(rpo) - where TEntity : EntityBase // + where TEntity : EntityBase where TPrimary : IEquatable { /// /// Redis Database /// - protected IDatabase RedisDatabase { get; } // - = App.GetService() - .GetDatabase(App.GetOptions().Instances.First(x => x.Name == Chars.FLG_REDIS_INSTANCE_DATA_CACHE).Database); + protected IDatabase RedisDatabase { get; } = App + .GetService() + .GetDatabase(App.GetOptions().Instances.First(x => x.Name == Chars.FLG_REDIS_INSTANCE_DATA_CACHE).Database); /// /// 获取锁 /// - protected Task GetLockerAsync(string lockerName) - { - return RedisLocker.GetLockerAsync(RedisDatabase, lockerName, TimeSpan.FromSeconds(Numbers.SECS_REDIS_LOCK_EXPIRY) - , Numbers.MAX_LIMIT_RETRY_CNT_REDIS_LOCK, TimeSpan.FromSeconds(Numbers.SECS_REDIS_LOCK_RETRY_DELAY)); + protected Task GetLockerAsync(string lockerName) { + return RedisLocker.GetLockerAsync( + RedisDatabase, lockerName, TimeSpan.FromSeconds(Numbers.SECS_REDIS_LOCK_EXPIRY), Numbers.MAX_LIMIT_RETRY_CNT_REDIS_LOCK + , TimeSpan.FromSeconds(Numbers.SECS_REDIS_LOCK_RETRY_DELAY) + ); } /// /// 获取锁(仅获取一次) /// - protected Task GetLockerOnceAsync(string lockerName) - { - return RedisLocker.GetLockerAsync(RedisDatabase, lockerName, TimeSpan.FromSeconds(Numbers.SECS_REDIS_LOCK_EXPIRY), 1 - , TimeSpan.FromSeconds(Numbers.SECS_REDIS_LOCK_RETRY_DELAY)); + protected Task GetLockerOnceAsync(string lockerName) { + return RedisLocker.GetLockerAsync( + RedisDatabase, lockerName, TimeSpan.FromSeconds(Numbers.SECS_REDIS_LOCK_EXPIRY), 1 + , TimeSpan.FromSeconds(Numbers.SECS_REDIS_LOCK_RETRY_DELAY) + ); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Application/Services/RepositoryService.cs b/src/backend/NetAdmin/NetAdmin.Application/Services/RepositoryService.cs index 7c8a8b88..7a8c92c8 100644 --- a/src/backend/NetAdmin/NetAdmin.Application/Services/RepositoryService.cs +++ b/src/backend/NetAdmin/NetAdmin.Application/Services/RepositoryService.cs @@ -1,5 +1,3 @@ -using CsvHelper; -using Microsoft.Net.Http.Headers; using NetAdmin.Application.Repositories; using NetAdmin.Domain; using NetAdmin.Domain.Contexts; @@ -17,7 +15,7 @@ namespace NetAdmin.Application.Services; /// 主键类型 /// 日志类型 public abstract class RepositoryService(BasicRepository rpo) : ServiceBase - where TEntity : EntityBase // + where TEntity : EntityBase where TPrimary : IEquatable { /// @@ -28,7 +26,8 @@ public abstract class RepositoryService(BasicReposit /// /// 启用级联保存 /// - protected bool EnableCascadeSave { + protected bool EnableCascadeSave + { get => Rpo.DbContextOptions.EnableCascadeSave; set => Rpo.DbContextOptions.EnableCascadeSave = value; } @@ -36,11 +35,13 @@ public abstract class RepositoryService(BasicReposit /// /// 导出实体 /// - protected static async Task ExportAsync( // - Func, ISelectGrouping> selector, QueryReq query, string fileName - , Expression, object>> listExp = null) - where TQuery : DataAbstraction, new() - { + protected static async Task ExportAsync( + Func, ISelectGrouping> selector + , QueryReq query + , string fileName + , Expression, object>> listExp = null + ) + where TQuery : DataAbstraction, new() { var list = await selector(query).Take(Numbers.MAX_LIMIT_EXPORT).ToListAsync(listExp).ConfigureAwait(false); return await GetExportFileStreamAsync(fileName, list).ConfigureAwait(false); } @@ -48,11 +49,14 @@ public abstract class RepositoryService(BasicReposit /// /// 导出实体 /// - protected static async Task ExportAsync( // - Func, ISelect> selector, QueryReq query, string fileName, Expression> listExp = null - , Func listHandle = null) - where TQuery : DataAbstraction, new() - { + protected static async Task ExportAsync( + Func, ISelect> selector + , QueryReq query + , string fileName + , Expression> listExp = null + , Func listHandle = null + ) + where TQuery : DataAbstraction, new() { var select = selector(query).WithNoLockNoWait().Take(Numbers.MAX_LIMIT_EXPORT); object list = listExp == null ? await select.ToListAsync().ConfigureAwait(false) : await select.ToListAsync(listExp).ConfigureAwait(false); @@ -65,14 +69,16 @@ public abstract class RepositoryService(BasicReposit /// /// 唯一索引冲突处理 /// - protected static async Task OnUniqueIndexConflictAsync(Func actionTry, Func actionCatch = null) - { + protected static async Task OnUniqueIndexConflictAsync( + Func actionTry + , Func actionCatch = null + ) { try { await actionTry().ConfigureAwait(false); } - catch (Exception ex) when (ex.Message.Contains(Chars.FLG_DB_EXCEPTION_PRIMARY_KEY_CONFLICT) || - ex.Message.Contains(Chars.FLG_DB_EXCEPTION_UNIQUE_CONSTRAINT_CONFLICT) || - ex.Message.Contains(Chars.FLG_DB_EXCEPTION_IDX)) { + catch (Exception ex) when (ex.Message.Contains(Chars.FLG_DB_EXCEPTION_PRIMARY_KEY_CONFLICT) + || ex.Message.Contains(Chars.FLG_DB_EXCEPTION_UNIQUE_CONSTRAINT_CONFLICT) + || ex.Message.Contains(Chars.FLG_DB_EXCEPTION_IDX)) { if (actionCatch != null) { await actionCatch().ConfigureAwait(false); } @@ -90,20 +96,23 @@ public abstract class RepositoryService(BasicReposit /// 是否忽略版本锁 /// 是否忽略全局数据权限过滤 /// 更新行数 - protected Task UpdateAsync( // - TEntity newValue // - , List includeFields = null // - , List excludeFields = null // - , Expression> whereExp = null // - , string whereSql = null // - , bool ignoreVersion = false, bool disableGlobalDataFilter = false) - { + protected Task UpdateAsync( + TEntity newValue + , List includeFields = null + , List excludeFields = null + , Expression> whereExp = null + , string whereSql = null + , bool ignoreVersion = false + , bool disableGlobalDataFilter = false + ) { // 默认匹配主键 whereExp ??= a => a.Id.Equals(newValue.Id); var update = BuildUpdate(newValue, includeFields, excludeFields, ignoreVersion).Where(whereExp).Where(whereSql); if (disableGlobalDataFilter) { - update = update.DisableGlobalFilter(Chars.FLG_FREE_SQL_GLOBAL_FILTER_SELF, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT - , Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_CHILDREN, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_SON); + update = update.DisableGlobalFilter( + Chars.FLG_FREE_SQL_GLOBAL_FILTER_SELF, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_CHILDREN + , Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_SON + ); } return update.ExecuteEffectsAsync(); @@ -120,50 +129,59 @@ public abstract class RepositoryService(BasicReposit /// 查询sql /// 是否忽略版本锁 /// 更新后的实体列表 - protected Task> UpdateReturnListAsync( // - TEntity newValue // - , List includeFields = null // - , List excludeFields = null // - , Expression> whereExp = null // - , string whereSql = null // - , bool ignoreVersion = false) - { + protected Task> UpdateReturnListAsync( + TEntity newValue + , List includeFields = null + , List excludeFields = null + , Expression> whereExp = null + , string whereSql = null + , bool ignoreVersion = false + ) { // 默认匹配主键 whereExp ??= a => a.Id.Equals(newValue.Id); return BuildUpdate(newValue, includeFields, excludeFields, ignoreVersion).Where(whereExp).Where(whereSql).ExecuteUpdatedAsync(); } #endif - private static async Task GetExportFileStreamAsync(string fileName, object list) - { - var listTyped = list.Adapt>(); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - var csv = new CsvWriter(writer, CultureInfo.InvariantCulture); - csv.WriteHeader(); - await csv.NextRecordAsync().ConfigureAwait(false); + #pragma warning disable S2326 + private static Task GetExportFileStreamAsync( + string fileName + , object list + ) { + #pragma warning restore S2326 + throw new NotImplementedException(); - foreach (var item in listTyped) { - csv.WriteRecord(item); - await csv.NextRecordAsync().ConfigureAwait(false); - } - - await csv.FlushAsync().ConfigureAwait(false); - _ = stream.Seek(0, SeekOrigin.Begin); - - App.HttpContext.Response.Headers.ContentDisposition - = new ContentDispositionHeaderValue(Chars.FLG_HTTP_HEADER_VALUE_ATTACHMENT) { - FileNameStar - = $"{fileName}_{DateTime.Now:yyyy.MM.dd-HH.mm.ss}.csv" - }.ToString(); - - return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM); + // var listTyped = list.Adapt>(); + // var stream = new MemoryStream(); + // var writer = new StreamWriter(stream); + // var csv = new CsvWriter(writer, CultureInfo.InvariantCulture); + // csv.WriteHeader(); + // await csv.NextRecordAsync().ConfigureAwait(false); + // + // foreach (var item in listTyped) { + // csv.WriteRecord(item); + // await csv.NextRecordAsync().ConfigureAwait(false); + // } + // + // await csv.FlushAsync().ConfigureAwait(false); + // _ = stream.Seek(0, SeekOrigin.Begin); + // + // App.HttpContext.Response.Headers.ContentDisposition + // = new ContentDispositionHeaderValue(Chars.FLG_HTTP_HEADER_VALUE_ATTACHMENT) + // { + // FileNameStar = $"{fileName}_{DateTime.Now:yyyy.MM.dd-HH.mm.ss}.csv" + // }.ToString(); + // + // return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM); } - private static Dictionary IncludeToDictionary(TEntity entity, List includeFields) - { + private static Dictionary IncludeToDictionary( + TEntity entity + , List includeFields + ) { var ret = includeFields!.ToDictionary( - x => x, x => typeof(TEntity).GetProperty(x, BindingFlags.Public | BindingFlags.Instance)!.GetValue(entity)); + x => x, x => typeof(TEntity).GetProperty(x, BindingFlags.Public | BindingFlags.Instance)!.GetValue(entity) + ); // ReSharper disable once ConvertIfStatementToSwitchStatement if (entity is IFieldModifiedUser) { @@ -172,7 +190,7 @@ public abstract class RepositoryService(BasicReposit return ret; } - ret.Add(nameof(IFieldModifiedUser.ModifiedUserId), userInfo.Id); + ret.Add(nameof(IFieldModifiedUser.ModifiedUserId), userInfo.Id); ret.Add(nameof(IFieldModifiedUser.ModifiedUserName), userInfo.UserName); } @@ -184,8 +202,12 @@ public abstract class RepositoryService(BasicReposit return ret; } - private IUpdate BuildUpdate(TEntity entity, List includeFields, List excludeFields, bool ignoreVersion) - { + private IUpdate BuildUpdate( + TEntity entity + , List includeFields + , List excludeFields + , bool ignoreVersion + ) { IUpdate updateExp; if (includeFields.NullOrEmpty()) { updateExp = Rpo.UpdateDiy.SetSource(entity); diff --git a/src/backend/NetAdmin/NetAdmin.Application/Services/ServiceBase.cs b/src/backend/NetAdmin/NetAdmin.Application/Services/ServiceBase.cs index f25431e9..b77bd88c 100644 --- a/src/backend/NetAdmin/NetAdmin.Application/Services/ServiceBase.cs +++ b/src/backend/NetAdmin/NetAdmin.Application/Services/ServiceBase.cs @@ -8,8 +8,7 @@ public abstract class ServiceBase : ServiceBase /// /// Initializes a new instance of the class. /// - protected ServiceBase() // - { + protected ServiceBase() { Logger = S>(); } @@ -27,8 +26,7 @@ public abstract class ServiceBase : IScoped, IService /// /// Initializes a new instance of the class. /// - protected ServiceBase() - { + protected ServiceBase() { UserToken = S(); ServiceId = Guid.NewGuid(); } @@ -44,8 +42,7 @@ public abstract class ServiceBase : IScoped, IService /// protected static T S() #pragma warning restore S2325, CA1822 - where T : class - { + where T : class { return App.GetService(); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Cache/DistributedCache.cs b/src/backend/NetAdmin/NetAdmin.Cache/DistributedCache.cs index 50ce7975..1211d696 100644 --- a/src/backend/NetAdmin/NetAdmin.Cache/DistributedCache.cs +++ b/src/backend/NetAdmin/NetAdmin.Cache/DistributedCache.cs @@ -18,8 +18,12 @@ public abstract class DistributedCache(IDistributedCache cache, TServi /// 滑动过期时间 /// 缓存对象类型 /// 缓存对象 - protected Task CreateAsync(string key, T createObj, TimeSpan? absLifeTime = null, TimeSpan? slideLifeTime = null) - { + protected Task CreateAsync( + string key + , T createObj + , TimeSpan? absLifeTime = null + , TimeSpan? slideLifeTime = null + ) { var cacheWrite = createObj.ToJson(); var options = new DistributedCacheEntryOptions(); @@ -37,8 +41,7 @@ public abstract class DistributedCache(IDistributedCache cache, TServi /// /// 获取缓存 /// - protected async Task GetAsync(string key) - { + protected async Task GetAsync(string key) { var cacheRead = await Cache.GetStringAsync(key).ConfigureAwait(false); try { return cacheRead != null ? cacheRead.ToObject() : default; @@ -51,8 +54,10 @@ public abstract class DistributedCache(IDistributedCache cache, TServi /// /// 获取缓存键 /// - protected string GetCacheKey(string id = "0", [CallerMemberName] string memberName = null) - { + protected string GetCacheKey( + string id = "0" + , [CallerMemberName] string memberName = null + ) { return $"{GetType().FullName}.{memberName}.{id}"; } @@ -65,8 +70,12 @@ public abstract class DistributedCache(IDistributedCache cache, TServi /// 滑动过期时间 /// 缓存对象类型 /// 缓存对象 - protected async Task GetOrCreateAsync(string key, Func> createProc, TimeSpan? absLifeTime = null, TimeSpan? slideLifeTime = null) - { + protected async Task GetOrCreateAsync( + string key + , Func> createProc + , TimeSpan? absLifeTime = null + , TimeSpan? slideLifeTime = null + ) { var cacheRead = await GetAsync(key).ConfigureAwait(false); if (cacheRead is not null && App.HttpContext?.Request.Headers.CacheControl.FirstOrDefault() != Chars.FLG_HTTP_HEADER_VALUE_NO_CACHE) { return cacheRead; @@ -86,8 +95,7 @@ public abstract class DistributedCache(IDistributedCache cache, TServi /// /// 删除缓存 /// - protected Task RemoveAsync(string key) - { + protected Task RemoveAsync(string key) { return Cache.RemoveAsync(key); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/AlipayAttribute.cs b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/AlipayAttribute.cs index 47b7dfef..9a8f7df5 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/AlipayAttribute.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/AlipayAttribute.cs @@ -9,15 +9,13 @@ public sealed class AlipayAttribute : ValidationAttribute /// /// Initializes a new instance of the class. /// - public AlipayAttribute() - { + public AlipayAttribute() { ErrorMessageResourceName = nameof(Ln.支付宝账号); ErrorMessageResourceType = typeof(Ln); } /// - public override bool IsValid(object value) - { + public override bool IsValid(object value) { return new MobileAttribute().IsValid(value) || new EmailAddressAttribute().IsValid(value); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/ApiIdAttribute.cs b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/ApiIdAttribute.cs index 0ba1c55c..d2fec186 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/ApiIdAttribute.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/ApiIdAttribute.cs @@ -9,10 +9,13 @@ namespace NetAdmin.Domain.Attributes.DataValidation; public sealed class ApiIdAttribute : ValidationAttribute { /// - protected override ValidationResult IsValid(object value, ValidationContext validationContext) - { + protected override ValidationResult IsValid( + object value + , ValidationContext validationContext + ) { var service = App.GetService( - App.EffectiveTypes.Single(x => x.FullName == "NetAdmin.SysComponent.Application.Services.Sys.Dependency.IApiService")); + App.EffectiveTypes.Single(x => x.FullName == "NetAdmin.SysComponent.Application.Services.Sys.Dependency.IApiService") + ); var req = new QueryReq { Filter = new QueryApiReq { Id = value as string } }; diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/CertificateAttribute.cs b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/CertificateAttribute.cs index 3c70b01a..a8d1ff97 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/CertificateAttribute.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/CertificateAttribute.cs @@ -9,9 +9,8 @@ public sealed class CertificateAttribute : RegexAttribute /// /// Initializes a new instance of the class. /// - public CertificateAttribute() // - : base(Chars.RGX_CERTIFICATE) - { + public CertificateAttribute() + : base(Chars.RGX_CERTIFICATE) { ErrorMessageResourceName = nameof(Ln.无效证件号码); ErrorMessageResourceType = typeof(Ln); } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/ChineseNameAttribute.cs b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/ChineseNameAttribute.cs index c1609be0..6dd4b713 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/ChineseNameAttribute.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/ChineseNameAttribute.cs @@ -9,9 +9,8 @@ public sealed class ChineseNameAttribute : RegexAttribute /// /// Initializes a new instance of the class. /// - public ChineseNameAttribute() // - : base(Chars.RGXL_CHINESE_NAME) - { + public ChineseNameAttribute() + : base(Chars.RGXL_CHINESE_NAME) { ErrorMessageResourceName = nameof(Ln.中文姓名); ErrorMessageResourceType = typeof(Ln); } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/CronAttribute.cs b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/CronAttribute.cs index 38d40ca5..4c9738d6 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/CronAttribute.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/CronAttribute.cs @@ -9,9 +9,8 @@ public sealed class CronAttribute : RegexAttribute /// /// Initializes a new instance of the class. /// - public CronAttribute() // - : base(Chars.RGXL_CRON) - { + public CronAttribute() + : base(Chars.RGXL_CRON) { ErrorMessageResourceName = nameof(Ln.时间表达式); ErrorMessageResourceType = typeof(Ln); } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/EmailAttribute.cs b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/EmailAttribute.cs index 0573aaa2..f897f695 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/EmailAttribute.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/EmailAttribute.cs @@ -9,9 +9,8 @@ public sealed class EmailAttribute : RegexAttribute /// /// Initializes a new instance of the class. /// - public EmailAttribute() // - : base(Chars.RGXL_EMAIL) - { + public EmailAttribute() + : base(Chars.RGXL_EMAIL) { ErrorMessageResourceName = nameof(Ln.电子邮箱); ErrorMessageResourceType = typeof(Ln); } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/InviteCodeAttribute.cs b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/InviteCodeAttribute.cs index a55a02ec..d5b1c591 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/InviteCodeAttribute.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/InviteCodeAttribute.cs @@ -9,9 +9,8 @@ public sealed class InviteCodeAttribute : RegexAttribute /// /// Initializes a new instance of the class. /// - public InviteCodeAttribute() // - : base(Chars.RGX_INVITE_CODE) - { + public InviteCodeAttribute() + : base(Chars.RGX_INVITE_CODE) { ErrorMessageResourceName = nameof(Ln.邀请码不正确); ErrorMessageResourceType = typeof(Ln); } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/JsonStringAttribute.cs b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/JsonStringAttribute.cs index f46eb3aa..2f43c35e 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/JsonStringAttribute.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/JsonStringAttribute.cs @@ -7,8 +7,10 @@ namespace NetAdmin.Domain.Attributes.DataValidation; public sealed class JsonStringAttribute : ValidationAttribute { /// - protected override ValidationResult IsValid(object value, ValidationContext validationContext) - { + protected override ValidationResult IsValid( + object value + , ValidationContext validationContext + ) { return (value as string).IsJsonString() ? ValidationResult.Success : new ValidationResult(Ln.非JSON字符串, [validationContext.MemberName]); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/MobileAttribute.cs b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/MobileAttribute.cs index 0d550f0d..9b0ffb43 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/MobileAttribute.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/MobileAttribute.cs @@ -9,9 +9,8 @@ public sealed class MobileAttribute : RegexAttribute /// /// Initializes a new instance of the class. /// - public MobileAttribute() // - : base(Chars.RGX_MOBILE) - { + public MobileAttribute() + : base(Chars.RGX_MOBILE) { ErrorMessageResourceName = nameof(Ln.手机号码不正确); ErrorMessageResourceType = typeof(Ln); } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/PasswordAttribute.cs b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/PasswordAttribute.cs index 0ff71759..596b157e 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/PasswordAttribute.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/PasswordAttribute.cs @@ -9,9 +9,8 @@ public sealed class PasswordAttribute : RegexAttribute /// /// Initializes a new instance of the class. /// - public PasswordAttribute() // - : base(Chars.RGX_PASSWORD) - { + public PasswordAttribute() + : base(Chars.RGX_PASSWORD) { ErrorMessageResourceName = nameof(Ln._8位以上数字字母组合); ErrorMessageResourceType = typeof(Ln); } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/PayPasswordAttribute.cs b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/PayPasswordAttribute.cs index f97f1c5c..400e08c6 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/PayPasswordAttribute.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/PayPasswordAttribute.cs @@ -9,9 +9,8 @@ public sealed class PayPasswordAttribute : RegexAttribute /// /// Initializes a new instance of the class. /// - public PayPasswordAttribute() // - : base(Chars.RGX_PAY_PASSWORD) - { + public PayPasswordAttribute() + : base(Chars.RGX_PAY_PASSWORD) { ErrorMessageResourceName = nameof(Ln._6位数字); ErrorMessageResourceType = typeof(Ln); } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/PortAttribute.cs b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/PortAttribute.cs index 36d55df8..92549057 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/PortAttribute.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/PortAttribute.cs @@ -9,9 +9,8 @@ public sealed class PortAttribute : RangeAttribute /// /// Initializes a new instance of the class. /// - public PortAttribute() // - : base(1, ushort.MaxValue) - { + public PortAttribute() + : base(1, ushort.MaxValue) { ErrorMessageResourceName = nameof(Ln.无效端口号); ErrorMessageResourceType = typeof(Ln); } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/RegexAttribute.cs b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/RegexAttribute.cs index d00e62c5..5a1a8ed5 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/RegexAttribute.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/RegexAttribute.cs @@ -11,6 +11,7 @@ public class RegexAttribute : RegularExpressionAttribute /// /// Initializes a new instance of the class. /// - protected RegexAttribute(string pattern) // - : base(pattern) { } + protected RegexAttribute(string pattern) + : base(pattern) { + } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/SpecificDeptAttribute.cs b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/SpecificDeptAttribute.cs index b3bd1cbd..0798d67b 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/SpecificDeptAttribute.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/SpecificDeptAttribute.cs @@ -10,8 +10,10 @@ namespace NetAdmin.Domain.Attributes.DataValidation; public sealed class SpecificDeptAttribute : ValidationAttribute { /// - protected override ValidationResult IsValid(object value, ValidationContext validationContext) - { + protected override ValidationResult IsValid( + object value + , ValidationContext validationContext + ) { if (validationContext.ObjectInstance is not CreateRoleReq { DataScope: DataScopes.SpecificDept }) { return ValidationResult.Success; } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/TelephoneAttribute.cs b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/TelephoneAttribute.cs index c521e97a..e9c7e695 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/TelephoneAttribute.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/TelephoneAttribute.cs @@ -9,9 +9,8 @@ public sealed class TelephoneAttribute : RegexAttribute /// /// Initializes a new instance of the class. /// - public TelephoneAttribute() // - : base(Chars.RGX_TELEPHONE) - { + public TelephoneAttribute() + : base(Chars.RGX_TELEPHONE) { ErrorMessageResourceName = nameof(Ln.区号电话号码分机号); ErrorMessageResourceType = typeof(Ln); } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/UserIdAttribute.cs b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/UserIdAttribute.cs index 35dc98a1..7b26ff43 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/UserIdAttribute.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/UserIdAttribute.cs @@ -9,10 +9,13 @@ namespace NetAdmin.Domain.Attributes.DataValidation; public sealed class UserIdAttribute : ValidationAttribute { /// - protected override ValidationResult IsValid(object value, ValidationContext validationContext) - { + protected override ValidationResult IsValid( + object value + , ValidationContext validationContext + ) { var service = App.GetService( - App.EffectiveTypes.Single(x => x.FullName == "NetAdmin.SysComponent.Application.Services.Sys.Dependency.IUserService")); + App.EffectiveTypes.Single(x => x.FullName == "NetAdmin.SysComponent.Application.Services.Sys.Dependency.IUserService") + ); var req = new QueryReq { Filter = new QueryUserReq { Id = (long)value! } }; diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/UserNameAttribute.cs b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/UserNameAttribute.cs index b901b5d4..4e22219a 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/UserNameAttribute.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/UserNameAttribute.cs @@ -9,15 +9,13 @@ public sealed class UserNameAttribute : RegexAttribute /// /// Initializes a new instance of the class. /// - public UserNameAttribute() // - : base(Chars.RGX_USERNAME) - { + public UserNameAttribute() + : base(Chars.RGX_USERNAME) { ErrorMessageResourceType = typeof(Ln); } /// - public override bool IsValid(object value) - { + public override bool IsValid(object value) { if (!base.IsValid(value)) { ErrorMessageResourceName = nameof(Ln.用户名不符合要求); return false; diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/VerifyCodeAttribute.cs b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/VerifyCodeAttribute.cs index 07cdf1c1..c8b3a7e6 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/VerifyCodeAttribute.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Attributes/DataValidation/VerifyCodeAttribute.cs @@ -9,9 +9,8 @@ public sealed class VerifyCodeAttribute : RegexAttribute /// /// Initializes a new instance of the class. /// - public VerifyCodeAttribute() // - : base(Chars.RGX_VERIFY_CODE) - { + public VerifyCodeAttribute() + : base(Chars.RGX_VERIFY_CODE) { ErrorMessageResourceName = nameof(Ln.验证码不正确); ErrorMessageResourceType = typeof(Ln); } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Contexts/ContextUserInfo.cs b/src/backend/NetAdmin/NetAdmin.Domain/Contexts/ContextUserInfo.cs index 481e2133..819e179a 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Contexts/ContextUserInfo.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Contexts/ContextUserInfo.cs @@ -10,8 +10,7 @@ public sealed record ContextUserInfo : QueryUserRsp /// /// 从HttpContext 创建上下文用户信息 /// - public static ContextUserInfo Create() - { + public static ContextUserInfo Create() { var ret = App.HttpContext?.Items[nameof(Chars.FLG_CONTEXT_USER_INFO)] as QueryUserRsp; return ret?.Adapt(); } @@ -19,8 +18,7 @@ public sealed record ContextUserInfo : QueryUserRsp /// /// 是否存在于 HttpContext /// - public static bool HasInContext() - { + public static bool HasInContext() { return App.HttpContext?.Items.ContainsKey(Chars.FLG_CONTEXT_USER_INFO) ?? false; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Contexts/ContextUserToken.cs b/src/backend/NetAdmin/NetAdmin.Domain/Contexts/ContextUserToken.cs index 6ec5e9cb..955c4bea 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Contexts/ContextUserToken.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Contexts/ContextUserToken.cs @@ -32,8 +32,7 @@ public sealed record ContextUserToken : DataAbstraction /// /// 从HttpContext 创建上下文用户 /// - public static ContextUserToken Create() - { + public static ContextUserToken Create() { var claim = App.User?.FindFirst(nameof(ContextUserToken)); return claim?.Value.ToObject(); } @@ -41,18 +40,22 @@ public sealed record ContextUserToken : DataAbstraction /// /// 从 QueryUserRsp 创建上下文用户 /// - public static ContextUserToken Create(long id, Guid token, string userName, long deptId) - { + public static ContextUserToken Create( + long id + , Guid token + , string userName + , long deptId + ) { return new ContextUserToken { Id = id, Token = token, UserName = userName, DeptId = deptId }; } /// /// 从 Json Web Token 创建上下文用户 /// - public static ContextUserToken Create(string jwt) - { - var claim = JWTEncryption.ReadJwtToken(jwt.TrimPrefix($"{Chars.FLG_HTTP_HEADER_VALUE_AUTH_SCHEMA} ")) - ?.Claims.FirstOrDefault(x => x.Type == nameof(ContextUserToken)); + public static ContextUserToken Create(string jwt) { + var claim = JWTEncryption + .ReadJwtToken(jwt.TrimPrefix($"{Chars.FLG_HTTP_HEADER_VALUE_AUTH_SCHEMA} ")) + ?.Claims.FirstOrDefault(x => x.Type == nameof(ContextUserToken)); return claim?.Value.ToObject(); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DataAbstraction.cs b/src/backend/NetAdmin/NetAdmin.Domain/DataAbstraction.cs index e09be2fc..c5418325 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DataAbstraction.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DataAbstraction.cs @@ -14,31 +14,28 @@ public abstract record DataAbstraction : IValidatableObject /// 如果数据校验失败,抛出异常 /// /// NetAdminValidateException - public void ThrowIfInvalid() - { + public void ThrowIfInvalid() { if (HasValidated) { return; } var validationResult = this.TryValidate(); if (!validationResult.IsValid) { - throw new NetAdminValidateException(validationResult.ValidationResults.ToDictionary( // - x => x.MemberNames.First() // - , x => new[] { x.ErrorMessage })); + throw new NetAdminValidateException( + validationResult.ValidationResults.ToDictionary(x => x.MemberNames.First(), x => new[] { x.ErrorMessage }) + ); } } /// - public override string ToString() - { + public override string ToString() { return this.ToJson(); } /// /// 截断所有字符串属性 以符合[MaxLength(x)]特性 /// - public void TruncateStrings() - { + public void TruncateStrings() { foreach (var property in GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(x => x.PropertyType == typeof(string))) { var maxLen = property.GetCustomAttribute(true)?.Length; if (maxLen is null or 0) { @@ -56,8 +53,7 @@ public abstract record DataAbstraction : IValidatableObject } /// - public IEnumerable Validate(ValidationContext validationContext) - { + public IEnumerable Validate(ValidationContext validationContext) { HasValidated = true; return ValidateInternal(validationContext); } @@ -65,8 +61,7 @@ public abstract record DataAbstraction : IValidatableObject /// /// 内部验证 /// - protected virtual IEnumerable ValidateInternal(ValidationContext validationContext) - { + protected virtual IEnumerable ValidateInternal(ValidationContext validationContext) { yield return ValidationResult.Success; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/ImmutableEntity.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/ImmutableEntity.cs index 91d1429e..76042b73 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/ImmutableEntity.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/ImmutableEntity.cs @@ -7,7 +7,6 @@ public abstract record ImmutableEntity : ImmutableEntity /// 唯一编码 /// [Column(IsIdentity = false, IsPrimary = true, Position = 1)] - [CsvIgnore] [Snowflake] public override long Id { get; init; } } @@ -23,7 +22,6 @@ public abstract record ImmutableEntity : LiteImmutableEntity, IFieldCreate /// 创建者编号 /// [Column(CanUpdate = false, Position = -1)] - [CsvIgnore] [JsonIgnore] public virtual long? CreatedUserId { get; init; } @@ -31,7 +29,6 @@ public abstract record ImmutableEntity : LiteImmutableEntity, IFieldCreate /// 创建者用户名 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)] - [CsvIgnore] [JsonIgnore] public virtual string CreatedUserName { get; init; } @@ -39,6 +36,5 @@ public abstract record ImmutableEntity : LiteImmutableEntity, IFieldCreate /// 唯一编码 /// [Column(IsIdentity = false, IsPrimary = true, Position = 1)] - [CsvIgnore] public override T Id { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/LiteImmutableEntity.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/LiteImmutableEntity.cs index 7d22adc6..28bbb6ac 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/LiteImmutableEntity.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/LiteImmutableEntity.cs @@ -7,7 +7,6 @@ public abstract record LiteImmutableEntity : LiteImmutableEntity /// 唯一编码 /// [Column(IsIdentity = false, IsPrimary = true, Position = 1)] - [CsvIgnore] [Snowflake] public override long Id { get; init; } } @@ -23,7 +22,6 @@ public abstract record LiteImmutableEntity : EntityBase, IFieldCreatedTime /// 创建时间 /// [Column(ServerTime = DateTimeKind.Local, CanUpdate = false, Position = -1)] - [CsvIgnore] [JsonIgnore] public virtual DateTime CreatedTime { get; init; } @@ -31,7 +29,6 @@ public abstract record LiteImmutableEntity : EntityBase, IFieldCreatedTime /// 唯一编码 /// [Column(IsIdentity = false, IsPrimary = true, Position = 1)] - [CsvIgnore] [JsonIgnore] public override T Id { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/LiteMutableEntity.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/LiteMutableEntity.cs index 06824910..a752b913 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/LiteMutableEntity.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/LiteMutableEntity.cs @@ -7,7 +7,6 @@ public abstract record LiteMutableEntity : LiteMutableEntity /// 唯一编码 /// [Column(IsIdentity = false, IsPrimary = true, Position = 1)] - [CsvIgnore] [Snowflake] public override long Id { get; init; } } @@ -22,14 +21,12 @@ public abstract record LiteMutableEntity : LiteImmutableEntity, IFieldModi /// 唯一编码 /// [Column(IsIdentity = false, IsPrimary = true, Position = 1)] - [CsvIgnore] public override T Id { get; init; } /// /// 修改时间 /// [Column(ServerTime = DateTimeKind.Local, CanInsert = false, Position = -1)] - [CsvIgnore] [JsonIgnore] public virtual DateTime? ModifiedTime { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/LiteVersionEntity.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/LiteVersionEntity.cs index 53e7f209..6b2c834d 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/LiteVersionEntity.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/LiteVersionEntity.cs @@ -7,7 +7,6 @@ public abstract record LiteVersionEntity : LiteVersionEntity /// 唯一编码 /// [Column(IsIdentity = false, IsPrimary = true, Position = 1)] - [CsvIgnore] [Snowflake] public override long Id { get; init; } } @@ -22,7 +21,6 @@ public abstract record LiteVersionEntity : LiteMutableEntity, IFieldVersio /// 唯一编码 /// [Column(IsIdentity = false, IsPrimary = true, Position = 1)] - [CsvIgnore] [Snowflake] public override T Id { get; init; } @@ -30,7 +28,6 @@ public abstract record LiteVersionEntity : LiteMutableEntity, IFieldVersio /// 数据版本 /// [Column(IsVersion = true, Position = -1)] - [CsvIgnore] [JsonIgnore] public virtual long Version { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/MutableEntity.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/MutableEntity.cs index 7c76efed..bacfe1db 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/MutableEntity.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/MutableEntity.cs @@ -7,7 +7,6 @@ public abstract record MutableEntity : MutableEntity /// 唯一编码 /// [Column(IsIdentity = false, IsPrimary = true, Position = 1)] - [CsvIgnore] [Snowflake] public override long Id { get; init; } } @@ -22,7 +21,6 @@ public abstract record MutableEntity : LiteMutableEntity, IFieldCreatedUse /// 创建者编号 /// [Column(CanUpdate = false, Position = -1)] - [CsvIgnore] [JsonIgnore] public virtual long? CreatedUserId { get; init; } @@ -30,7 +28,6 @@ public abstract record MutableEntity : LiteMutableEntity, IFieldCreatedUse /// 创建者用户名 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)] - [CsvIgnore] [JsonIgnore] public virtual string CreatedUserName { get; init; } @@ -38,14 +35,12 @@ public abstract record MutableEntity : LiteMutableEntity, IFieldCreatedUse /// 唯一编码 /// [Column(IsIdentity = false, IsPrimary = true, Position = 1)] - [CsvIgnore] public override T Id { get; init; } /// /// 修改者编号 /// [Column(CanInsert = false, Position = -1)] - [CsvIgnore] [JsonIgnore] public virtual long? ModifiedUserId { get; init; } @@ -53,7 +48,6 @@ public abstract record MutableEntity : LiteMutableEntity, IFieldCreatedUse /// 修改者用户名 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanInsert = false, Position = -1)] - [CsvIgnore] [JsonIgnore] public virtual string ModifiedUserName { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/SimpleEntity.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/SimpleEntity.cs index 12698287..d9d3395b 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/SimpleEntity.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/SimpleEntity.cs @@ -7,7 +7,6 @@ public abstract record SimpleEntity : SimpleEntity /// 唯一编码 /// [Column(IsIdentity = false, IsPrimary = true, Position = 1)] - [CsvIgnore] [Snowflake] public override long Id { get; init; } } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/VersionEntity.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/VersionEntity.cs index 939b8093..e47a9249 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/VersionEntity.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Dependency/VersionEntity.cs @@ -7,7 +7,6 @@ public abstract record VersionEntity : VersionEntity /// 唯一编码 /// [Column(IsIdentity = false, IsPrimary = true, Position = 1)] - [CsvIgnore] [Snowflake] public override long Id { get; init; } } @@ -22,7 +21,6 @@ public abstract record VersionEntity : LiteVersionEntity, IFieldModifiedUs /// 创建者编号 /// [Column(CanUpdate = false, Position = -1)] - [CsvIgnore] [JsonIgnore] public virtual long? CreatedUserId { get; init; } @@ -30,7 +28,6 @@ public abstract record VersionEntity : LiteVersionEntity, IFieldModifiedUs /// 创建者用户名 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)] - [CsvIgnore] [JsonIgnore] public virtual string CreatedUserName { get; init; } @@ -38,14 +35,12 @@ public abstract record VersionEntity : LiteVersionEntity, IFieldModifiedUs /// 唯一编码 /// [Column(IsIdentity = false, IsPrimary = true, Position = 1)] - [CsvIgnore] public override T Id { get; init; } /// /// 修改者编号 /// [Column(CanInsert = false, Position = -1)] - [CsvIgnore] [JsonIgnore] public virtual long? ModifiedUserId { get; init; } @@ -53,7 +48,6 @@ public abstract record VersionEntity : LiteVersionEntity, IFieldModifiedUs /// 修改者用户名 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanInsert = false, Position = -1)] - [CsvIgnore] [JsonIgnore] public virtual string ModifiedUserName { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Api.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Api.cs index ad5e57c8..c0001904 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Api.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Api.cs @@ -4,13 +4,12 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// Api接口表 /// [Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_Api))] -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(PathCrc32), nameof(PathCrc32), true)] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(PathCrc32), nameof(PathCrc32), true)] public record Sys_Api : ImmutableEntity, IFieldSummary { /// /// 子节点 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(ParentId))] public IEnumerable Children { get; init; } @@ -19,7 +18,6 @@ public record Sys_Api : ImmutableEntity, IFieldSummary /// 唯一编码 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_127, IsIdentity = false, IsPrimary = true, Position = 1)] - [CsvIgnore] [JsonIgnore] public override string Id { get; init; } @@ -27,7 +25,6 @@ public record Sys_Api : ImmutableEntity, IFieldSummary /// 请求方式 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_15)] - [CsvIgnore] [JsonIgnore] public virtual string Method { get; init; } @@ -35,7 +32,6 @@ public record Sys_Api : ImmutableEntity, IFieldSummary /// 服务名称 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)] - [CsvIgnore] [JsonIgnore] public virtual string Name { get; init; } @@ -43,7 +39,6 @@ public record Sys_Api : ImmutableEntity, IFieldSummary /// 命名空间 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31)] - [CsvIgnore] [JsonIgnore] #pragma warning disable CA1716 public virtual string Namespace { get; init; } @@ -53,7 +48,6 @@ public record Sys_Api : ImmutableEntity, IFieldSummary /// 父编号 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_127)] - [CsvIgnore] [JsonIgnore] public virtual string ParentId { get; init; } @@ -61,14 +55,12 @@ public record Sys_Api : ImmutableEntity, IFieldSummary /// 路径CRC32 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual int PathCrc32 { get; init; } /// /// 角色集合 /// - [CsvIgnore] [JsonIgnore] [Navigate(ManyToMany = typeof(Sys_RoleApi))] public IReadOnlyCollection Roles { get; init; } @@ -77,7 +69,6 @@ public record Sys_Api : ImmutableEntity, IFieldSummary /// 服务描述 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)] - [CsvIgnore] [JsonIgnore] public virtual string Summary { get; set; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_CodeTemplate.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_CodeTemplate.cs index a0255a24..471d9b43 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_CodeTemplate.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_CodeTemplate.cs @@ -11,7 +11,6 @@ public record Sys_CodeTemplate : VersionEntity, IFieldSort, IFieldSummary, IFiel /// /// true [Column] - [CsvIgnore] [JsonIgnore] public virtual bool Enabled { get; init; } @@ -20,7 +19,6 @@ public record Sys_CodeTemplate : VersionEntity, IFieldSort, IFieldSummary, IFiel /// /// Male [Column] - [CsvIgnore] [JsonIgnore] public virtual Genders? Gender { get; init; } @@ -29,7 +27,6 @@ public record Sys_CodeTemplate : VersionEntity, IFieldSort, IFieldSummary, IFiel /// /// 123456 [Column(IsIdentity = false, IsPrimary = true, Position = 1)] - [CsvIgnore] [JsonIgnore] [Snowflake] public override long Id { get; init; } @@ -39,14 +36,12 @@ public record Sys_CodeTemplate : VersionEntity, IFieldSort, IFieldSummary, IFiel /// /// 老王 [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31)] - [CsvIgnore] [JsonIgnore] public virtual string Name { get; init; } /// /// 归属用户 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(OwnerId))] public Sys_User Owner { get; init; } @@ -56,7 +51,6 @@ public record Sys_CodeTemplate : VersionEntity, IFieldSort, IFieldSummary, IFiel /// /// 370942943322181 [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerDeptId { get; init; } @@ -65,7 +59,6 @@ public record Sys_CodeTemplate : VersionEntity, IFieldSort, IFieldSummary, IFiel /// /// 370942943322181 [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerId { get; init; } @@ -74,7 +67,6 @@ public record Sys_CodeTemplate : VersionEntity, IFieldSort, IFieldSummary, IFiel /// /// 100 [Column] - [CsvIgnore] [JsonIgnore] public virtual long Sort { get; init; } @@ -83,7 +75,6 @@ public record Sys_CodeTemplate : VersionEntity, IFieldSort, IFieldSummary, IFiel /// /// 备注文字 [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] - [CsvIgnore] [JsonIgnore] public virtual string Summary { get; set; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Config.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Config.cs index 948b11c6..a1a34dcc 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Config.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Config.cs @@ -10,7 +10,6 @@ public record Sys_Config : VersionEntity, IFieldEnabled /// 人民币兑点数比率 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual int CnyToPointRate { get; init; } @@ -18,7 +17,6 @@ public record Sys_Config : VersionEntity, IFieldEnabled /// 是否启用 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual bool Enabled { get; init; } @@ -26,7 +24,6 @@ public record Sys_Config : VersionEntity, IFieldEnabled /// 必须邀请注册 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual bool RegisterInviteRequired { get; init; } @@ -34,7 +31,6 @@ public record Sys_Config : VersionEntity, IFieldEnabled /// 必须手机号注册 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual bool RegisterMobileRequired { get; init; } @@ -42,7 +38,6 @@ public record Sys_Config : VersionEntity, IFieldEnabled /// Trc20收款地址 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_CHAR_34)] - [CsvIgnore] [JsonIgnore] public virtual string Trc20ReceiptAddress { get; init; } @@ -50,7 +45,6 @@ public record Sys_Config : VersionEntity, IFieldEnabled /// 美元兑点数比率 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual int UsdToPointRate { get; init; } @@ -58,14 +52,12 @@ public record Sys_Config : VersionEntity, IFieldEnabled /// 用户注册是否需要人工确认 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual bool UserRegisterConfirm { get; init; } /// /// 用户注册默认部门 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(UserRegisterDeptId))] public Sys_Dept UserRegisterDept { get; init; } @@ -74,14 +66,12 @@ public record Sys_Config : VersionEntity, IFieldEnabled /// 用户注册默认部门编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long UserRegisterDeptId { get; init; } /// /// 用户注册默认角色 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(UserRegisterRoleId))] public Sys_Role UserRegisterRole { get; init; } @@ -90,7 +80,6 @@ public record Sys_Config : VersionEntity, IFieldEnabled /// 用户注册默认角色编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long UserRegisterRoleId { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DepositOrder.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DepositOrder.cs index 6e90e6d0..ee829c55 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DepositOrder.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DepositOrder.cs @@ -1,11 +1,14 @@ +using NetAdmin.Domain.Enums.Sys; + namespace NetAdmin.Domain.DbMaps.Sys; /// /// 充值订单表 /// [Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_DepositOrder))] -[SqlIndex( // - $"{Chars.FLG_DB_INDEX_PREFIX}{nameof(ActualPayAmount)}_{nameof(FinishTimestamp)}", $"{nameof(ActualPayAmount)},{nameof(FinishTimestamp)}", true)] +[SqlIndex( + $"{Chars.FLG_DB_INDEX_PREFIX}{nameof(ActualPayAmount)}_{nameof(FinishTimestamp)}", $"{nameof(ActualPayAmount)},{nameof(FinishTimestamp)}", true +)] [SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(PaymentFinger), nameof(PaymentFinger), true, WhenNotNull = true)] public record Sys_DepositOrder : LiteVersionEntity, IFieldOwner { @@ -13,7 +16,6 @@ public record Sys_DepositOrder : LiteVersionEntity, IFieldOwner /// 实际支付金额 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long ActualPayAmount { get; init; } @@ -21,7 +23,6 @@ public record Sys_DepositOrder : LiteVersionEntity, IFieldOwner /// 订单状态 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual DepositOrderStatues DepositOrderStatus { get; init; } @@ -29,7 +30,6 @@ public record Sys_DepositOrder : LiteVersionEntity, IFieldOwner /// 充值点数 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long DepositPoint { get; init; } @@ -37,14 +37,12 @@ public record Sys_DepositOrder : LiteVersionEntity, IFieldOwner /// 完成时间戳 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long FinishTimestamp { get; init; } /// /// 归属用户 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(OwnerId))] public Sys_User Owner { get; init; } @@ -53,7 +51,6 @@ public record Sys_DepositOrder : LiteVersionEntity, IFieldOwner /// 归属部门编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerDeptId { get; init; } @@ -61,7 +58,6 @@ public record Sys_DepositOrder : LiteVersionEntity, IFieldOwner /// 归属用户编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerId { get; init; } @@ -69,7 +65,6 @@ public record Sys_DepositOrder : LiteVersionEntity, IFieldOwner /// 付款账号 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_127)] - [CsvIgnore] [JsonIgnore] public virtual string PaidAccount { get; init; } @@ -77,7 +72,6 @@ public record Sys_DepositOrder : LiteVersionEntity, IFieldOwner /// 付款时间 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual DateTime? PaidTime { get; init; } @@ -85,7 +79,6 @@ public record Sys_DepositOrder : LiteVersionEntity, IFieldOwner /// 付款指纹 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] - [CsvIgnore] [JsonIgnore] public virtual string PaymentFinger { get; init; } @@ -93,7 +86,6 @@ public record Sys_DepositOrder : LiteVersionEntity, IFieldOwner /// 支付方式 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual PaymentModes PaymentMode { get; init; } @@ -101,7 +93,6 @@ public record Sys_DepositOrder : LiteVersionEntity, IFieldOwner /// 收款账号 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_127)] - [CsvIgnore] [JsonIgnore] public virtual string ReceiptAccount { get; init; } @@ -109,7 +100,6 @@ public record Sys_DepositOrder : LiteVersionEntity, IFieldOwner /// 兑点数比率 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual int ToPointRate { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Dept.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Dept.cs index 668c5cbb..00735c10 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Dept.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Dept.cs @@ -9,7 +9,6 @@ public record Sys_Dept : VersionEntity, IFieldEnabled, IFieldSummary, IFieldSort /// /// 子节点 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(ParentId))] public IEnumerable Children { get; init; } @@ -18,7 +17,6 @@ public record Sys_Dept : VersionEntity, IFieldEnabled, IFieldSummary, IFieldSort /// 是否启用 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual bool Enabled { get; init; } @@ -26,7 +24,6 @@ public record Sys_Dept : VersionEntity, IFieldEnabled, IFieldSummary, IFieldSort /// 部门名称 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31)] - [CsvIgnore] [JsonIgnore] public virtual string Name { get; init; } @@ -34,14 +31,12 @@ public record Sys_Dept : VersionEntity, IFieldEnabled, IFieldSummary, IFieldSort /// 父编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long ParentId { get; init; } /// /// 角色集合 /// - [CsvIgnore] [JsonIgnore] [Navigate(ManyToMany = typeof(Sys_RoleDept))] public IReadOnlyCollection Roles { get; init; } @@ -49,7 +44,6 @@ public record Sys_Dept : VersionEntity, IFieldEnabled, IFieldSummary, IFieldSort /// /// 发送给此部门的站内信集合 /// - [CsvIgnore] [JsonIgnore] [Navigate(ManyToMany = typeof(Sys_SiteMsgDept))] public IReadOnlyCollection SiteMsgs { get; init; } @@ -58,7 +52,6 @@ public record Sys_Dept : VersionEntity, IFieldEnabled, IFieldSummary, IFieldSort /// 排序值,越大越前 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long Sort { get; init; } @@ -66,7 +59,6 @@ public record Sys_Dept : VersionEntity, IFieldEnabled, IFieldSummary, IFieldSort /// 部门备注 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] - [CsvIgnore] [JsonIgnore] public virtual string Summary { get; set; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DicCatalog.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DicCatalog.cs index 9d6443c9..0bc9b91e 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DicCatalog.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DicCatalog.cs @@ -3,14 +3,13 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 字典目录表 /// -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(Code), nameof(Code), true)] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(Code), nameof(Code), true)] [Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_DicCatalog))] public record Sys_DicCatalog : VersionEntity { /// /// 子节点 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(ParentId))] public IEnumerable Children { get; init; } @@ -19,14 +18,12 @@ public record Sys_DicCatalog : VersionEntity /// 字典目录编码 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)] - [CsvIgnore] [JsonIgnore] public virtual string Code { get; init; } /// /// 字典内容集合 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(Sys_DicContent.CatalogId))] public IReadOnlyCollection Contents { get; init; } @@ -35,7 +32,6 @@ public record Sys_DicCatalog : VersionEntity /// 字典目录名称 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)] - [CsvIgnore] [JsonIgnore] public virtual string Name { get; init; } @@ -43,7 +39,6 @@ public record Sys_DicCatalog : VersionEntity /// 父编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long ParentId { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DicContent.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DicContent.cs index 5ace9df5..b79bbf1c 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DicContent.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DicContent.cs @@ -10,7 +10,6 @@ public record Sys_DicContent : VersionEntity, IFieldEnabled, IFieldSummary /// /// 字典目录 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(CatalogId))] public Sys_DicCatalog Catalog { get; init; } @@ -19,7 +18,6 @@ public record Sys_DicContent : VersionEntity, IFieldEnabled, IFieldSummary /// 字典目录编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long CatalogId { get; init; } @@ -27,7 +25,6 @@ public record Sys_DicContent : VersionEntity, IFieldEnabled, IFieldSummary /// 是否启用 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual bool Enabled { get; init; } @@ -35,7 +32,6 @@ public record Sys_DicContent : VersionEntity, IFieldEnabled, IFieldSummary /// 键名称 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] - [CsvIgnore] [JsonIgnore] public virtual string Key { get; init; } @@ -43,7 +39,6 @@ public record Sys_DicContent : VersionEntity, IFieldEnabled, IFieldSummary /// 备注 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] - [CsvIgnore] [JsonIgnore] public virtual string Summary { get; set; } @@ -51,7 +46,6 @@ public record Sys_DicContent : VersionEntity, IFieldEnabled, IFieldSummary /// 键值 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] - [CsvIgnore] [JsonIgnore] public virtual string Value { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DocCatalog.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DocCatalog.cs index deded387..6539c0ec 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DocCatalog.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DocCatalog.cs @@ -3,14 +3,13 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 文档分类表 /// -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(Code), nameof(Code), true)] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(Code), nameof(Code), true)] [Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_DocCatalog))] public record Sys_DocCatalog : VersionEntity, IFieldOwner { /// /// 子节点 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(ParentId))] public IEnumerable Children { get; init; } @@ -19,14 +18,12 @@ public record Sys_DocCatalog : VersionEntity, IFieldOwner /// 文档分类编码 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)] - [CsvIgnore] [JsonIgnore] public virtual string Code { get; init; } /// /// 文档内容集合 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(Sys_DocContent.CatalogId))] public IReadOnlyCollection Contents { get; init; } @@ -35,14 +32,12 @@ public record Sys_DocCatalog : VersionEntity, IFieldOwner /// 文档分类名称 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)] - [CsvIgnore] [JsonIgnore] public virtual string Name { get; init; } /// /// 归属用户 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(OwnerId))] public Sys_User Owner { get; init; } @@ -51,7 +46,6 @@ public record Sys_DocCatalog : VersionEntity, IFieldOwner /// 归属部门编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerDeptId { get; init; } @@ -59,7 +53,6 @@ public record Sys_DocCatalog : VersionEntity, IFieldOwner /// 归属用户编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerId { get; init; } @@ -67,7 +60,6 @@ public record Sys_DocCatalog : VersionEntity, IFieldOwner /// 父编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long ParentId { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DocContent.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DocContent.cs index 88d9fda0..599fb8d9 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DocContent.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_DocContent.cs @@ -12,14 +12,12 @@ public record Sys_DocContent : VersionEntity, IFieldEnabled, IFieldOwner /// 文档正文 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string Body { get; init; } /// /// 文档分类 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(CatalogId))] public Sys_DocCatalog Catalog { get; init; } @@ -28,7 +26,6 @@ public record Sys_DocContent : VersionEntity, IFieldEnabled, IFieldOwner /// 文档分类编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long CatalogId { get; init; } @@ -36,14 +33,12 @@ public record Sys_DocContent : VersionEntity, IFieldEnabled, IFieldOwner /// 是否启用 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual bool Enabled { get; init; } /// /// 归属用户 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(OwnerId))] public Sys_User Owner { get; init; } @@ -52,7 +47,6 @@ public record Sys_DocContent : VersionEntity, IFieldEnabled, IFieldOwner /// 归属部门编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerDeptId { get; init; } @@ -60,7 +54,6 @@ public record Sys_DocContent : VersionEntity, IFieldEnabled, IFieldOwner /// 归属用户编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerId { get; init; } @@ -68,7 +61,6 @@ public record Sys_DocContent : VersionEntity, IFieldEnabled, IFieldOwner /// 文档标题 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] - [CsvIgnore] [JsonIgnore] public virtual string Title { get; init; } @@ -76,7 +68,6 @@ public record Sys_DocContent : VersionEntity, IFieldEnabled, IFieldOwner /// 可见性 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual ArchiveVisibilities Visibility { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Job.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Job.cs index 51f7e741..d6451236 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Job.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Job.cs @@ -12,7 +12,6 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary /// 是否启用 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual bool Enabled { get; init; } @@ -20,7 +19,6 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary /// 执行时间计划 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31)] - [CsvIgnore] [JsonIgnore] public virtual string ExecutionCron { get; init; } @@ -28,7 +26,6 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary /// 请求方法 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual HttpMethods HttpMethod { get; init; } @@ -36,7 +33,6 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary /// 作业名称 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)] - [CsvIgnore] [JsonIgnore] public virtual string JobName { get; init; } @@ -44,7 +40,6 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary /// 上次执行耗时 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long? LastDuration { get; init; } @@ -52,7 +47,6 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary /// 上次执行时间 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual DateTime? LastExecTime { get; init; } @@ -60,7 +54,6 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary /// 上次执行状态 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_SMALL_INT)] - [CsvIgnore] [JsonIgnore] public int? LastStatusCode { get; init; } @@ -68,7 +61,6 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary /// 下次执行时间 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual DateTime? NextExecTime { get; init; } @@ -76,7 +68,6 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary /// 下次执行时间编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long? NextTimeId { get; init; } @@ -84,7 +75,6 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary /// 随机延时起始值(毫秒) /// [Column] - [CsvIgnore] [JsonIgnore] public virtual int? RandomDelayBegin { get; init; } @@ -92,7 +82,6 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary /// 随机延时结束值(毫秒) /// [Column] - [CsvIgnore] [JsonIgnore] public virtual int? RandomDelayEnd { get; init; } @@ -100,7 +89,6 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary /// 请求体 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string RequestBody { get; init; } @@ -108,7 +96,6 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary /// 请求头 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string RequestHeader { get; init; } @@ -116,7 +103,6 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary /// 请求的网络地址 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string RequestUrl { get; init; } @@ -124,7 +110,6 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary /// 作业状态 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual JobStatues Status { get; init; } @@ -132,14 +117,12 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary /// 备注 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] - [CsvIgnore] [JsonIgnore] public virtual string Summary { get; set; } /// /// 执行用户 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(UserId))] public Sys_User User { get; init; } @@ -148,7 +131,6 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary /// 执行用户编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long UserId { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_JobRecord.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_JobRecord.cs index 36f77b0b..e9f390c8 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_JobRecord.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_JobRecord.cs @@ -4,9 +4,9 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// 计划作业执行记录表 /// [SqlIndex($"{Chars.FLG_DB_INDEX_PREFIX}{nameof(JobId)}_{nameof(TimeId)}", $"{nameof(JobId)},{nameof(TimeId)}", true)] -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(CreatedTime), $"{nameof(CreatedTime)} DESC", false)] -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(JobId), nameof(JobId), false)] -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(HttpStatusCode), nameof(HttpStatusCode), false)] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(CreatedTime), $"{nameof(CreatedTime)} DESC", false)] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(JobId), nameof(JobId), false)] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(HttpStatusCode), nameof(HttpStatusCode), false)] [Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_JobRecord))] public record Sys_JobRecord : LiteImmutableEntity { @@ -14,7 +14,6 @@ public record Sys_JobRecord : LiteImmutableEntity /// 执行耗时(毫秒) /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long Duration { get; init; } @@ -22,7 +21,6 @@ public record Sys_JobRecord : LiteImmutableEntity /// 请求方法 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual HttpMethods HttpMethod { get; init; } @@ -30,14 +28,12 @@ public record Sys_JobRecord : LiteImmutableEntity /// HTTP 状态码 /// [Column] - [CsvIgnore] [JsonIgnore] public int HttpStatusCode { get; init; } /// /// 归属信息 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(JobId))] public Sys_Job Job { get; init; } @@ -46,7 +42,6 @@ public record Sys_JobRecord : LiteImmutableEntity /// 作业编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long JobId { get; init; } @@ -54,7 +49,6 @@ public record Sys_JobRecord : LiteImmutableEntity /// 请求体 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string RequestBody { get; init; } @@ -62,7 +56,6 @@ public record Sys_JobRecord : LiteImmutableEntity /// 请求头 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string RequestHeader { get; init; } @@ -70,7 +63,6 @@ public record Sys_JobRecord : LiteImmutableEntity /// 请求的网络地址 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_127)] - [CsvIgnore] [JsonIgnore] public virtual string RequestUrl { get; init; } @@ -78,7 +70,6 @@ public record Sys_JobRecord : LiteImmutableEntity /// 响应体 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string ResponseBody { get; init; } @@ -86,7 +77,6 @@ public record Sys_JobRecord : LiteImmutableEntity /// 响应头 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string ResponseHeader { get; init; } @@ -94,7 +84,6 @@ public record Sys_JobRecord : LiteImmutableEntity /// 执行时间编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long TimeId { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_LoginLog.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_LoginLog.cs index a8f20277..296a3396 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_LoginLog.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_LoginLog.cs @@ -3,9 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 登录日志表 /// -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(CreatedTime), $"{nameof(CreatedTime)} DESC", false)] -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(HttpStatusCode), nameof(HttpStatusCode), false)] -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(OwnerId), nameof(OwnerId), false)] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(CreatedTime), $"{nameof(CreatedTime)} DESC", false)] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(HttpStatusCode), nameof(HttpStatusCode), false)] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(OwnerId), nameof(OwnerId), false)] [Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_LoginLog))] public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFieldCreatedClientIp, IFieldCreatedClientUserAgent { @@ -13,7 +13,6 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel /// 创建者客户端IP /// [Column] - [CsvIgnore] [JsonIgnore] public virtual int? CreatedClientIp { get; init; } @@ -21,7 +20,6 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel /// 创建时间 /// [Column(ServerTime = DateTimeKind.Local, CanUpdate = false, Position = -1)] - [CsvIgnore] [JsonIgnore] public virtual DateTime CreatedTime { get; init; } @@ -29,7 +27,6 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel /// 创建者客户端用户代理 /// [Column(Position = -1, DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_1022)] - [CsvIgnore] [JsonIgnore] public virtual string CreatedUserAgent { get; init; } @@ -37,7 +34,6 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel /// 执行耗时(毫秒) /// [Column] - [CsvIgnore] [JsonIgnore] public virtual int Duration { get; protected init; } @@ -45,7 +41,6 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel /// 程序响应码 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual ErrorCodes ErrorCode { get; protected init; } @@ -53,7 +48,6 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel /// HTTP状态码 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_SMALL_INT)] - [CsvIgnore] [JsonIgnore] public virtual int HttpStatusCode { get; init; } @@ -61,14 +55,12 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel /// 登录用户名 /// [Column(Position = -1, DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)] - [CsvIgnore] [JsonIgnore] public virtual string LoginUserName { get; protected init; } /// /// 归属用户 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(OwnerId))] public Sys_User Owner { get; init; } @@ -77,7 +69,6 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel /// 归属部门编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerDeptId { get; init; } @@ -85,7 +76,6 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel /// 归属用户编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerId { get; init; } @@ -93,7 +83,6 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel /// 请求内容 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string RequestBody { get; protected init; } @@ -101,7 +90,6 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel /// 请求头信息 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string RequestHeaders { get; protected init; } @@ -109,7 +97,6 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel /// 请求地址 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_127)] - [CsvIgnore] [JsonIgnore] public virtual string RequestUrl { get; protected init; } @@ -117,7 +104,6 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel /// 响应内容 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string ResponseBody { get; protected init; } @@ -125,7 +111,6 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel /// 响应头 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string ResponseHeaders { get; protected init; } @@ -133,7 +118,6 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel /// 服务器IP /// [Column] - [CsvIgnore] [JsonIgnore] public virtual int? ServerIp { get; protected init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Menu.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Menu.cs index b037d147..822bb43a 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Menu.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Menu.cs @@ -5,7 +5,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 菜单表 /// -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(Name), nameof(Name), true)] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(Name), nameof(Name), true)] [Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_Menu))] public record Sys_Menu : VersionEntity, IFieldSort { @@ -13,14 +13,12 @@ public record Sys_Menu : VersionEntity, IFieldSort /// 子节点或详情页需要高亮的上级菜单路由地址 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_127)] - [CsvIgnore] [JsonIgnore] public virtual string Active { get; init; } /// /// 子节点 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(ParentId))] public IEnumerable Children { get; init; } @@ -29,7 +27,6 @@ public record Sys_Menu : VersionEntity, IFieldSort /// 背景颜色 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_7)] - [CsvIgnore] [JsonIgnore] public virtual string Color { get; init; } @@ -37,7 +34,6 @@ public record Sys_Menu : VersionEntity, IFieldSort /// 组件 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)] - [CsvIgnore] [JsonIgnore] public virtual string Component { get; init; } @@ -45,7 +41,6 @@ public record Sys_Menu : VersionEntity, IFieldSort /// 是否整页路由 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual bool FullPageRouting { get; init; } @@ -53,7 +48,6 @@ public record Sys_Menu : VersionEntity, IFieldSort /// 是否隐藏菜单 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual bool Hidden { get; init; } @@ -61,7 +55,6 @@ public record Sys_Menu : VersionEntity, IFieldSort /// 是否隐藏面包屑 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual bool HiddenBreadCrumb { get; init; } @@ -69,7 +62,6 @@ public record Sys_Menu : VersionEntity, IFieldSort /// 图标 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31)] - [CsvIgnore] [JsonIgnore] public virtual string Icon { get; init; } @@ -77,7 +69,6 @@ public record Sys_Menu : VersionEntity, IFieldSort /// 菜单名称 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)] - [CsvIgnore] [JsonIgnore] public virtual string Name { get; init; } @@ -85,7 +76,6 @@ public record Sys_Menu : VersionEntity, IFieldSort /// 父编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long ParentId { get; init; } @@ -93,7 +83,6 @@ public record Sys_Menu : VersionEntity, IFieldSort /// 菜单路径 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_127)] - [CsvIgnore] [JsonIgnore] public virtual string Path { get; init; } @@ -101,14 +90,12 @@ public record Sys_Menu : VersionEntity, IFieldSort /// 重定向地址 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_127)] - [CsvIgnore] [JsonIgnore] public virtual string Redirect { get; init; } /// /// 拥有此菜单的角色集合 /// - [CsvIgnore] [JsonIgnore] [Navigate(ManyToMany = typeof(Sys_RoleMenu))] public IReadOnlyCollection Roles { get; init; } @@ -117,7 +104,6 @@ public record Sys_Menu : VersionEntity, IFieldSort /// 排序值,越大越前 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long Sort { get; init; } @@ -125,7 +111,6 @@ public record Sys_Menu : VersionEntity, IFieldSort /// 标签 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31)] - [CsvIgnore] [JsonIgnore] public virtual string Tag { get; init; } @@ -133,7 +118,6 @@ public record Sys_Menu : VersionEntity, IFieldSort /// 菜单标题 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)] - [CsvIgnore] [JsonIgnore] public virtual string Title { get; init; } @@ -141,7 +125,6 @@ public record Sys_Menu : VersionEntity, IFieldSort /// 菜单类型 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual MenuTypes Type { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RequestLog.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RequestLog.cs index fa8db917..8d83325b 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RequestLog.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RequestLog.cs @@ -3,18 +3,16 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 请求日志表 /// -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(ApiPathCrc32), nameof(ApiPathCrc32), false)] -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(CreatedTime), $"{nameof(CreatedTime)} DESC", false)] -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(OwnerId), nameof(OwnerId), false)] -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(HttpStatusCode), nameof(HttpStatusCode), false)] -[Table( // - Name = $"{Chars.FLG_DB_TABLE_NAME_PREFIX}{nameof(Sys_RequestLog)}_{{yyyyMMdd}}", AsTable = $"{nameof(CreatedTime)}=2024-5-1(1 day)")] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(ApiPathCrc32), nameof(ApiPathCrc32), false)] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(CreatedTime), $"{nameof(CreatedTime)} DESC", false)] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(OwnerId), nameof(OwnerId), false)] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(HttpStatusCode), nameof(HttpStatusCode), false)] +[Table(Name = $"{Chars.FLG_DB_TABLE_NAME_PREFIX}{nameof(Sys_RequestLog)}_{{yyyyMMdd}}", AsTable = $"{nameof(CreatedTime)}=2024-5-1(1 day)")] public record Sys_RequestLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFieldCreatedClientIp { /// /// 接口 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(ApiPathCrc32), TempPrimary = nameof(Sys_Api.PathCrc32))] public Sys_Api Api { get; init; } @@ -23,7 +21,6 @@ public record Sys_RequestLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFi /// 接口路径CRC32 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual int ApiPathCrc32 { get; init; } @@ -31,7 +28,6 @@ public record Sys_RequestLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFi /// 创建者客户端IP /// [Column] - [CsvIgnore] [JsonIgnore] public virtual int? CreatedClientIp { get; init; } @@ -39,14 +35,12 @@ public record Sys_RequestLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFi /// 创建时间 /// [Column(ServerTime = DateTimeKind.Local, CanUpdate = false, Position = -1)] - [CsvIgnore] [JsonIgnore] public virtual DateTime CreatedTime { get; init; } /// /// 明细 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(Id))] public Sys_RequestLogDetail Detail { get; init; } @@ -55,7 +49,6 @@ public record Sys_RequestLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFi /// 执行耗时(毫秒) /// [Column] - [CsvIgnore] [JsonIgnore] public virtual int Duration { get; init; } @@ -63,7 +56,6 @@ public record Sys_RequestLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFi /// 请求方法 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_TINY_INT)] - [CsvIgnore] [JsonIgnore] public virtual HttpMethods HttpMethod { get; init; } @@ -71,14 +63,12 @@ public record Sys_RequestLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFi /// HTTP状态码 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_SMALL_INT)] - [CsvIgnore] [JsonIgnore] public virtual int HttpStatusCode { get; init; } /// /// 归属用户 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(OwnerId))] public Sys_User Owner { get; init; } @@ -87,7 +77,6 @@ public record Sys_RequestLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFi /// 归属部门编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerDeptId { get; init; } @@ -95,7 +84,6 @@ public record Sys_RequestLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFi /// 归属用户编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerId { get; init; } @@ -103,7 +91,6 @@ public record Sys_RequestLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFi /// 请求追踪标识 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual Guid TraceId { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RequestLogDetail.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RequestLogDetail.cs index 0c7ef809..4b244495 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RequestLogDetail.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RequestLogDetail.cs @@ -4,14 +4,13 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// 请求日志明细表 /// [Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_RequestLogDetail))] -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(CreatedTime), $"{nameof(CreatedTime)} DESC", false)] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(CreatedTime), $"{nameof(CreatedTime)} DESC", false)] public record Sys_RequestLogDetail : SimpleEntity, IFieldCreatedTime, IFieldCreatedClientUserAgent { /// /// 创建时间 /// [Column(ServerTime = DateTimeKind.Local, CanUpdate = false, Position = -1)] - [CsvIgnore] [JsonIgnore] public virtual DateTime CreatedTime { get; init; } @@ -19,7 +18,6 @@ public record Sys_RequestLogDetail : SimpleEntity, IFieldCreatedTime, IFieldCrea /// 创建者客户端用户代理 /// [Column(Position = -1, DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_1022)] - [CsvIgnore] [JsonIgnore] public virtual string CreatedUserAgent { get; init; } @@ -27,7 +25,6 @@ public record Sys_RequestLogDetail : SimpleEntity, IFieldCreatedTime, IFieldCrea /// 程序响应码 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual ErrorCodes ErrorCode { get; init; } @@ -35,7 +32,6 @@ public record Sys_RequestLogDetail : SimpleEntity, IFieldCreatedTime, IFieldCrea /// 异常信息 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string Exception { get; init; } @@ -43,7 +39,6 @@ public record Sys_RequestLogDetail : SimpleEntity, IFieldCreatedTime, IFieldCrea /// 请求内容 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string RequestBody { get; init; } @@ -51,7 +46,6 @@ public record Sys_RequestLogDetail : SimpleEntity, IFieldCreatedTime, IFieldCrea /// 请求content-type /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)] - [CsvIgnore] [JsonIgnore] public virtual string RequestContentType { get; init; } @@ -59,7 +53,6 @@ public record Sys_RequestLogDetail : SimpleEntity, IFieldCreatedTime, IFieldCrea /// 请求头信息 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string RequestHeaders { get; init; } @@ -67,7 +60,6 @@ public record Sys_RequestLogDetail : SimpleEntity, IFieldCreatedTime, IFieldCrea /// 请求地址 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_127)] - [CsvIgnore] [JsonIgnore] public virtual string RequestUrl { get; init; } @@ -75,7 +67,6 @@ public record Sys_RequestLogDetail : SimpleEntity, IFieldCreatedTime, IFieldCrea /// 响应内容 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string ResponseBody { get; init; } @@ -83,7 +74,6 @@ public record Sys_RequestLogDetail : SimpleEntity, IFieldCreatedTime, IFieldCrea /// 响应content-type /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)] - [CsvIgnore] [JsonIgnore] public virtual string ResponseContentType { get; init; } @@ -91,7 +81,6 @@ public record Sys_RequestLogDetail : SimpleEntity, IFieldCreatedTime, IFieldCrea /// 响应头 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string ResponseHeaders { get; init; } @@ -99,7 +88,6 @@ public record Sys_RequestLogDetail : SimpleEntity, IFieldCreatedTime, IFieldCrea /// 服务器IP /// [Column] - [CsvIgnore] [JsonIgnore] public virtual int? ServerIp { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Role.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Role.cs index 1e37d3f3..347d022e 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Role.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_Role.cs @@ -6,14 +6,13 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 角色表 /// -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(Name), nameof(Name), true)] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(Name), nameof(Name), true)] [Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_Role))] public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary, IRegister { /// /// 角色-接口映射 /// - [CsvIgnore] [JsonIgnore] [Navigate(ManyToMany = typeof(Sys_RoleApi))] public IReadOnlyCollection Apis { get; init; } @@ -22,7 +21,6 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary /// 仪表板布局 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string DashboardLayout { get; set; } @@ -30,14 +28,12 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary /// 数据范围 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual DataScopes DataScope { get; init; } /// /// 角色-部门映射 /// - [CsvIgnore] [JsonIgnore] [Navigate(ManyToMany = typeof(Sys_RoleDept))] public IReadOnlyCollection Depts { get; init; } @@ -46,7 +42,6 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary /// 是否显示仪表板 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual bool DisplayDashboard { get; init; } @@ -54,7 +49,6 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary /// 是否启用 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual bool Enabled { get; init; } @@ -62,14 +56,12 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary /// 是否忽略权限控制 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual bool IgnorePermissionControl { get; init; } /// /// 角色-菜单映射 /// - [CsvIgnore] [JsonIgnore] [Navigate(ManyToMany = typeof(Sys_RoleMenu))] public IReadOnlyCollection Menus { get; init; } @@ -78,14 +70,12 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary /// 角色名称 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31)] - [CsvIgnore] [JsonIgnore] public virtual string Name { get; init; } /// /// 发送给此角色的站内信集合 /// - [CsvIgnore] [JsonIgnore] [Navigate(ManyToMany = typeof(Sys_SiteMsgRole))] public IReadOnlyCollection SiteMsgs { get; init; } @@ -94,7 +84,6 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary /// 排序值,越大越前 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long Sort { get; init; } @@ -102,35 +91,25 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary /// 备注 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] - [CsvIgnore] [JsonIgnore] public virtual string Summary { get; set; } /// /// 此角色下的用户集合 /// - [CsvIgnore] [JsonIgnore] [Navigate(ManyToMany = typeof(Sys_UserRole))] public IReadOnlyCollection Users { get; init; } /// - public virtual void Register(TypeAdapterConfig config) - { + public virtual void Register(TypeAdapterConfig config) { // ReSharper disable InvokeAsExtensionMethod #pragma warning disable RCS1196 - _ = config.ForType() - .Map( // - d => d.Depts - , s => s.DeptIds.NullOrEmpty() ? Array.Empty() : Enumerable.Select(s.DeptIds, x => new Sys_Dept { Id = x })) - .Map( // - d => d.Menus - , s => s.MenuIds.NullOrEmpty() ? Array.Empty() : Enumerable.Select(s.MenuIds, x => new Sys_Menu { Id = x })) - .Map( // - d => d.Apis, s => s.ApiIds.NullOrEmpty() ? Array.Empty() : Enumerable.Select(s.ApiIds, x => new Sys_Api { Id = x })) - - // - ; + _ = config + .ForType() + .Map(d => d.Depts, s => s.DeptIds.NullOrEmpty() ? Array.Empty() : Enumerable.Select(s.DeptIds, x => new Sys_Dept { Id = x })) + .Map(d => d.Menus, s => s.MenuIds.NullOrEmpty() ? Array.Empty() : Enumerable.Select(s.MenuIds, x => new Sys_Menu { Id = x })) + .Map(d => d.Apis, s => s.ApiIds.NullOrEmpty() ? Array.Empty() : Enumerable.Select(s.ApiIds, x => new Sys_Api { Id = x })); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RoleApi.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RoleApi.cs index ab7f0634..e8de805c 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RoleApi.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RoleApi.cs @@ -9,7 +9,6 @@ public record Sys_RoleApi : ImmutableEntity /// /// 关联的接口 /// - [CsvIgnore] [JsonIgnore] public Sys_Api Api { get; init; } @@ -17,14 +16,12 @@ public record Sys_RoleApi : ImmutableEntity /// 接口编号 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_127)] - [CsvIgnore] [JsonIgnore] public string ApiId { get; init; } /// /// 关联的角色 /// - [CsvIgnore] [JsonIgnore] public Sys_Role Role { get; init; } @@ -32,7 +29,6 @@ public record Sys_RoleApi : ImmutableEntity /// 角色编号 /// [Column] - [CsvIgnore] [JsonIgnore] public long RoleId { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RoleDept.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RoleDept.cs index 44f17fca..120af57a 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RoleDept.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RoleDept.cs @@ -10,7 +10,6 @@ public record Sys_RoleDept : ImmutableEntity /// /// 关联的部门 /// - [CsvIgnore] [JsonIgnore] public Sys_Dept Dept { get; init; } @@ -18,14 +17,12 @@ public record Sys_RoleDept : ImmutableEntity /// 可访问的部门编号 /// [Column] - [CsvIgnore] [JsonIgnore] public long DeptId { get; init; } /// /// 关联的角色 /// - [CsvIgnore] [JsonIgnore] public Sys_Role Role { get; init; } @@ -33,7 +30,6 @@ public record Sys_RoleDept : ImmutableEntity /// 角色编号 /// [Column] - [CsvIgnore] [JsonIgnore] public long RoleId { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RoleMenu.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RoleMenu.cs index 9e4d612c..5bfd3a31 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RoleMenu.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_RoleMenu.cs @@ -10,7 +10,6 @@ public record Sys_RoleMenu : ImmutableEntity /// /// 关联的菜单 /// - [CsvIgnore] [JsonIgnore] public Sys_Menu Menu { get; init; } @@ -18,14 +17,12 @@ public record Sys_RoleMenu : ImmutableEntity /// 菜单编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long MenuId { get; init; } /// /// 关联的角色 /// - [CsvIgnore] [JsonIgnore] public Sys_Role Role { get; init; } @@ -33,7 +30,6 @@ public record Sys_RoleMenu : ImmutableEntity /// 角色编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long RoleId { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsg.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsg.cs index d7cd14e4..7e97be24 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsg.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsg.cs @@ -13,14 +13,12 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary /// 消息内容 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string Content { get; init; } /// /// 消息-创建者映射 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(CreatedUserId))] public Sys_User Creator { get; init; } @@ -28,7 +26,6 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary /// /// 消息-部门映射 /// - [CsvIgnore] [JsonIgnore] [Navigate(ManyToMany = typeof(Sys_SiteMsgDept))] public IReadOnlyCollection Depts { get; init; } @@ -36,7 +33,6 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary /// /// 消息-标记映射 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(Sys_SiteMsgFlag.SiteMsgId))] public IReadOnlyCollection Flags { get; init; } @@ -44,14 +40,12 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary /// /// 消息类型 /// - [CsvIgnore] [JsonIgnore] public virtual SiteMsgTypes MsgType { get; init; } /// /// 消息-角色映射 /// - [CsvIgnore] [JsonIgnore] [Navigate(ManyToMany = typeof(Sys_SiteMsgRole))] public IReadOnlyCollection Roles { get; init; } @@ -60,7 +54,6 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary /// 消息摘要 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] - [CsvIgnore] [JsonIgnore] public virtual string Summary { get; set; } @@ -68,39 +61,27 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary /// 消息主题 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] - [CsvIgnore] [JsonIgnore] public virtual string Title { get; init; } /// /// 消息-用户映射 /// - [CsvIgnore] [JsonIgnore] [Navigate(ManyToMany = typeof(Sys_SiteMsgUser))] public IReadOnlyCollection Users { get; init; } /// - public void Register(TypeAdapterConfig config) - { + public void Register(TypeAdapterConfig config) { #pragma warning disable RCS1196 // ReSharper disable InvokeAsExtensionMethod - _ = config.ForType() - .Map( // - d => d.Summary, s => s.Content.RemoveHtmlTag().HtmlDe().Sub(0, 100)) - .Map( // - d => d.Roles - , s => s.RoleIds.NullOrEmpty() ? Array.Empty() : Enumerable.Select(s.RoleIds, x => new Sys_Role { Id = x })) - .Map( // - d => d.Users - , s => s.UserIds.NullOrEmpty() ? Array.Empty() : Enumerable.Select(s.UserIds, x => new Sys_User { Id = x })) - .Map( // - d => d.Depts - , s => s.DeptIds.NullOrEmpty() ? Array.Empty() : Enumerable.Select(s.DeptIds, x => new Sys_Dept { Id = x })) - - // - ; + _ = config + .ForType() + .Map(d => d.Summary, s => s.Content.RemoveHtmlTag().HtmlDe().Sub(0, 100)) + .Map(d => d.Roles, s => s.RoleIds.NullOrEmpty() ? Array.Empty() : Enumerable.Select(s.RoleIds, x => new Sys_Role { Id = x })) + .Map(d => d.Users, s => s.UserIds.NullOrEmpty() ? Array.Empty() : Enumerable.Select(s.UserIds, x => new Sys_User { Id = x })) + .Map(d => d.Depts, s => s.DeptIds.NullOrEmpty() ? Array.Empty() : Enumerable.Select(s.DeptIds, x => new Sys_Dept { Id = x })); // ReSharper restore InvokeAsExtensionMethod #pragma warning restore RCS1196 diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgDept.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgDept.cs index 59595e70..161f4226 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgDept.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgDept.cs @@ -10,7 +10,6 @@ public record Sys_SiteMsgDept : ImmutableEntity /// /// 关联的部门 /// - [CsvIgnore] [JsonIgnore] public Sys_Dept Dept { get; init; } @@ -18,14 +17,12 @@ public record Sys_SiteMsgDept : ImmutableEntity /// 部门编号 /// [Column] - [CsvIgnore] [JsonIgnore] public long DeptId { get; init; } /// /// 关联的站内信 /// - [CsvIgnore] [JsonIgnore] public Sys_SiteMsg SiteMsg { get; init; } @@ -33,7 +30,6 @@ public record Sys_SiteMsgDept : ImmutableEntity /// 站内信编号 /// [Column] - [CsvIgnore] [JsonIgnore] public long SiteMsgId { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgFlag.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgFlag.cs index f7d7f552..6027612e 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgFlag.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgFlag.cs @@ -13,7 +13,6 @@ public record Sys_SiteMsgFlag : MutableEntity /// 站内信编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long SiteMsgId { get; init; } @@ -21,7 +20,6 @@ public record Sys_SiteMsgFlag : MutableEntity /// 用户编号 /// [Column] - [CsvIgnore] [JsonIgnore] public long UserId { get; init; } @@ -29,7 +27,6 @@ public record Sys_SiteMsgFlag : MutableEntity /// 用户站内信状态 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual UserSiteMsgStatues UserSiteMsgStatus { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgRole.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgRole.cs index 26d60810..36a84440 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgRole.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgRole.cs @@ -10,7 +10,6 @@ public record Sys_SiteMsgRole : ImmutableEntity /// /// 关联的角色 /// - [CsvIgnore] [JsonIgnore] public Sys_Role Role { get; init; } @@ -18,14 +17,12 @@ public record Sys_SiteMsgRole : ImmutableEntity /// 角色编号 /// [Column] - [CsvIgnore] [JsonIgnore] public long RoleId { get; init; } /// /// 关联的站内信 /// - [CsvIgnore] [JsonIgnore] public Sys_SiteMsg SiteMsg { get; init; } @@ -33,7 +30,6 @@ public record Sys_SiteMsgRole : ImmutableEntity /// 站内信编号 /// [Column] - [CsvIgnore] [JsonIgnore] public long SiteMsgId { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgUser.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgUser.cs index cc1b91c9..cfe96989 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgUser.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgUser.cs @@ -10,7 +10,6 @@ public record Sys_SiteMsgUser : ImmutableEntity /// /// 关联的站内信 /// - [CsvIgnore] [JsonIgnore] public Sys_SiteMsg SiteMsg { get; init; } @@ -18,14 +17,12 @@ public record Sys_SiteMsgUser : ImmutableEntity /// 站内信编号 /// [Column] - [CsvIgnore] [JsonIgnore] public long SiteMsgId { get; init; } /// /// 关联的用户 /// - [CsvIgnore] [JsonIgnore] public Sys_User User { get; init; } @@ -33,7 +30,6 @@ public record Sys_SiteMsgUser : ImmutableEntity /// 用户编号 /// [Column] - [CsvIgnore] [JsonIgnore] public long UserId { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_User.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_User.cs index e3b9504b..585b098a 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_User.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_User.cs @@ -5,10 +5,10 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 用户基本信息表 /// -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(Email), nameof(Email), true)] -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(Mobile), nameof(Mobile), true)] -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(InviteCode), nameof(InviteCode), true)] -[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(UserName), nameof(UserName), true)] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(Email), nameof(Email), true)] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(Mobile), nameof(Mobile), true)] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(InviteCode), nameof(InviteCode), true)] +[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(UserName), nameof(UserName), true)] [Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_User))] public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister { @@ -16,14 +16,12 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister /// 头像链接 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_127)] - [CsvIgnore] [JsonIgnore] public virtual string Avatar { get; init; } /// /// 归属部门 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(DeptId))] public Sys_Dept Dept { get; init; } @@ -32,7 +30,6 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister /// 部门编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long DeptId { get; init; } @@ -40,7 +37,6 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister /// 邮箱 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)] - [CsvIgnore] [JsonIgnore] public virtual string Email { get; init; } @@ -48,14 +44,12 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister /// 是否启用 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual bool Enabled { get; init; } /// /// 用户邀请 /// - [CsvIgnore] [JsonIgnore] public Sys_UserInvite Invite { get; init; } @@ -63,7 +57,6 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister /// 邀请码 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_CHAR_6)] - [CsvIgnore] [JsonIgnore] public virtual string InviteCode { get; init; } @@ -71,7 +64,6 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister /// 最后登录时间 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual DateTime? LastLoginTime { get; init; } @@ -79,7 +71,6 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister /// 手机号码 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_15)] - [CsvIgnore] [JsonIgnore] public virtual string Mobile { get; init; } @@ -87,7 +78,6 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister /// 密码 /// [Column] - [CsvIgnore] [DangerField] [JsonIgnore] public Guid Password { get; init; } @@ -95,14 +85,12 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister /// /// 用户档案 /// - [CsvIgnore] [JsonIgnore] public Sys_UserProfile Profile { get; init; } /// /// 归属角色 /// - [CsvIgnore] [JsonIgnore] [Navigate(ManyToMany = typeof(Sys_UserRole))] public ICollection Roles { get; init; } @@ -110,7 +98,6 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister /// /// 发送给此用户的站内信集合 /// - [CsvIgnore] [JsonIgnore] [Navigate(ManyToMany = typeof(Sys_SiteMsgUser))] public IReadOnlyCollection SiteMsgs { get; init; } @@ -119,7 +106,6 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister /// 备注 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] - [CsvIgnore] [JsonIgnore] public virtual string Summary { get; set; } @@ -127,7 +113,6 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister /// 授权验证Token,全局唯一,可以随时重置(强制下线) /// [Column] - [CsvIgnore] [JsonIgnore] public Guid Token { get; init; } @@ -135,29 +120,24 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister /// 用户名 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31)] - [CsvIgnore] [JsonIgnore] public virtual string UserName { get; init; } /// - public virtual void Register(TypeAdapterConfig config) - { + public virtual void Register(TypeAdapterConfig config) { #pragma warning disable RCS1196 // ReSharper disable InvokeAsExtensionMethod - _ = config.ForType() - .Map(d => d.Password, s => s.PasswordText.Pwd().Guid()) - .Map(d => d.Token, _ => Guid.NewGuid()) - .Map( // - d => d.Roles - , s => s.RoleIds.NullOrEmpty() ? Array.Empty() : Enumerable.Select(s.RoleIds, x => new Sys_Role { Id = x })); + _ = config + .ForType() + .Map(d => d.Password, s => s.PasswordText.Pwd().Guid()) + .Map(d => d.Token, _ => Guid.NewGuid()) + .Map(d => d.Roles, s => s.RoleIds.NullOrEmpty() ? Array.Empty() : Enumerable.Select(s.RoleIds, x => new Sys_Role { Id = x })); - _ = config.ForType() - .Map( // - d => d.Password, s => s.PasswordText.NullOrEmpty() ? Guid.Empty : s.PasswordText.Pwd().Guid()) - .Map( // - d => d.Roles - , s => s.RoleIds.NullOrEmpty() ? Array.Empty() : Enumerable.Select(s.RoleIds, x => new Sys_Role { Id = x })); + _ = config + .ForType() + .Map(d => d.Password, s => s.PasswordText.NullOrEmpty() ? Guid.Empty : s.PasswordText.Pwd().Guid()) + .Map(d => d.Roles, s => s.RoleIds.NullOrEmpty() ? Array.Empty() : Enumerable.Select(s.RoleIds, x => new Sys_Role { Id = x })); // ReSharper restore InvokeAsExtensionMethod #pragma warning restore RCS1196 diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_UserInvite.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_UserInvite.cs index a7ac2f71..d91bd7ae 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_UserInvite.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_UserInvite.cs @@ -6,10 +6,23 @@ namespace NetAdmin.Domain.DbMaps.Sys; [Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_UserInvite))] public record Sys_UserInvite : VersionEntity, IFieldOwner { + /// + /// 渠道 + /// + [JsonIgnore] + [Navigate(nameof(ChannelId))] + public Sys_User Channel { get; init; } + + /// + /// 渠道编号 + /// + [Column] + [JsonIgnore] + public virtual long? ChannelId { get; init; } + /// /// 子节点 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(OwnerId))] public IEnumerable Children { get; init; } @@ -18,14 +31,12 @@ public record Sys_UserInvite : VersionEntity, IFieldOwner /// 返佣比率 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual int CommissionRatio { get; init; } /// /// 归属 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(OwnerId))] public Sys_User Owner { get; init; } @@ -34,7 +45,6 @@ public record Sys_UserInvite : VersionEntity, IFieldOwner /// 归属部门编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerDeptId { get; init; } @@ -42,7 +52,6 @@ public record Sys_UserInvite : VersionEntity, IFieldOwner /// 归属用户编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerId { get; init; } @@ -50,14 +59,12 @@ public record Sys_UserInvite : VersionEntity, IFieldOwner /// 允许自助充值 /// [Column] - [CsvIgnore] [JsonIgnore] - public virtual bool SelfRechargeAllowed { get; init; } + public virtual bool SelfDepositAllowed { get; init; } /// /// 用户 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(Id))] public Sys_User User { get; init; } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_UserProfile.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_UserProfile.cs index 76b90340..b2c05619 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_UserProfile.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_UserProfile.cs @@ -12,7 +12,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 应用配置 /// [Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] - [CsvIgnore] [JsonIgnore] public virtual string AppConfig { get; set; } @@ -20,7 +19,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 出生日期 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual DateTime? BornDate { get; init; } @@ -28,7 +26,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 证件号码 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)] - [CsvIgnore] [JsonIgnore] public virtual string CertificateNumber { get; init; } @@ -36,7 +33,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 证件类型 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual CertificateTypes? CertificateType { get; init; } @@ -44,7 +40,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 工作地址 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_127)] - [CsvIgnore] [JsonIgnore] public virtual string CompanyAddress { get; init; } @@ -52,7 +47,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 工作地区 /// [Column] - [CsvIgnore] [JsonIgnore] public int? CompanyArea { get; init; } @@ -60,7 +54,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 工作单位 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31)] - [CsvIgnore] [JsonIgnore] public virtual string CompanyName { get; init; } @@ -68,7 +61,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 工作电话 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31)] - [CsvIgnore] [JsonIgnore] public virtual string CompanyTelephone { get; init; } @@ -76,7 +68,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 文化程度 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual Educations? Education { get; init; } @@ -84,7 +75,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 紧急联系地址 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_127)] - [CsvIgnore] [JsonIgnore] public virtual string EmergencyContactAddress { get; init; } @@ -92,7 +82,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 紧急联系地区 /// [Column] - [CsvIgnore] [JsonIgnore] public int? EmergencyContactArea { get; init; } @@ -100,7 +89,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 紧急联系人手机号 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_15)] - [CsvIgnore] [JsonIgnore] public virtual string EmergencyContactMobile { get; init; } @@ -108,7 +96,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 紧急联系人 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31)] - [CsvIgnore] [JsonIgnore] public virtual string EmergencyContactName { get; init; } @@ -116,7 +103,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 性别 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual Genders? Gender { get; init; } @@ -124,7 +110,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 毕业学校 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31)] - [CsvIgnore] [JsonIgnore] public virtual string GraduateSchool { get; init; } @@ -132,7 +117,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 身高 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual int? Height { get; init; } @@ -140,7 +124,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 住宅地址 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_127)] - [CsvIgnore] [JsonIgnore] public virtual string HomeAddress { get; init; } @@ -148,7 +131,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 住宅地区 /// [Column] - [CsvIgnore] [JsonIgnore] public int? HomeArea { get; init; } @@ -156,7 +138,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 住宅电话 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31)] - [CsvIgnore] [JsonIgnore] public virtual string HomeTelephone { get; init; } @@ -164,7 +145,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 婚姻状况 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual MarriageStatues? MarriageStatus { get; init; } @@ -173,7 +153,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// /// 7 [Column] - [CsvIgnore] [JsonIgnore] public virtual Nations? Nation { get; init; } @@ -181,7 +160,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 籍贯 /// [Column] - [CsvIgnore] [JsonIgnore] public int? NationArea { get; init; } @@ -189,7 +167,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 政治面貌 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual PoliticalStatues? PoliticalStatus { get; init; } @@ -197,7 +174,6 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 职业 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31)] - [CsvIgnore] [JsonIgnore] public virtual string Profession { get; init; } @@ -205,25 +181,22 @@ public record Sys_UserProfile : VersionEntity, IRegister /// 真实姓名 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31)] - [CsvIgnore] [JsonIgnore] public virtual string RealName { get; init; } /// /// 用户基本信息 /// - [CsvIgnore] [JsonIgnore] public Sys_User User { get; init; } /// - public void Register(TypeAdapterConfig config) - { - _ = config.ForType() - .Map(d => d.NationArea, s => s.NationArea == null ? null : s.NationArea.Value) - .Map(d => d.CompanyArea, s => s.CompanyArea == null ? null : s.CompanyArea.Value) - .Map(d => d.HomeArea, s => s.HomeArea == null ? null : s.HomeArea.Value) - .Map( // - d => d.EmergencyContactArea, s => s.EmergencyContactArea == null ? null : s.EmergencyContactArea.Value); + public void Register(TypeAdapterConfig config) { + _ = config + .ForType() + .Map(d => d.NationArea, s => s.NationArea == null ? null : s.NationArea.Value) + .Map(d => d.CompanyArea, s => s.CompanyArea == null ? null : s.CompanyArea.Value) + .Map(d => d.HomeArea, s => s.HomeArea == null ? null : s.HomeArea.Value) + .Map(d => d.EmergencyContactArea, s => s.EmergencyContactArea == null ? null : s.EmergencyContactArea.Value); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_UserRole.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_UserRole.cs index e0b260e8..686b3ec2 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_UserRole.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_UserRole.cs @@ -9,7 +9,6 @@ public record Sys_UserRole : VersionEntity /// /// 关联的角色 /// - [CsvIgnore] [JsonIgnore] public Sys_Role Role { get; init; } @@ -17,14 +16,12 @@ public record Sys_UserRole : VersionEntity /// 角色编号 /// [Column] - [CsvIgnore] [JsonIgnore] public long RoleId { get; init; } /// /// 关联的用户 /// - [CsvIgnore] [JsonIgnore] public Sys_User User { get; init; } @@ -32,7 +29,6 @@ public record Sys_UserRole : VersionEntity /// 用户编号 /// [Column] - [CsvIgnore] [JsonIgnore] public long UserId { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_UserWallet.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_UserWallet.cs index bb9e495e..02d374f6 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_UserWallet.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_UserWallet.cs @@ -10,7 +10,6 @@ public record Sys_UserWallet : LiteVersionEntity, IFieldOwner /// 可用余额 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long AvailableBalance { get; init; } @@ -18,14 +17,12 @@ public record Sys_UserWallet : LiteVersionEntity, IFieldOwner /// 冻结余额 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long FrozenBalance { get; init; } /// /// 归属用户 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(OwnerId))] public Sys_User Owner { get; init; } @@ -34,7 +31,6 @@ public record Sys_UserWallet : LiteVersionEntity, IFieldOwner /// 归属部门编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerDeptId { get; init; } @@ -42,7 +38,6 @@ public record Sys_UserWallet : LiteVersionEntity, IFieldOwner /// 归属用户编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerId { get; init; } @@ -50,7 +45,6 @@ public record Sys_UserWallet : LiteVersionEntity, IFieldOwner /// 总支出 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long TotalExpenditure { get; init; } @@ -58,7 +52,6 @@ public record Sys_UserWallet : LiteVersionEntity, IFieldOwner /// 总收入 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long TotalIncome { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_VerifyCode.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_VerifyCode.cs index b25388e5..1cbea8ca 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_VerifyCode.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_VerifyCode.cs @@ -12,7 +12,6 @@ public record Sys_VerifyCode : VersionEntity /// 验证码 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_7)] - [CsvIgnore] [JsonIgnore] public virtual string Code { get; init; } @@ -20,7 +19,6 @@ public record Sys_VerifyCode : VersionEntity /// 目标设备 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)] - [CsvIgnore] [JsonIgnore] public virtual string DestDevice { get; init; } @@ -28,7 +26,6 @@ public record Sys_VerifyCode : VersionEntity /// 设备类型 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual VerifyCodeDeviceTypes DeviceType { get; init; } @@ -36,7 +33,6 @@ public record Sys_VerifyCode : VersionEntity /// 发送报告 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] - [CsvIgnore] [JsonIgnore] public string Report { get; init; } @@ -44,7 +40,6 @@ public record Sys_VerifyCode : VersionEntity /// 验证码状态 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual VerifyCodeStatues Status { get; init; } @@ -52,7 +47,6 @@ public record Sys_VerifyCode : VersionEntity /// 验证码类型 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual VerifyCodeTypes Type { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_WalletFrozen.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_WalletFrozen.cs index 0f788736..fb4c2e50 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_WalletFrozen.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_WalletFrozen.cs @@ -13,7 +13,6 @@ public record Sys_WalletFrozen : LiteVersionEntity, IFieldOwner, IFieldSummary /// /// 100 [Column] - [CsvIgnore] [JsonIgnore] public virtual long Amount { get; init; } @@ -22,7 +21,6 @@ public record Sys_WalletFrozen : LiteVersionEntity, IFieldOwner, IFieldSummary /// /// 100 [Column] - [CsvIgnore] [JsonIgnore] public virtual long FrozenBalanceBefore { get; init; } @@ -31,7 +29,6 @@ public record Sys_WalletFrozen : LiteVersionEntity, IFieldOwner, IFieldSummary /// /// 123456 [Column(IsIdentity = false, IsPrimary = true, Position = 1)] - [CsvIgnore] [JsonIgnore] [Snowflake] public override long Id { get; init; } @@ -39,7 +36,6 @@ public record Sys_WalletFrozen : LiteVersionEntity, IFieldOwner, IFieldSummary /// /// 归属用户 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(OwnerId))] public Sys_User Owner { get; init; } @@ -49,7 +45,6 @@ public record Sys_WalletFrozen : LiteVersionEntity, IFieldOwner, IFieldSummary /// /// 370942943322181 [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerDeptId { get; init; } @@ -58,7 +53,6 @@ public record Sys_WalletFrozen : LiteVersionEntity, IFieldOwner, IFieldSummary /// /// 370942943322181 [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerId { get; init; } @@ -67,7 +61,6 @@ public record Sys_WalletFrozen : LiteVersionEntity, IFieldOwner, IFieldSummary /// /// Trade [Column] - [CsvIgnore] [JsonIgnore] public virtual WalletFrozenReasons Reason { get; init; } @@ -76,7 +69,6 @@ public record Sys_WalletFrozen : LiteVersionEntity, IFieldOwner, IFieldSummary /// /// Frozen [Column] - [CsvIgnore] [JsonIgnore] public virtual WalletFrozenStatues Status { get; init; } @@ -85,14 +77,12 @@ public record Sys_WalletFrozen : LiteVersionEntity, IFieldOwner, IFieldSummary /// /// 备注文字 [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] - [CsvIgnore] [JsonIgnore] public virtual string Summary { get; set; } /// /// 钱包 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(OwnerId))] public Sys_UserWallet Wallet { get; init; } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_WalletTrade.cs b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_WalletTrade.cs index e8333283..86fa5061 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_WalletTrade.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/DbMaps/Sys/Sys_WalletTrade.cs @@ -10,7 +10,6 @@ public record Sys_WalletTrade : ImmutableEntity, IFieldOwner, IFieldSummary /// 交易金额 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long Amount { get; set; } @@ -18,7 +17,6 @@ public record Sys_WalletTrade : ImmutableEntity, IFieldOwner, IFieldSummary /// 交易前余额 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long BalanceBefore { get; init; } @@ -26,14 +24,12 @@ public record Sys_WalletTrade : ImmutableEntity, IFieldOwner, IFieldSummary /// 业务订单号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long? BusinessOrderNumber { get; init; } /// /// 归属用户 /// - [CsvIgnore] [JsonIgnore] [Navigate(nameof(OwnerId))] public Sys_User Owner { get; init; } @@ -42,7 +38,6 @@ public record Sys_WalletTrade : ImmutableEntity, IFieldOwner, IFieldSummary /// 归属部门编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerDeptId { get; init; } @@ -50,7 +45,6 @@ public record Sys_WalletTrade : ImmutableEntity, IFieldOwner, IFieldSummary /// 归属用户编号 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual long? OwnerId { get; init; } @@ -58,7 +52,6 @@ public record Sys_WalletTrade : ImmutableEntity, IFieldOwner, IFieldSummary /// 备注 /// [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] - [CsvIgnore] [JsonIgnore] public virtual string Summary { get; set; } @@ -66,7 +59,6 @@ public record Sys_WalletTrade : ImmutableEntity, IFieldOwner, IFieldSummary /// 交易方向 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual TradeDirections TradeDirection { get; init; } @@ -74,7 +66,6 @@ public record Sys_WalletTrade : ImmutableEntity, IFieldOwner, IFieldSummary /// 交易类型 /// [Column] - [CsvIgnore] [JsonIgnore] public virtual TradeTypes TradeType { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Dependency/JobReq.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Dependency/JobReq.cs index 1ef4d968..cd5cf6df 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Dependency/JobReq.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Dependency/JobReq.cs @@ -10,6 +10,17 @@ public record JobReq : DataAbstraction /// public int? Count { get; init; } + /// + /// 模数 + /// + [JsonInclude] + public int Mod { get; init; } = 1; + + /// + /// 余数 + /// + public int Remainder { get; init; } + /// /// n秒以前 /// diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Dependency/QueryReq.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Dependency/QueryReq.cs index f432942b..dbc00e40 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Dependency/QueryReq.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Dependency/QueryReq.cs @@ -51,15 +51,14 @@ public record QueryReq : DataAbstraction /// /// 求和表达式 /// - public Expression> GetSumExp() - { + public Expression> GetSumExp() { if (RequiredFields.NullOrEmpty()) { return null; } - var field = RequiredFields[0]; + var field = RequiredFields[0]; var leftParameter = Expression.Parameter(typeof(TEntity), "a"); - var prop = typeof(TEntity).GetRecursiveProperty(field); + var prop = typeof(TEntity).GetRecursiveProperty(field); return prop == null || prop.GetCustomAttribute() != null ? null : Expression.Lambda>(CreatePropertyExpression(leftParameter, field), leftParameter); @@ -68,14 +67,13 @@ public record QueryReq : DataAbstraction /// /// 列表表达式 /// - public Expression> GetToListExp() - { + public Expression> GetToListExp() { if (RequiredFields.NullOrEmpty()) { return null; } var expParameter = Expression.Parameter(typeof(TEntity), "a"); - var bindings = new List<(PropertyInfo, MemberInitExpression)>(); + var bindings = new List<(PropertyInfo, MemberInitExpression)>(); // ReSharper disable once LoopCanBeConvertedToQuery foreach (var field in RequiredFields) { @@ -84,21 +82,24 @@ public record QueryReq : DataAbstraction continue; } - var parentPath = field[..field.LastIndexOf('.').Is(-1, field.Length)]; + var parentPath = field[..field.LastIndexOf('.').Is(-1, field.Length)]; var parentProperty = typeof(TEntity).GetRecursiveProperty(parentPath); - var propExp = Expression.Property(Expression.Parameter(prop.DeclaringType!, parentPath), prop); + var propExp = Expression.Property(Expression.Parameter(prop.DeclaringType!, parentPath), prop); bindings.Add((parentProperty, Expression.MemberInit(Expression.New(prop.DeclaringType), Expression.Bind(prop, propExp)))); } - var expBody = Expression.MemberInit( // + var expBody = Expression.MemberInit( Expression.New(typeof(TEntity)) - , bindings.SelectMany(x => x.Item1.PropertyType == x.Item2.Type ? [Expression.Bind(x.Item1, x.Item2)] : x.Item2.Bindings.ToArray())); + , bindings.SelectMany(x => x.Item1.PropertyType == x.Item2.Type ? [Expression.Bind(x.Item1, x.Item2)] : x.Item2.Bindings.ToArray()) + ); return Expression.Lambda>(expBody, expParameter); } - private static Expression CreatePropertyExpression(ParameterExpression param, string propertyPath) - { + private static Expression CreatePropertyExpression( + ParameterExpression param + , string propertyPath + ) { return propertyPath.Split('.').Aggregate(param, Expression.PropertyOrField); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/DfBuilder.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/DfBuilder.cs index 087d8297..c6ab3001 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/DfBuilder.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/DfBuilder.cs @@ -10,8 +10,7 @@ public sealed record DfBuilder /// /// 构建生成器 /// - public static DynamicFilterInfo New(DynamicFilterLogics logic) - { + public static DynamicFilterInfo New(DynamicFilterLogics logic) { return new DynamicFilterInfo { Logic = logic, Filters = [] }; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/DynamicFilterInfo.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/DynamicFilterInfo.cs index 60752861..ff2e06e6 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/DynamicFilterInfo.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/DynamicFilterInfo.cs @@ -35,8 +35,7 @@ public sealed record DynamicFilterInfo : DataAbstraction /// /// 隐式转换为 FreeSql 的 DynamicFilterInfo 对象 /// - public static implicit operator FreeSql.Internal.Model.DynamicFilterInfo(DynamicFilterInfo d) - { + public static implicit operator FreeSql.Internal.Model.DynamicFilterInfo(DynamicFilterInfo d) { var ret = d.Adapt(); #pragma warning disable VSTHRD002 ProcessDynamicFilterAsync(ret).ConfigureAwait(false).GetAwaiter().GetResult(); @@ -47,8 +46,7 @@ public sealed record DynamicFilterInfo : DataAbstraction /// /// 添加子过滤条件 /// - public DynamicFilterInfo Add(DynamicFilterInfo df) - { + public DynamicFilterInfo Add(DynamicFilterInfo df) { if (Filters == null) { return this with { Filters = [df] }; } @@ -60,29 +58,37 @@ public sealed record DynamicFilterInfo : DataAbstraction /// /// 添加过滤条件 /// - public DynamicFilterInfo Add(string field, DynamicFilterOperators opt, object val) - { + public DynamicFilterInfo Add( + string field + , DynamicFilterOperators opt + , object val + ) { return Add(new DynamicFilterInfo { Field = field, Operator = opt, Value = val }); } /// /// 添加过滤条件 /// - public DynamicFilterInfo AddIf(bool condition, string field, DynamicFilterOperators opt, object val) - { + public DynamicFilterInfo AddIf( + bool condition + , string field + , DynamicFilterOperators opt + , object val + ) { return !condition ? this : Add(field, opt, val); } /// /// 添加过滤条件 /// - public DynamicFilterInfo AddIf(bool condition, DynamicFilterInfo df) - { + public DynamicFilterInfo AddIf( + bool condition + , DynamicFilterInfo df + ) { return !condition ? this : Add(df); } - private static async Task ParseDateExpAsync(FreeSql.Internal.Model.DynamicFilterInfo d) - { + private static async Task ParseDateExpAsync(FreeSql.Internal.Model.DynamicFilterInfo d) { var values = ((JsonElement)d.Value).Deserialize(); if (!DateTime.TryParse(values[0], CultureInfo.InvariantCulture, out _)) { var result = await values[0].ExecuteCSharpCodeAsync([typeof(DateTime).Assembly], nameof(System)).ConfigureAwait(false); @@ -97,8 +103,7 @@ public sealed record DynamicFilterInfo : DataAbstraction d.Value = values; } - private static async Task ProcessDynamicFilterAsync(FreeSql.Internal.Model.DynamicFilterInfo d) - { + private static async Task ProcessDynamicFilterAsync(FreeSql.Internal.Model.DynamicFilterInfo d) { if (d?.Filters != null) { foreach (var filterInfo in d.Filters) { await ProcessDynamicFilterAsync(filterInfo).ConfigureAwait(false); @@ -106,7 +111,8 @@ public sealed record DynamicFilterInfo : DataAbstraction } if (new[] { nameof(IFieldCreatedClientIp.CreatedClientIp), nameof(IFieldModifiedClientIp.ModifiedClientIp) }.Contains( - d?.Field, StringComparer.OrdinalIgnoreCase)) { + d?.Field, StringComparer.OrdinalIgnoreCase + )) { var val = d!.Value?.ToString(); if (val?.IsIpV4() == true) { d.Value = val.IpV4ToInt32(); diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Api/ExportApiRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Api/ExportApiRsp.cs index bfd44f50..377ce6c1 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Api/ExportApiRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Api/ExportApiRsp.cs @@ -3,33 +3,4 @@ namespace NetAdmin.Domain.Dto.Sys.Api; /// /// 响应:导出接口 /// -public sealed record ExportApiRsp : QueryApiRsp -{ - /// - [CsvIgnore] - public override IEnumerable Children { get; init; } - - /// - [CsvIndex(0)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.接口路径))] - public override string Id { get; init; } - - /// - [CsvIndex(2)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.请求方式))] - public override string Method { get; init; } - - /// - [CsvIndex(1)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.接口名称))] - public override string Name { get; init; } - - /// - [CsvIndex(3)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.接口描述))] - public override string Summary { get; set; } -} \ No newline at end of file +public sealed record ExportApiRsp : Sys_Api; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Cache/CacheStatisticsRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Cache/CacheStatisticsRsp.cs index 565a317a..df5f317f 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Cache/CacheStatisticsRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Cache/CacheStatisticsRsp.cs @@ -5,21 +5,21 @@ namespace NetAdmin.Domain.Dto.Sys.Cache; /// public sealed record CacheStatisticsRsp : DataAbstraction { - private static readonly Regex[] _regexes = [ - new(@"keyspace_hits:(\d+)", RegexOptions.Compiled) // - , new(@"keyspace_misses:(\d+)", RegexOptions.Compiled) // - , new(@"uptime_in_seconds:(\d+)", RegexOptions.Compiled) // - , new(@"used_cpu_sys:([\d\\.]+)", RegexOptions.Compiled) // - , new(@"used_cpu_user:([\d\\.]+)", RegexOptions.Compiled) // - , new(@"used_memory:(\d+)", RegexOptions.Compiled) // - , new("redis_version:(.+)", RegexOptions.Compiled) // + private static readonly Regex[] _regexes = + [ + new(@"keyspace_hits:(\d+)", RegexOptions.Compiled) // + , new(@"keyspace_misses:(\d+)", RegexOptions.Compiled) // + , new(@"uptime_in_seconds:(\d+)", RegexOptions.Compiled) // + , new(@"used_cpu_sys:([\d\\.]+)", RegexOptions.Compiled) // + , new(@"used_cpu_user:([\d\\.]+)", RegexOptions.Compiled) // + , new(@"used_memory:(\d+)", RegexOptions.Compiled) // + , new("redis_version:(.+)", RegexOptions.Compiled) ]; /// /// Initializes a new instance of the class. /// - public CacheStatisticsRsp(string redisResult) - { + public CacheStatisticsRsp(string redisResult) { KeyspaceHits = _regexes[0].Match(redisResult).Groups[1].Value.Trim().Int64Try(0); KeyspaceMisses = _regexes[1].Match(redisResult).Groups[1].Value.Trim().Int64Try(0); UpTime = _regexes[2].Match(redisResult).Groups[1].Value.Trim().Int64Try(0); diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Config/ExportConfigRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Config/ExportConfigRsp.cs index 1ac80f88..ea87da04 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Config/ExportConfigRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Config/ExportConfigRsp.cs @@ -1,60 +1,6 @@ -using NetAdmin.Domain.Dto.Sys.Dept; -using NetAdmin.Domain.Dto.Sys.Role; - namespace NetAdmin.Domain.Dto.Sys.Config; /// /// 响应:导出配置 /// -public sealed record ExportConfigRsp : QueryConfigRsp, IRegister -{ - /// - [CsvIndex(6)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.是否启用))] - public override bool Enabled { get; init; } - - /// - [CsvIndex(0)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.唯一编码))] - public override long Id { get; init; } - - /// - [CsvIndex(3)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.人工审核))] - public override bool UserRegisterConfirm { get; init; } - - /// - [CsvIgnore] - public override QueryDeptRsp UserRegisterDept { get; init; } - - /// - /// 默认部门 - /// - [CsvIndex(1)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.默认部门))] - public string UserRegisterDeptName { get; init; } - - /// - [CsvIgnore] - public override QueryRoleRsp UserRegisterRole { get; init; } - - /// - /// 默认角色 - /// - [CsvIndex(2)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.默认角色))] - public string UserRegisterRoleName { get; init; } - - /// - public void Register(TypeAdapterConfig config) - { - _ = config.ForType() - .Map(d => d.UserRegisterDeptName, s => s.UserRegisterDept.Name) - .Map(d => d.UserRegisterRoleName, s => s.UserRegisterRole.Name); - } -} \ No newline at end of file +public sealed record ExportConfigRsp : Sys_Config; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/DepositOrder/CreateDepositOrderReq.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/DepositOrder/CreateDepositOrderReq.cs index 2026958d..9af08d20 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/DepositOrder/CreateDepositOrderReq.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/DepositOrder/CreateDepositOrderReq.cs @@ -1,3 +1,5 @@ +using NetAdmin.Domain.Enums.Sys; + namespace NetAdmin.Domain.Dto.Sys.DepositOrder; /// @@ -25,8 +27,7 @@ public record CreateDepositOrderReq : Sys_DepositOrder public override int ToPointRate { get; init; } /// - protected override IEnumerable ValidateInternal(ValidationContext validationContext) - { + protected override IEnumerable ValidateInternal(ValidationContext validationContext) { if (PaymentMode != PaymentModes.USDT) { yield return new ValidationResult(Ln.支付方式不正确, [nameof(PaymentMode)]); } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/DepositOrder/ExportDepositOrderRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/DepositOrder/ExportDepositOrderRsp.cs new file mode 100644 index 00000000..f98a6ad6 --- /dev/null +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/DepositOrder/ExportDepositOrderRsp.cs @@ -0,0 +1,61 @@ +namespace NetAdmin.Domain.Dto.Sys.DepositOrder; + +/// +/// 请求:导出充值订单 +/// +public sealed record ExportDepositOrderRsp : DataAbstraction +{ + /// + /// 充值金额 + /// + [Ganss.Excel.Column(6)] + public decimal 充值金额 { get; init; } + + /// + /// 订单编号 + /// + [Ganss.Excel.Column(1)] + public string 订单编号 { get; init; } + + /// + /// 订单状态 + /// + [Ganss.Excel.Column(5)] + public string 订单状态 { get; init; } + + /// + /// 归属用户 + /// + [Ganss.Excel.Column(2)] + public string 归属用户 { get; init; } + + /// + /// 汇率 + /// + [Ganss.Excel.Column(7)] + public decimal 汇率 { get; init; } + + /// + /// 渠道 + /// + [Ganss.Excel.Column(4)] + public string 渠道 { get; set; } + + /// + /// 上级 + /// + [Ganss.Excel.Column(3)] + public string 上级 { get; set; } + + /// + /// 支付方式 + /// + [Ganss.Excel.Column(9)] + public string 支付方式 { get; init; } + + /// + /// 支付金额 + /// + [Ganss.Excel.Column(8)] + public decimal 支付金额 { get; init; } +} \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/DepositOrder/QueryDepositOrderRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/DepositOrder/QueryDepositOrderRsp.cs index 5a9501b3..6cd90400 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/DepositOrder/QueryDepositOrderRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/DepositOrder/QueryDepositOrderRsp.cs @@ -1,4 +1,5 @@ using NetAdmin.Domain.Dto.Sys.User; +using NetAdmin.Domain.Enums.Sys; namespace NetAdmin.Domain.Dto.Sys.DepositOrder; @@ -32,7 +33,6 @@ public record QueryDepositOrderRsp : Sys_DepositOrder public override DateTime? ModifiedTime { get; init; } /// - [CsvIgnore] public new virtual QueryUserRsp Owner { get; init; } /// diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Dept/ExportDeptRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Dept/ExportDeptRsp.cs index 34b6b523..2f55e4b9 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Dept/ExportDeptRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Dept/ExportDeptRsp.cs @@ -3,45 +3,4 @@ namespace NetAdmin.Domain.Dto.Sys.Dept; /// /// 响应:导出部门 /// -public sealed record ExportDeptRsp : QueryDeptRsp -{ - /// - [CsvIgnore] - public override IEnumerable Children { get; init; } - - /// - [CsvIndex(5)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.创建时间))] - public override DateTime CreatedTime { get; init; } - - /// - [CsvIndex(4)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.是否启用))] - public override bool Enabled { get; init; } - - /// - [CsvIndex(0)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.唯一编码))] - public override long Id { get; init; } - - /// - [CsvIndex(1)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.部门名称))] - public override string Name { get; init; } - - /// - [CsvIndex(2)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.排序))] - public override long Sort { get; init; } - - /// - [CsvIndex(3)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.备注))] - public override string Summary { get; set; } -} \ No newline at end of file +public sealed record ExportDeptRsp : Sys_Dept; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Dic/Content/ExportDicContentRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Dic/Content/ExportDicContentRsp.cs index a24c09e3..9cbd4800 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Dic/Content/ExportDicContentRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Dic/Content/ExportDicContentRsp.cs @@ -3,35 +3,4 @@ namespace NetAdmin.Domain.Dto.Sys.Dic.Content; /// /// 响应:导出字典内容 /// -public sealed record ExportDicContentRsp : QueryDicContentRsp -{ - /// - [CsvIndex(2)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.创建时间))] - public override DateTime CreatedTime { get; init; } - - /// - [CsvIndex(3)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.是否启用))] - public override bool Enabled { get; init; } - - /// - [CsvIndex(0)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.项名))] - public override string Key { get; init; } - - /// - [CsvIndex(4)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.备注))] - public override string Summary { get; set; } - - /// - [CsvIndex(1)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.项值))] - public override string Value { get; init; } -} \ No newline at end of file +public sealed record ExportDicContentRsp : Sys_DicContent; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Doc/Content/ExportDocContentRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Doc/Content/ExportDocContentRsp.cs index 5874dfbd..7b5d9ff7 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Doc/Content/ExportDocContentRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Doc/Content/ExportDocContentRsp.cs @@ -3,29 +3,4 @@ namespace NetAdmin.Domain.Dto.Sys.Doc.Content; /// /// 响应:导出文档内容 /// -public sealed record ExportDocContentRsp : QueryDocContentRsp -{ - /// - [CsvIndex(1)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.文档内容))] - public override string Body { get; init; } - - /// - [CsvIndex(2)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.创建时间))] - public override DateTime CreatedTime { get; init; } - - /// - [CsvIndex(3)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.是否启用))] - public override bool Enabled { get; init; } - - /// - [CsvIndex(0)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.文档标题))] - public override string Title { get; init; } -} \ No newline at end of file +public sealed record ExportDocContentRsp : Sys_DocContent; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Job/ExportJobRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Job/ExportJobRsp.cs index dd92ee8e..b72fadff 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Job/ExportJobRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Job/ExportJobRsp.cs @@ -1,80 +1,6 @@ -using NetAdmin.Domain.Dto.Sys.User; -using NetAdmin.Domain.Enums.Sys; - namespace NetAdmin.Domain.Dto.Sys.Job; /// -/// 响应:导出计划作业 +/// 请求:导出计划作业 /// -public sealed record ExportJobRsp : QueryJobRsp -{ - /// - [CsvIndex(5)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.上次执行状态))] - public override string LastStatusCode => base.LastStatusCode; - - /// - [CsvIndex(10)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.创建时间))] - public override DateTime CreatedTime { get; init; } - - /// - [CsvIndex(9)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.是否启用))] - public override bool Enabled { get; init; } - - /// - [CsvIndex(2)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.执行计划))] - public override string ExecutionCron { get; init; } - - /// - [CsvIndex(4)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.请求方式))] - public override HttpMethods HttpMethod { get; init; } - - /// - [CsvIndex(0)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.唯一编码))] - public override long Id { get; init; } - - /// - [CsvIndex(1)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.作业名称))] - public override string JobName { get; init; } - - /// - [CsvIndex(7)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.上次执行耗时))] - public override long? LastDuration { get; init; } - - /// - [CsvIndex(6)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.上次执行时间))] - public override DateTime? LastExecTime { get; init; } - - /// - [CsvIndex(8)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.下次执行时间))] - public override DateTime? NextExecTime { get; init; } - - /// - [CsvIndex(3)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.作业状态))] - public override JobStatues Status { get; init; } - - /// - [CsvIgnore] - public override QueryUserRsp User { get; init; } -} \ No newline at end of file +public sealed record ExportJobRsp : Sys_Job; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Job/FinishJobReq.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Job/FinishJobReq.cs index 21384c0a..4f2a4471 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Job/FinishJobReq.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Job/FinishJobReq.cs @@ -6,8 +6,7 @@ namespace NetAdmin.Domain.Dto.Sys.Job; public sealed record FinishJobReq : Sys_Job, IRegister { /// - public void Register(TypeAdapterConfig config) - { + public void Register(TypeAdapterConfig config) { _ = config.ForType().Map(d => d.LastStatusCode, s => ((Sys_Job)s).LastStatusCode); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Job/QueryJobRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Job/QueryJobRsp.cs index 5ebdc6a7..77f88f14 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Job/QueryJobRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Job/QueryJobRsp.cs @@ -19,10 +19,11 @@ public record QueryJobRsp : Sys_Job /// [JsonInclude] public new virtual string LastStatusCode => - base.LastStatusCode switch { + base.LastStatusCode switch + { null => null - , _ => base.LastStatusCode.Value == Numbers.HTTP_STATUS_BIZ_FAIL - ? nameof(ErrorCodes.Unhandled).ToLowerCamelCase() + , _ => base.LastStatusCode.Value == Numbers.HTTP_STATUS_BIZ_FAIL + ? nameof(ErrorCodes.InternalError).ToLowerCamelCase() : ((HttpStatusCode)base.LastStatusCode.Value).ToString().ToLowerCamelCase() }; diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/JobRecord/ExportJobRecordRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/JobRecord/ExportJobRecordRsp.cs index 3c2963d1..19702c0d 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/JobRecord/ExportJobRecordRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/JobRecord/ExportJobRecordRsp.cs @@ -1,57 +1,6 @@ -using NetAdmin.Domain.Dto.Sys.Job; - namespace NetAdmin.Domain.Dto.Sys.JobRecord; /// /// 响应:导出计划作业执行记录 /// -public sealed record ExportJobRecordRsp : QueryJobRecordRsp, IRegister -{ - /// - [CsvIndex(1)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.响应状态码))] - public override string HttpStatusCode => base.HttpStatusCode; - - /// - [CsvIndex(6)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.创建时间))] - public override DateTime CreatedTime { get; init; } - - /// - [CsvIndex(3)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.执行耗时))] - public override long Duration { get; init; } - - /// - [CsvIndex(0)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.唯一编码))] - public override long Id { get; init; } - - /// - [CsvIgnore] - public override QueryJobRsp Job { get; init; } - - /// - /// 作业名称 - /// - [CsvIndex(4)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.作业名称))] - public string JobName { get; set; } - - /// - [CsvIndex(5)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.响应体))] - public override string ResponseBody { get; init; } - - /// - public void Register(TypeAdapterConfig config) - { - _ = config.ForType().Map(d => d.JobName, s => s.Job.JobName); - } -} \ No newline at end of file +public sealed record ExportJobRecordRsp : Sys_JobRecord; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/JobRecord/QueryJobRecordRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/JobRecord/QueryJobRecordRsp.cs index a65e19a2..7574cf88 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/JobRecord/QueryJobRecordRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/JobRecord/QueryJobRecordRsp.cs @@ -11,7 +11,7 @@ public record QueryJobRecordRsp : Sys_JobRecord [JsonInclude] public new virtual string HttpStatusCode => base.HttpStatusCode == Numbers.HTTP_STATUS_BIZ_FAIL - ? nameof(ErrorCodes.Unhandled).ToLowerCamelCase() + ? nameof(ErrorCodes.InternalError).ToLowerCamelCase() : ((HttpStatusCode)base.HttpStatusCode).ToString().ToLowerCamelCase(); /// diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/LoginLog/CreateLoginLogReq.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/LoginLog/CreateLoginLogReq.cs index fee1abca..bac856fa 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/LoginLog/CreateLoginLogReq.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/LoginLog/CreateLoginLogReq.cs @@ -10,14 +10,12 @@ namespace NetAdmin.Domain.Dto.Sys.LoginLog; public record CreateLoginLogReq : Sys_LoginLog, IRegister { /// - public void Register(TypeAdapterConfig config) - { + public void Register(TypeAdapterConfig config) { _ = config.ForType().MapWith(x => Convert(x)); } - private static CreateLoginLogReq Convert(CreateRequestLogReq s) - { - var body = s.Detail.ResponseBody.ToObject>(); + private static CreateLoginLogReq Convert(CreateRequestLogReq s) { + var body = s.Detail.ResponseBody.ToObject>(); ContextUserToken userToken = null; // ReSharper disable once InvertIf @@ -30,23 +28,24 @@ public record CreateLoginLogReq : Sys_LoginLog, IRegister } } - return new CreateLoginLogReq { - Id = s.Id - , CreatedClientIp = s.CreatedClientIp - , CreatedTime = s.CreatedTime - , Duration = s.Duration - , HttpStatusCode = s.HttpStatusCode - , ErrorCode = s.Detail.ErrorCode - , RequestBody = s.Detail.RequestBody - , RequestHeaders = s.Detail.RequestHeaders - , RequestUrl = s.Detail.RequestUrl - , ResponseBody = s.Detail.ResponseBody - , ResponseHeaders = s.Detail.ResponseHeaders - , ServerIp = s.Detail.ServerIp - , CreatedUserAgent = s.Detail.CreatedUserAgent - , OwnerId = userToken?.Id - , OwnerDeptId = userToken?.DeptId - , LoginUserName = s.Detail.RequestBody?.ToObject()?.Account - }; + return new CreateLoginLogReq + { + Id = s.Id + , CreatedClientIp = s.CreatedClientIp + , CreatedTime = s.CreatedTime + , Duration = s.Duration + , HttpStatusCode = s.HttpStatusCode + , ErrorCode = s.Detail.ErrorCode + , RequestBody = s.Detail.RequestBody + , RequestHeaders = s.Detail.RequestHeaders + , RequestUrl = s.Detail.RequestUrl + , ResponseBody = s.Detail.ResponseBody + , ResponseHeaders = s.Detail.ResponseHeaders + , ServerIp = s.Detail.ServerIp + , CreatedUserAgent = s.Detail.CreatedUserAgent + , OwnerId = userToken?.Id + , OwnerDeptId = userToken?.DeptId + , LoginUserName = s.Detail.RequestBody?.ToObject()?.Account + }; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/LoginLog/ExportLoginLogRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/LoginLog/ExportLoginLogRsp.cs index 639ec1a5..bb33f555 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/LoginLog/ExportLoginLogRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/LoginLog/ExportLoginLogRsp.cs @@ -1,55 +1,6 @@ -using NetAdmin.Domain.Dto.Sys.User; - namespace NetAdmin.Domain.Dto.Sys.LoginLog; /// /// 响应:导出登录日志 /// -public sealed record ExportLoginLogRsp : QueryLoginLogRsp -{ - /// - [CsvIndex(3)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.客户端IP))] - public override string CreatedClientIp => base.CreatedClientIp; - - /// - [CsvIndex(4)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.操作系统))] - public override string Os => base.Os; - - /// - [CsvIgnore(false)] - [CsvIndex(6)] - [CsvName(nameof(Ln.创建时间))] - public override DateTime CreatedTime { get; init; } - - /// - [CsvIndex(5)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.用户代理))] - public override string CreatedUserAgent { get; init; } - - /// - [CsvIndex(1)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.响应状态码))] - public override int HttpStatusCode { get; init; } - - /// - [CsvIndex(0)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.唯一编码))] - public override long Id { get; init; } - - /// - [CsvIgnore(false)] - [CsvIndex(2)] - [CsvName(nameof(Ln.登录名))] - public override string LoginUserName { get; protected init; } - - /// - [CsvIgnore] - public override QueryUserRsp Owner { get; init; } -} \ No newline at end of file +public sealed record ExportLoginLogRsp : Sys_LoginLog; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Menu/MetaInfo.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Menu/MetaInfo.cs index b5e3c28c..d7e1ab64 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Menu/MetaInfo.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Menu/MetaInfo.cs @@ -10,16 +10,24 @@ public sealed record MetaInfo : DataAbstraction /// /// Initializes a new instance of the class. /// - public MetaInfo(string color, bool fullPage, bool hidden, bool hiddenBreadCrumb, string icon, string tag, string title, MenuTypes type) - { - Color = color; - FullPage = fullPage; - Hidden = hidden; + public MetaInfo( + string color + , bool fullPage + , bool hidden + , bool hiddenBreadCrumb + , string icon + , string tag + , string title + , MenuTypes type + ) { + Color = color; + FullPage = fullPage; + Hidden = hidden; HiddenBreadCrumb = hiddenBreadCrumb; - Icon = icon; - Tag = tag; - Title = title; - Type = type; + Icon = icon; + Tag = tag; + Title = title; + Type = type; } /// diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Menu/QueryMenuRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Menu/QueryMenuRsp.cs index 0a51f482..3ccc5250 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Menu/QueryMenuRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Menu/QueryMenuRsp.cs @@ -62,12 +62,7 @@ public sealed record QueryMenuRsp : Sys_Menu, IRegister public override long Version { get; init; } /// - public void Register(TypeAdapterConfig config) - { - _ = config.ForType() // - .Map(d => d.Path, s => s.Path ?? string.Empty) - - // - ; + public void Register(TypeAdapterConfig config) { + _ = config.ForType().Map(d => d.Path, s => s.Path ?? string.Empty); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/RequestLog/ExportRequestLogRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/RequestLog/ExportRequestLogRsp.cs index d5461957..f63ea700 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/RequestLog/ExportRequestLogRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/RequestLog/ExportRequestLogRsp.cs @@ -1,81 +1,6 @@ -using NetAdmin.Domain.Dto.Sys.Api; -using NetAdmin.Domain.Dto.Sys.RequestLogDetail; -using NetAdmin.Domain.Dto.Sys.User; - namespace NetAdmin.Domain.Dto.Sys.RequestLog; /// /// 响应:导出请求日志 /// -public sealed record ExportRequestLogRsp : QueryRequestLogRsp -{ - /// - /// 接口路径 - /// - [CsvIndex(2)] - [JsonInclude] - [CsvName(nameof(Ln.接口路径))] - public string ApiId => Api.Id; - - /// - [CsvIndex(6)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.客户端IP))] - public override string CreatedClientIp => base.CreatedClientIp; - - /// - /// 用户名 - /// - [CsvIndex(5)] - [JsonInclude] - [CsvName(nameof(Ln.用户名))] - public string UserName => Owner?.UserName; - - /// - [CsvIgnore] - public override QueryApiRsp Api { get; init; } - - /// - [CsvIgnore(false)] - [CsvIndex(8)] - [CsvName(nameof(Ln.创建时间))] - public override DateTime CreatedTime { get; init; } - - /// - [CsvIgnore] - public override QueryRequestLogDetailRsp Detail { get; init; } - - /// - [CsvIndex(4)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.执行耗时))] - public override int Duration { get; init; } - - /// - [CsvIndex(3)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.请求方式))] - public override HttpMethods HttpMethod { get; init; } - - /// - [CsvIndex(1)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.响应状态码))] - public override int HttpStatusCode { get; init; } - - /// - [CsvIndex(0)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.唯一编码))] - public override long Id { get; init; } - - /// - [CsvIgnore] - public override QueryUserRsp Owner { get; init; } - - /// - [CsvIndex(7)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.追踪标识))] - public override Guid TraceId { get; init; } -} \ No newline at end of file +public sealed record ExportRequestLogRsp : Sys_RequestLog; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Role/CreateRoleReq.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Role/CreateRoleReq.cs index 5fa940ce..4632a040 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Role/CreateRoleReq.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Role/CreateRoleReq.cs @@ -58,8 +58,7 @@ public record CreateRoleReq : Sys_Role public override string Summary { get; set; } /// - protected override IEnumerable ValidateInternal(ValidationContext validationContext) - { + protected override IEnumerable ValidateInternal(ValidationContext validationContext) { if (validationContext.MemberName != null) { DashboardLayout = JsonSerializer.Serialize(JsonDocument.Parse(DashboardLayout)); } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Role/ExportRoleRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Role/ExportRoleRsp.cs index da2f5038..5c2dd809 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Role/ExportRoleRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Role/ExportRoleRsp.cs @@ -1,57 +1,6 @@ -using NetAdmin.Domain.Enums.Sys; - namespace NetAdmin.Domain.Dto.Sys.Role; /// /// 响应:导出角色 /// -public sealed record ExportRoleRsp : QueryRoleRsp -{ - /// - [CsvIndex(7)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.创建时间))] - public override DateTime CreatedTime { get; init; } - - /// - [CsvIndex(4)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.数据范围))] - public override DataScopes DataScope { get; init; } - - /// - [CsvIndex(5)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.显示仪表板))] - public override bool DisplayDashboard { get; init; } - - /// - [CsvIndex(6)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.是否启用))] - public override bool Enabled { get; init; } - - /// - [CsvIndex(0)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.唯一编码))] - public override long Id { get; init; } - - /// - [CsvIndex(3)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.无限权限))] - public override bool IgnorePermissionControl { get; init; } - - /// - [CsvIndex(1)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.角色名称))] - public override string Name { get; init; } - - /// - [CsvIndex(2)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.排序))] - public override long Sort { get; init; } -} \ No newline at end of file +public sealed record ExportRoleRsp : Sys_Role; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Role/QueryRoleRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Role/QueryRoleRsp.cs index cf604bce..594d1def 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Role/QueryRoleRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/Role/QueryRoleRsp.cs @@ -70,21 +70,33 @@ public record QueryRoleRsp : Sys_Role public override long Version { get; init; } /// - public override void Register(TypeAdapterConfig config) - { + public override void Register(TypeAdapterConfig config) { #pragma warning disable RCS1196 // ReSharper disable InvokeAsExtensionMethod - _ = config.ForType() // - .IgnoreIf((s, _) => s.Depts == null, d => d.DeptIds) - .IgnoreIf((s, _) => s.Menus == null, d => d.MenuIds) - .IgnoreIf((s, _) => s.Apis == null, d => d.ApiIds) - .Map(d => d.DeptIds, s => Enumerable.Select(s.Depts, x => x.Id)) - .Map(d => d.ApiIds, s => Enumerable.Select(s.Apis, x => x.Id)) - .Map(d => d.MenuIds, s => Enumerable.Select(s.Menus, x => x.Id)) - - // - ; + _ = config + .ForType() + .IgnoreIf( + ( + s + , _ + ) => s.Depts == null, d => d.DeptIds + ) + .IgnoreIf( + ( + s + , _ + ) => s.Menus == null, d => d.MenuIds + ) + .IgnoreIf( + ( + s + , _ + ) => s.Apis == null, d => d.ApiIds + ) + .Map(d => d.DeptIds, s => Enumerable.Select(s.Depts, x => x.Id)) + .Map(d => d.ApiIds, s => Enumerable.Select(s.Apis, x => x.Id)) + .Map(d => d.MenuIds, s => Enumerable.Select(s.Menus, x => x.Id)); // ReSharper restore InvokeAsExtensionMethod #pragma warning restore RCS1196 diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/SiteMsg/ExportSiteMsgRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/SiteMsg/ExportSiteMsgRsp.cs index fb68d33f..10fba232 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/SiteMsg/ExportSiteMsgRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/SiteMsg/ExportSiteMsgRsp.cs @@ -1,60 +1,6 @@ -using NetAdmin.Domain.Dto.Sys.Dept; -using NetAdmin.Domain.Dto.Sys.Role; -using NetAdmin.Domain.Dto.Sys.User; -using NetAdmin.Domain.Enums.Sys; - namespace NetAdmin.Domain.Dto.Sys.SiteMsg; /// /// 响应:导出站内信 /// -public sealed record ExportSiteMsgRsp : QuerySiteMsgRsp -{ - /// - [CsvIndex(5)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.创建时间))] - public override DateTime CreatedTime { get; init; } - - /// - [CsvIndex(1)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.用户名))] - public override string CreatedUserName { get; init; } - - /// - [CsvIgnore] - public override IEnumerable Depts { get; init; } - - /// - [CsvIndex(0)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.唯一编码))] - public override long Id { get; init; } - - /// - [CsvIndex(2)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.消息类型))] - public override SiteMsgTypes MsgType { get; init; } - - /// - [CsvIgnore] - public override IEnumerable Roles { get; init; } - - /// - [CsvIndex(4)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.消息摘要))] - public override string Summary { get; set; } - - /// - [CsvIndex(3)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.消息主题))] - public override string Title { get; init; } - - /// - [CsvIgnore] - public override IEnumerable Users { get; init; } -} \ No newline at end of file +public sealed record ExportSiteMsgRsp : Sys_SiteMsg; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/CreateUserReq.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/CreateUserReq.cs index d2f6e428..ee75dcff 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/CreateUserReq.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/CreateUserReq.cs @@ -6,7 +6,7 @@ namespace NetAdmin.Domain.Dto.Sys.User; /// /// 请求:创建用户 /// -public record CreateUserReq : CreateEditUserReq +public record CreateUserReq : CreateEditUserReq { /// public override bool Enabled { get; init; } = true; @@ -25,13 +25,7 @@ public record CreateUserReq : CreateEditUserReq public new CreateUserProfileReq Profile { get; init; } /// - public override void Register(TypeAdapterConfig config) - { - _ = config.ForType() // - .Ignore(a => a.InviteCode) - .Map(d => d.Mobile, s => s.VerifySmsCodeReq.DestDevice) - - // - ; + public override void Register(TypeAdapterConfig config) { + _ = config.ForType().Ignore(a => a.InviteCode).Map(d => d.Mobile, s => s.VerifySmsCodeReq.DestDevice); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/ExportUserRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/ExportUserRsp.cs index 90804fbd..da60a982 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/ExportUserRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/ExportUserRsp.cs @@ -1,86 +1,6 @@ -using NetAdmin.Domain.Dto.Sys.Dept; -using NetAdmin.Domain.Dto.Sys.Role; - namespace NetAdmin.Domain.Dto.Sys.User; /// /// 响应:导出用户 /// -public sealed record ExportUserRsp : QueryUserRsp -{ - /// - [CsvIndex(7)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.创建时间))] - public override DateTime CreatedTime { get; init; } - - /// - [CsvIgnore] - public override QueryDeptRsp Dept { get; init; } - - /// - /// 归属部门 - /// - [CsvIndex(5)] - [CsvName(nameof(Ln.归属部门))] - public string DeptName { get; init; } - - /// - [CsvIndex(3)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.邮箱号))] - public override string Email { get; init; } - - /// - [CsvIndex(6)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.是否启用))] - public override bool Enabled { get; init; } - - /// - [CsvIndex(0)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.唯一编码))] - public override long Id { get; init; } - - /// - [CsvIndex(8)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.最后登录时间))] - public override DateTime? LastLoginTime { get; init; } - - /// - [CsvIndex(2)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.手机号))] - public override string Mobile { get; init; } - - /// - /// 归属角色 - /// - [CsvIndex(4)] - [CsvName(nameof(Ln.归属角色))] - public string RoleNames { get; init; } - - /// - [CsvIgnore] - public override IEnumerable Roles { get; init; } - - /// - [CsvIndex(1)] - [CsvIgnore(false)] - [CsvName(nameof(Ln.用户名))] - public override string UserName { get; init; } - - /// - public override void Register(TypeAdapterConfig config) - { - _ = config.ForType() - .Map(d => d.DeptName, s => s.Dept.Name) - #pragma warning disable RCS1196 - - // ReSharper disable once InvokeAsExtensionMethod - .Map(d => d.RoleNames, s => string.Join(',', Enumerable.Select(s.Roles, x => x.Name))); - #pragma warning restore RCS1196 - } -} \ No newline at end of file +public sealed record ExportUserRsp : Sys_User; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/LoginByUserIdReq.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/LoginByUserIdReq.cs new file mode 100644 index 00000000..aeef591c --- /dev/null +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/LoginByUserIdReq.cs @@ -0,0 +1,17 @@ +namespace NetAdmin.Domain.Dto.Sys.User; + +/// +/// 请求:用户编号登录 +/// +public sealed record LoginByUserIdReq : DataAbstraction +{ + /// + /// 无痕登录 + /// + public bool NoTrace { get; init; } + + /// + /// 用户编号 + /// + public long UserId { get; init; } +} \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/LoginRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/LoginRsp.cs index 81f99b75..3bf50996 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/LoginRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/LoginRsp.cs @@ -18,10 +18,9 @@ public sealed record LoginRsp : DataAbstraction /// /// 设置到响应头 /// - public void SetToRspHeader() - { + public void SetToRspHeader() { // 设置响应报文头 - App.HttpContext.Response.Headers[Chars.FLG_HTTP_HEADER_KEY_ACCESS_TOKEN] = AccessToken; + App.HttpContext.Response.Headers[Chars.FLG_HTTP_HEADER_KEY_ACCESS_TOKEN] = AccessToken; App.HttpContext.Response.Headers[Chars.FLG_HTTP_HEADER_KEY_X_ACCESS_TOKEN] = RefreshToken; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/QueryUserRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/QueryUserRsp.cs index 85eab844..73203df1 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/QueryUserRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/QueryUserRsp.cs @@ -9,6 +9,11 @@ namespace NetAdmin.Domain.Dto.Sys.User; /// public record QueryUserRsp : Sys_User { + /// + /// 本部门以及子部门编号 + /// + public IReadOnlyList AllDeptIds { get; init; } + /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public override string Avatar { get; init; } @@ -28,11 +33,6 @@ public record QueryUserRsp : Sys_User /// public new virtual QueryDeptRsp Dept { get; init; } - /// - /// 本部门以及子部门编号 - /// - public IReadOnlyCollection DeptIds { get; init; } - /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public override string Email { get; init; } @@ -63,6 +63,11 @@ public record QueryUserRsp : Sys_User /// public new virtual IEnumerable Roles { get; init; } + /// + /// 本部门以及下一级部门编号 + /// + public IReadOnlyList SonDeptIds { get; init; } + /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public override string Summary { get; set; } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/UserInfoRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/UserInfoRsp.cs index 86897fd7..41c09c22 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/UserInfoRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/User/UserInfoRsp.cs @@ -15,13 +15,15 @@ public sealed record UserInfoRsp : QueryUserRsp public override IEnumerable Roles { get; init; } /// - public override void Register(TypeAdapterConfig config) - { - _ = config.ForType() // - .IgnoreIf((s, _) => s.Mobile == null, d => d.Mobile) - .Map(d => d.Mobile, s => s.Mobile.MaskMobile()) - - // - ; + public override void Register(TypeAdapterConfig config) { + _ = config + .ForType() + .IgnoreIf( + ( + s + , _ + ) => s.Mobile == null, d => d.Mobile + ) + .Map(d => d.Mobile, s => s.Mobile.MaskMobile()); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/CreateUserInviteReq.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/CreateUserInviteReq.cs index c45909af..040fe5a2 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/CreateUserInviteReq.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/CreateUserInviteReq.cs @@ -10,5 +10,5 @@ public record CreateUserInviteReq : Sys_UserInvite public override int CommissionRatio { get; init; } /// - public override bool SelfRechargeAllowed { get; init; } = true; + public override bool SelfDepositAllowed { get; init; } = true; } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/QueryUserInviteRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/QueryUserInviteRsp.cs index 802f0da6..21129d60 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/QueryUserInviteRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/QueryUserInviteRsp.cs @@ -7,6 +7,13 @@ namespace NetAdmin.Domain.Dto.Sys.UserInvite; /// public record QueryUserInviteRsp : Sys_UserInvite { + /// + public new virtual QueryUserRsp Channel { get; init; } + + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public override long? ChannelId { get; init; } + /// public new virtual IEnumerable Children { get; init; } @@ -43,7 +50,6 @@ public record QueryUserInviteRsp : Sys_UserInvite public override string ModifiedUserName { get; init; } /// - [CsvIgnore] public new virtual QueryUserRsp Owner { get; init; } /// @@ -54,12 +60,11 @@ public record QueryUserInviteRsp : Sys_UserInvite [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public override long? OwnerId { get; init; } - /// + /// [JsonIgnore(Condition = JsonIgnoreCondition.Never)] - public override bool SelfRechargeAllowed { get; init; } + public override bool SelfDepositAllowed { get; init; } /// - [CsvIgnore] public new virtual QueryUserRsp User { get; init; } /// diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/SetInviterReq.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/SetInviterReq.cs index a72d8528..71a96aba 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/SetInviterReq.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/SetInviterReq.cs @@ -19,8 +19,7 @@ public record SetInviterReq : Sys_UserInvite public override long Version { get; init; } /// - protected override IEnumerable ValidateInternal(ValidationContext validationContext) - { + protected override IEnumerable ValidateInternal(ValidationContext validationContext) { if (OwnerId == Id) { yield return new ValidationResult(Ln.不能设置自己为上级, [nameof(OwnerId)]); } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/SetSelfRechargeAllowedReq.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/SetSelfDepositAllowedReq.cs similarity index 72% rename from src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/SetSelfRechargeAllowedReq.cs rename to src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/SetSelfDepositAllowedReq.cs index b9fe7e42..512b2a5f 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/SetSelfRechargeAllowedReq.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/SetSelfDepositAllowedReq.cs @@ -3,15 +3,15 @@ namespace NetAdmin.Domain.Dto.Sys.UserInvite; /// /// 请求:设置允许自助充值 /// -public record SetSelfRechargeAllowedReq : Sys_UserInvite +public record SetSelfDepositAllowedReq : Sys_UserInvite { /// [JsonIgnore(Condition = JsonIgnoreCondition.Never)] public override long Id { get; init; } - /// + /// [JsonIgnore(Condition = JsonIgnoreCondition.Never)] - public override bool SelfRechargeAllowed { get; init; } + public override bool SelfDepositAllowed { get; init; } /// [JsonIgnore(Condition = JsonIgnoreCondition.Never)] diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/SetUserInviteEnabledReq.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/SetUserInviteEnabledReq.cs new file mode 100644 index 00000000..a7cd066a --- /dev/null +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserInvite/SetUserInviteEnabledReq.cs @@ -0,0 +1,12 @@ +using NetAdmin.Domain.Dto.Sys.User; + +namespace NetAdmin.Domain.Dto.Sys.UserInvite; + +/// +/// 请求:设置用户启用状态 +/// +public record SetUserInviteEnabledReq : EditUserInviteReq +{ + /// + public new virtual QueryUserRsp User { get; init; } +} \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserWallet/ExportUserWalletRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserWallet/ExportUserWalletRsp.cs new file mode 100644 index 00000000..98fd7139 --- /dev/null +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/UserWallet/ExportUserWalletRsp.cs @@ -0,0 +1,67 @@ +namespace NetAdmin.Domain.Dto.Sys.UserWallet; + +/// +/// 响应:导出用户钱包 +/// +public record ExportUserWalletRsp : DataAbstraction +{ + /// + /// 冻结余额 + /// + [Ganss.Excel.Column(7)] + public decimal 冻结余额 { get; init; } + + /// + /// 归属角色 + /// + [Ganss.Excel.Column(3)] + public string 归属角色 { get; init; } + + /// + /// 归属用户 + /// + [Ganss.Excel.Column(2)] + public string 归属用户 { get; init; } + + /// + /// 可用余额 + /// + [Ganss.Excel.Column(6)] + public decimal 可用余额 { get; init; } + + /// + /// 钱包编号 + /// + [Ganss.Excel.Column(1)] + public string 钱包编号 { get; init; } + + /// + /// 渠道 + /// + [Ganss.Excel.Column(5)] + public string 渠道 { get; init; } + + /// + /// 上级 + /// + [Ganss.Excel.Column(4)] + public string 上级 { get; init; } + + /// + /// 总收入 + /// + [Ganss.Excel.Column(8)] + public decimal 总收入 { get; init; } + + /// + /// 总支出 + /// + [Ganss.Excel.Column(9)] + public decimal 总支出 { get; init; } + + /// + /// 最后交易时间 + /// + [Ganss.Excel.Column(10)] + public string 最后交易时间 { get; init; } +} \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/VerifyCode/SendVerifyCodeReq.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/VerifyCode/SendVerifyCodeReq.cs index e72bed6d..e68862ca 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/VerifyCode/SendVerifyCodeReq.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/VerifyCode/SendVerifyCodeReq.cs @@ -35,8 +35,7 @@ public sealed record SendVerifyCodeReq : Sys_VerifyCode public VerifyCaptchaReq VerifyCaptchaReq { get; init; } /// - protected override IEnumerable ValidateInternal(ValidationContext validationContext) - { + protected override IEnumerable ValidateInternal(ValidationContext validationContext) { ValidationResult validationResult; switch (DeviceType) { case VerifyCodeDeviceTypes.Email: diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/WalletTrade/CreateWalletTradeReq.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/WalletTrade/CreateWalletTradeReq.cs index 94254fbc..b09dc10d 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/WalletTrade/CreateWalletTradeReq.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/WalletTrade/CreateWalletTradeReq.cs @@ -30,17 +30,18 @@ public record CreateWalletTradeReq : Sys_WalletTrade /// [JsonIgnore(Condition = JsonIgnoreCondition.Never)] [EnumDataType(typeof(TradeTypes))] - public override TradeTypes TradeType { + public override TradeTypes TradeType + { get; - init { - field = value; + init + { + field = value; TradeDirection = value.Attr().Direction; } } /// - protected override IEnumerable ValidateInternal(ValidationContext validationContext) - { + protected override IEnumerable ValidateInternal(ValidationContext validationContext) { var tradeDirection = TradeType.Attr().Direction; if (Amount == 0) { yield return new ValidationResult(Ln.交易金额不正确, [nameof(Amount)]); diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/WalletTrade/ExportWalletTradeRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/WalletTrade/ExportWalletTradeRsp.cs new file mode 100644 index 00000000..f265ecef --- /dev/null +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/WalletTrade/ExportWalletTradeRsp.cs @@ -0,0 +1,79 @@ +namespace NetAdmin.Domain.Dto.Sys.WalletTrade; + +/// +/// 响应:导出钱包交易 +/// +public record ExportWalletTradeRsp : DataAbstraction +{ + /// + /// 备注 + /// + [Ganss.Excel.Column(11)] + public string 备注 { get; init; } + + /// + /// 操作人 + /// + [Ganss.Excel.Column(12)] + public string 操作人 { get; init; } + + /// + /// 归属用户 + /// + [Ganss.Excel.Column(2)] + public string 归属用户 { get; init; } + + /// + /// 交易编号 + /// + [Ganss.Excel.Column(1)] + public string 交易编号 { get; init; } + + /// + /// 交易方向 + /// + [Ganss.Excel.Column(5)] + public string 交易方向 { get; init; } + + /// + /// 交易后余额 + /// + [Ganss.Excel.Column(10)] + public decimal 交易后余额 { get; init; } + + /// + /// 交易金额 + /// + [Ganss.Excel.Column(9)] + public decimal 交易金额 { get; init; } + + /// + /// 交易类型 + /// + [Ganss.Excel.Column(6)] + public string 交易类型 { get; init; } + + /// + /// 交易前余额 + /// + [Ganss.Excel.Column(8)] + public decimal 交易前余额 { get; init; } + + /// + /// 渠道 + /// + [Ganss.Excel.Column(4)] + public string 渠道 { get; init; } + + /// + /// 上级 + /// + [Ganss.Excel.Column(3)] + public string 上级 { get; init; } + + /// + /// 业务订单号 + /// + [Ganss.Excel.Column(7)] + public string 业务订单号 { get; init; } +} \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/WalletTrade/QueryWalletTradeRsp.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/WalletTrade/QueryWalletTradeRsp.cs index 7d406c02..dc91ef68 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/WalletTrade/QueryWalletTradeRsp.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/WalletTrade/QueryWalletTradeRsp.cs @@ -36,7 +36,6 @@ public record QueryWalletTradeRsp : Sys_WalletTrade public override long Id { get; init; } /// - [CsvIgnore] public new virtual QueryUserRsp Owner { get; init; } /// diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/WalletTrade/TransferReq.cs b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/WalletTrade/TransferReq.cs index cdc8f4df..4ef86ff2 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/WalletTrade/TransferReq.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Dto/Sys/WalletTrade/TransferReq.cs @@ -21,8 +21,7 @@ public record TransferReq : Sys_WalletTrade public override string Summary { get; set; } /// - protected override IEnumerable ValidateInternal(ValidationContext validationContext) - { + protected override IEnumerable ValidateInternal(ValidationContext validationContext) { yield return Amount <= 0 ? new ValidationResult(Ln.交易金额不正确, [nameof(Amount)]) : ValidationResult.Success; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Enums/DynamicFilterLogics.cs b/src/backend/NetAdmin/NetAdmin.Domain/Enums/DynamicFilterLogics.cs index 13c768eb..73ea6e9f 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Enums/DynamicFilterLogics.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Enums/DynamicFilterLogics.cs @@ -12,7 +12,7 @@ public enum DynamicFilterLogics [ResourceDescription(nameof(Ln.并且))] And = 0 - , + , /// /// 或者 diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Enums/DynamicFilterOperators.cs b/src/backend/NetAdmin/NetAdmin.Domain/Enums/DynamicFilterOperators.cs index dce8162b..20376c15 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Enums/DynamicFilterOperators.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Enums/DynamicFilterOperators.cs @@ -12,7 +12,7 @@ public enum DynamicFilterOperators [ResourceDescription(nameof(Ln.包含))] Contains = 0 - , + , /// /// 以什么开始 @@ -20,7 +20,7 @@ public enum DynamicFilterOperators [ResourceDescription(nameof(Ln.以什么开始))] StartsWith = 1 - , + , /// /// 以什么结束 @@ -28,7 +28,7 @@ public enum DynamicFilterOperators [ResourceDescription(nameof(Ln.以什么结束))] EndsWith = 2 - , + , /// /// 不包含 @@ -36,7 +36,7 @@ public enum DynamicFilterOperators [ResourceDescription(nameof(Ln.不包含))] NotContains = 3 - , + , /// /// 不以什么开始 @@ -44,7 +44,7 @@ public enum DynamicFilterOperators [ResourceDescription(nameof(Ln.不以什么开始))] NotStartsWith = 4 - , + , /// /// 不以什么结束 @@ -52,7 +52,7 @@ public enum DynamicFilterOperators [ResourceDescription(nameof(Ln.不以什么结束))] NotEndsWith = 5 - , + , /// /// 等于 @@ -60,7 +60,7 @@ public enum DynamicFilterOperators [ResourceDescription(nameof(Ln.等于))] Equal = 6 - , + , /// /// 等于 @@ -68,7 +68,7 @@ public enum DynamicFilterOperators [ResourceDescription(nameof(Ln.等于))] Equals = 7 - , + , /// /// 等于 @@ -76,7 +76,7 @@ public enum DynamicFilterOperators [ResourceDescription(nameof(Ln.等于))] Eq = 8 - , + , /// /// 不等于 @@ -84,7 +84,7 @@ public enum DynamicFilterOperators [ResourceDescription(nameof(Ln.不等于))] NotEqual = 9 - , + , /// /// 大于 @@ -92,7 +92,7 @@ public enum DynamicFilterOperators [ResourceDescription(nameof(Ln.大于))] GreaterThan = 10 - , + , /// /// 大于等于 @@ -100,7 +100,7 @@ public enum DynamicFilterOperators [ResourceDescription(nameof(Ln.大于等于))] GreaterThanOrEqual = 11 - , + , /// /// 小于 @@ -108,7 +108,7 @@ public enum DynamicFilterOperators [ResourceDescription(nameof(Ln.小于))] LessThan = 12 - , + , /// /// 小于等于 @@ -116,7 +116,7 @@ public enum DynamicFilterOperators [ResourceDescription(nameof(Ln.小于等于))] LessThanOrEqual = 13 - , + , /// /// 范围 @@ -124,7 +124,7 @@ public enum DynamicFilterOperators [ResourceDescription(nameof(Ln.范围))] Range = 14 - , + , /// /// 日期范围 @@ -132,7 +132,7 @@ public enum DynamicFilterOperators [ResourceDescription(nameof(Ln.日期范围))] DateRange = 15 - , + , /// /// 为其中之一 @@ -140,7 +140,7 @@ public enum DynamicFilterOperators [ResourceDescription(nameof(Ln.为其中之一))] Any = 16 - , + , /// /// 不为其中之一 @@ -148,7 +148,7 @@ public enum DynamicFilterOperators [ResourceDescription(nameof(Ln.不为其中之一))] NotAny = 17 - , + , /// /// 自定义 diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Enums/HttpMethods.cs b/src/backend/NetAdmin/NetAdmin.Domain/Enums/HttpMethods.cs index 972bc766..9a07da51 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Enums/HttpMethods.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Enums/HttpMethods.cs @@ -11,56 +11,56 @@ public enum HttpMethods /// Connect = 1 - , + , /// /// Delete /// Delete = 2 - , + , /// /// Get /// Get = 3 - , + , /// /// Head /// Head = 4 - , + , /// /// Options /// Options = 5 - , + , /// /// Patch /// Patch = 6 - , + , /// /// Post /// Post = 7 - , + , /// /// Put /// Put = 8 - , + , /// /// Trace diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/ArchiveVisibilities.cs b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/ArchiveVisibilities.cs index 33e3e1cd..35999ec2 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/ArchiveVisibilities.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/ArchiveVisibilities.cs @@ -12,7 +12,7 @@ public enum ArchiveVisibilities [ResourceDescription(nameof(Ln.完全公开))] Public = 1 - , + , /// /// 登录用户 @@ -20,7 +20,7 @@ public enum ArchiveVisibilities [ResourceDescription(nameof(Ln.登录用户))] LogonUser = 2 - , + , /// /// 部门可见 @@ -28,7 +28,7 @@ public enum ArchiveVisibilities [ResourceDescription(nameof(Ln.部门可见))] DeptUser = 3 - , + , /// /// 自己可见 diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/DataScopes.cs b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/DataScopes.cs index 779c9d63..3bf40e53 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/DataScopes.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/DataScopes.cs @@ -12,7 +12,7 @@ public enum DataScopes [ResourceDescription(nameof(Ln.全部数据))] All = 1 - , + , /// /// 本部门和所有子部门数据 @@ -20,7 +20,7 @@ public enum DataScopes [ResourceDescription(nameof(Ln.本部门和所有子部门数据))] DeptWithChildren = 2 - , + , /// /// 本部门数据 @@ -28,7 +28,7 @@ public enum DataScopes [ResourceDescription(nameof(Ln.本部门数据))] Dept = 3 - , + , /// /// 本人数据 @@ -36,7 +36,7 @@ public enum DataScopes [ResourceDescription(nameof(Ln.本人数据))] Self = 4 - , + , /// /// 指定部门数据 @@ -44,7 +44,7 @@ public enum DataScopes [ResourceDescription(nameof(Ln.指定部门数据))] SpecificDept = 5 - , + , /// /// 本部门和下一级部门数据 diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/DepositOrderStatues.cs b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/DepositOrderStatues.cs similarity index 73% rename from src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/DepositOrderStatues.cs rename to src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/DepositOrderStatues.cs index 76b4434f..6fa73802 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/DepositOrderStatues.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/DepositOrderStatues.cs @@ -1,4 +1,4 @@ -namespace NetAdmin.Infrastructure.Enums; +namespace NetAdmin.Domain.Enums.Sys; /// /// 充值订单状态 @@ -10,29 +10,33 @@ public enum DepositOrderStatues /// 等待支付 /// [ResourceDescription(nameof(Ln.等待支付))] + [EnumDecoration(nameof(Indicates.Info))] WaitingForPayment = 1 - , + , /// /// 到账确认中 /// [ResourceDescription(nameof(Ln.到账确认中))] + [EnumDecoration(nameof(Indicates.Warning), true)] PaymentConfirming = 2 - , + , /// /// 充值成功 /// [ResourceDescription(nameof(Ln.充值成功))] + [EnumDecoration(nameof(Indicates.Success))] Succeeded = 3 - , + , /// /// 支付超时 /// [ResourceDescription(nameof(Ln.支付超时))] + [EnumDecoration(nameof(Indicates.Danger))] PaymentTimeout = 4 } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/JobStatues.cs b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/JobStatues.cs index faabb0f5..aad1182e 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/JobStatues.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/JobStatues.cs @@ -13,7 +13,7 @@ public enum JobStatues [ResourceDescription(nameof(Ln.空闲))] Idle = 1 - , + , /// /// 运行 diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/MenuTypes.cs b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/MenuTypes.cs index 70f22274..59e63d04 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/MenuTypes.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/MenuTypes.cs @@ -12,7 +12,7 @@ public enum MenuTypes [ResourceDescription(nameof(Ln.菜单))] Menu = 1 - , + , /// /// 链接 @@ -20,7 +20,7 @@ public enum MenuTypes [ResourceDescription(nameof(Ln.链接))] Link = 2 - , + , /// /// 框架 @@ -28,7 +28,7 @@ public enum MenuTypes [ResourceDescription(nameof(Ln.框架))] Iframe = 3 - , + , /// /// 按钮 diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/SiteMsgTypes.cs b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/SiteMsgTypes.cs index 24d7fbc1..cdd74fdc 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/SiteMsgTypes.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/SiteMsgTypes.cs @@ -7,12 +7,12 @@ namespace NetAdmin.Domain.Enums.Sys; public enum SiteMsgTypes { /// - /// 通知 + /// 私信 /// - [ResourceDescription(nameof(Ln.通知))] + [ResourceDescription(nameof(Ln.私信))] Private = 1 - , + , /// /// 公告 diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/UserSiteMsgStatues.cs b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/UserSiteMsgStatues.cs index 839f23f7..585fd382 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/UserSiteMsgStatues.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/UserSiteMsgStatues.cs @@ -12,7 +12,7 @@ public enum UserSiteMsgStatues [ResourceDescription(nameof(Ln.未读))] Unread = 1 - , + , /// /// 已读 @@ -20,7 +20,7 @@ public enum UserSiteMsgStatues [ResourceDescription(nameof(Ln.已读))] Read = 2 - , + , /// /// 删除 diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/VerifyCodeDeviceTypes.cs b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/VerifyCodeDeviceTypes.cs index 8c4dd2ca..3e32bcde 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/VerifyCodeDeviceTypes.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/VerifyCodeDeviceTypes.cs @@ -12,7 +12,7 @@ public enum VerifyCodeDeviceTypes [ResourceDescription(nameof(Ln.手机))] Mobile = 1 - , + , /// /// 电子邮箱 diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/VerifyCodeStatues.cs b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/VerifyCodeStatues.cs index c22dba26..298308e3 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/VerifyCodeStatues.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/VerifyCodeStatues.cs @@ -12,7 +12,7 @@ public enum VerifyCodeStatues [ResourceDescription(nameof(Ln.等待发送))] Waiting = 1 - , + , /// /// 已发送 @@ -20,7 +20,7 @@ public enum VerifyCodeStatues [ResourceDescription(nameof(Ln.已发送))] Sent = 2 - , + , /// /// 发送失败 @@ -28,7 +28,7 @@ public enum VerifyCodeStatues [ResourceDescription(nameof(Ln.发送失败))] Failed = 3 - , + , /// /// 已校验 diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/VerifyCodeTypes.cs b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/VerifyCodeTypes.cs index 90b8195b..77cb69c8 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/VerifyCodeTypes.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/VerifyCodeTypes.cs @@ -12,7 +12,7 @@ public enum VerifyCodeTypes [ResourceDescription(nameof(Ln.绑定手机号码))] LinkMobile = 1 - , + , /// /// 登录 @@ -20,7 +20,7 @@ public enum VerifyCodeTypes [ResourceDescription(nameof(Ln.登录))] Login = 2 - , + , /// /// 解绑手机号码 @@ -28,7 +28,7 @@ public enum VerifyCodeTypes [ResourceDescription(nameof(Ln.解绑手机号码))] UnlinkMobile = 3 - , + , /// /// 注册 @@ -36,7 +36,7 @@ public enum VerifyCodeTypes [ResourceDescription(nameof(Ln.注册))] Register = 4 - , + , /// /// 重设密码 diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/WalletFrozenReasons.cs b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/WalletFrozenReasons.cs index 851a8564..29ace70c 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/WalletFrozenReasons.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/WalletFrozenReasons.cs @@ -12,7 +12,7 @@ public enum WalletFrozenReasons [ResourceDescription(nameof(Ln.交易))] Trade = 1 - , + , /// /// 人工 diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/WalletFrozenStatues.cs b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/WalletFrozenStatues.cs index f31d0bd4..d2bdb30a 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/WalletFrozenStatues.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Enums/Sys/WalletFrozenStatues.cs @@ -12,7 +12,7 @@ public enum WalletFrozenStatues [ResourceDescription(nameof(Ln.已冻结))] Frozen = 1 - , + , /// /// 已解冻 diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Events/EventData.cs b/src/backend/NetAdmin/NetAdmin.Domain/Events/EventData.cs index 287264f3..96c9e54f 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Events/EventData.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Events/EventData.cs @@ -8,8 +8,7 @@ public abstract record EventData : DataAbstraction, IEventData /// /// Initializes a new instance of the class. /// - protected EventData(T payLoad) - { + protected EventData(T payLoad) { PayLoad = payLoad; } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Events/SeedDataInsertedEvent.cs b/src/backend/NetAdmin/NetAdmin.Domain/Events/SeedDataInsertedEvent.cs index 9f31034f..e9fb7879 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Events/SeedDataInsertedEvent.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Events/SeedDataInsertedEvent.cs @@ -6,6 +6,7 @@ namespace NetAdmin.Domain.Events; public sealed record SeedDataInsertedEvent : EventData { /// - public SeedDataInsertedEvent(int payLoad) // - : base(payLoad) { } + public SeedDataInsertedEvent(int payLoad) + : base(payLoad) { + } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Events/SqlCommandAfterEvent.cs b/src/backend/NetAdmin/NetAdmin.Domain/Events/SqlCommandAfterEvent.cs index 2a765708..dfc0e7ab 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Events/SqlCommandAfterEvent.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Events/SqlCommandAfterEvent.cs @@ -8,9 +8,8 @@ public sealed record SqlCommandAfterEvent : SqlCommandBeforeEvent /// /// Initializes a new instance of the class. /// - public SqlCommandAfterEvent(CommandAfterEventArgs e) // - : base(e) - { + public SqlCommandAfterEvent(CommandAfterEventArgs e) + : base(e) { ElapsedMilliseconds = (long)((double)e.ElapsedTicks / Stopwatch.Frequency * 1_000); } @@ -21,8 +20,7 @@ public sealed record SqlCommandAfterEvent : SqlCommandBeforeEvent private long ElapsedMilliseconds { get; } /// - public override string ToString() - { + public override string ToString() { return string.Format(CultureInfo.InvariantCulture, "SQL-{0}: {2} ms {1}", Id, PayLoad, ElapsedMilliseconds); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Events/SqlCommandBeforeEvent.cs b/src/backend/NetAdmin/NetAdmin.Domain/Events/SqlCommandBeforeEvent.cs index b7aa988f..5f8c5290 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Events/SqlCommandBeforeEvent.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Events/SqlCommandBeforeEvent.cs @@ -8,12 +8,12 @@ public record SqlCommandBeforeEvent : SqlCommandEvent /// /// Initializes a new instance of the class. /// - public SqlCommandBeforeEvent(CommandBeforeEventArgs e) // - : base(e.Command.ParameterFormat().RemoveWrapped(), e.Identifier) { } + public SqlCommandBeforeEvent(CommandBeforeEventArgs e) + : base(e.Command.ParameterFormat().RemoveWrapped(), e.Identifier) { + } /// - public override string ToString() - { + public override string ToString() { return string.Format(CultureInfo.InvariantCulture, "SQL-{0}: Executing...", Id); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Events/SqlCommandEvent.cs b/src/backend/NetAdmin/NetAdmin.Domain/Events/SqlCommandEvent.cs index 9d5034cc..af9a2720 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Events/SqlCommandEvent.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Events/SqlCommandEvent.cs @@ -8,9 +8,11 @@ public abstract record SqlCommandEvent : EventData /// /// Initializes a new instance of the class. /// - protected SqlCommandEvent(string payLoad, Guid identifier) // - : base(payLoad) - { + protected SqlCommandEvent( + string payLoad + , Guid identifier + ) + : base(payLoad) { Identifier = identifier; } diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Events/SyncStructureAfterEvent.cs b/src/backend/NetAdmin/NetAdmin.Domain/Events/SyncStructureAfterEvent.cs index a64bc6b0..ad172ea5 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Events/SyncStructureAfterEvent.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Events/SyncStructureAfterEvent.cs @@ -8,12 +8,12 @@ public sealed record SyncStructureAfterEvent : SyncStructureBeforeEvent /// /// Initializes a new instance of the class. /// - public SyncStructureAfterEvent(SyncStructureBeforeEventArgs e) // - : base(e) { } + public SyncStructureAfterEvent(SyncStructureBeforeEventArgs e) + : base(e) { + } /// - public override string ToString() - { + public override string ToString() { return string.Format(CultureInfo.InvariantCulture, "{0}: {1}: {2}", Id, Ln.数据库结构同步完成, string.Join(',', EntityTypes.Select(x => x.Name))); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Events/SyncStructureBeforeEvent.cs b/src/backend/NetAdmin/NetAdmin.Domain/Events/SyncStructureBeforeEvent.cs index e3dccb47..a0cd011d 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Events/SyncStructureBeforeEvent.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Events/SyncStructureBeforeEvent.cs @@ -8,9 +8,8 @@ public record SyncStructureBeforeEvent : SqlCommandEvent /// /// Initializes a new instance of the class. /// - public SyncStructureBeforeEvent(SyncStructureBeforeEventArgs e) // - : base(null, e.Identifier) - { + public SyncStructureBeforeEvent(SyncStructureBeforeEventArgs e) + : base(null, e.Identifier) { EntityTypes = e.EntityTypes; } @@ -20,8 +19,7 @@ public record SyncStructureBeforeEvent : SqlCommandEvent protected Type[] EntityTypes { get; } /// - public override string ToString() - { + public override string ToString() { return string.Format(CultureInfo.InvariantCulture, "{0}: {1}", Id, Ln.数据库同步开始); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/RequestLogEvent.cs b/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/RequestLogEvent.cs index 16a5cb5d..08d9e602 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/RequestLogEvent.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/RequestLogEvent.cs @@ -8,6 +8,7 @@ namespace NetAdmin.Domain.Events.Sys; public sealed record RequestLogEvent : EventData { /// - public RequestLogEvent(CreateRequestLogReq payLoad) // - : base(payLoad) { } + public RequestLogEvent(CreateRequestLogReq payLoad) + : base(payLoad) { + } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/UserCreatedEvent.cs b/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/UserCreatedEvent.cs index e14681a3..a95b9896 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/UserCreatedEvent.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/UserCreatedEvent.cs @@ -8,6 +8,7 @@ namespace NetAdmin.Domain.Events.Sys; public sealed record UserCreatedEvent : EventData { /// - public UserCreatedEvent(UserInfoRsp payLoad) // - : base(payLoad) { } + public UserCreatedEvent(UserInfoRsp payLoad) + : base(payLoad) { + } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/UserRegisteredEvent.cs b/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/UserRegisteredEvent.cs index af248307..a15846f8 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/UserRegisteredEvent.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/UserRegisteredEvent.cs @@ -8,6 +8,7 @@ namespace NetAdmin.Domain.Events.Sys; public sealed record UserRegisteredEvent : EventData { /// - public UserRegisteredEvent(UserInfoRsp payLoad) // - : base(payLoad) { } + public UserRegisteredEvent(UserInfoRsp payLoad) + : base(payLoad) { + } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/UserUpdatedEvent.cs b/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/UserUpdatedEvent.cs index 672484d1..0042b90f 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/UserUpdatedEvent.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/UserUpdatedEvent.cs @@ -8,6 +8,7 @@ namespace NetAdmin.Domain.Events.Sys; public sealed record UserUpdatedEvent : EventData { /// - public UserUpdatedEvent(UserInfoRsp payLoad) // - : base(payLoad) { } + public UserUpdatedEvent(UserInfoRsp payLoad) + : base(payLoad) { + } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/VerifyCodeCreatedEvent.cs b/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/VerifyCodeCreatedEvent.cs index 08acfb81..b835afb1 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/VerifyCodeCreatedEvent.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Events/Sys/VerifyCodeCreatedEvent.cs @@ -8,6 +8,7 @@ namespace NetAdmin.Domain.Events.Sys; public sealed record VerifyCodeCreatedEvent : EventData { /// - public VerifyCodeCreatedEvent(QueryVerifyCodeRsp payLoad) // - : base(payLoad) { } + public VerifyCodeCreatedEvent(QueryVerifyCodeRsp payLoad) + : base(payLoad) { + } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Domain/Extensions/ISelectExtensions.cs b/src/backend/NetAdmin/NetAdmin.Domain/Extensions/ISelectExtensions.cs index 99ffe554..514dac03 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/Extensions/ISelectExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/Extensions/ISelectExtensions.cs @@ -12,9 +12,11 @@ public static class ISelectExtensions /// /// 执行SQL返回列表 /// - public static Task> ToListAsync(this ISelect me, QueryReq req) - where TQuery : DataAbstraction, new() - { + public static Task> ToListAsync( + this ISelect me + , QueryReq req + ) + where TQuery : DataAbstraction, new() { var exp = req.GetToListExp(); return exp == null ? me.ToListAsync() : me.ToListAsync(exp); } @@ -23,8 +25,7 @@ public static class ISelectExtensions /// 无锁无等待 /// public static ISelect WithNoLockNoWait(this ISelect me) - where T1 : class - { + where T1 : class { return me #if DBTYPE_SQLSERVER .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) @@ -36,9 +37,8 @@ public static class ISelectExtensions /// 无锁无等待 /// public static ISelect WithNoLockNoWait(this ISelect me) - where T1 : class // - where T2 : class - { + where T1 : class + where T2 : class { return me #if DBTYPE_SQLSERVER .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) @@ -50,10 +50,9 @@ public static class ISelectExtensions /// 无锁无等待 /// public static ISelect WithNoLockNoWait(this ISelect me) - where T1 : class // - where T2 : class // - where T3 : class - { + where T1 : class + where T2 : class + where T3 : class { return me #if DBTYPE_SQLSERVER .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) @@ -65,11 +64,10 @@ public static class ISelectExtensions /// 无锁无等待 /// public static ISelect WithNoLockNoWait(this ISelect me) - where T1 : class // - where T2 : class // - where T3 : class // - where T4 : class - { + where T1 : class + where T2 : class + where T3 : class + where T4 : class { return me #if DBTYPE_SQLSERVER .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) @@ -81,12 +79,11 @@ public static class ISelectExtensions /// 无锁无等待 /// public static ISelect WithNoLockNoWait(this ISelect me) - where T1 : class // - where T2 : class // - where T3 : class // - where T4 : class // - where T5 : class - { + where T1 : class + where T2 : class + where T3 : class + where T4 : class + where T5 : class { return me #if DBTYPE_SQLSERVER .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) @@ -98,13 +95,12 @@ public static class ISelectExtensions /// 无锁无等待 /// public static ISelect WithNoLockNoWait(this ISelect me) - where T1 : class // - where T2 : class // - where T3 : class // - where T4 : class // - where T5 : class // - where T6 : class - { + where T1 : class + where T2 : class + where T3 : class + where T4 : class + where T5 : class + where T6 : class { return me #if DBTYPE_SQLSERVER .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) diff --git a/src/backend/NetAdmin/NetAdmin.Domain/NetAdmin.Domain.csproj b/src/backend/NetAdmin/NetAdmin.Domain/NetAdmin.Domain.csproj index 4c1f3ac3..b0727c65 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/NetAdmin.Domain.csproj +++ b/src/backend/NetAdmin/NetAdmin.Domain/NetAdmin.Domain.csproj @@ -5,8 +5,8 @@ - - + + diff --git a/src/backend/NetAdmin/NetAdmin.Domain/ProjectUsings.cs b/src/backend/NetAdmin/NetAdmin.Domain/ProjectUsings.cs index 1f87d3ad..fd1c2d46 100644 --- a/src/backend/NetAdmin/NetAdmin.Domain/ProjectUsings.cs +++ b/src/backend/NetAdmin/NetAdmin.Domain/ProjectUsings.cs @@ -4,9 +4,6 @@ global using NetAdmin.Domain.DbMaps.Dependency; global using NetAdmin.Domain.DbMaps.Dependency.Fields; global using NetAdmin.Domain.DbMaps.Sys; global using NetAdmin.Domain.Dto.Dependency; -global using CsvIgnore = CsvHelper.Configuration.Attributes.IgnoreAttribute; -global using CsvIndex = CsvHelper.Configuration.Attributes.IndexAttribute; -global using CsvName = CsvHelper.Configuration.Attributes.NameAttribute; global using DynamicFilterOperators = NetAdmin.Domain.Enums.DynamicFilterOperators; global using HttpMethods = NetAdmin.Domain.Enums.HttpMethods; global using SqlIndex = FreeSql.DataAnnotations.IndexAttribute; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Host/Attributes/TransactionAttribute.cs b/src/backend/NetAdmin/NetAdmin.Host/Attributes/TransactionAttribute.cs index 2c74403d..eb4d85f1 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Attributes/TransactionAttribute.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Attributes/TransactionAttribute.cs @@ -9,24 +9,32 @@ public sealed class TransactionAttribute : Attribute /// /// Initializes a new instance of the class. /// - public TransactionAttribute() { } + public TransactionAttribute() { + } /// /// Initializes a new instance of the class. /// - public TransactionAttribute(Propagation propagation) // - : this(null, propagation) { } + public TransactionAttribute(Propagation propagation) + : this(null, propagation) { + } /// /// Initializes a new instance of the class. /// - public TransactionAttribute(IsolationLevel isolationLevel, Propagation propagation) // - : this(new IsolationLevel?(isolationLevel), propagation) { } + public TransactionAttribute( + IsolationLevel isolationLevel + , Propagation propagation + ) + : this(new IsolationLevel?(isolationLevel), propagation) { + } - private TransactionAttribute(IsolationLevel? isolationLevel, Propagation propagation) - { + private TransactionAttribute( + IsolationLevel? isolationLevel + , Propagation propagation + ) { IsolationLevel = isolationLevel; - Propagation = propagation; + Propagation = propagation; } /// diff --git a/src/backend/NetAdmin/NetAdmin.Host/BackgroundRunning/WorkBase.cs b/src/backend/NetAdmin/NetAdmin.Host/BackgroundRunning/WorkBase.cs index 0400fddb..0bfc1038 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/BackgroundRunning/WorkBase.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/BackgroundRunning/WorkBase.cs @@ -10,11 +10,10 @@ public abstract class WorkBase /// /// Initializes a new instance of the class. /// - protected WorkBase() - { + protected WorkBase() { ServiceProvider = App.GetService().CreateScope().ServiceProvider; - UowManager = ServiceProvider.GetService(); - Logger = ServiceProvider.GetService>(); + UowManager = ServiceProvider.GetService(); + Logger = ServiceProvider.GetService>(); } /// @@ -35,22 +34,23 @@ public abstract class WorkBase /// /// 通用工作流 /// - protected abstract ValueTask WorkflowAsync( // - - // ReSharper disable once UnusedParameter.Global + protected abstract ValueTask WorkflowAsync( #pragma warning disable SA1114 - CancellationToken cancelToken); + CancellationToken cancelToken + ); #pragma warning restore SA1114 /// /// 通用工作流 /// /// 加锁失败异常 - protected async ValueTask WorkflowAsync(bool singleInstance, CancellationToken cancelToken) - { + protected async ValueTask WorkflowAsync( + bool singleInstance + , CancellationToken cancelToken + ) { if (singleInstance) { // 加锁 - var lockName = GetType().FullName; + var lockName = GetType().FullName; await using var redisLocker = await GetLockerAsync(lockName).ConfigureAwait(false); await WorkflowAsync(cancelToken).ConfigureAwait(false); @@ -63,13 +63,18 @@ public abstract class WorkBase /// /// 获取锁 /// - private Task GetLockerAsync(string lockId) - { - var db = ServiceProvider.GetService() - .GetDatabase(ServiceProvider.GetService>() - .Value.Instances.First(x => x.Name == Chars.FLG_REDIS_INSTANCE_DATA_CACHE) - .Database); - return RedisLocker.GetLockerAsync(db, lockId, TimeSpan.FromSeconds(Numbers.SECS_REDIS_LOCK_EXPIRY), Numbers.MAX_LIMIT_RETRY_CNT_REDIS_LOCK - , TimeSpan.FromSeconds(Numbers.SECS_REDIS_LOCK_RETRY_DELAY)); + private Task GetLockerAsync(string lockId) { + var db = ServiceProvider + .GetService() + .GetDatabase( + ServiceProvider + .GetService>() + .Value.Instances.First(x => x.Name == Chars.FLG_REDIS_INSTANCE_DATA_CACHE) + .Database + ); + return RedisLocker.GetLockerAsync( + db, lockId, TimeSpan.FromSeconds(Numbers.SECS_REDIS_LOCK_EXPIRY), Numbers.MAX_LIMIT_RETRY_CNT_REDIS_LOCK + , TimeSpan.FromSeconds(Numbers.SECS_REDIS_LOCK_RETRY_DELAY) + ); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Host/Controllers/ControllerBase.cs b/src/backend/NetAdmin/NetAdmin.Host/Controllers/ControllerBase.cs index fe7bce0e..949658ac 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Controllers/ControllerBase.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Controllers/ControllerBase.cs @@ -7,7 +7,7 @@ namespace NetAdmin.Host.Controllers; /// 控制器基类 /// public abstract class ControllerBase(TCache cache = default) : IDynamicApiController - where TCache : ICache // + where TCache : ICache where TService : IService { /// diff --git a/src/backend/NetAdmin/NetAdmin.Host/Controllers/ProbeController.cs b/src/backend/NetAdmin/NetAdmin.Host/Controllers/ProbeController.cs index 29d2f174..eb58084e 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Controllers/ProbeController.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Controllers/ProbeController.cs @@ -37,13 +37,14 @@ public sealed class ProbeController : ControllerBase diff --git a/src/backend/NetAdmin/NetAdmin.Host/Extensions/HttpContextExtensions.cs b/src/backend/NetAdmin/NetAdmin.Host/Extensions/HttpContextExtensions.cs index 1cff45e1..ef01d822 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Extensions/HttpContextExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Extensions/HttpContextExtensions.cs @@ -10,8 +10,7 @@ public static class HttpContextExtensions /// /// 删除 response json body 中value 为null的节点 /// - public static async Task RemoveJsonNodeWithNullValueAsync(this HttpContext me) - { + public static async Task RemoveJsonNodeWithNullValueAsync(this HttpContext me) { // 非json格式,退出 if (!(me.Response.ContentType?.Contains(Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_JSON) ?? false)) { return; @@ -23,10 +22,10 @@ public static class HttpContextExtensions } _ = me.Response.Body.Seek(0, SeekOrigin.Begin); - var sr = new StreamReader(me.Response.Body); + var sr = new StreamReader(me.Response.Body); var bodyString = await sr.ReadToEndAsync().ConfigureAwait(false); bodyString = _nullRegex.Replace(bodyString, string.Empty).Replace(",}", "}"); - _ = me.Response.Body.Seek(0, SeekOrigin.Begin); + _ = me.Response.Body.Seek(0, SeekOrigin.Begin); var bytes = Encoding.UTF8.GetBytes(bodyString); me.Response.Body.SetLength(bytes.Length); await me.Response.Body.WriteAsync(bytes).ConfigureAwait(false); diff --git a/src/backend/NetAdmin/NetAdmin.Host/Extensions/IApplicationBuilderExtensions.cs b/src/backend/NetAdmin/NetAdmin.Host/Extensions/IApplicationBuilderExtensions.cs index 369911f2..88fca7dc 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Extensions/IApplicationBuilderExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Extensions/IApplicationBuilderExtensions.cs @@ -19,44 +19,43 @@ public static class IApplicationBuilderExtensions /// /// 执行匹配的端点 /// - public static IApplicationBuilder UseEndpoints(this IApplicationBuilder me) - { - return me.UseEndpoints(endpoints => { - _ = endpoints.MapControllers(); - #if !DEBUG - _ = endpoints.MapMetrics(); - #endif - }); + public static IApplicationBuilder UseEndpoints(this IApplicationBuilder me) { + return me.UseEndpoints(endpoints => + { + _ = endpoints.MapControllers(); + #if !DEBUG + _ = endpoints.MapMetrics(); + #endif + } + ); } #if DEBUG /// /// 使用 api skin (knife4j-vue) /// - public static IApplicationBuilder UseApiSkin(this IApplicationBuilder me) - { - return me.UseApiSkin(options => { - options.RoutePrefix = string.Empty; // 配置 Knife4UI 路由地址 - foreach (var groupInfo in SpecificationDocumentBuilder.GetOpenApiGroups()) { - options.SwaggerEndpoint(groupInfo.RouteTemplate, groupInfo.Title); + public static IApplicationBuilder UseApiSkin(this IApplicationBuilder me) { + return me.UseApiSkin(options => + { + options.RoutePrefix = string.Empty; // 配置 Knife4UI 路由地址 + foreach (var groupInfo in SpecificationDocumentBuilder.GetOpenApiGroups()) { + options.SwaggerEndpoint(groupInfo.RouteTemplate, groupInfo.Title); + } } - }); + ); } #else /// /// 使用 Prometheus /// - public static IApplicationBuilder UsePrometheus(this IApplicationBuilder me) - { - return me.UseHttpMetrics(opt => { - opt.RequestDuration.Histogram = Metrics.CreateHistogram( // - "http_request_duration_seconds" - , "The duration of HTTP requests processed by an ASP.NET Core application." - , HttpRequestLabelNames.All - , new HistogramConfiguration { - Buckets = Histogram.PowersOfTenDividedBuckets( - -2, 2, 4) - }); - }); + public static IApplicationBuilder UsePrometheus(this IApplicationBuilder me) { + return me.UseHttpMetrics(opt => + { + opt.RequestDuration.Histogram = Metrics.CreateHistogram( + "http_request_duration_seconds", "The duration of HTTP requests processed by an ASP.NET Core application." + , HttpRequestLabelNames.All, new HistogramConfiguration { Buckets = Histogram.PowersOfTenDividedBuckets(-2, 2, 4) } + ); + } + ); } #endif } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Host/Extensions/IMvcBuilderExtensions.cs b/src/backend/NetAdmin/NetAdmin.Host/Extensions/IMvcBuilderExtensions.cs index e1b6a19a..ca7fa925 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Extensions/IMvcBuilderExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Extensions/IMvcBuilderExtensions.cs @@ -14,24 +14,25 @@ public static class IMvcBuilderExtensions /// /// api结果处理器 /// - public static IMvcBuilder AddDefaultApiResultHandler(this IMvcBuilder me) - { - return me.AddInjectWithUnifyResult(injectOptions => { - injectOptions.ConfigureSwaggerGen(genOptions => { - // 替换自定义的EnumSchemaFilter,支持多语言Resx资源 (需将SpecificationDocumentSettings.EnableEnumSchemaFilter配置为false) - genOptions.SchemaFilter(); + public static IMvcBuilder AddDefaultApiResultHandler(this IMvcBuilder me) { + return me.AddInjectWithUnifyResult(injectOptions => + { + injectOptions.ConfigureSwaggerGen(genOptions => + { + // 替换自定义的EnumSchemaFilter,支持多语言Resx资源 (需将SpecificationDocumentSettings.EnableEnumSchemaFilter配置为false) + genOptions.SchemaFilter(); - // 枚举显示自身xml comment 而不是$ref原型引用 - genOptions.UseInlineDefinitionsForEnums(); + // 枚举显示自身xml comment 而不是$ref原型引用 + genOptions.UseInlineDefinitionsForEnums(); - // 将程序集版本号与OpenApi版本号同步 - foreach (var doc in genOptions.SwaggerGeneratorOptions.SwaggerDocs) { - doc.Value.Version = FileVersionInfo - .GetVersionInfo(Assembly.GetEntryAssembly()!.Location) - .ProductVersion; - } - }); - }); + // 将程序集版本号与OpenApi版本号同步 + foreach (var doc in genOptions.SwaggerGeneratorOptions.SwaggerDocs) { + doc.Value.Version = FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly()!.Location).ProductVersion; + } + } + ); + } + ); } /// @@ -54,16 +55,20 @@ public static class IMvcBuilderExtensions /// 5、值为"" 转 null /// 6、值为[] 转 null /// - public static IMvcBuilder AddJsonSerializer(this IMvcBuilder me, bool enumToString = false) - { + public static IMvcBuilder AddJsonSerializer( + this IMvcBuilder me + , bool enumToString = false + ) { return me.AddJsonOptions(options => SetJsonOptions(enumToString, options)); } /// /// 设置Json选项 /// - private static void SetJsonOptions(bool enumToString, JsonOptions options) - { + private static void SetJsonOptions( + bool enumToString + , JsonOptions options + ) { ////////////////////////////// json -> object // 允许带注释 @@ -84,7 +89,7 @@ public static class IMvcBuilderExtensions ///////////////////////////// object -> json // 转小驼峰 - options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase; + options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase; options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; // 不严格转义 diff --git a/src/backend/NetAdmin/NetAdmin.Host/Extensions/MethodInfoExtensions.cs b/src/backend/NetAdmin/NetAdmin.Host/Extensions/MethodInfoExtensions.cs index e99d91c9..c7aeb21d 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Extensions/MethodInfoExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Extensions/MethodInfoExtensions.cs @@ -8,11 +8,13 @@ public static class MethodInfoExtensions /// /// 获取路由路径 /// - public static string GetRoutePath(this MethodInfo me, IServiceProvider serviceProvider) - { - return serviceProvider.GetService() - .ActionDescriptors.Items.FirstOrDefault(x => x.DisplayName!.StartsWith( // - $"{me.DeclaringType}.{me.Name}", StringComparison.Ordinal)) - ?.AttributeRouteInfo?.Template; + public static string GetRoutePath( + this MethodInfo me + , IServiceProvider serviceProvider + ) { + return serviceProvider + .GetService() + .ActionDescriptors.Items.FirstOrDefault(x => x.DisplayName!.StartsWith($"{me.DeclaringType}.{me.Name}", StringComparison.Ordinal)) + ?.AttributeRouteInfo?.Template; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Host/Extensions/ResourceExecutingContextExtensions.cs b/src/backend/NetAdmin/NetAdmin.Host/Extensions/ResourceExecutingContextExtensions.cs index 3d5c1a79..be1119fa 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Extensions/ResourceExecutingContextExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Extensions/ResourceExecutingContextExtensions.cs @@ -10,10 +10,13 @@ public static class ResourceExecutingContextExtensions /// /// 设置失败结果 /// - public static void SetFailResult(this ResourceExecutingContext me, ErrorCodes errorCode, string errorMsg = null) - where T : RestfulInfo, new() - { - me.Result = new JsonResult(new T { Code = errorCode, Msg = errorMsg }); + public static void SetFailResult( + this ResourceExecutingContext me + , ErrorCodes errorCode + , string errorMsg = null + ) + where T : RestfulInfo, new() { + me.Result = new JsonResult(new T { Code = errorCode, Msg = errorMsg }); me.HttpContext.Response.StatusCode = Numbers.HTTP_STATUS_BIZ_FAIL; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs b/src/backend/NetAdmin/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs index 74bf9415..ca9dd82a 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs @@ -15,78 +15,38 @@ namespace NetAdmin.Host.Extensions; public static class ServiceCollectionExtensions { #if DEBUG - private static readonly Dictionary _consoleColors // - = new() { - { - new Regex( // - @"(\d{2,}\.\d+ ?ms)", RegexOptions.Compiled) - , $"[{nameof(ConsoleColor.Magenta)}]$1[/]" - } - , { - new Regex( // - "(Tb[a-zA-Z0-9]+)", RegexOptions.Compiled) - , $"[{nameof(ConsoleColor.Cyan)}]$1[/]" - } - , { - new Regex( // - "(INSERT) ", RegexOptions.Compiled) - , $"[{nameof(ConsoleColor.Blue)}]$1[/] " - } - , { - new Regex( // - "(SELECT) ", RegexOptions.Compiled) - , $"[{nameof(ConsoleColor.Green)}]$1[/] " - } - , { - new Regex( // - "(UPDATE) ", RegexOptions.Compiled) - , $"[{nameof(ConsoleColor.Yellow)}]$1[/] " - } - , { - new Regex( // - "(DELETE) ", RegexOptions.Compiled) - , $"[{nameof(ConsoleColor.Red)}]$1[/] " - } - , { - new Regex( // - "()", RegexOptions.Compiled) - , $"[underline {nameof(ConsoleColor.Gray)}]$1[/] " - } - , { - new Regex( // - "(ResponseBody)", RegexOptions.Compiled) - , $"[underline {nameof(ConsoleColor.Cyan)}]$1[/] " - } - , { - new Regex( // - "(RequestBody)", RegexOptions.Compiled) - , $"[underline {nameof(ConsoleColor.Magenta)}]$1[/] " - } - , { - new Regex( // - @"(\[\[dbo\]\]\.)(\[\[.+?\]\]) ", RegexOptions.Compiled) - , $"$1[{nameof(ConsoleColor.Magenta)}]$2[/] " - } - }; + private static readonly Dictionary _consoleColors = new() + { + { new Regex(@"(\d{2,}\.\d+ ?ms)", RegexOptions.Compiled), $"[{nameof(ConsoleColor.Magenta)}]$1[/]" } + , { new Regex("(Tb[a-zA-Z0-9]+)", RegexOptions.Compiled), $"[{nameof(ConsoleColor.Cyan)}]$1[/]" } + , { new Regex("(INSERT) ", RegexOptions.Compiled), $"[{nameof(ConsoleColor.Blue)}]$1[/] " } + , { new Regex("(SELECT) ", RegexOptions.Compiled), $"[{nameof(ConsoleColor.Green)}]$1[/] " } + , { new Regex("(UPDATE) ", RegexOptions.Compiled), $"[{nameof(ConsoleColor.Yellow)}]$1[/] " } + , { new Regex("(DELETE) ", RegexOptions.Compiled), $"[{nameof(ConsoleColor.Red)}]$1[/] " } + , { new Regex("()", RegexOptions.Compiled), $"[underline {nameof(ConsoleColor.Gray)}]$1[/] " } + , { new Regex("(ResponseBody)", RegexOptions.Compiled), $"[underline {nameof(ConsoleColor.Cyan)}]$1[/] " } + , { new Regex("(RequestBody)", RegexOptions.Compiled), $"[underline {nameof(ConsoleColor.Magenta)}]$1[/] " } + , { new Regex(@"(\[\[dbo\]\]\.)(\[\[.+?\]\]) ", RegexOptions.Compiled), $"$1[{nameof(ConsoleColor.Magenta)}]$2[/] " } + }; #endif /// /// 扫描程序集中继承自IConfigurableOptions的选项,注册 /// - public static IServiceCollection AddAllOptions( // - this IServiceCollection me) - { - var optionsTypes - = from type in App.EffectiveTypes.Where(x => !x.IsAbstract && !x.FullName!.Contains(nameof(Gurion)) && - x.GetInterfaces().Contains(typeof(IConfigurableOptions))) - select type; + public static IServiceCollection AddAllOptions(this IServiceCollection me) { + var optionsTypes = + from type in App.EffectiveTypes.Where(x => + !x.IsAbstract && !x.FullName!.Contains(nameof(Gurion)) && x.GetInterfaces().Contains(typeof(IConfigurableOptions)) + ) + select type; var sbLog = new StringBuilder(); foreach (var type in optionsTypes) { var configureMethod = typeof(ConfigurableOptionsServiceCollectionExtensions).GetMethod( nameof(ConfigurableOptionsServiceCollectionExtensions.AddConfigurableOptions), BindingFlags.Public | BindingFlags.Static - , [typeof(IServiceCollection)]); + , [typeof(IServiceCollection)] + ); _ = configureMethod!.MakeGenericMethod(type).Invoke(me, [me]); _ = sbLog.Append(CultureInfo.InvariantCulture, $" {type.Name}"); } @@ -98,41 +58,46 @@ public static class ServiceCollectionExtensions /// /// 添加控制台日志模板 /// - public static IServiceCollection AddConsoleFormatter(this IServiceCollection me) - { - return me.AddConsoleFormatter(options => { - var logLevels = Enum.GetValues().ToDictionary(x => x, x => x.GetDisplay()); + public static IServiceCollection AddConsoleFormatter(this IServiceCollection me) { + return me.AddConsoleFormatter(options => + { + var logLevels = Enum.GetValues().ToDictionary(x => x, x => x.GetDisplay()); - options.WriteHandler = (message, _, _, _, _) => { - #if DEBUG - MarkupLine(message.Message.EscapeMarkup(), message, logLevels); - if (message.Exception != null) { - MarkupLine(message.Exception.ToString().EscapeMarkup(), message, logLevels); - } - #else - var msg = message.Message.ReplaceLineEndings(string.Empty); - var (date, logName, logFormat) = ParseMessage(message, false); - Console.WriteLine( // - logFormat, date, logLevels[(LogLevels)message.LogLevel].ShortName, logName, message.ThreadId, msg); - #endif - GlobalStatic.IncrementLogCounter(); - }; - }); + options.WriteHandler = ( + message + , _ + , _ + , _ + , _ + ) => + { + #if DEBUG + MarkupLine(message.Message.EscapeMarkup(), message, logLevels); + if (message.Exception != null) { + MarkupLine(message.Exception.ToString().EscapeMarkup(), message, logLevels); + } + #else + var msg = message.Message.ReplaceLineEndings(string.Empty); + var (date, logName, logFormat) = ParseMessage(message, false); + Console.WriteLine(logFormat, date, logLevels[(LogLevels)message.LogLevel].ShortName, logName, message.ThreadId, msg); + #endif + GlobalStatic.IncrementLogCounter(); + }; + } + ); } /// /// 添加上下文用户令牌 /// - public static IServiceCollection AddContextUserToken(this IServiceCollection me) - { + public static IServiceCollection AddContextUserToken(this IServiceCollection me) { return me.AddScoped(typeof(ContextUserToken), _ => ContextUserToken.Create()); } /// /// 添加事件总线 /// - public static IServiceCollection AddEventBus(this IServiceCollection me) - { + public static IServiceCollection AddEventBus(this IServiceCollection me) { foreach (var type in App.EffectiveTypes.Where(x => typeof(IEventSubscriber).IsAssignableFrom(x) && x.IsClass && !x.IsAbstract)) { _ = me.AddSingleton(type); } @@ -143,16 +108,14 @@ public static class ServiceCollectionExtensions /// /// 添加内存缓存 /// - public static IServiceCollection AddMemCache(this IServiceCollection me) - { + public static IServiceCollection AddMemCache(this IServiceCollection me) { return me.AddMemoryCache(options => options.TrackStatistics = true); } /// /// OpenTelemetry数据监控 /// - public static IServiceCollection AddOpenTelemetryNet(this IServiceCollection me) - { + public static IServiceCollection AddOpenTelemetryNet(this IServiceCollection me) { // _ = me.AddOpenTelemetry() // .WithMetrics(builder => builder.AddAspNetCoreInstrumentation() // .AddHttpClientInstrumentation() @@ -165,15 +128,16 @@ public static class ServiceCollectionExtensions /// /// 添加 Redis缓存 /// - public static IServiceCollection AddRedisCache(this IServiceCollection me) - { + public static IServiceCollection AddRedisCache(this IServiceCollection me) { var redisOptions = App.GetOptions().Instances.First(x => x.Name == Chars.FLG_REDIS_INSTANCE_DATA_CACHE); // IDistributedCache 分布式缓存通用接口 - _ = me.AddStackExchangeRedisCache(options => { - // 连接字符串 - options.Configuration = redisOptions.ConnStr; - }); + _ = me.AddStackExchangeRedisCache(options => + { + // 连接字符串 + options.Configuration = redisOptions.ConnStr; + } + ); // Redis原生接口 return me.AddSingleton(ConnectionMultiplexer.Connect(redisOptions.ConnStr)); @@ -182,34 +146,38 @@ public static class ServiceCollectionExtensions /// /// 添加雪花编号生成器 /// - public static IServiceCollection AddSnowflake(this IServiceCollection me) - { + public static IServiceCollection AddSnowflake(this IServiceCollection me) { // 雪花漂移算法 - var workerId = Environment.GetEnvironmentVariable(Chars.FLG_SNOWFLAKE_WORK_ID).Int32Try(0); + var workerId = Environment.GetEnvironmentVariable(Chars.FLG_SNOWFLAKE_WORK_ID).Int32Try(0); var idGeneratorOptions = new IdGeneratorOptions((ushort)workerId) { WorkerIdBitLength = 6 }; YitIdHelper.SetIdGenerator(idGeneratorOptions); return me; } #if DEBUG - private static void MarkupLine( // - string msg // - , LogMessage message // - , Dictionary logLevels) - { - msg = _consoleColors.Aggregate( // - msg, (current, regex) => regex.Key.Replace(current, regex.Value)); + private static void MarkupLine( + string msg + , LogMessage message + , Dictionary logLevels + ) { + msg = _consoleColors.Aggregate( + msg, ( + current + , regex + ) => regex.Key.Replace(current, regex.Value) + ); msg = msg.ReplaceLineEndings(string.Empty); var colorName = logLevels[(LogLevels)message.LogLevel].Name!; var (date, logName, logFormat) = ParseMessage(message, true); - AnsiConsole.MarkupLine( // - CultureInfo.InvariantCulture, logFormat, date, colorName, logName, message.ThreadId, msg); + AnsiConsole.MarkupLine(CultureInfo.InvariantCulture, logFormat, date, colorName, logName, message.ThreadId, msg); } #endif - private static (string Date, string LogName, string LogFormat) ParseMessage(LogMessage message, bool showColor) - { - var date = $"{message.LogDateTime:HH:mm:ss.ffffff}"; + private static (string Date, string LogName, string LogFormat) ParseMessage( + LogMessage message + , bool showColor + ) { + var date = $"{message.LogDateTime:HH:mm:ss.ffffff}"; var logName = message.LogName.PadRight(64, ' ')[^64..]; var format = showColor ? $"[{nameof(ConsoleColor.Gray)}][[{{0}} {{1}} {{2,-{64}}} #{{3,4}}]][/] {{4}}" diff --git a/src/backend/NetAdmin/NetAdmin.Host/Filters/ApiResultHandler.cs b/src/backend/NetAdmin/NetAdmin.Host/Filters/ApiResultHandler.cs index d887d514..ba149cf0 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Filters/ApiResultHandler.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Filters/ApiResultHandler.cs @@ -1,4 +1,5 @@ using Gurion.FriendlyException; +using NetAdmin.Domain.Contexts; using NetAdmin.Domain.Dto; namespace NetAdmin.Host.Filters; @@ -21,21 +22,30 @@ public abstract class ApiResultHandler /// /// 发生异常 /// - public IActionResult OnException(ExceptionContext context, ExceptionMetadata metadata) - { - var naException = context.Exception switch { - NetAdminException ex => ex - , _ => context.Exception.Message.Contains(Chars.FLG_DB_EXCEPTION_PRIMARY_KEY_CONFLICT) || - context.Exception.Message.Contains(Chars.FLG_DB_EXCEPTION_UNIQUE_CONSTRAINT_CONFLICT) || - context.Exception.Message.Contains(Chars.FLG_DB_EXCEPTION_IDX) - ? new NetAdminInvalidOperationException(Ln.记录已存在) - : null - }; - var errorCode = naException?.Code ?? ErrorCodes.Unhandled; - var result = RestfulResult(errorCode, metadata.Data - , naException is NetAdminValidateException vEx - ? vEx.ValidateResults - : naException?.Message ?? errorCode.ResDesc(), context.HttpContext.GetTraceId()); + public IActionResult OnException( + ExceptionContext context + , ExceptionMetadata metadata + ) { + var naException = context.Exception switch + { + NetAdminException ex => ex + , _ => context.Exception.Message.Contains(Chars.FLG_DB_EXCEPTION_PRIMARY_KEY_CONFLICT) + || context.Exception.Message.Contains(Chars.FLG_DB_EXCEPTION_UNIQUE_CONSTRAINT_CONFLICT) + || context.Exception.Message.Contains(Chars.FLG_DB_EXCEPTION_IDX) + ? new NetAdminInvalidOperationException(Ln.记录已存在) + : null + }; + var errorCode = naException?.Code ?? ErrorCodes.InternalError; + + // 超管显示异常明细 + var errorMsg = naException?.Message + ?? (App.GetService()?.Roles.Any(x => x.IgnorePermissionControl) == true + ? context.Exception.ToString() + : errorCode.ResDesc()); + + var result = RestfulResult( + errorCode, metadata.Data, naException is NetAdminValidateException vEx ? vEx.ValidateResults : errorMsg, context.HttpContext.GetTraceId() + ); SetErrorCodeToHeader(context.HttpContext, errorCode); @@ -45,9 +55,11 @@ public abstract class ApiResultHandler /// /// HTTP状态码处理 /// - public Task OnResponseStatusCodesAsync( // - HttpContext context, int statusCode, UnifyResultSettingsOptions unifyResultSettings = null) - { + public Task OnResponseStatusCodesAsync( + HttpContext context + , int statusCode + , UnifyResultSettingsOptions unifyResultSettings = null + ) { // 设置响应状态码 UnifyContext.SetResponseStatusCodes(context, statusCode, unifyResultSettings); return Task.CompletedTask; @@ -56,32 +68,37 @@ public abstract class ApiResultHandler /// /// 请求成功 /// - public IActionResult OnSucceeded(ActionExecutedContext _, object data) - { + public IActionResult OnSucceeded( + ActionExecutedContext _ + , object data + ) { return new JsonResult(RestfulResult(0, data)); } /// /// 校验失败 /// - public IActionResult OnValidateFailed(ActionExecutingContext context, ValidationMetadata metadata) - { + public IActionResult OnValidateFailed( + ActionExecutingContext context + , ValidationMetadata metadata + ) { SetErrorCodeToHeader(context.HttpContext, ErrorCodes.InvalidInput); - return new JsonResult(RestfulResult(ErrorCodes.InvalidInput, metadata.Data, GetValidationResult(metadata.ValidationResult))) { - StatusCode = Numbers.HTTP_STATUS_BIZ_FAIL - }; + return new JsonResult(RestfulResult(ErrorCodes.InvalidInput, metadata.Data, GetValidationResult(metadata.ValidationResult))) + { + StatusCode = Numbers.HTTP_STATUS_BIZ_FAIL + }; } - private static object GetValidationResult(object validationResult) - { + private static object GetValidationResult(object validationResult) { var startWithDollar = false; try { return validationResult is Dictionary dic - ? dic.ToDictionary( // + ? dic.ToDictionary( x => (startWithDollar = x.Key.StartsWith('$')) ? x.Key[1..].TrimStart('.').NullOrEmpty(null) ?? throw new NetAdminInvalidInputException() - : x.Key, x => startWithDollar ? [Ln.参数格式不正确] : x.Value) + : x.Key, x => startWithDollar ? [Ln.参数格式不正确] : x.Value + ) : validationResult; } catch (NetAdminInvalidInputException) { @@ -92,16 +109,22 @@ public abstract class ApiResultHandler /// /// 返回 RESTful 风格结果集 /// - private static T RestfulResult(ErrorCodes errorCode, object data = null, object message = null, Guid? traceId = null) - { + private static T RestfulResult( + ErrorCodes errorCode + , object data = null + , object message = null + , Guid? traceId = null + ) { return new T { Code = errorCode, Data = data, Msg = message, TraceId = traceId }; } /// /// 写入错误码到HttpHeader /// - private static void SetErrorCodeToHeader(HttpContext context, ErrorCodes errorCode) - { + private static void SetErrorCodeToHeader( + HttpContext context + , ErrorCodes errorCode + ) { context.Response.Headers[nameof(ErrorCodes)] = Enum.GetName(errorCode); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Host/Filters/DefaultApiResultHandler.cs b/src/backend/NetAdmin/NetAdmin.Host/Filters/DefaultApiResultHandler.cs index d6777752..d8c53fd8 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Filters/DefaultApiResultHandler.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Filters/DefaultApiResultHandler.cs @@ -9,8 +9,10 @@ namespace NetAdmin.Host.Filters; public sealed class DefaultApiResultHandler : ApiResultHandler>, IUnifyResultProvider { /// - public IActionResult OnAuthorizeException(DefaultHttpContext context, ExceptionMetadata metadata) - { + public IActionResult OnAuthorizeException( + DefaultHttpContext context + , ExceptionMetadata metadata + ) { LogHelper.Get().Error(metadata.Exception); throw metadata.Exception; } diff --git a/src/backend/NetAdmin/NetAdmin.Host/Filters/GlobalExceptionHandler.cs b/src/backend/NetAdmin/NetAdmin.Host/Filters/GlobalExceptionHandler.cs index 2d0a7e95..936d7820 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Filters/GlobalExceptionHandler.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Filters/GlobalExceptionHandler.cs @@ -6,8 +6,7 @@ namespace NetAdmin.Host.Filters; public sealed class GlobalExceptionHandler(ILogger logger) : IGlobalExceptionHandler, ISingleton { /// - public Task OnExceptionAsync(ExceptionContext context) - { + public Task OnExceptionAsync(ExceptionContext context) { if (context.Exception is NetAdminException and not NetAdminUnexpectedException) { logger.Warn(context.Exception); } diff --git a/src/backend/NetAdmin/NetAdmin.Host/Filters/TransactionInterceptor.cs b/src/backend/NetAdmin/NetAdmin.Host/Filters/TransactionInterceptor.cs index 1abadd7e..5f8c26d9 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Filters/TransactionInterceptor.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Filters/TransactionInterceptor.cs @@ -10,8 +10,10 @@ namespace NetAdmin.Host.Filters; public sealed class TransactionInterceptor(UnitOfWorkManager uowManager) : IAsyncActionFilter { /// - public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) - { + public async Task OnActionExecutionAsync( + ActionExecutingContext context + , ActionExecutionDelegate next + ) { // 跳过没有事务特性标记的方法 if (context.HttpContext.GetControllerActionDescriptor().MethodInfo.GetCustomAttribute() == null) { _ = await next().ConfigureAwait(false); @@ -19,12 +21,15 @@ public sealed class TransactionInterceptor(UnitOfWorkManager uowManager) : IAsyn } // 事务操作 - await uowManager.AtomicOperateAsync(async () => { - var result = await next().ConfigureAwait(false); - if (result.Exception != null) { - throw result.Exception; - } - }) - .ConfigureAwait(false); + await uowManager + .AtomicOperateAsync(async () => + { + var result = await next().ConfigureAwait(false); + if (result.Exception != null) { + throw result.Exception; + } + } + ) + .ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Host/Middlewares/EnvironmentInfoMiddleware.cs b/src/backend/NetAdmin/NetAdmin.Host/Middlewares/EnvironmentInfoMiddleware.cs index a350a619..a084d3f9 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Middlewares/EnvironmentInfoMiddleware.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Middlewares/EnvironmentInfoMiddleware.cs @@ -8,8 +8,7 @@ public sealed class EnvironmentInfoMiddleware(RequestDelegate next) /// /// 主函数 /// - public Task InvokeAsync(HttpContext context) - { + public Task InvokeAsync(HttpContext context) { context.Response.Headers.Append("X-Node", Environment.MachineName); return next(context); } diff --git a/src/backend/NetAdmin/NetAdmin.Host/Middlewares/RemoveNullNodeMiddleware.cs b/src/backend/NetAdmin/NetAdmin.Host/Middlewares/RemoveNullNodeMiddleware.cs index 6534de32..626f5582 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Middlewares/RemoveNullNodeMiddleware.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Middlewares/RemoveNullNodeMiddleware.cs @@ -11,8 +11,7 @@ public sealed class RemoveNullNodeMiddleware(RequestDelegate next) /// /// 主函数 /// - public async Task InvokeAsync(HttpContext context) - { + public async Task InvokeAsync(HttpContext context) { await next(context).ConfigureAwait(false); if (context.GetMetadata() is null) { diff --git a/src/backend/NetAdmin/NetAdmin.Host/Middlewares/SafetyShopHostMiddleware.cs b/src/backend/NetAdmin/NetAdmin.Host/Middlewares/SafetyShopHostMiddleware.cs index 3c26ca8f..a3298786 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Middlewares/SafetyShopHostMiddleware.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Middlewares/SafetyShopHostMiddleware.cs @@ -24,8 +24,7 @@ public sealed class SafetyShopHostMiddleware(RequestDelegate next) /// /// 停机处理 /// - public static void OnStopping() - { + public static void OnStopping() { Stop(); #if !DEBUG while (Interlocked.Read(ref _connections) > 0) { @@ -37,26 +36,24 @@ public sealed class SafetyShopHostMiddleware(RequestDelegate next) /// /// 系统启机 /// - public static void Start() - { + public static void Start() { Volatile.Write(ref _trafficOff, false); } /// /// 系统停机 /// - public static void Stop() - { + public static void Stop() { Volatile.Write(ref _trafficOff, true); } /// /// 主函数 /// - public async Task InvokeAsync(HttpContext context) - { - if (Volatile.Read(ref _trafficOff) && !context.Request.Path.StartsWithSegments($"/{Chars.FLG_PATH_API_RPOBE}") && - !context.Request.Path.StartsWithSegments($"/{Chars.FLG_PATH_API_METRICS}")) { + public async Task InvokeAsync(HttpContext context) { + if (Volatile.Read(ref _trafficOff) + && !context.Request.Path.StartsWithSegments($"/{Chars.FLG_PATH_API_RPOBE}") + && !context.Request.Path.StartsWithSegments($"/{Chars.FLG_PATH_API_METRICS}")) { context.Response.StatusCode = (int)HttpStatusCode.ServiceUnavailable; return; } diff --git a/src/backend/NetAdmin/NetAdmin.Host/Startup.cs b/src/backend/NetAdmin/NetAdmin.Host/Startup.cs index 0761a8ff..9e2358ca 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Startup.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Startup.cs @@ -15,9 +15,11 @@ public abstract class Startup : AppStartup /// /// 程序入口 /// - public static void Entry(IEnumerable args, Action commandConfig = null) - where T : class, ICommand - { + public static void Entry( + IEnumerable args + , Action commandConfig = null + ) + where T : class, ICommand { ShowBanner(); var app = new CommandApp(); if (commandConfig != null) { @@ -30,17 +32,16 @@ public abstract class Startup : AppStartup /// /// 打印Banner /// - private static void ShowBanner() - { + private static void ShowBanner() { AnsiConsole.WriteLine(); var gridInfo = new Grid().AddColumn(new GridColumn().NoWrap().Width(50).PadRight(10)).AddColumn(new GridColumn().NoWrap()).Expand(); foreach (var kv in ApplicationHelper.GetEnvironmentInfo().OrderBy(x => x.Key)) { _ = gridInfo.AddRow(kv.Key, kv.Value.ToString()!.EscapeMarkup()); } - var gridWrap = new Grid().AddColumn(); + var gridWrap = new Grid().AddColumn(); var entryAssembly = Assembly.GetEntryAssembly(); - var assemblyName = entryAssembly!.GetName(); + var assemblyName = entryAssembly!.GetName(); _ = gridWrap.AddRow(new FigletText(assemblyName.Name!).Color(Color.Green)); _ = gridWrap.AddRow(gridInfo); diff --git a/src/backend/NetAdmin/NetAdmin.Host/Subscribers/SqlProfiler.cs b/src/backend/NetAdmin/NetAdmin.Host/Subscribers/SqlProfiler.cs index f2026f36..713bbb56 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Subscribers/SqlProfiler.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Subscribers/SqlProfiler.cs @@ -11,8 +11,7 @@ public sealed class SqlProfiler(ILogger logger) : IEventSubscriber /// Sql命令执行后 /// [EventSubscribe] - public Task CommandAfterAsync(SqlCommandAfterEvent @event) - { + public Task CommandAfterAsync(SqlCommandAfterEvent @event) { logger.Info(@event); return Task.CompletedTask; } @@ -21,8 +20,7 @@ public sealed class SqlProfiler(ILogger logger) : IEventSubscriber /// Sql命令执行前 /// [EventSubscribe] - public Task CommandBeforeAsync(SqlCommandBeforeEvent @event) - { + public Task CommandBeforeAsync(SqlCommandBeforeEvent @event) { logger.Debug(@event); return Task.CompletedTask; } @@ -31,8 +29,7 @@ public sealed class SqlProfiler(ILogger logger) : IEventSubscriber /// 种子数据插入完毕 /// [EventSubscribe] - public Task SeedDataInsertedEventAsync(SeedDataInsertedEvent @event) - { + public Task SeedDataInsertedEventAsync(SeedDataInsertedEvent @event) { logger.Info(@event); return Task.CompletedTask; } @@ -41,8 +38,7 @@ public sealed class SqlProfiler(ILogger logger) : IEventSubscriber /// 同步数据库结构之后 /// [EventSubscribe] - public Task SyncStructureAfterAsync(SyncStructureAfterEvent @event) - { + public Task SyncStructureAfterAsync(SyncStructureAfterEvent @event) { logger.Info(@event); return Task.CompletedTask; } @@ -51,8 +47,7 @@ public sealed class SqlProfiler(ILogger logger) : IEventSubscriber /// 同步数据库结构之前 /// [EventSubscribe] - public Task SyncStructureBeforeAsync(SyncStructureBeforeEvent @event) - { + public Task SyncStructureBeforeAsync(SyncStructureBeforeEvent @event) { logger.Info(@event); return Task.CompletedTask; } diff --git a/src/backend/NetAdmin/NetAdmin.Host/Utils/CollectionJsonTypeInfoResolver.cs b/src/backend/NetAdmin/NetAdmin.Host/Utils/CollectionJsonTypeInfoResolver.cs index 8637f557..d1836e46 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Utils/CollectionJsonTypeInfoResolver.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Utils/CollectionJsonTypeInfoResolver.cs @@ -8,13 +8,11 @@ public sealed class CollectionJsonTypeInfoResolver : DefaultJsonTypeInfoResolver /// /// Initializes a new instance of the class. /// - public CollectionJsonTypeInfoResolver() - { + public CollectionJsonTypeInfoResolver() { Modifiers.Add(CollectionValueModifier); } - private static void CollectionValueModifier(JsonTypeInfo typeInfo) - { + private static void CollectionValueModifier(JsonTypeInfo typeInfo) { foreach (var property in typeInfo.Properties) { // 跳过非集合属性 if (!property.PropertyType.GetInterfaces().Contains(typeof(IEnumerable))) { @@ -36,25 +34,26 @@ public sealed class CollectionJsonTypeInfoResolver : DefaultJsonTypeInfoResolver } } - private static string GetMemberName(JsonPropertyInfo property) - { + private static string GetMemberName(JsonPropertyInfo property) { return property.GetType().GetRuntimeProperties().First(x => x.Name == "MemberName").GetValue(property) as string; } /// /// 这里处理子类new隐藏父类同名属性, 取得多个同名属性的问题 /// - private static PropertyInfo GetNewProperty(string memberName, object obj) - { + private static PropertyInfo GetNewProperty( + string memberName + , object obj + ) { return obj.GetType().GetProperties().Where(x => x.Name == memberName).FirstOrDefault(x => x.DeclaringType == x.ReflectedType); } /// /// object->json 只在count>0时返回其值,否则返回null /// - private static Func PropertyGet(string memberName) - { - return obj => { + private static Func PropertyGet(string memberName) { + return obj => + { object prop; try { prop = obj.GetType().GetProperty(memberName!)?.GetValue(obj); @@ -64,17 +63,30 @@ public sealed class CollectionJsonTypeInfoResolver : DefaultJsonTypeInfoResolver prop = GetNewProperty(memberName, obj)?.GetValue(obj); } - return prop switch { string => prop, ICollection { Count: > 0 } => prop, _ => null }; + return prop switch + { + string => prop + , ICollection { Count: > 0 } => prop + , _ => null + }; }; } /// /// json->object 时 为对象分配属性, 改为只在count>0分配 ,否则分配null,而不是分配[] /// - private static Action PropertySet(string memberName) - { - return (obj, val) => { - val = val switch { string => val, ICollection { Count: > 0 } => val, _ => null }; + private static Action PropertySet(string memberName) { + return ( + obj + , val + ) => + { + val = val switch + { + string => val + , ICollection { Count: > 0 } => val + , _ => null + }; try { obj.GetType().GetProperty(memberName!)?.SetValue(obj, val); } diff --git a/src/backend/NetAdmin/NetAdmin.Host/Utils/SwaggerEnumSchemaFixer.cs b/src/backend/NetAdmin/NetAdmin.Host/Utils/SwaggerEnumSchemaFixer.cs index 9833faef..31103d10 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Utils/SwaggerEnumSchemaFixer.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Utils/SwaggerEnumSchemaFixer.cs @@ -13,8 +13,10 @@ public sealed class SwaggerEnumSchemaFixer : ISchemaFilter /// /// 实现过滤器方法 /// - public void Apply(OpenApiSchema schema, SchemaFilterContext context) - { + public void Apply( + OpenApiSchema schema + , SchemaFilterContext context + ) { // 非枚举退出 if (!context.Type.IsEnum) { return; @@ -34,9 +36,7 @@ public sealed class SwaggerEnumSchemaFixer : ISchemaFilter enumName = enumName.ToLowerInvariant(); } - _ = sb.Append(wrap) - .Append( // - CultureInfo.InvariantCulture, $"{enumName} = {value} ({e.ResDesc()})"); + _ = sb.Append(wrap).Append(CultureInfo.InvariantCulture, $"{enumName} = {value} ({e.ResDesc()})"); } schema.Description = sb.ToString(); diff --git a/src/backend/NetAdmin/NetAdmin.Host/Utils/ToNullIfEmptyStringConverter.cs b/src/backend/NetAdmin/NetAdmin.Host/Utils/ToNullIfEmptyStringConverter.cs index ccb819aa..19dfd70f 100644 --- a/src/backend/NetAdmin/NetAdmin.Host/Utils/ToNullIfEmptyStringConverter.cs +++ b/src/backend/NetAdmin/NetAdmin.Host/Utils/ToNullIfEmptyStringConverter.cs @@ -6,8 +6,11 @@ namespace NetAdmin.Host.Utils; public sealed class ToNullIfEmptyStringConverter : JsonConverter { /// - public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { + public override string Read( + ref Utf8JsonReader reader + , Type typeToConvert + , JsonSerializerOptions options + ) { if (reader.TokenType == JsonTokenType.Number) { var success = reader.TryGetDecimal(out var dec); return success ? dec.ToString(CultureInfo.InvariantCulture) : "0"; @@ -18,8 +21,11 @@ public sealed class ToNullIfEmptyStringConverter : JsonConverter } /// - public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options) - { + public override void Write( + Utf8JsonWriter writer + , string value + , JsonSerializerOptions options + ) { writer.WriteStringValue(value.Length == 0 ? null : value); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Constant/Chars.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Constant/Chars.cs index 554d938b..d53a3b6c 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Constant/Chars.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Constant/Chars.cs @@ -10,87 +10,87 @@ namespace NetAdmin.Infrastructure.Constant; /// public static class Chars { - public const string FLG_CONTEXT_MEMBER_INFO = nameof(FLG_CONTEXT_MEMBER_INFO); - public const string FLG_CONTEXT_OWNER_DEPT_ID = nameof(FLG_CONTEXT_OWNER_DEPT_ID); - public const string FLG_CONTEXT_USER_ID = nameof(FLG_CONTEXT_USER_ID); - public const string FLG_CONTEXT_USER_INFO = nameof(FLG_CONTEXT_USER_INFO); - public const string FLG_CRON_PER_SECS = "* * * * * *"; - public const string FLG_DB_EXCEPTION_IDX = "idx_"; - public const string FLG_DB_EXCEPTION_PRIMARY_KEY_CONFLICT = "PRIMARY KEY"; - public const string FLG_DB_EXCEPTION_UNIQUE_CONSTRAINT_CONFLICT = "UNIQUE constraint"; - public const string FLG_DB_FIELD_TYPE_CHAR_34 = "char(34)"; - public const string FLG_DB_FIELD_TYPE_CHAR_6 = "char(6)"; - public const string FLG_DB_FIELD_TYPE_NVARCHAR = "nvarchar"; - public const string FLG_DB_FIELD_TYPE_NVARCHAR_1022 = "nvarchar(1022)"; - public const string FLG_DB_FIELD_TYPE_NVARCHAR_127 = "nvarchar(127)"; - public const string FLG_DB_FIELD_TYPE_NVARCHAR_15 = "nvarchar(15)"; - public const string FLG_DB_FIELD_TYPE_NVARCHAR_255 = "nvarchar(255)"; - public const string FLG_DB_FIELD_TYPE_NVARCHAR_31 = "nvarchar(31)"; - public const string FLG_DB_FIELD_TYPE_NVARCHAR_4094 = "nvarchar(4094)"; - public const string FLG_DB_FIELD_TYPE_NVARCHAR_510 = "nvarchar(510)"; - public const string FLG_DB_FIELD_TYPE_NVARCHAR_63 = "nvarchar(63)"; - public const string FLG_DB_FIELD_TYPE_NVARCHAR_7 = "nvarchar(7)"; - public const string FLG_DB_FIELD_TYPE_NVARCHAR_MAX = "nvarchar(max)"; - public const string FLG_DB_FIELD_TYPE_SMALL_INT = "smallint"; - public const string FLG_DB_FIELD_TYPE_TEXT = "text"; - public const string FLG_DB_FIELD_TYPE_TINY_INT = "tinyint"; - public const string FLG_DB_FIELD_TYPE_VARCHAR = "varchar"; - public const string FLG_DB_FIELD_TYPE_VARCHAR_1022 = "varchar(1022)"; - public const string FLG_DB_FIELD_TYPE_VARCHAR_127 = "varchar(127)"; - public const string FLG_DB_FIELD_TYPE_VARCHAR_15 = "varchar(15)"; - public const string FLG_DB_FIELD_TYPE_VARCHAR_255 = "varchar(255)"; - public const string FLG_DB_FIELD_TYPE_VARCHAR_31 = "varchar(31)"; - public const string FLG_DB_FIELD_TYPE_VARCHAR_4094 = "varchar(4094)"; - public const string FLG_DB_FIELD_TYPE_VARCHAR_510 = "varchar(510)"; - public const string FLG_DB_FIELD_TYPE_VARCHAR_63 = "varchar(63)"; - public const string FLG_DB_FIELD_TYPE_VARCHAR_7 = "varchar(7)"; - public const string FLG_DB_INDEX_PREFIX = "idx_{tablename}_"; - public const string FLG_DB_TABLE_NAME_PREFIX = ""; - public const string FLG_DIC_CATALOG_NEW_USER_ROLE_CONFIG = "new-user-role-config"; - public const string FLG_FREE_SQL_GLOBAL_FILTER_DELETE = nameof(FLG_FREE_SQL_GLOBAL_FILTER_DELETE); - public const string FLG_FREE_SQL_GLOBAL_FILTER_DEPT = nameof(FLG_FREE_SQL_GLOBAL_FILTER_DEPT); - public const string FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_CHILDREN = nameof(FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_CHILDREN); - public const string FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_SON = nameof(FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_SON); - public const string FLG_FREE_SQL_GLOBAL_FILTER_MEMBER = nameof(FLG_FREE_SQL_GLOBAL_FILTER_MEMBER); - public const string FLG_FREE_SQL_GLOBAL_FILTER_SELF = nameof(FLG_FREE_SQL_GLOBAL_FILTER_SELF); - public const string FLG_FREE_SQL_GLOBAL_FILTER_TENANT = nameof(FLG_FREE_SQL_GLOBAL_FILTER_TENANT); - public const string FLG_FRONT_APP_SET_HOME_GRID = "APP_SET_HOME_GRID"; - public const string FLG_HTTP_HEADER_KEY_ACCESS_TOKEN = "ACCESS-TOKEN"; - public const string FLG_HTTP_HEADER_KEY_AUTHORIZATION = "Authorization"; - public const string FLG_HTTP_HEADER_KEY_REFERER = "Referer"; - public const string FLG_HTTP_HEADER_KEY_TRON_PRO_API_KEY = "TRON-PRO-API-KEY"; - public const string FLG_HTTP_HEADER_KEY_USER_AGENT = "User-Agent"; - public const string FLG_HTTP_HEADER_KEY_X_ACCESS_TOKEN = "X-ACCESS-TOKEN"; - public const string FLG_HTTP_HEADER_KEY_X_ACCESS_TOKEN_HEADER_KEY = "X-Authorization"; - public const string FLG_HTTP_HEADER_KEY_X_CACHE_CONTROL = "X-Cache-Control"; - public const string FLG_HTTP_HEADER_KEY_X_FORWARDED_FOR = "X-Forwarded-For"; - public const string FLG_HTTP_HEADER_KEY_X_REAL_IP = "X-Real-IP"; - public const string FLG_HTTP_HEADER_VALUE_APPLICATION_JSON = "application/json"; + public const string FLG_CONTEXT_MEMBER_INFO = nameof(FLG_CONTEXT_MEMBER_INFO); + public const string FLG_CONTEXT_OWNER_DEPT_ID = nameof(FLG_CONTEXT_OWNER_DEPT_ID); + public const string FLG_CONTEXT_USER_ID = nameof(FLG_CONTEXT_USER_ID); + public const string FLG_CONTEXT_USER_INFO = nameof(FLG_CONTEXT_USER_INFO); + public const string FLG_CRON_PER_SECS = "* * * * * *"; + public const string FLG_DB_EXCEPTION_IDX = "idx_"; + public const string FLG_DB_EXCEPTION_PRIMARY_KEY_CONFLICT = "PRIMARY KEY"; + public const string FLG_DB_EXCEPTION_UNIQUE_CONSTRAINT_CONFLICT = "UNIQUE constraint"; + public const string FLG_DB_FIELD_TYPE_CHAR_34 = "char(34)"; + public const string FLG_DB_FIELD_TYPE_CHAR_6 = "char(6)"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR = "nvarchar"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_1022 = "nvarchar(1022)"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_127 = "nvarchar(127)"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_15 = "nvarchar(15)"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_255 = "nvarchar(255)"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_31 = "nvarchar(31)"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_4094 = "nvarchar(4094)"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_510 = "nvarchar(510)"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_63 = "nvarchar(63)"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_7 = "nvarchar(7)"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_MAX = "nvarchar(max)"; + public const string FLG_DB_FIELD_TYPE_SMALL_INT = "smallint"; + public const string FLG_DB_FIELD_TYPE_TEXT = "text"; + public const string FLG_DB_FIELD_TYPE_TINY_INT = "tinyint"; + public const string FLG_DB_FIELD_TYPE_VARCHAR = "varchar"; + public const string FLG_DB_FIELD_TYPE_VARCHAR_1022 = "varchar(1022)"; + public const string FLG_DB_FIELD_TYPE_VARCHAR_127 = "varchar(127)"; + public const string FLG_DB_FIELD_TYPE_VARCHAR_15 = "varchar(15)"; + public const string FLG_DB_FIELD_TYPE_VARCHAR_255 = "varchar(255)"; + public const string FLG_DB_FIELD_TYPE_VARCHAR_31 = "varchar(31)"; + public const string FLG_DB_FIELD_TYPE_VARCHAR_4094 = "varchar(4094)"; + public const string FLG_DB_FIELD_TYPE_VARCHAR_510 = "varchar(510)"; + public const string FLG_DB_FIELD_TYPE_VARCHAR_63 = "varchar(63)"; + public const string FLG_DB_FIELD_TYPE_VARCHAR_7 = "varchar(7)"; + public const string FLG_DB_INDEX_PREFIX = "idx_{tablename}_"; + public const string FLG_DB_TABLE_NAME_PREFIX = ""; + public const string FLG_DIC_CATALOG_NEW_USER_ROLE_CONFIG = "new-user-role-config"; + public const string FLG_FREE_SQL_GLOBAL_FILTER_DELETE = nameof(FLG_FREE_SQL_GLOBAL_FILTER_DELETE); + public const string FLG_FREE_SQL_GLOBAL_FILTER_DEPT = nameof(FLG_FREE_SQL_GLOBAL_FILTER_DEPT); + public const string FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_CHILDREN = nameof(FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_CHILDREN); + public const string FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_SON = nameof(FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_SON); + public const string FLG_FREE_SQL_GLOBAL_FILTER_MEMBER = nameof(FLG_FREE_SQL_GLOBAL_FILTER_MEMBER); + public const string FLG_FREE_SQL_GLOBAL_FILTER_SELF = nameof(FLG_FREE_SQL_GLOBAL_FILTER_SELF); + public const string FLG_FREE_SQL_GLOBAL_FILTER_TENANT = nameof(FLG_FREE_SQL_GLOBAL_FILTER_TENANT); + public const string FLG_FRONT_APP_SET_HOME_GRID = "APP_SET_HOME_GRID"; + public const string FLG_HTTP_HEADER_KEY_ACCESS_TOKEN = "ACCESS-TOKEN"; + public const string FLG_HTTP_HEADER_KEY_AUTHORIZATION = "Authorization"; + public const string FLG_HTTP_HEADER_KEY_REFERER = "Referer"; + public const string FLG_HTTP_HEADER_KEY_TRON_PRO_API_KEY = "TRON-PRO-API-KEY"; + public const string FLG_HTTP_HEADER_KEY_USER_AGENT = "User-Agent"; + public const string FLG_HTTP_HEADER_KEY_X_ACCESS_TOKEN = "X-ACCESS-TOKEN"; + public const string FLG_HTTP_HEADER_KEY_X_ACCESS_TOKEN_HEADER_KEY = "X-Authorization"; + public const string FLG_HTTP_HEADER_KEY_X_CACHE_CONTROL = "X-Cache-Control"; + public const string FLG_HTTP_HEADER_KEY_X_FORWARDED_FOR = "X-Forwarded-For"; + public const string FLG_HTTP_HEADER_KEY_X_REAL_IP = "X-Real-IP"; + public const string FLG_HTTP_HEADER_VALUE_APPLICATION_JSON = "application/json"; public const string FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM = "application/octet-stream"; - public const string FLG_HTTP_HEADER_VALUE_APPLICATION_URLENCODED = "application/x-www-form-urlencoded"; - public const string FLG_HTTP_HEADER_VALUE_ATTACHMENT = "attachment"; - public const string FLG_HTTP_HEADER_VALUE_AUTH_SCHEMA = "Bearer"; - public const string FLG_HTTP_HEADER_VALUE_NO_CACHE = "no-cache"; - public const string FLG_HTTP_METHOD_CONNECT = "CONNECT"; - public const string FLG_HTTP_METHOD_DELETE = "DELETE"; - public const string FLG_HTTP_METHOD_GET = "GET"; - public const string FLG_HTTP_METHOD_HEAD = "HEAD"; - public const string FLG_HTTP_METHOD_OPTIONS = "OPTIONS"; - public const string FLG_HTTP_METHOD_PATCH = "PATCH"; - public const string FLG_HTTP_METHOD_POST = "POST"; - public const string FLG_HTTP_METHOD_PUT = "PUT"; - public const string FLG_HTTP_METHOD_TRACE = "TRACE"; - public const string FLG_PATH_API_METRICS = "metrics"; - public const string FLG_PATH_API_RPOBE = "api/probe"; - public const string FLG_PATH_API_SYS_USER_LOGIN_BY_PWD = "api/sys/user/login.by.pwd"; - public const string FLG_PATH_WEBSOCKET_PREFIX = "ws"; - public const string FLG_REDIS_INSTANCE_DATA_CACHE = "DataCache"; - public const string FLG_SNOWFLAKE_WORK_ID = "SNOWFLAKE_WORK_ID"; + public const string FLG_HTTP_HEADER_VALUE_APPLICATION_URLENCODED = "application/x-www-form-urlencoded"; + public const string FLG_HTTP_HEADER_VALUE_ATTACHMENT = "attachment"; + public const string FLG_HTTP_HEADER_VALUE_AUTH_SCHEMA = "Bearer"; + public const string FLG_HTTP_HEADER_VALUE_NO_CACHE = "no-cache"; + public const string FLG_HTTP_METHOD_CONNECT = "CONNECT"; + public const string FLG_HTTP_METHOD_DELETE = "DELETE"; + public const string FLG_HTTP_METHOD_GET = "GET"; + public const string FLG_HTTP_METHOD_HEAD = "HEAD"; + public const string FLG_HTTP_METHOD_OPTIONS = "OPTIONS"; + public const string FLG_HTTP_METHOD_PATCH = "PATCH"; + public const string FLG_HTTP_METHOD_POST = "POST"; + public const string FLG_HTTP_METHOD_PUT = "PUT"; + public const string FLG_HTTP_METHOD_TRACE = "TRACE"; + public const string FLG_PATH_API_METRICS = "metrics"; + public const string FLG_PATH_API_RPOBE = "api/probe"; + public const string FLG_PATH_API_SYS_USER_LOGIN_BY_PWD = "api/sys/user/login.by.pwd"; + public const string FLG_PATH_WEBSOCKET_PREFIX = "ws"; + public const string FLG_REDIS_INSTANCE_DATA_CACHE = "DataCache"; + public const string FLG_SNOWFLAKE_WORK_ID = "SNOWFLAKE_WORK_ID"; public const string FLGL_DB_FIELD_TYPE_VARCHAR_MAX = #if DBTYPE_SQLSERVER - "varchar(max)" - #else + "varchar(max)" + #else "text" #endif ; @@ -103,16 +103,16 @@ public static class Chars public const string FLGL_VISIBLE_ASCIIS = """!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"""; - public const string RGX_CERTIFICATE = "^[a-zA-Z0-9-_]+$"; - public const string RGX_INVITE_CODE = """^\d{8}$"""; - public const string RGX_MOBILE = """^1(3\d|4[5-9]|5[0-35-9]|6[6]|7[2-8]|8\d|9[0-35-9])\d{8}$"""; - public const string RGX_PASSWORD = "^(?![0-9]+$)(?![a-zA-Z]+$).{8,16}$"; - public const string RGX_PAY_PASSWORD = """^\d{6}$"""; - public const string RGX_TELEPHONE = """^((\d{3,4}\-)|)\d{7,8}(|([-\u8f6c]{1}\d{1,5}))$"""; + public const string RGX_CERTIFICATE = "^[a-zA-Z0-9-_]+$"; + public const string RGX_INVITE_CODE = """^\d{8}$"""; + public const string RGX_MOBILE = """^1(3\d|4[5-9]|5[0-35-9]|6[6]|7[2-8]|8\d|9[0-35-9])\d{8}$"""; + public const string RGX_PASSWORD = "^(?![0-9]+$)(?![a-zA-Z]+$).{8,16}$"; + public const string RGX_PAY_PASSWORD = """^\d{6}$"""; + public const string RGX_TELEPHONE = """^((\d{3,4}\-)|)\d{7,8}(|([-\u8f6c]{1}\d{1,5}))$"""; public const string RGX_UP_AND_LOWER_NUMBER = """^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).+$"""; - public const string RGX_URL = """^(https?|ftp):\/\/[^\s/$.?#].[^\s]*\.[^\s]{2,}$"""; - public const string RGX_USERNAME = """^[\u4e00-\u9fa5a-zA-Z0-9_-]{2,16}$"""; - public const string RGX_VERIFY_CODE = """^\d{4}$"""; + public const string RGX_URL = """^https?://[\x00-\x1F\x21-\x7F]+$"""; + public const string RGX_USERNAME = """^[\u4e00-\u9fa5a-zA-Z0-9_-]{2,16}$"""; + public const string RGX_VERIFY_CODE = """^\d{4}$"""; public const string RGXL_CHINESE_NAME = """^(?:赵|钱|孙|李|周|吴|郑|王|冯|陈|褚|卫|蒋|沈|韩|杨|朱|秦|尤|许|何|吕|施|张|孔|曹|严|华|金|魏|陶|姜|戚|谢|邹|喻|柏|水|窦|章|云|苏|潘|葛|奚|范|彭|郎|鲁|韦|昌|马|苗|凤|花|方|俞|任|袁|柳|酆|鲍|史|唐|费|廉|岑|薛|雷|贺|倪|汤|滕|殷|罗|毕|郝|邬|安|常|乐|于|时|傅|皮|卞|齐|康|伍|余|元|卜|顾|孟|平|黄|和|穆|萧|尹|姚|邵|湛|汪|祁|毛|禹|狄|米|贝|明|臧|计|伏|成|戴|谈|宋|茅|庞|熊|纪|舒|屈|项|祝|董|梁|杜|阮|蓝|闵|席|季|麻|强|贾|路|娄|危|江|童|颜|郭|梅|盛|林|刁|钟|徐|邱|骆|高|夏|蔡|田|樊|胡|凌|霍|虞|万|支|柯|昝|管|卢|莫|经|房|裘|缪|干|解|应|宗|丁|宣|贲|邓|郁|单|杭|洪|包|诸|左|石|崔|吉|钮|龚|程|嵇|邢|滑|裴|陆|荣|翁|荀|羊|於|惠|甄|曲|家|封|芮|羿|储|靳|汲|邴|糜|松|井|段|富|巫|乌|焦|巴|弓|牧|隗|山|谷|车|侯|宓|蓬|全|郗|班|仰|秋|仲|伊|宫|宁|仇|栾|暴|甘|钭|厉|戎|祖|武|符|刘|景|詹|束|龙|叶|幸|司|韶|郜|黎|蓟|薄|印|宿|白|怀|蒲|邰|从|鄂|索|咸|籍|赖|卓|蔺|屠|蒙|池|乔|阴|胥|能|苍|双|闻|莘|党|翟|谭|贡|劳|逄|姬|申|扶|堵|冉|宰|郦|雍|郤|璩|桑|桂|濮|牛|寿|通|边|扈|燕|冀|郏|浦|尚|农|温|别|庄|晏|柴|瞿|阎|充|慕|连|茹|习|宦|艾|鱼|容|向|古|易|慎|戈|廖|庾|终|暨|居|衡|步|都|耿|满|弘|匡|国|文|寇|广|禄|阙|东|欧|殳|沃|利|蔚|越|夔|隆|师|巩|厍|聂|晁|勾|敖|融|冷|訾|辛|阚|那|简|饶|空|曾|毋|沙|乜|养|鞠|须|丰|巢|关|蒯|相|查|後|荆|红|游|竺|权|逯|盖|益|桓|公|万俟|司马|上官|欧阳|夏侯|诸葛|闻人|东方|赫连|皇甫|尉迟|公羊|澹台|公冶|宗政|濮阳|淳于|单于|太叔|申屠|公孙|仲孙|轩辕|令狐|钟离|宇文|长孙|慕容|鲜于|闾丘|司徒|司空|亓官|司寇|仉|督|子车|颛孙|端木|巫马|公西|漆雕|乐正|壤驷|公良|拓跋|夹谷|宰父|谷梁|晋|楚|闫|法|汝|鄢|涂|钦|段干|百里|东郭|南门|呼延|归|海|羊舌|微生|岳|帅|缑|亢|况|后|有|琴|梁丘|左丘|东门|西门|商|牟|佘|佴|伯|赏|南宫|墨|哈|谯|笪|年|爱|阳|佟|第五|言|福)[\u4e00-\u9fa5]{1,3}$"""; diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Constant/Numbers.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Constant/Numbers.cs index 795e7808..4f07b278 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Constant/Numbers.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Constant/Numbers.cs @@ -10,24 +10,24 @@ namespace NetAdmin.Infrastructure.Constant; /// public static class Numbers { - public const int DEF_PAGE_SIZE_QUERY = 20; // 默认值:分页查询页容量 - public const long DEF_SORT_VAL = 100; // 默认值:排序字段 - public const int HTTP_STATUS_BIZ_FAIL = 900; // HTTP状态码:业务异常 - public const long ID_DIC_CATALOG_GEO_AREA = 379794295185413; // 唯一编号:字典目录-行政区划字典 - public const int MAX_LIMIT_BULK_REQ = 100; // 最大限制:批量请求数 - public const int MAX_LIMIT_EXPORT = 50000; // 最大限制:导出为CSV文件的条数 - public const int MAX_LIMIT_QUERY = 1000; // 最大限制:非分页查询条数 - public const int MAX_LIMIT_QUERY_PAGE_NO = 10000; // 最大限制:分页查询页码 - public const int MAX_LIMIT_QUERY_PAGE_SIZE = 100; // 最大限制:分页查询页容量 - public const int MAX_LIMIT_RETRY_CNT_REDIS_LOCK = 10; // 最大限制:Redis锁重试次数 - public const int REQUEST_LOG_BUFF_SIZE = 1000; // 请求日志缓冲区大小 - public const int SCHEDULED_JOB_PARALLEL_NUM = 5; // 计划作业并发数 - public const int SECS_CACHE_CHART = 300; // 缓存时间(秒):仪表 - public const int SECS_CACHE_DEFAULT = 60; // 缓存时间(秒):默认 - public const int SECS_CACHE_DIC_CATALOG_CODE = 300; // 缓存时间(秒):字典配置-目录代码 - public const int SECS_CACHE_LOGIN_BY_USER_ID = 3600 * 24 * 30; // 缓存时间(秒):通过用户编号登录的用户信息 - public const int SECS_REDIS_LOCK_EXPIRY = 60; // 秒:Redis锁过期时间 - public const int SECS_REDIS_LOCK_RETRY_DELAY = 1; // 秒:Redis锁重试间隔 - public const int SECS_TIMEOUT_HTTP_CLIENT = 15; // 超时时间(秒):HTTP 客户端 - public const int SECS_TIMEOUT_JOB = 180; // 超时时间(秒):作业 + public const int DEF_PAGE_SIZE_QUERY = 20; // 默认值:分页查询页容量 + public const long DEF_SORT_VAL = 100; // 默认值:排序字段 + public const int HTTP_STATUS_BIZ_FAIL = 900; // HTTP状态码:业务异常 + public const long ID_DIC_CATALOG_GEO_AREA = 379794295185413; // 唯一编号:字典目录-行政区划字典 + public const int MAX_LIMIT_BULK_REQ = 100; // 最大限制:批量请求数 + public const int MAX_LIMIT_EXPORT = 50000; // 最大限制:导出为CSV文件的条数 + public const int MAX_LIMIT_QUERY = 1000; // 最大限制:非分页查询条数 + public const int MAX_LIMIT_QUERY_PAGE_NO = 10000; // 最大限制:分页查询页码 + public const int MAX_LIMIT_QUERY_PAGE_SIZE = 100; // 最大限制:分页查询页容量 + public const int MAX_LIMIT_RETRY_CNT_REDIS_LOCK = 10; // 最大限制:Redis锁重试次数 + public const int REQUEST_LOG_BUFF_SIZE = 100; // 请求日志缓冲区大小 + public const int SCHEDULED_JOB_PARALLEL_NUM = 5; // 计划作业并发数 + public const int SECS_CACHE_CHART = 300; // 缓存时间(秒):仪表 + public const int SECS_CACHE_DEFAULT = 60; // 缓存时间(秒):默认 + public const int SECS_CACHE_DIC_CATALOG_CODE = 300; // 缓存时间(秒):字典配置-目录代码 + public const int SECS_CACHE_LOGIN_BY_USER_ID = 3600 * 24 * 30; // 缓存时间(秒):通过用户编号登录的用户信息 + public const int SECS_REDIS_LOCK_EXPIRY = 60; // 秒:Redis锁过期时间 + public const int SECS_REDIS_LOCK_RETRY_DELAY = 1; // 秒:Redis锁重试间隔 + public const int SECS_TIMEOUT_HTTP_CLIENT = 15; // 超时时间(秒):HTTP 客户端 + public const int SECS_TIMEOUT_JOB = 180; // 超时时间(秒):作业 } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/AdminTradeTypes.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/AdminTradeTypes.cs index a4f8390b..9724b5f3 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/AdminTradeTypes.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/AdminTradeTypes.cs @@ -13,7 +13,7 @@ public enum AdminTradeTypes [Trade(Direction = TradeDirections.Income)] AdminGift = 1 - , + , /// /// 管理员扣费 @@ -22,12 +22,12 @@ public enum AdminTradeTypes [Trade(Direction = TradeDirections.Expense)] AdminDeduct = 2 - , + , /// /// 管理员充值 /// [ResourceDescription(nameof(Ln.管理员充值))] [Trade(Direction = TradeDirections.Income)] - AdminDeposit = 6 + AdminDeposit = 8 } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/CertificateTypes.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/CertificateTypes.cs index 659b4a25..4b0360f7 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/CertificateTypes.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/CertificateTypes.cs @@ -12,7 +12,7 @@ public enum CertificateTypes [ResourceDescription(nameof(Ln.身份证))] IdentityCard = 1 - , + , /// /// 护照 @@ -20,7 +20,7 @@ public enum CertificateTypes [ResourceDescription(nameof(Ln.护照))] Passport = 2 - , + , /// /// 外国人居留证 @@ -28,7 +28,7 @@ public enum CertificateTypes [ResourceDescription(nameof(Ln.外国人居留证))] ForeignerResidencePermit = 3 - , + , /// /// 港澳台通行证 @@ -36,7 +36,7 @@ public enum CertificateTypes [ResourceDescription(nameof(Ln.港澳台通行证))] HKorMacauPermit = 4 - , + , /// /// 出生证 diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/CountryCodes.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/CountryCodes.cs index 2773bbc6..b791679c 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/CountryCodes.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/CountryCodes.cs @@ -16,2878 +16,3352 @@ public enum CountryCodes /// /// 多米尼加 /// - [CountryInfo(Mcc = ["370"], CallingCode = 1, CallingSubCode = ["809", "829", "849"], Alpha3 = "DOM", ShortName = "Dominican Republic" - , LongName = "The Dominican Republic", CurrencyCode = "DOP", Languages = ["es"] - , UnofficialNames = [ - "Dominican Republic", "Dominikanische Republik", "République Dominicaine", "República Dominicana", "ドミニカ共和国" - , "Dominicaanse Republiek", "多米尼加" - ], Timezones = ["America/Santo_Domingo,-0400"])] + [CountryInfo( + Mcc = ["370"], CallingCode = 1, CallingSubCode = ["809", "829", "849"], Alpha3 = "DOM", ShortName = "Dominican Republic" + , LongName = "The Dominican Republic", CurrencyCode = "DOP", Languages = ["es"] + , UnofficialNames = + [ + "Dominican Republic", "Dominikanische Republik", "République Dominicaine", "República Dominicana", "ドミニカ共和国", "Dominicaanse Republiek" + , "多米尼加" + ], Timezones = ["America/Santo_Domingo,-0400"] + )] [ResourceDescription(nameof(Ln.多米尼加))] DO = 214 - , + , /// /// 波多黎各 /// - [CountryInfo(Mcc = ["330"], CallingCode = 1, CallingSubCode = ["787", "939"], Alpha3 = "PRI", ShortName = "Puerto Rico" - , LongName = "The Commonwealth of Puerto Rico", CurrencyCode = "USD", Languages = ["es", "en"] - , UnofficialNames = ["Puerto Rico", "プエルトリコ", "波多黎各"], Timezones = ["America/Puerto_Rico,-0400"])] + [CountryInfo( + Mcc = ["330"], CallingCode = 1, CallingSubCode = ["787", "939"], Alpha3 = "PRI", ShortName = "Puerto Rico" + , LongName = "The Commonwealth of Puerto Rico", CurrencyCode = "USD", Languages = ["es", "en"] + , UnofficialNames = ["Puerto Rico", "プエルトリコ", "波多黎各"], Timezones = ["America/Puerto_Rico,-0400"] + )] [ResourceDescription(nameof(Ln.波多黎各))] PR = 630 - , + , /// /// 牙买加 /// - [CountryInfo(Mcc = [], CallingCode = 1, CallingSubCode = ["658", "876"], Alpha3 = "JAM", ShortName = "Jamaica", LongName = "Jamaica" - , CurrencyCode = "JMD", Languages = ["en"], UnofficialNames = ["Jamaica", "Jamaika", "Jamaïque", "ジャマイカ", "牙买加"] - , Timezones = ["America/Jamaica,-0500"])] + [CountryInfo( + Mcc = [], CallingCode = 1, CallingSubCode = ["658", "876"], Alpha3 = "JAM", ShortName = "Jamaica", LongName = "Jamaica", CurrencyCode = "JMD" + , Languages = ["en"], UnofficialNames = ["Jamaica", "Jamaika", "Jamaïque", "ジャマイカ", "牙买加"], Timezones = ["America/Jamaica,-0500"] + )] [ResourceDescription(nameof(Ln.牙买加))] JM = 388 - , + , /// /// 圣基茨和尼维斯 /// - [CountryInfo(Mcc = ["356"], CallingCode = 1, CallingSubCode = ["869"], Alpha3 = "KNA", ShortName = "Saint Kitts and Nevis" - , LongName = "Saint Kitts and Nevis", CurrencyCode = "XCD", Languages = ["en"] - , UnofficialNames = [ - "Saint Kitts and Nevis", "Föderation St. Kitts und Nevis", "Saint Kitts et Nevis", "Saint Kitts y Nevis", "セントクリストファー・ネイビス" - , "Saint Kitts en Nevis", "St. Kitts and Nevis", "St Kitts and Nevis", "圣基茨和尼维斯" - ], Timezones = ["America/St_Kitts,-0400"])] + [CountryInfo( + Mcc = ["356"], CallingCode = 1, CallingSubCode = ["869"], Alpha3 = "KNA", ShortName = "Saint Kitts and Nevis" + , LongName = "Saint Kitts and Nevis", CurrencyCode = "XCD", Languages = ["en"] + , UnofficialNames = + [ + "Saint Kitts and Nevis", "Föderation St. Kitts und Nevis", "Saint Kitts et Nevis", "Saint Kitts y Nevis", "セントクリストファー・ネイビス" + , "Saint Kitts en Nevis", "St. Kitts and Nevis", "St Kitts and Nevis", "圣基茨和尼维斯" + ], Timezones = ["America/St_Kitts,-0400"] + )] [ResourceDescription(nameof(Ln.圣基茨和尼维斯))] KN = 659 - , + , /// /// 特立尼达和多巴哥 /// - [CountryInfo(Mcc = ["374"], CallingCode = 1, CallingSubCode = ["868"], Alpha3 = "TTO", ShortName = "Trinidad and Tobago" - , LongName = "The Republic of Trinidad and Tobago", CurrencyCode = "TTD", Languages = ["en"] - , UnofficialNames = [ - "Trinidad and Tobago", "Trinidad und Tobago", "Trinité et Tobago", "Trinidad y Tobago", "トリニダード・トバゴ", "Trinidad en Tobago" - , "特立尼达和多巴哥" - ], Timezones = ["America/Port_of_Spain,-0400"])] + [CountryInfo( + Mcc = ["374"], CallingCode = 1, CallingSubCode = ["868"], Alpha3 = "TTO", ShortName = "Trinidad and Tobago" + , LongName = "The Republic of Trinidad and Tobago", CurrencyCode = "TTD", Languages = ["en"] + , UnofficialNames = + [ + "Trinidad and Tobago", "Trinidad und Tobago", "Trinité et Tobago", "Trinidad y Tobago", "トリニダード・トバゴ", "Trinidad en Tobago", "特立尼达和多巴哥" + ], Timezones = ["America/Port_of_Spain,-0400"] + )] [ResourceDescription(nameof(Ln.特立尼达和多巴哥))] TT = 780 - , + , /// /// 圣文森特和格林纳丁斯 /// - [CountryInfo(Mcc = ["360"], CallingCode = 1, CallingSubCode = ["784"], Alpha3 = "VCT", ShortName = "Saint Vincent and the Grenadines" - , LongName = "Saint Vincent and the Grenadines", CurrencyCode = "XCD", Languages = ["en"] - , UnofficialNames = [ - "Saint Vincent and the Grenadines", "Saint Vincent und die Grenadinen", "Saint-Vincent et les Grenadines" - , "San Vicente y Granadinas", "セントビンセントおよびグレナディーン諸島", "Saint Vincent en de Grenadines", "St. Vincent Grenadines" - , "St Vincent Grenadines", "圣文森特和格林纳丁斯" - ], Timezones = ["America/St_Vincent,-0400"])] + [CountryInfo( + Mcc = ["360"], CallingCode = 1, CallingSubCode = ["784"], Alpha3 = "VCT", ShortName = "Saint Vincent and the Grenadines" + , LongName = "Saint Vincent and the Grenadines", CurrencyCode = "XCD", Languages = ["en"] + , UnofficialNames = + [ + "Saint Vincent and the Grenadines", "Saint Vincent und die Grenadinen", "Saint-Vincent et les Grenadines", "San Vicente y Granadinas" + , "セントビンセントおよびグレナディーン諸島", "Saint Vincent en de Grenadines", "St. Vincent Grenadines", "St Vincent Grenadines", "圣文森特和格林纳丁斯" + ], Timezones = ["America/St_Vincent,-0400"] + )] [ResourceDescription(nameof(Ln.圣文森特和格林纳丁斯))] VC = 670 - , + , /// /// 多米尼克 /// - [CountryInfo(Mcc = ["366"], CallingCode = 1, CallingSubCode = ["767"], Alpha3 = "DMA", ShortName = "Dominica" - , LongName = "The Commonwealth of Dominica", CurrencyCode = "XCD", Languages = ["en"], UnofficialNames = ["Dominica", "ドミニカ国", "多米尼克"] - , Timezones = ["America/Dominica,-0400"])] + [CountryInfo( + Mcc = ["366"], CallingCode = 1, CallingSubCode = ["767"], Alpha3 = "DMA", ShortName = "Dominica", LongName = "The Commonwealth of Dominica" + , CurrencyCode = "XCD", Languages = ["en"], UnofficialNames = ["Dominica", "ドミニカ国", "多米尼克"], Timezones = ["America/Dominica,-0400"] + )] [ResourceDescription(nameof(Ln.多米尼克))] DM = 212 - , + , /// /// 圣卢西亚 /// - [CountryInfo(Mcc = ["358"], CallingCode = 1, CallingSubCode = ["758"], Alpha3 = "LCA", ShortName = "Saint Lucia", LongName = "Saint Lucia" - , CurrencyCode = "XCD", Languages = ["en"] - , UnofficialNames = ["Saint Lucia", "Saint-Lucie", "Santa Lucía", "セントルシア", "St. Lucia", "St Lucia", "圣卢西亚"] - , Timezones = ["America/St_Lucia,-0400"])] + [CountryInfo( + Mcc = ["358"], CallingCode = 1, CallingSubCode = ["758"], Alpha3 = "LCA", ShortName = "Saint Lucia", LongName = "Saint Lucia" + , CurrencyCode = "XCD", Languages = ["en"] + , UnofficialNames = ["Saint Lucia", "Saint-Lucie", "Santa Lucía", "セントルシア", "St. Lucia", "St Lucia", "圣卢西亚"] + , Timezones = ["America/St_Lucia,-0400"] + )] [ResourceDescription(nameof(Ln.圣卢西亚))] LC = 662 - , + , /// /// 荷属圣马丁 /// - [CountryInfo(Mcc = [], CallingCode = 1, CallingSubCode = ["721"], Alpha3 = "SXM", ShortName = "Sint Maarten (Dutch part)" - , LongName = "Sint Maarten", CurrencyCode = "ANG", Languages = ["nl", "en"], UnofficialNames = ["Sint Maarten", "セント・マーチン島", "荷属圣马丁"] - , Timezones = ["America/Lower_Princes,-0400"])] + [CountryInfo( + Mcc = [], CallingCode = 1, CallingSubCode = ["721"], Alpha3 = "SXM", ShortName = "Sint Maarten (Dutch part)", LongName = "Sint Maarten" + , CurrencyCode = "ANG", Languages = ["nl", "en"], UnofficialNames = ["Sint Maarten", "セント・マーチン島", "荷属圣马丁"] + , Timezones = ["America/Lower_Princes,-0400"] + )] [ResourceDescription(nameof(Ln.荷属圣马丁))] SX = 534 - , + , /// /// 美属萨摩亚 /// - [CountryInfo(Mcc = ["544"], CallingCode = 1, CallingSubCode = ["684"], Alpha3 = "ASM", ShortName = "American Samoa" - , LongName = "The Territory of American Samoa", CurrencyCode = "USD", Languages = ["en", "sm"] - , UnofficialNames = [ - "American Samoa", "Amerikanisch-Samoa", "Samoa américaines", "Samoa Americana", "アメリカ領サモア", "Amerikaans Samoa", "美属萨摩亚" - ], Timezones = ["Pacific/Pago_Pago,-1100"])] + [CountryInfo( + Mcc = ["544"], CallingCode = 1, CallingSubCode = ["684"], Alpha3 = "ASM", ShortName = "American Samoa" + , LongName = "The Territory of American Samoa", CurrencyCode = "USD", Languages = ["en", "sm"] + , UnofficialNames = ["American Samoa", "Amerikanisch-Samoa", "Samoa américaines", "Samoa Americana", "アメリカ領サモア", "Amerikaans Samoa", "美属萨摩亚"] + , Timezones = ["Pacific/Pago_Pago,-1100"] + )] [ResourceDescription(nameof(Ln.美属萨摩亚))] AS = 016 - , + , /// /// 关岛 /// - [CountryInfo(Mcc = [], CallingCode = 1, CallingSubCode = ["671"], Alpha3 = "GUM", ShortName = "Guam", LongName = "The Territory of Guam" - , CurrencyCode = "USD", Languages = ["en", "ch", "es"], UnofficialNames = ["Guam", "グアム", "关岛"], Timezones = ["Pacific/Guam,+1000"])] + [CountryInfo( + Mcc = [], CallingCode = 1, CallingSubCode = ["671"], Alpha3 = "GUM", ShortName = "Guam", LongName = "The Territory of Guam" + , CurrencyCode = "USD", Languages = ["en", "ch", "es"], UnofficialNames = ["Guam", "グアム", "关岛"], Timezones = ["Pacific/Guam,+1000"] + )] [ResourceDescription(nameof(Ln.关岛))] GU = 316 - , + , /// /// 北马里亚纳群岛 /// - [CountryInfo(Mcc = [], CallingCode = 1, CallingSubCode = ["670"], Alpha3 = "MNP", ShortName = "Northern Mariana Islands" - , LongName = "The Commonwealth of the Northern Mariana Islands", CurrencyCode = "USD", Languages = ["en", "ch"] - , UnofficialNames = [ - "Northern Mariana Islands", "Nördliche Marianen", "Mariannes du Nord", "Islas Marianas del Norte", "北マリアナ諸島" - , "Noordelijke Marianeneilanden", "北马里亚纳群岛" - ], Timezones = ["Pacific/Saipan,+1000"])] + [CountryInfo( + Mcc = [], CallingCode = 1, CallingSubCode = ["670"], Alpha3 = "MNP", ShortName = "Northern Mariana Islands" + , LongName = "The Commonwealth of the Northern Mariana Islands", CurrencyCode = "USD", Languages = ["en", "ch"] + , UnofficialNames = + [ + "Northern Mariana Islands", "Nördliche Marianen", "Mariannes du Nord", "Islas Marianas del Norte", "北マリアナ諸島" + , "Noordelijke Marianeneilanden", "北马里亚纳群岛" + ], Timezones = ["Pacific/Saipan,+1000"] + )] [ResourceDescription(nameof(Ln.北马里亚纳群岛))] MP = 580 - , + , /// /// 蒙特塞拉特 /// - [CountryInfo(Mcc = ["354"], CallingCode = 1, CallingSubCode = ["664"], Alpha3 = "MSR", ShortName = "Montserrat", LongName = "Montserrat" - , CurrencyCode = "XCD", Languages = ["en"], UnofficialNames = ["Montserrat", "モントセラト", "蒙特塞拉特"] - , Timezones = ["America/Montserrat,-0400"])] + [CountryInfo( + Mcc = ["354"], CallingCode = 1, CallingSubCode = ["664"], Alpha3 = "MSR", ShortName = "Montserrat", LongName = "Montserrat" + , CurrencyCode = "XCD", Languages = ["en"], UnofficialNames = ["Montserrat", "モントセラト", "蒙特塞拉特"], Timezones = ["America/Montserrat,-0400"] + )] [ResourceDescription(nameof(Ln.蒙特塞拉特))] MS = 500 - , + , /// /// 特克斯和凯科斯群岛 /// - [CountryInfo(Mcc = ["338", "376"], CallingCode = 1, CallingSubCode = ["649"], Alpha3 = "TCA", ShortName = "Turks and Caicos Islands" - , LongName = "The Turks and Caicos Islands", CurrencyCode = "USD", Languages = ["en"] - , UnofficialNames = [ - "Turks and Caicos Islands", "Turks- und Caicosinseln", "Îles Turks et Caïcos", "Islas Turks y Caicos", "タークス・カイコス諸島" - , "Turks- en Caicoseilanden", "Turks and Caicos", "特克斯和凯科斯群岛" - ], Timezones = ["America/Grand_Turk,-0500"])] + [CountryInfo( + Mcc = ["338", "376"], CallingCode = 1, CallingSubCode = ["649"], Alpha3 = "TCA", ShortName = "Turks and Caicos Islands" + , LongName = "The Turks and Caicos Islands", CurrencyCode = "USD", Languages = ["en"] + , UnofficialNames = + [ + "Turks and Caicos Islands", "Turks- und Caicosinseln", "Îles Turks et Caïcos", "Islas Turks y Caicos", "タークス・カイコス諸島" + , "Turks- en Caicoseilanden", "Turks and Caicos", "特克斯和凯科斯群岛" + ], Timezones = ["America/Grand_Turk,-0500"] + )] [ResourceDescription(nameof(Ln.特克斯和凯科斯群岛))] TC = 796 - , + , /// /// 格林纳达 /// - [CountryInfo(Mcc = ["352"], CallingCode = 1, CallingSubCode = ["473"], Alpha3 = "GRD", ShortName = "Grenada", LongName = "Grenada" - , CurrencyCode = "XCD", Languages = ["en"], UnofficialNames = ["Grenada", "グレナダ", "格林纳达"], Timezones = ["America/Grenada,-0400"])] + [CountryInfo( + Mcc = ["352"], CallingCode = 1, CallingSubCode = ["473"], Alpha3 = "GRD", ShortName = "Grenada", LongName = "Grenada", CurrencyCode = "XCD" + , Languages = ["en"], UnofficialNames = ["Grenada", "グレナダ", "格林纳达"], Timezones = ["America/Grenada,-0400"] + )] [ResourceDescription(nameof(Ln.格林纳达))] GD = 308 - , + , /// /// 百慕大 /// - [CountryInfo(Mcc = ["350"], CallingCode = 1, CallingSubCode = ["441"], Alpha3 = "BMU", ShortName = "Bermuda", LongName = "Bermuda" - , CurrencyCode = "BMD", Languages = ["en"], UnofficialNames = ["Bermuda", "Bermudes", "Bermudas", "バミューダ", "百慕大"] - , Timezones = ["Atlantic/Bermuda,-0400"])] + [CountryInfo( + Mcc = ["350"], CallingCode = 1, CallingSubCode = ["441"], Alpha3 = "BMU", ShortName = "Bermuda", LongName = "Bermuda", CurrencyCode = "BMD" + , Languages = ["en"], UnofficialNames = ["Bermuda", "Bermudes", "Bermudas", "バミューダ", "百慕大"], Timezones = ["Atlantic/Bermuda,-0400"] + )] [ResourceDescription(nameof(Ln.百慕大))] BM = 060 - , + , /// /// 开曼群岛 /// - [CountryInfo(Mcc = ["346"], CallingCode = 1, CallingSubCode = ["345"], Alpha3 = "CYM", ShortName = "Cayman Islands" - , LongName = "The Cayman Islands", CurrencyCode = "KYD", Languages = ["en"] - , UnofficialNames = ["Cayman Islands", "Kaimaninseln", "Îles Caïmans", "Islas Caimán", "ケイマン諸島", "Caymaneilanden", "开曼群岛"] - , Timezones = ["America/Cayman,-0500"])] + [CountryInfo( + Mcc = ["346"], CallingCode = 1, CallingSubCode = ["345"], Alpha3 = "CYM", ShortName = "Cayman Islands", LongName = "The Cayman Islands" + , CurrencyCode = "KYD", Languages = ["en"] + , UnofficialNames = ["Cayman Islands", "Kaimaninseln", "Îles Caïmans", "Islas Caimán", "ケイマン諸島", "Caymaneilanden", "开曼群岛"] + , Timezones = ["America/Cayman,-0500"] + )] [ResourceDescription(nameof(Ln.开曼群岛))] KY = 136 - , + , /// /// 美属维尔京群岛 /// - [CountryInfo(Mcc = [], CallingCode = 1, CallingSubCode = ["340"], Alpha3 = "VIR", ShortName = "Virgin Islands (U.S.)" - , LongName = "The Virgin Islands of the United States", CurrencyCode = "USD", Languages = ["en"] - , UnofficialNames = [ - "Virgin Islands of the United States", "Amerikanische Jungferninseln", "Îles Vierges américaines" - , "Islas Vírgenes de los Estados Unidos", "アメリカ領ヴァージン諸島", "Amerikaanse Maagdeneilanden", "Virgin Islands (U.S.)" - , "United States Virgin Islands", "U.S. Virgin Islands", "美属维尔京群岛" - ], Timezones = ["America/St_Thomas,-0400"])] + [CountryInfo( + Mcc = [], CallingCode = 1, CallingSubCode = ["340"], Alpha3 = "VIR", ShortName = "Virgin Islands (U.S.)" + , LongName = "The Virgin Islands of the United States", CurrencyCode = "USD", Languages = ["en"] + , UnofficialNames = + [ + "Virgin Islands of the United States", "Amerikanische Jungferninseln", "Îles Vierges américaines" + , "Islas Vírgenes de los Estados Unidos", "アメリカ領ヴァージン諸島", "Amerikaanse Maagdeneilanden", "Virgin Islands (U.S.)" + , "United States Virgin Islands", "U.S. Virgin Islands", "美属维尔京群岛" + ], Timezones = ["America/St_Thomas,-0400"] + )] [ResourceDescription(nameof(Ln.美属维尔京群岛))] VI = 850 - , + , /// /// 英属维尔京群岛 /// - [CountryInfo(Mcc = ["348"], CallingCode = 1, CallingSubCode = ["284"], Alpha3 = "VGB", ShortName = "Virgin Islands (British)" - , LongName = "The Virgin Islands", CurrencyCode = "USD", Languages = ["en"] - , UnofficialNames = [ - "British Virgin Islands", "Britische Jungferninseln", "Îles Vierges britanniques", "Islas Vírgenes del Reino Unido" - , "イギリス領ヴァージン諸島", "Britse Maagdeneilanden", "Virgin Islands (British)", "英属维尔京群岛" - ], Timezones = ["America/Tortola,-0400"])] + [CountryInfo( + Mcc = ["348"], CallingCode = 1, CallingSubCode = ["284"], Alpha3 = "VGB", ShortName = "Virgin Islands (British)" + , LongName = "The Virgin Islands", CurrencyCode = "USD", Languages = ["en"] + , UnofficialNames = + [ + "British Virgin Islands", "Britische Jungferninseln", "Îles Vierges britanniques", "Islas Vírgenes del Reino Unido", "イギリス領ヴァージン諸島" + , "Britse Maagdeneilanden", "Virgin Islands (British)", "英属维尔京群岛" + ], Timezones = ["America/Tortola,-0400"] + )] [ResourceDescription(nameof(Ln.英属维尔京群岛))] VG = 092 - , + , /// /// 安提瓜和巴布达 /// - [CountryInfo(Mcc = ["344"], CallingCode = 1, CallingSubCode = ["268"], Alpha3 = "ATG", ShortName = "Antigua and Barbuda" - , LongName = "Antigua and Barbuda", CurrencyCode = "XCD", Languages = ["en"] - , UnofficialNames = [ - "Antigua and Barbuda", "Antigua und Barbuda", "Antigua et Barbuda", "Antigua y Barbuda", "アンティグア・バーブーダ", "Antigua en Barbuda" - , "安提瓜和巴布达" - ], Timezones = ["America/Antigua,-0400"])] + [CountryInfo( + Mcc = ["344"], CallingCode = 1, CallingSubCode = ["268"], Alpha3 = "ATG", ShortName = "Antigua and Barbuda", LongName = "Antigua and Barbuda" + , CurrencyCode = "XCD", Languages = ["en"] + , UnofficialNames = + [ + "Antigua and Barbuda", "Antigua und Barbuda", "Antigua et Barbuda", "Antigua y Barbuda", "アンティグア・バーブーダ", "Antigua en Barbuda" + , "安提瓜和巴布达" + ], Timezones = ["America/Antigua,-0400"] + )] [ResourceDescription(nameof(Ln.安提瓜和巴布达))] AG = 028 - , + , /// /// 安圭拉 /// - [CountryInfo(Mcc = ["365"], CallingCode = 1, CallingSubCode = ["264"], Alpha3 = "AIA", ShortName = "Anguilla", LongName = "Anguilla" - , CurrencyCode = "XCD", Languages = ["en"], UnofficialNames = ["Anguilla", "アンギラ", "安圭拉"], Timezones = ["America/Anguilla,-0400"])] + [CountryInfo( + Mcc = ["365"], CallingCode = 1, CallingSubCode = ["264"], Alpha3 = "AIA", ShortName = "Anguilla", LongName = "Anguilla", CurrencyCode = "XCD" + , Languages = ["en"], UnofficialNames = ["Anguilla", "アンギラ", "安圭拉"], Timezones = ["America/Anguilla,-0400"] + )] [ResourceDescription(nameof(Ln.安圭拉))] AI = 660 - , + , /// /// 巴巴多斯 /// - [CountryInfo(Mcc = ["342"], CallingCode = 1, CallingSubCode = ["246"], Alpha3 = "BRB", ShortName = "Barbados", LongName = "Barbados" - , CurrencyCode = "BBD", Languages = ["en"], UnofficialNames = ["Barbade", "Barbados", "バルバドス", "巴巴多斯"] - , Timezones = ["America/Barbados,-0400"])] + [CountryInfo( + Mcc = ["342"], CallingCode = 1, CallingSubCode = ["246"], Alpha3 = "BRB", ShortName = "Barbados", LongName = "Barbados", CurrencyCode = "BBD" + , Languages = ["en"], UnofficialNames = ["Barbade", "Barbados", "バルバドス", "巴巴多斯"], Timezones = ["America/Barbados,-0400"] + )] [ResourceDescription(nameof(Ln.巴巴多斯))] BB = 052 - , + , /// /// 巴哈马 /// - [CountryInfo(Mcc = ["364"], CallingCode = 1, CallingSubCode = ["242"], Alpha3 = "BHS", ShortName = "Bahamas" - , LongName = "The Commonwealth of The Bahamas", CurrencyCode = "BSD", Languages = ["en"] - , UnofficialNames = ["The Bahamas", "バハマ", "巴哈马"], Timezones = ["America/Nassau,-0500"])] + [CountryInfo( + Mcc = ["364"], CallingCode = 1, CallingSubCode = ["242"], Alpha3 = "BHS", ShortName = "Bahamas", LongName = "The Commonwealth of The Bahamas" + , CurrencyCode = "BSD", Languages = ["en"], UnofficialNames = ["The Bahamas", "バハマ", "巴哈马"], Timezones = ["America/Nassau,-0500"] + )] [ResourceDescription(nameof(Ln.巴哈马))] BS = 044 - , + , /// /// 加拿大 /// - [CountryInfo(Mcc = ["302"], CallingCode = 1, Alpha3 = "CAN", ShortName = "Canada", LongName = "Canada", CurrencyCode = "CAD" - , Languages = ["en", "fr"], UnofficialNames = ["Canada", "Kanada", "Canadá", "カナダ", "加拿大"] - , Timezones = [ - "America/Atikokan,-0500", "America/Blanc-Sablon,-0400", "America/Cambridge_Bay,-0700", "America/Creston,-0700" - , "America/Dawson,-0700", "America/Dawson_Creek,-0700", "America/Edmonton,-0700", "America/Fort_Nelson,-0700" - , "America/Glace_Bay,-0400", "America/Goose_Bay,-0400", "America/Halifax,-0400", "America/Inuvik,-0700", "America/Iqaluit,-0500" - , "America/Moncton,-0400", "America/Rankin_Inlet,-0600", "America/Regina,-0600", "America/Resolute,-0600", "America/St_Johns,-0330" - , "America/Swift_Current,-0600", "America/Toronto,-0500", "America/Vancouver,-0800", "America/Whitehorse,-0700" - , "America/Winnipeg,-0600" - ])] + [CountryInfo( + Mcc = ["302"], CallingCode = 1, Alpha3 = "CAN", ShortName = "Canada", LongName = "Canada", CurrencyCode = "CAD", Languages = ["en", "fr"] + , UnofficialNames = ["Canada", "Kanada", "Canadá", "カナダ", "加拿大"] + , Timezones = + [ + "America/Atikokan,-0500", "America/Blanc-Sablon,-0400", "America/Cambridge_Bay,-0700", "America/Creston,-0700", "America/Dawson,-0700" + , "America/Dawson_Creek,-0700", "America/Edmonton,-0700", "America/Fort_Nelson,-0700", "America/Glace_Bay,-0400" + , "America/Goose_Bay,-0400", "America/Halifax,-0400", "America/Inuvik,-0700", "America/Iqaluit,-0500", "America/Moncton,-0400" + , "America/Rankin_Inlet,-0600", "America/Regina,-0600", "America/Resolute,-0600", "America/St_Johns,-0330" + , "America/Swift_Current,-0600", "America/Toronto,-0500", "America/Vancouver,-0800", "America/Whitehorse,-0700" + , "America/Winnipeg,-0600" + ] + )] [ResourceDescription(nameof(Ln.加拿大))] CA = 124 - , + , /// /// 美国本土外小岛屿 /// - [CountryInfo(Mcc = [], CallingCode = 1, Alpha3 = "UMI", ShortName = "United States Minor Outlying Islands" - , LongName = "United States Minor Outlying Islands", CurrencyCode = "USD", Languages = ["en"] - , UnofficialNames = [ - "United States Minor Outlying Islands", "US-Amerikanische Hoheitsgebiete", "Dépendances américaines" - , "Islas menores de Estados Unidos", "合衆国領有小離島", "Kleine afgelegen eilanden van de Verenigde Staten", "美国本土外小岛屿" - ], Timezones = ["Pacific/Midway,-1100", "Pacific/Wake,+1200"])] + [CountryInfo( + Mcc = [], CallingCode = 1, Alpha3 = "UMI", ShortName = "United States Minor Outlying Islands" + , LongName = "United States Minor Outlying Islands", CurrencyCode = "USD", Languages = ["en"] + , UnofficialNames = + [ + "United States Minor Outlying Islands", "US-Amerikanische Hoheitsgebiete", "Dépendances américaines" + , "Islas menores de Estados Unidos", "合衆国領有小離島", "Kleine afgelegen eilanden van de Verenigde Staten", "美国本土外小岛屿" + ], Timezones = ["Pacific/Midway,-1100", "Pacific/Wake,+1200"] + )] [ResourceDescription(nameof(Ln.美国本土外小岛屿))] UM = 581 - , + , /// /// 美国 /// - [CountryInfo(Mcc = ["310", "311", "312", "313", "314", "315", "316"], CallingCode = 1, Alpha3 = "USA", ShortName = "United States of America" - , LongName = "The United States of America", CurrencyCode = "USD", Languages = ["en"] - , UnofficialNames = [ - "United States", "USA", "Vereinigte Staaten von Amerika", "États-Unis", "Estados Unidos", "アメリカ合衆国", "Verenigde Staten" - , "Соединенные Штаты Америки", "美国" - ], IsPreferred = true - , Timezones = [ - "America/Adak,-1000", "America/Anchorage,-0900", "America/Boise,-0700", "America/Chicago,-0600", "America/Denver,-0700" - , "America/Detroit,-0500", "America/Indiana/Indianapolis,-0500", "America/Indiana/Knox,-0600", "America/Indiana/Marengo,-0500" - , "America/Indiana/Petersburg,-0500", "America/Indiana/Tell_City,-0600", "America/Indiana/Vevay,-0500" - , "America/Indiana/Vincennes,-0500", "America/Indiana/Winamac,-0500", "America/Juneau,-0900", "America/Kentucky/Louisville,-0500" - , "America/Kentucky/Monticello,-0500", "America/Los_Angeles,-0800", "America/Menominee,-0600", "America/Metlakatla,-0900" - , "America/New_York,-0500", "America/Nome,-0900", "America/North_Dakota/Beulah,-0600", "America/North_Dakota/Center,-0600" - , "America/North_Dakota/New_Salem,-0600", "America/Phoenix,-0700", "America/Sitka,-0900", "America/Yakutat,-0900" - , "Pacific/Honolulu,-1000" - ])] + [CountryInfo( + Mcc = ["310", "311", "312", "313", "314", "315", "316"], CallingCode = 1, Alpha3 = "USA", ShortName = "United States of America" + , LongName = "The United States of America", CurrencyCode = "USD", Languages = ["en"] + , UnofficialNames = + [ + "United States", "USA", "Vereinigte Staaten von Amerika", "États-Unis", "Estados Unidos", "アメリカ合衆国", "Verenigde Staten" + , "Соединенные Штаты Америки", "美国" + ], IsPreferred = true + , Timezones = + [ + "America/Adak,-1000", "America/Anchorage,-0900", "America/Boise,-0700", "America/Chicago,-0600", "America/Denver,-0700" + , "America/Detroit,-0500", "America/Indiana/Indianapolis,-0500", "America/Indiana/Knox,-0600", "America/Indiana/Marengo,-0500" + , "America/Indiana/Petersburg,-0500", "America/Indiana/Tell_City,-0600", "America/Indiana/Vevay,-0500" + , "America/Indiana/Vincennes,-0500", "America/Indiana/Winamac,-0500", "America/Juneau,-0900", "America/Kentucky/Louisville,-0500" + , "America/Kentucky/Monticello,-0500", "America/Los_Angeles,-0800", "America/Menominee,-0600", "America/Metlakatla,-0900" + , "America/New_York,-0500", "America/Nome,-0900", "America/North_Dakota/Beulah,-0600", "America/North_Dakota/Center,-0600" + , "America/North_Dakota/New_Salem,-0600", "America/Phoenix,-0700", "America/Sitka,-0900", "America/Yakutat,-0900" + , "Pacific/Honolulu,-1000" + ] + )] [ResourceDescription(nameof(Ln.美国))] US = 840 - , + , /// /// 哈萨克斯坦 /// - [CountryInfo(Mcc = ["401"], CallingCode = 7, CallingSubCode = ["6", "7"], Alpha3 = "KAZ", ShortName = "Kazakhstan" - , LongName = "The Republic of Kazakhstan", CurrencyCode = "KZT", Languages = ["kk", "ru"] - , UnofficialNames = ["Kazakhstan", "Kasachstan", "Kazajistán", "カザフスタン", "Kazachstan", "哈萨克斯坦"] - , Timezones = [ - "Asia/Almaty,+0500", "Asia/Aqtau,+0500", "Asia/Aqtobe,+0500", "Asia/Atyrau,+0500", "Asia/Oral,+0500", "Asia/Qostanay,+0500" - , "Asia/Qyzylorda,+0500" - ])] + [CountryInfo( + Mcc = ["401"], CallingCode = 7, CallingSubCode = ["6", "7"], Alpha3 = "KAZ", ShortName = "Kazakhstan", LongName = "The Republic of Kazakhstan" + , CurrencyCode = "KZT", Languages = ["kk", "ru"] + , UnofficialNames = ["Kazakhstan", "Kasachstan", "Kazajistán", "カザフスタン", "Kazachstan", "哈萨克斯坦"] + , Timezones = + [ + "Asia/Almaty,+0500", "Asia/Aqtau,+0500", "Asia/Aqtobe,+0500", "Asia/Atyrau,+0500", "Asia/Oral,+0500", "Asia/Qostanay,+0500" + , "Asia/Qyzylorda,+0500" + ] + )] [ResourceDescription(nameof(Ln.哈萨克斯坦))] KZ = 398 - , + , /// /// 俄罗斯 /// - [CountryInfo(Mcc = ["250"], CallingCode = 7, Alpha3 = "RUS", ShortName = "Russian Federation", LongName = "The Russian Federation" - , CurrencyCode = "RUB", Languages = ["ru"] - , UnofficialNames = ["Russia", "Russland", "Russie", "Rusia", "ロシア連邦", "Rusland", "Россия", "Расія", "俄罗斯"], IsPreferred = true - , Timezones = [ - "Asia/Anadyr,+1200", "Asia/Barnaul,+0700", "Asia/Chita,+0900", "Asia/Irkutsk,+0800", "Asia/Kamchatka,+1200" - , "Asia/Khandyga,+0900", "Asia/Krasnoyarsk,+0700", "Asia/Magadan,+1100", "Asia/Novokuznetsk,+0700", "Asia/Novosibirsk,+0700" - , "Asia/Omsk,+0600", "Asia/Sakhalin,+1100", "Asia/Srednekolymsk,+1100", "Asia/Tomsk,+0700", "Asia/Ust-Nera,+1000" - , "Asia/Vladivostok,+1000", "Asia/Yakutsk,+0900", "Asia/Yekaterinburg,+0500", "Europe/Astrakhan,+0400", "Europe/Kaliningrad,+0200" - , "Europe/Kirov,+0300", "Europe/Moscow,+0300", "Europe/Samara,+0400", "Europe/Saratov,+0400", "Europe/Ulyanovsk,+0400" - , "Europe/Volgograd,+0300" - ])] + [CountryInfo( + Mcc = ["250"], CallingCode = 7, Alpha3 = "RUS", ShortName = "Russian Federation", LongName = "The Russian Federation", CurrencyCode = "RUB" + , Languages = ["ru"], UnofficialNames = ["Russia", "Russland", "Russie", "Rusia", "ロシア連邦", "Rusland", "Россия", "Расія", "俄罗斯"] + , IsPreferred = true + , Timezones = + [ + "Asia/Anadyr,+1200", "Asia/Barnaul,+0700", "Asia/Chita,+0900", "Asia/Irkutsk,+0800", "Asia/Kamchatka,+1200", "Asia/Khandyga,+0900" + , "Asia/Krasnoyarsk,+0700", "Asia/Magadan,+1100", "Asia/Novokuznetsk,+0700", "Asia/Novosibirsk,+0700", "Asia/Omsk,+0600" + , "Asia/Sakhalin,+1100", "Asia/Srednekolymsk,+1100", "Asia/Tomsk,+0700", "Asia/Ust-Nera,+1000", "Asia/Vladivostok,+1000" + , "Asia/Yakutsk,+0900", "Asia/Yekaterinburg,+0500", "Europe/Astrakhan,+0400", "Europe/Kaliningrad,+0200", "Europe/Kirov,+0300" + , "Europe/Moscow,+0300", "Europe/Samara,+0400", "Europe/Saratov,+0400", "Europe/Ulyanovsk,+0400", "Europe/Volgograd,+0300" + ] + )] [ResourceDescription(nameof(Ln.俄罗斯))] RU = 643 - , + , /// /// 埃及 /// - [CountryInfo(Mcc = ["602"], CallingCode = 20, Alpha3 = "EGY", ShortName = "Egypt", LongName = "The Arab Republic of Egypt", CurrencyCode = "EGP" - , Languages = ["ar"], UnofficialNames = ["Egypt", "مصر", "Ägypten", "Égypte", "Egipto", "エジプト", "Egypte", "埃及"] - , Timezones = ["Africa/Cairo,+0200"])] + [CountryInfo( + Mcc = ["602"], CallingCode = 20, Alpha3 = "EGY", ShortName = "Egypt", LongName = "The Arab Republic of Egypt", CurrencyCode = "EGP" + , Languages = ["ar"], UnofficialNames = ["Egypt", "مصر", "Ägypten", "Égypte", "Egipto", "エジプト", "Egypte", "埃及"] + , Timezones = ["Africa/Cairo,+0200"] + )] [ResourceDescription(nameof(Ln.埃及))] EG = 818 - , + , /// /// 南非 /// - [CountryInfo(Mcc = ["655"], CallingCode = 27, Alpha3 = "ZAF", ShortName = "South Africa", LongName = "The Republic of South Africa" - , CurrencyCode = "ZAR", Languages = ["af", "en", "nr", "st", "ss", "tn", "ts", "ve", "xh", "zu"] - , UnofficialNames = ["South Africa", "Republik Südafrika", "Afrique du Sud", "República de Sudáfrica", "南アフリカ", "Zuid-Afrika", "南非"] - , Timezones = ["Africa/Johannesburg,+0200"])] + [CountryInfo( + Mcc = ["655"], CallingCode = 27, Alpha3 = "ZAF", ShortName = "South Africa", LongName = "The Republic of South Africa", CurrencyCode = "ZAR" + , Languages = ["af", "en", "nr", "st", "ss", "tn", "ts", "ve", "xh", "zu"] + , UnofficialNames = ["South Africa", "Republik Südafrika", "Afrique du Sud", "República de Sudáfrica", "南アフリカ", "Zuid-Afrika", "南非"] + , Timezones = ["Africa/Johannesburg,+0200"] + )] [ResourceDescription(nameof(Ln.南非))] ZA = 710 - , + , /// /// 希腊 /// - [CountryInfo(Mcc = ["202"], CallingCode = 30, Alpha3 = "GRC", ShortName = "Greece", LongName = "The Hellenic Republic", CurrencyCode = "EUR" - , Languages = ["el"], UnofficialNames = ["Greece", "Griechenland", "Grèce", "Grecia", "ギリシャ", "Griekenland", "希腊"] - , Timezones = ["Europe/Athens,+0200"])] + [CountryInfo( + Mcc = ["202"], CallingCode = 30, Alpha3 = "GRC", ShortName = "Greece", LongName = "The Hellenic Republic", CurrencyCode = "EUR" + , Languages = ["el"], UnofficialNames = ["Greece", "Griechenland", "Grèce", "Grecia", "ギリシャ", "Griekenland", "希腊"] + , Timezones = ["Europe/Athens,+0200"] + )] [ResourceDescription(nameof(Ln.希腊))] GR = 300 - , + , /// /// 荷兰 /// - [CountryInfo(Mcc = ["204"], CallingCode = 31, Alpha3 = "NLD", ShortName = "Netherlands", LongName = "The Kingdom of the Netherlands" - , CurrencyCode = "EUR", Languages = ["nl", "fy"] - , UnofficialNames = [ - "Netherlands", "The Netherlands", "Niederlande", "Pays-Bas", "Países Bajos", "オランダ", "Nederland", "Нидерландия", "荷兰" - ], Timezones = ["Europe/Amsterdam,+0100"])] + [CountryInfo( + Mcc = ["204"], CallingCode = 31, Alpha3 = "NLD", ShortName = "Netherlands", LongName = "The Kingdom of the Netherlands", CurrencyCode = "EUR" + , Languages = ["nl", "fy"] + , UnofficialNames = ["Netherlands", "The Netherlands", "Niederlande", "Pays-Bas", "Países Bajos", "オランダ", "Nederland", "Нидерландия", "荷兰"] + , Timezones = ["Europe/Amsterdam,+0100"] + )] [ResourceDescription(nameof(Ln.荷兰))] NL = 528 - , + , /// /// 比利时 /// - [CountryInfo(Mcc = ["206"], CallingCode = 32, Alpha3 = "BEL", ShortName = "Belgium", LongName = "The Kingdom of Belgium", CurrencyCode = "EUR" - , Languages = ["nl", "fr", "de"], UnofficialNames = ["Belgium", "Belgien", "Belgique", "Bélgica", "ベルギー", "België", "比利时"] - , Timezones = ["Europe/Brussels,+0100"])] + [CountryInfo( + Mcc = ["206"], CallingCode = 32, Alpha3 = "BEL", ShortName = "Belgium", LongName = "The Kingdom of Belgium", CurrencyCode = "EUR" + , Languages = ["nl", "fr", "de"], UnofficialNames = ["Belgium", "Belgien", "Belgique", "Bélgica", "ベルギー", "België", "比利时"] + , Timezones = ["Europe/Brussels,+0100"] + )] [ResourceDescription(nameof(Ln.比利时))] BE = 056 - , + , /// /// 法国 /// - [CountryInfo(Mcc = ["208"], CallingCode = 33, Alpha3 = "FRA", ShortName = "France", LongName = "The French Republic", CurrencyCode = "EUR" - , Languages = ["fr"], UnofficialNames = ["France", "Frankreich", "the French Republic", "フランス", "Frankrijk", "Francia", "法国"] - , Timezones = ["Europe/Paris,+0100"])] + [CountryInfo( + Mcc = ["208"], CallingCode = 33, Alpha3 = "FRA", ShortName = "France", LongName = "The French Republic", CurrencyCode = "EUR" + , Languages = ["fr"], UnofficialNames = ["France", "Frankreich", "the French Republic", "フランス", "Frankrijk", "Francia", "法国"] + , Timezones = ["Europe/Paris,+0100"] + )] [ResourceDescription(nameof(Ln.法国))] FR = 250 - , + , /// /// 西班牙 /// - [CountryInfo(Mcc = ["214"], CallingCode = 34, Alpha3 = "ESP", ShortName = "Spain", LongName = "The Kingdom of Spain", CurrencyCode = "EUR" - , Languages = ["es"], UnofficialNames = ["Spain", "Spanien", "Espagne", "España", "スペイン", "Spanje", "西班牙"] - , Timezones = ["Africa/Ceuta,+0100", "Atlantic/Canary,+0000", "Europe/Madrid,+0100"])] + [CountryInfo( + Mcc = ["214"], CallingCode = 34, Alpha3 = "ESP", ShortName = "Spain", LongName = "The Kingdom of Spain", CurrencyCode = "EUR" + , Languages = ["es"], UnofficialNames = ["Spain", "Spanien", "Espagne", "España", "スペイン", "Spanje", "西班牙"] + , Timezones = ["Africa/Ceuta,+0100", "Atlantic/Canary,+0000", "Europe/Madrid,+0100"] + )] [ResourceDescription(nameof(Ln.西班牙))] ES = 724 - , + , /// /// 匈牙利 /// - [CountryInfo(Mcc = ["216"], CallingCode = 36, Alpha3 = "HUN", ShortName = "Hungary", LongName = "Hungary", CurrencyCode = "HUF" - , Languages = ["hu"], UnofficialNames = ["Hungary", "Ungarn", "Hongrie", "Hungría", "ハンガリー", "Hongarije", "匈牙利"] - , Timezones = ["Europe/Budapest,+0100"])] + [CountryInfo( + Mcc = ["216"], CallingCode = 36, Alpha3 = "HUN", ShortName = "Hungary", LongName = "Hungary", CurrencyCode = "HUF", Languages = ["hu"] + , UnofficialNames = ["Hungary", "Ungarn", "Hongrie", "Hungría", "ハンガリー", "Hongarije", "匈牙利"], Timezones = ["Europe/Budapest,+0100"] + )] [ResourceDescription(nameof(Ln.匈牙利))] HU = 348 - , + , /// /// 意大利 /// - [CountryInfo(Mcc = ["222"], CallingCode = 39, Alpha3 = "ITA", ShortName = "Italy", LongName = "The Italian Republic", CurrencyCode = "EUR" - , Languages = ["it"], UnofficialNames = ["Italy", "Italien", "Italie", "Italia", "イタリア", "Italië", "意大利"], IsPreferred = true - , Timezones = ["Europe/Rome,+0100"])] + [CountryInfo( + Mcc = ["222"], CallingCode = 39, Alpha3 = "ITA", ShortName = "Italy", LongName = "The Italian Republic", CurrencyCode = "EUR" + , Languages = ["it"], UnofficialNames = ["Italy", "Italien", "Italie", "Italia", "イタリア", "Italië", "意大利"], IsPreferred = true + , Timezones = ["Europe/Rome,+0100"] + )] [ResourceDescription(nameof(Ln.意大利))] IT = 380 - , + , /// /// 罗马尼亚 /// - [CountryInfo(Mcc = ["226"], CallingCode = 40, Alpha3 = "ROU", ShortName = "Romania", LongName = "Romania", CurrencyCode = "RON" - , Languages = ["ro"], UnofficialNames = ["Romania", "Rumänien", "Roumanie", "Rumania", "ルーマニア", "Roemenië", "罗马尼亚"] - , Timezones = ["Europe/Bucharest,+0200"])] + [CountryInfo( + Mcc = ["226"], CallingCode = 40, Alpha3 = "ROU", ShortName = "Romania", LongName = "Romania", CurrencyCode = "RON", Languages = ["ro"] + , UnofficialNames = ["Romania", "Rumänien", "Roumanie", "Rumania", "ルーマニア", "Roemenië", "罗马尼亚"], Timezones = ["Europe/Bucharest,+0200"] + )] [ResourceDescription(nameof(Ln.罗马尼亚))] RO = 642 - , + , /// /// 瑞士 /// - [CountryInfo(Mcc = ["228"], CallingCode = 41, Alpha3 = "CHE", ShortName = "Switzerland", LongName = "The Swiss Confederation" - , CurrencyCode = "CHF", Languages = ["de", "fr", "it"] - , UnofficialNames = ["Switzerland", "Schweiz", "Suisse", "Suiza", "スイス", "Zwitserland", "瑞士"], Timezones = ["Europe/Zurich,+0100"])] + [CountryInfo( + Mcc = ["228"], CallingCode = 41, Alpha3 = "CHE", ShortName = "Switzerland", LongName = "The Swiss Confederation", CurrencyCode = "CHF" + , Languages = ["de", "fr", "it"], UnofficialNames = ["Switzerland", "Schweiz", "Suisse", "Suiza", "スイス", "Zwitserland", "瑞士"] + , Timezones = ["Europe/Zurich,+0100"] + )] [ResourceDescription(nameof(Ln.瑞士))] CH = 756 - , + , /// /// 奥地利 /// - [CountryInfo(Mcc = ["232"], CallingCode = 43, Alpha3 = "AUT", ShortName = "Austria", LongName = "The Republic of Austria", CurrencyCode = "EUR" - , Languages = ["de"], UnofficialNames = ["Austria", "Österreich", "Autriche", "オーストリア", "Oostenrijk", "奥地利"] - , Timezones = ["Europe/Vienna,+0100"])] + [CountryInfo( + Mcc = ["232"], CallingCode = 43, Alpha3 = "AUT", ShortName = "Austria", LongName = "The Republic of Austria", CurrencyCode = "EUR" + , Languages = ["de"], UnofficialNames = ["Austria", "Österreich", "Autriche", "オーストリア", "Oostenrijk", "奥地利"] + , Timezones = ["Europe/Vienna,+0100"] + )] [ResourceDescription(nameof(Ln.奥地利))] AT = 040 - , + , /// /// 英国 /// - [CountryInfo(Mcc = ["235"], CallingCode = 44, Alpha3 = "GBR", ShortName = "United Kingdom of Great Britain and Northern Ireland" - , LongName = "The United Kingdom of Great Britain and Northern Ireland", CurrencyCode = "GBP", Languages = ["en"] - , UnofficialNames = [ - "United Kingdom", "The United Kingdom", "England", "Großbritannien", "Vereinigtes Königreich", "Royaume-Uni", "Reino Unido" - , "イギリス", "Verenigd Koninkrijk", "Great Britain (UK)", "UK", "Великобритания", "Velká Británie", "İngiltere", "Великобританія" - , "英国" - ], IsPreferred = true, Timezones = ["Europe/London,+0000"])] + [CountryInfo( + Mcc = ["235"], CallingCode = 44, Alpha3 = "GBR", ShortName = "United Kingdom of Great Britain and Northern Ireland" + , LongName = "The United Kingdom of Great Britain and Northern Ireland", CurrencyCode = "GBP", Languages = ["en"] + , UnofficialNames = + [ + "United Kingdom", "The United Kingdom", "England", "Großbritannien", "Vereinigtes Königreich", "Royaume-Uni", "Reino Unido", "イギリス" + , "Verenigd Koninkrijk", "Great Britain (UK)", "UK", "Великобритания", "Velká Británie", "İngiltere", "Великобританія", "英国" + ], IsPreferred = true, Timezones = ["Europe/London,+0000"] + )] [ResourceDescription(nameof(Ln.英国))] GB = 826 - , + , /// /// 根西 /// - [CountryInfo(Mcc = [], CallingCode = 44, CallingSubCode = ["1481"], Alpha3 = "GGY", ShortName = "Guernsey", LongName = "The Bailiwick of Guernsey" - , CurrencyCode = "GBP", Languages = ["en", "fr"] - , UnofficialNames = [ - "Guernsey and Alderney", "Guernsey und Alderney", "Guernsey et Alderney", "Guernsey y Alderney", "ガーンジー", "Guernsey", "根西" - ], Timezones = ["Europe/Guernsey,+0000"])] + [CountryInfo( + Mcc = [], CallingCode = 44, CallingSubCode = ["1481"], Alpha3 = "GGY", ShortName = "Guernsey", LongName = "The Bailiwick of Guernsey" + , CurrencyCode = "GBP", Languages = ["en", "fr"] + , UnofficialNames = + [ + "Guernsey and Alderney", "Guernsey und Alderney", "Guernsey et Alderney", "Guernsey y Alderney", "ガーンジー", "Guernsey", "根西" + ], Timezones = ["Europe/Guernsey,+0000"] + )] [ResourceDescription(nameof(Ln.根西))] GG = 831 - , + , /// /// 马恩岛 /// - [CountryInfo(Mcc = [], CallingCode = 44, CallingSubCode = ["1624"], Alpha3 = "IMN", ShortName = "Isle of Man", LongName = "The Isle of Man" - , CurrencyCode = "GBP", Languages = ["en", "gv"] - , UnofficialNames = ["Isle of Man", "Insel Man", "Île de Man", "Isla de Man", "マン島", "马恩岛"], Timezones = ["Europe/Isle_of_Man,+0000"])] + [CountryInfo( + Mcc = [], CallingCode = 44, CallingSubCode = ["1624"], Alpha3 = "IMN", ShortName = "Isle of Man", LongName = "The Isle of Man" + , CurrencyCode = "GBP", Languages = ["en", "gv"], UnofficialNames = ["Isle of Man", "Insel Man", "Île de Man", "Isla de Man", "マン島", "马恩岛"] + , Timezones = ["Europe/Isle_of_Man,+0000"] + )] [ResourceDescription(nameof(Ln.马恩岛))] IM = 833 - , + , /// /// 泽西 /// - [CountryInfo(Mcc = ["234"], CallingCode = 44, CallingSubCode = ["1534"], Alpha3 = "JEY", ShortName = "Jersey" - , LongName = "The Bailiwick of Jersey", CurrencyCode = "GBP", Languages = ["en", "fr"], UnofficialNames = ["Jersey", "ジャージー", "泽西"] - , Timezones = ["Europe/Jersey,+0000"])] + [CountryInfo( + Mcc = ["234"], CallingCode = 44, CallingSubCode = ["1534"], Alpha3 = "JEY", ShortName = "Jersey", LongName = "The Bailiwick of Jersey" + , CurrencyCode = "GBP", Languages = ["en", "fr"], UnofficialNames = ["Jersey", "ジャージー", "泽西"], Timezones = ["Europe/Jersey,+0000"] + )] [ResourceDescription(nameof(Ln.泽西))] JE = 832 - , + , /// /// 丹麦 /// - [CountryInfo(Mcc = ["238"], CallingCode = 45, Alpha3 = "DNK", ShortName = "Denmark", LongName = "The Kingdom of Denmark", CurrencyCode = "DKK" - , Languages = ["da"], UnofficialNames = ["Denmark", "Dänemark", "Danemark", "Dinamarca", "デンマーク", "Denemarken", "丹麦"] - , Timezones = ["Europe/Copenhagen,+0100"])] + [CountryInfo( + Mcc = ["238"], CallingCode = 45, Alpha3 = "DNK", ShortName = "Denmark", LongName = "The Kingdom of Denmark", CurrencyCode = "DKK" + , Languages = ["da"], UnofficialNames = ["Denmark", "Dänemark", "Danemark", "Dinamarca", "デンマーク", "Denemarken", "丹麦"] + , Timezones = ["Europe/Copenhagen,+0100"] + )] [ResourceDescription(nameof(Ln.丹麦))] DK = 208 - , + , /// /// 瑞典 /// - [CountryInfo(Mcc = ["240"], CallingCode = 46, Alpha3 = "SWE", ShortName = "Sweden", LongName = "The Kingdom of Sweden", CurrencyCode = "SEK" - , Languages = ["sv"], UnofficialNames = ["Sweden", "Schweden", "Suède", "Suecia", "スウェーデン", "Zweden", "瑞典"] - , Timezones = ["Europe/Stockholm,+0100"])] + [CountryInfo( + Mcc = ["240"], CallingCode = 46, Alpha3 = "SWE", ShortName = "Sweden", LongName = "The Kingdom of Sweden", CurrencyCode = "SEK" + , Languages = ["sv"], UnofficialNames = ["Sweden", "Schweden", "Suède", "Suecia", "スウェーデン", "Zweden", "瑞典"] + , Timezones = ["Europe/Stockholm,+0100"] + )] [ResourceDescription(nameof(Ln.瑞典))] SE = 752 - , + , /// /// 斯瓦尔巴和扬马延 /// - [CountryInfo(Mcc = [], CallingCode = 47, CallingSubCode = ["79"], Alpha3 = "SJM", ShortName = "Svalbard and Jan Mayen" - , LongName = "Svalbard and Jan Mayen", CurrencyCode = "NOK", Languages = ["no"] - , UnofficialNames = [ - "Svalbard and Jan Mayen", "Svalbard und Jan Mayen", "Îles Svalbard et Jan Mayen", "Islas Svalbard y Jan Mayen" - , "スヴァールバル諸島およびヤンマイエン島", "Svalbard en Jan Mayen", "斯瓦尔巴和扬马延" - ], Timezones = ["Arctic/Longyearbyen,+0100"])] + [CountryInfo( + Mcc = [], CallingCode = 47, CallingSubCode = ["79"], Alpha3 = "SJM", ShortName = "Svalbard and Jan Mayen", LongName = "Svalbard and Jan Mayen" + , CurrencyCode = "NOK", Languages = ["no"] + , UnofficialNames = + [ + "Svalbard and Jan Mayen", "Svalbard und Jan Mayen", "Îles Svalbard et Jan Mayen", "Islas Svalbard y Jan Mayen", "スヴァールバル諸島およびヤンマイエン島" + , "Svalbard en Jan Mayen", "斯瓦尔巴和扬马延" + ], Timezones = ["Arctic/Longyearbyen,+0100"] + )] [ResourceDescription(nameof(Ln.斯瓦尔巴和扬马延))] SJ = 744 - , + , /// /// 布韦岛 /// - [CountryInfo(Mcc = [], CallingCode = 47, Alpha3 = "BVT", ShortName = "Bouvet Island", LongName = "Bouvet Island", CurrencyCode = "NOK" - , Languages = [], UnofficialNames = ["Bouvet Island", "Bouvetinsel", "ブーベ島", "Bouveteiland", "布韦岛"])] + [CountryInfo( + Mcc = [], CallingCode = 47, Alpha3 = "BVT", ShortName = "Bouvet Island", LongName = "Bouvet Island", CurrencyCode = "NOK", Languages = [] + , UnofficialNames = ["Bouvet Island", "Bouvetinsel", "ブーベ島", "Bouveteiland", "布韦岛"] + )] [ResourceDescription(nameof(Ln.布韦岛))] BV = 074 - , + , /// /// 挪威 /// - [CountryInfo(Mcc = ["242"], CallingCode = 47, Alpha3 = "NOR", ShortName = "Norway", LongName = "The Kingdom of Norway", CurrencyCode = "NOK" - , Languages = ["nb", "nn"], UnofficialNames = ["Norway", "Norwegen", "Norvège", "Noruega", "ノルウェー", "Noorwegen", "挪威"] - , IsPreferred = true, Timezones = ["Europe/Oslo,+0100"])] + [CountryInfo( + Mcc = ["242"], CallingCode = 47, Alpha3 = "NOR", ShortName = "Norway", LongName = "The Kingdom of Norway", CurrencyCode = "NOK" + , Languages = ["nb", "nn"], UnofficialNames = ["Norway", "Norwegen", "Norvège", "Noruega", "ノルウェー", "Noorwegen", "挪威"], IsPreferred = true + , Timezones = ["Europe/Oslo,+0100"] + )] [ResourceDescription(nameof(Ln.挪威))] NO = 578 - , + , /// /// 波兰 /// - [CountryInfo(Mcc = ["260"], CallingCode = 48, Alpha3 = "POL", ShortName = "Poland", LongName = "The Republic of Poland", CurrencyCode = "PLN" - , Languages = ["pl"], UnofficialNames = ["Poland", "Polen", "Pologne", "Polonia", "ポーランド", "波兰"], Timezones = ["Europe/Warsaw,+0100"])] + [CountryInfo( + Mcc = ["260"], CallingCode = 48, Alpha3 = "POL", ShortName = "Poland", LongName = "The Republic of Poland", CurrencyCode = "PLN" + , Languages = ["pl"], UnofficialNames = ["Poland", "Polen", "Pologne", "Polonia", "ポーランド", "波兰"], Timezones = ["Europe/Warsaw,+0100"] + )] [ResourceDescription(nameof(Ln.波兰))] PL = 616 - , + , /// /// 德国 /// - [CountryInfo(Mcc = ["262"], CallingCode = 49, Alpha3 = "DEU", ShortName = "Germany", LongName = "The Federal Republic of Germany" - , CurrencyCode = "EUR", Languages = ["de"] - , UnofficialNames = ["Germany", "Deutschland", "Allemagne", "Alemania", "ドイツ", "Duitsland", "德国"] - , Timezones = ["Europe/Berlin,+0100", "Europe/Busingen,+0100"])] + [CountryInfo( + Mcc = ["262"], CallingCode = 49, Alpha3 = "DEU", ShortName = "Germany", LongName = "The Federal Republic of Germany", CurrencyCode = "EUR" + , Languages = ["de"], UnofficialNames = ["Germany", "Deutschland", "Allemagne", "Alemania", "ドイツ", "Duitsland", "德国"] + , Timezones = ["Europe/Berlin,+0100", "Europe/Busingen,+0100"] + )] [ResourceDescription(nameof(Ln.德国))] DE = 276 - , + , /// /// 秘鲁 /// - [CountryInfo(Mcc = ["716"], CallingCode = 51, Alpha3 = "PER", ShortName = "Peru", LongName = "The Republic of Perú", CurrencyCode = "PEN" - , Languages = ["es"], UnofficialNames = ["Peru", "Pérou", "Perú", "ペルー", "秘鲁"], Timezones = ["America/Lima,-0500"])] + [CountryInfo( + Mcc = ["716"], CallingCode = 51, Alpha3 = "PER", ShortName = "Peru", LongName = "The Republic of Perú", CurrencyCode = "PEN" + , Languages = ["es"], UnofficialNames = ["Peru", "Pérou", "Perú", "ペルー", "秘鲁"], Timezones = ["America/Lima,-0500"] + )] [ResourceDescription(nameof(Ln.秘鲁))] PE = 604 - , + , /// /// 墨西哥 /// - [CountryInfo(Mcc = ["334"], CallingCode = 52, Alpha3 = "MEX", ShortName = "Mexico", LongName = "The United Mexican States", CurrencyCode = "MXN" - , Languages = ["es"], UnofficialNames = ["Mexico", "Mexiko", "Mexique", "México", "メキシコ", "墨西哥"] - , Timezones = [ - "America/Bahia_Banderas,-0600", "America/Cancun,-0500", "America/Chihuahua,-0600", "America/Ciudad_Juarez,-0700" - , "America/Hermosillo,-0700", "America/Matamoros,-0600", "America/Mazatlan,-0700", "America/Merida,-0600" - , "America/Mexico_City,-0600", "America/Monterrey,-0600", "America/Ojinaga,-0600", "America/Tijuana,-0800" - ])] + [CountryInfo( + Mcc = ["334"], CallingCode = 52, Alpha3 = "MEX", ShortName = "Mexico", LongName = "The United Mexican States", CurrencyCode = "MXN" + , Languages = ["es"], UnofficialNames = ["Mexico", "Mexiko", "Mexique", "México", "メキシコ", "墨西哥"] + , Timezones = + [ + "America/Bahia_Banderas,-0600", "America/Cancun,-0500", "America/Chihuahua,-0600", "America/Ciudad_Juarez,-0700" + , "America/Hermosillo,-0700", "America/Matamoros,-0600", "America/Mazatlan,-0700", "America/Merida,-0600", "America/Mexico_City,-0600" + , "America/Monterrey,-0600", "America/Ojinaga,-0600", "America/Tijuana,-0800" + ] + )] [ResourceDescription(nameof(Ln.墨西哥))] MX = 484 - , + , /// /// 古巴 /// - [CountryInfo(Mcc = ["368"], CallingCode = 53, Alpha3 = "CUB", ShortName = "Cuba", LongName = "The Republic of Cuba", CurrencyCode = "CUP" - , Languages = ["es"], UnofficialNames = ["Cuba", "Kuba", "キューバ", "古巴"], Timezones = ["America/Havana,-0500"])] + [CountryInfo( + Mcc = ["368"], CallingCode = 53, Alpha3 = "CUB", ShortName = "Cuba", LongName = "The Republic of Cuba", CurrencyCode = "CUP" + , Languages = ["es"], UnofficialNames = ["Cuba", "Kuba", "キューバ", "古巴"], Timezones = ["America/Havana,-0500"] + )] [ResourceDescription(nameof(Ln.古巴))] CU = 192 - , + , /// /// 阿根廷 /// - [CountryInfo(Mcc = ["722"], CallingCode = 54, Alpha3 = "ARG", ShortName = "Argentina", LongName = "The Argentine Republic", CurrencyCode = "ARS" - , Languages = ["es", "gn"], UnofficialNames = ["Argentina", "Argentinien", "Argentine", "アルゼンチン", "Argentinië", "阿根廷"] - , Timezones = [ - "America/Argentina/Buenos_Aires,-0300", "America/Argentina/Catamarca,-0300", "America/Argentina/Cordoba,-0300" - , "America/Argentina/Jujuy,-0300", "America/Argentina/La_Rioja,-0300", "America/Argentina/Mendoza,-0300" - , "America/Argentina/Rio_Gallegos,-0300", "America/Argentina/Salta,-0300", "America/Argentina/San_Juan,-0300" - , "America/Argentina/San_Luis,-0300", "America/Argentina/Tucuman,-0300", "America/Argentina/Ushuaia,-0300" - ])] + [CountryInfo( + Mcc = ["722"], CallingCode = 54, Alpha3 = "ARG", ShortName = "Argentina", LongName = "The Argentine Republic", CurrencyCode = "ARS" + , Languages = ["es", "gn"], UnofficialNames = ["Argentina", "Argentinien", "Argentine", "アルゼンチン", "Argentinië", "阿根廷"] + , Timezones = + [ + "America/Argentina/Buenos_Aires,-0300", "America/Argentina/Catamarca,-0300", "America/Argentina/Cordoba,-0300" + , "America/Argentina/Jujuy,-0300", "America/Argentina/La_Rioja,-0300", "America/Argentina/Mendoza,-0300" + , "America/Argentina/Rio_Gallegos,-0300", "America/Argentina/Salta,-0300", "America/Argentina/San_Juan,-0300" + , "America/Argentina/San_Luis,-0300", "America/Argentina/Tucuman,-0300", "America/Argentina/Ushuaia,-0300" + ] + )] [ResourceDescription(nameof(Ln.阿根廷))] AR = 032 - , + , /// /// 巴西 /// - [CountryInfo(Mcc = ["724"], CallingCode = 55, Alpha3 = "BRA", ShortName = "Brazil", LongName = "The Federative Republic of Brazil" - , CurrencyCode = "BRL", Languages = ["pt"], UnofficialNames = ["Brazil", "Brasilien", "Brésil", "Brasil", "ブラジル", "Brazilië", "巴西"] - , Timezones = [ - "America/Araguaina,-0300", "America/Bahia,-0300", "America/Belem,-0300", "America/Boa_Vista,-0400", "America/Campo_Grande,-0400" - , "America/Cuiaba,-0400", "America/Eirunepe,-0500", "America/Fortaleza,-0300", "America/Maceio,-0300", "America/Manaus,-0400" - , "America/Noronha,-0200", "America/Porto_Velho,-0400", "America/Recife,-0300", "America/Rio_Branco,-0500" - , "America/Santarem,-0300", "America/Sao_Paulo,-0300" - ])] + [CountryInfo( + Mcc = ["724"], CallingCode = 55, Alpha3 = "BRA", ShortName = "Brazil", LongName = "The Federative Republic of Brazil", CurrencyCode = "BRL" + , Languages = ["pt"], UnofficialNames = ["Brazil", "Brasilien", "Brésil", "Brasil", "ブラジル", "Brazilië", "巴西"] + , Timezones = + [ + "America/Araguaina,-0300", "America/Bahia,-0300", "America/Belem,-0300", "America/Boa_Vista,-0400", "America/Campo_Grande,-0400" + , "America/Cuiaba,-0400", "America/Eirunepe,-0500", "America/Fortaleza,-0300", "America/Maceio,-0300", "America/Manaus,-0400" + , "America/Noronha,-0200", "America/Porto_Velho,-0400", "America/Recife,-0300", "America/Rio_Branco,-0500", "America/Santarem,-0300" + , "America/Sao_Paulo,-0300" + ] + )] [ResourceDescription(nameof(Ln.巴西))] BR = 076 - , + , /// /// 智利 /// - [CountryInfo(Mcc = ["730"], CallingCode = 56, Alpha3 = "CHL", ShortName = "Chile", LongName = "The Republic of Chile", CurrencyCode = "CLP" - , Languages = ["es"], UnofficialNames = ["Chile", "チリ", "Chili", "智利"] - , Timezones = ["America/Punta_Arenas,-0300", "America/Santiago,-0300", "Pacific/Easter,-0500"])] + [CountryInfo( + Mcc = ["730"], CallingCode = 56, Alpha3 = "CHL", ShortName = "Chile", LongName = "The Republic of Chile", CurrencyCode = "CLP" + , Languages = ["es"], UnofficialNames = ["Chile", "チリ", "Chili", "智利"] + , Timezones = ["America/Punta_Arenas,-0300", "America/Santiago,-0300", "Pacific/Easter,-0500"] + )] [ResourceDescription(nameof(Ln.智利))] CL = 152 - , + , /// /// 哥伦比亚 /// - [CountryInfo(Mcc = ["732"], CallingCode = 57, Alpha3 = "COL", ShortName = "Colombia", LongName = "The Republic of Colombia", CurrencyCode = "COP" - , Languages = ["es"], UnofficialNames = ["Colombia", "Kolumbien", "Colombie", "コロンビア", "哥伦比亚"], Timezones = ["America/Bogota,-0500"])] + [CountryInfo( + Mcc = ["732"], CallingCode = 57, Alpha3 = "COL", ShortName = "Colombia", LongName = "The Republic of Colombia", CurrencyCode = "COP" + , Languages = ["es"], UnofficialNames = ["Colombia", "Kolumbien", "Colombie", "コロンビア", "哥伦比亚"], Timezones = ["America/Bogota,-0500"] + )] [ResourceDescription(nameof(Ln.哥伦比亚))] CO = 170 - , + , /// /// 委内瑞拉 /// - [CountryInfo(Mcc = ["734"], CallingCode = 58, Alpha3 = "VEN", ShortName = "Venezuela (Bolivarian Republic of)" - , LongName = "The Bolivarian Republic of Venezuela", CurrencyCode = "VES", Languages = ["es"] - , UnofficialNames = ["Venezuela", "ベネズエラ・ボリバル共和国", "委内瑞拉"], Timezones = ["America/Caracas,-0400"])] + [CountryInfo( + Mcc = ["734"], CallingCode = 58, Alpha3 = "VEN", ShortName = "Venezuela (Bolivarian Republic of)" + , LongName = "The Bolivarian Republic of Venezuela", CurrencyCode = "VES", Languages = ["es"] + , UnofficialNames = ["Venezuela", "ベネズエラ・ボリバル共和国", "委内瑞拉"], Timezones = ["America/Caracas,-0400"] + )] [ResourceDescription(nameof(Ln.委内瑞拉))] VE = 862 - , + , /// /// 马来西亚 /// - [CountryInfo(Mcc = ["502"], CallingCode = 60, Alpha3 = "MYS", ShortName = "Malaysia", LongName = "Malaysia", CurrencyCode = "MYR" - , Languages = ["ms", "en"], UnofficialNames = ["Malaysia", "Malaisie", "Malasia", "マレーシア", "Maleisië", "马来西亚"] - , Timezones = ["Asia/Kuala_Lumpur,+0800", "Asia/Kuching,+0800"])] + [CountryInfo( + Mcc = ["502"], CallingCode = 60, Alpha3 = "MYS", ShortName = "Malaysia", LongName = "Malaysia", CurrencyCode = "MYR", Languages = ["ms", "en"] + , UnofficialNames = ["Malaysia", "Malaisie", "Malasia", "マレーシア", "Maleisië", "马来西亚"] + , Timezones = ["Asia/Kuala_Lumpur,+0800", "Asia/Kuching,+0800"] + )] [ResourceDescription(nameof(Ln.马来西亚))] MY = 458 - , + , /// /// 澳大利亚 /// - [CountryInfo(Mcc = [], CallingCode = 61, Alpha3 = "AUS", ShortName = "Australia", LongName = "The Commonwealth of Australia", CurrencyCode = "AUD" - , Languages = ["en"], UnofficialNames = ["Australia", "Australien", "Australie", "オーストラリア", "Australië", "澳洲", "澳大利亚"] - , IsPreferred = true - , Timezones = [ - "Antarctica/Macquarie,+1100", "Australia/Adelaide,+1030", "Australia/Brisbane,+1000", "Australia/Broken_Hill,+1030" - , "Australia/Darwin,+0930", "Australia/Eucla,+0845", "Australia/Hobart,+1100", "Australia/Lindeman,+1000" - , "Australia/Lord_Howe,+1100", "Australia/Melbourne,+1100", "Australia/Perth,+0800", "Australia/Sydney,+1100" - ])] + [CountryInfo( + Mcc = [], CallingCode = 61, Alpha3 = "AUS", ShortName = "Australia", LongName = "The Commonwealth of Australia", CurrencyCode = "AUD" + , Languages = ["en"], UnofficialNames = ["Australia", "Australien", "Australie", "オーストラリア", "Australië", "澳洲", "澳大利亚"], IsPreferred = true + , Timezones = + [ + "Antarctica/Macquarie,+1100", "Australia/Adelaide,+1030", "Australia/Brisbane,+1000", "Australia/Broken_Hill,+1030" + , "Australia/Darwin,+0930", "Australia/Eucla,+0845", "Australia/Hobart,+1100", "Australia/Lindeman,+1000", "Australia/Lord_Howe,+1100" + , "Australia/Melbourne,+1100", "Australia/Perth,+0800", "Australia/Sydney,+1100" + ] + )] [ResourceDescription(nameof(Ln.澳大利亚))] AU = 036 - , + , /// /// 科科斯基林群岛 /// - [CountryInfo(Mcc = [], CallingCode = 61, CallingSubCode = ["89162"], Alpha3 = "CCK", ShortName = "Cocos (Keeling) Islands" - , LongName = "The Territory of Cocos (Keeling) Islands", CurrencyCode = "AUD", Languages = ["en"] - , UnofficialNames = ["Cocos (Keeling) Islands", "Kokosinseln", "ココス(キーリング)諸島", "Cocoseilanden", "科科斯基林群岛"] - , Timezones = ["Indian/Cocos,+0630"])] + [CountryInfo( + Mcc = [], CallingCode = 61, CallingSubCode = ["89162"], Alpha3 = "CCK", ShortName = "Cocos (Keeling) Islands" + , LongName = "The Territory of Cocos (Keeling) Islands", CurrencyCode = "AUD", Languages = ["en"] + , UnofficialNames = ["Cocos (Keeling) Islands", "Kokosinseln", "ココス(キーリング)諸島", "Cocoseilanden", "科科斯基林群岛"], Timezones = ["Indian/Cocos,+0630"] + )] [ResourceDescription(nameof(Ln.科科斯基林群岛))] CC = 166 - , + , /// /// 圣诞岛 /// - [CountryInfo(Mcc = [], CallingCode = 61, CallingSubCode = ["89164"], Alpha3 = "CXR", ShortName = "Christmas Island" - , LongName = "The Territory of Christmas Island", CurrencyCode = "AUD", Languages = ["en", "zh", "ms"] - , UnofficialNames = ["Christmas Island", "Weihnachtsinsel", "クリスマス島", "Christmaseiland", "圣诞岛"] - , Timezones = ["Indian/Christmas,+0700"])] + [CountryInfo( + Mcc = [], CallingCode = 61, CallingSubCode = ["89164"], Alpha3 = "CXR", ShortName = "Christmas Island" + , LongName = "The Territory of Christmas Island", CurrencyCode = "AUD", Languages = ["en", "zh", "ms"] + , UnofficialNames = ["Christmas Island", "Weihnachtsinsel", "クリスマス島", "Christmaseiland", "圣诞岛"], Timezones = ["Indian/Christmas,+0700"] + )] [ResourceDescription(nameof(Ln.圣诞岛))] CX = 162 - , + , /// /// 赫德岛和麦克唐纳群岛 /// - [CountryInfo(Mcc = [], CallingCode = 672, CallingSubCode = ["1"], Alpha3 = "HMD", ShortName = "Heard Island and McDonald Islands" - , LongName = "The Territory of Heard Island and McDonald Islands", CurrencyCode = "AUD", Languages = ["en"] - , UnofficialNames = [ - "Heard and McDonald Islands", "Heard und die McDonaldinseln", "ハード島とマクドナルド諸島", "Heard- en McDonaldeilanden" - , "Heard Island and McDonald Islands", "赫德岛和麦克唐纳群岛" - ])] + [CountryInfo( + Mcc = [], CallingCode = 672, CallingSubCode = ["1"], Alpha3 = "HMD", ShortName = "Heard Island and McDonald Islands" + , LongName = "The Territory of Heard Island and McDonald Islands", CurrencyCode = "AUD", Languages = ["en"] + , UnofficialNames = + [ + "Heard and McDonald Islands", "Heard und die McDonaldinseln", "ハード島とマクドナルド諸島", "Heard- en McDonaldeilanden" + , "Heard Island and McDonald Islands", "赫德岛和麦克唐纳群岛" + ] + )] [ResourceDescription(nameof(Ln.赫德岛和麦克唐纳群岛))] HM = 334 - , + , /// /// 印度尼西亚 /// - [CountryInfo(Mcc = ["510"], CallingCode = 62, Alpha3 = "IDN", ShortName = "Indonesia", LongName = "The Republic of Indonesia" - , CurrencyCode = "IDR", Languages = ["id"], UnofficialNames = ["Indonesia", "Indonesien", "Indonésie", "インドネシア", "Indonesië", "印度尼西亚"] - , Timezones = ["Asia/Jakarta,+0700", "Asia/Jayapura,+0900", "Asia/Makassar,+0800", "Asia/Pontianak,+0700"])] + [CountryInfo( + Mcc = ["510"], CallingCode = 62, Alpha3 = "IDN", ShortName = "Indonesia", LongName = "The Republic of Indonesia", CurrencyCode = "IDR" + , Languages = ["id"], UnofficialNames = ["Indonesia", "Indonesien", "Indonésie", "インドネシア", "Indonesië", "印度尼西亚"] + , Timezones = ["Asia/Jakarta,+0700", "Asia/Jayapura,+0900", "Asia/Makassar,+0800", "Asia/Pontianak,+0700"] + )] [ResourceDescription(nameof(Ln.印度尼西亚))] ID = 360 - , + , /// /// 菲律宾 /// - [CountryInfo(Mcc = ["515"], CallingCode = 63, Alpha3 = "PHL", ShortName = "Philippines", LongName = "The Republic of the Philippines" - , CurrencyCode = "PHP", Languages = ["tl", "en"] - , UnofficialNames = ["Philippines", "Philippinen", "Filipinas", "フィリピン", "Filipijnen", "菲律宾"], Timezones = ["Asia/Manila,+0800"])] + [CountryInfo( + Mcc = ["515"], CallingCode = 63, Alpha3 = "PHL", ShortName = "Philippines", LongName = "The Republic of the Philippines", CurrencyCode = "PHP" + , Languages = ["tl", "en"], UnofficialNames = ["Philippines", "Philippinen", "Filipinas", "フィリピン", "Filipijnen", "菲律宾"] + , Timezones = ["Asia/Manila,+0800"] + )] [ResourceDescription(nameof(Ln.菲律宾))] PH = 608 - , + , /// /// 新西兰 /// - [CountryInfo(Mcc = ["530"], CallingCode = 64, Alpha3 = "NZL", ShortName = "New Zealand", LongName = "New Zealand", CurrencyCode = "NZD" - , Languages = ["en"] - , UnofficialNames = ["New Zealand", "Neuseeland", "Nouvelle Zélande", "Nueva Zelanda", "ニュージーランド", "Nieuw-Zeeland", "新西兰"] - , IsPreferred = true, Timezones = ["Pacific/Auckland,+1300", "Pacific/Chatham,+1345"])] + [CountryInfo( + Mcc = ["530"], CallingCode = 64, Alpha3 = "NZL", ShortName = "New Zealand", LongName = "New Zealand", CurrencyCode = "NZD", Languages = ["en"] + , UnofficialNames = ["New Zealand", "Neuseeland", "Nouvelle Zélande", "Nueva Zelanda", "ニュージーランド", "Nieuw-Zeeland", "新西兰"], IsPreferred = true + , Timezones = ["Pacific/Auckland,+1300", "Pacific/Chatham,+1345"] + )] [ResourceDescription(nameof(Ln.新西兰))] NZ = 554 - , + , /// /// 皮特凯恩群岛 /// - [CountryInfo(Mcc = [], CallingCode = 64, Alpha3 = "PCN", ShortName = "Pitcairn", LongName = "The Pitcairn, Henderson, Ducie and Oeno Islands" - , CurrencyCode = "NZD", Languages = ["en"], UnofficialNames = ["Pitcairn", "ピトケアン", "Pitcairneilanden", "Pitcairn Islands", "皮特凯恩群岛"] - , Timezones = ["Pacific/Pitcairn,-0800"])] + [CountryInfo( + Mcc = [], CallingCode = 64, Alpha3 = "PCN", ShortName = "Pitcairn", LongName = "The Pitcairn, Henderson, Ducie and Oeno Islands" + , CurrencyCode = "NZD", Languages = ["en"], UnofficialNames = ["Pitcairn", "ピトケアン", "Pitcairneilanden", "Pitcairn Islands", "皮特凯恩群岛"] + , Timezones = ["Pacific/Pitcairn,-0800"] + )] [ResourceDescription(nameof(Ln.皮特凯恩群岛))] PN = 612 - , + , /// /// 新加坡 /// - [CountryInfo(Mcc = ["525"], CallingCode = 65, Alpha3 = "SGP", ShortName = "Singapore", LongName = "The Republic of Singapore" - , CurrencyCode = "SGD", Languages = ["en", "ms", "ta"], UnofficialNames = ["Singapore", "Singapur", "Singapour", "シンガポール", "新加坡"] - , Timezones = ["Asia/Singapore,+0800"])] + [CountryInfo( + Mcc = ["525"], CallingCode = 65, Alpha3 = "SGP", ShortName = "Singapore", LongName = "The Republic of Singapore", CurrencyCode = "SGD" + , Languages = ["en", "ms", "ta"], UnofficialNames = ["Singapore", "Singapur", "Singapour", "シンガポール", "新加坡"] + , Timezones = ["Asia/Singapore,+0800"] + )] [ResourceDescription(nameof(Ln.新加坡))] SG = 702 - , + , /// /// 泰国 /// - [CountryInfo(Mcc = ["520"], CallingCode = 66, Alpha3 = "THA", ShortName = "Thailand", LongName = "The Kingdom of Thailand", CurrencyCode = "THB" - , Languages = ["th"], UnofficialNames = ["Thailand", "Thaïlande", "Tailandia", "タイ", "ประเทศไทย", "泰国"] - , Timezones = ["Asia/Bangkok,+0700"])] + [CountryInfo( + Mcc = ["520"], CallingCode = 66, Alpha3 = "THA", ShortName = "Thailand", LongName = "The Kingdom of Thailand", CurrencyCode = "THB" + , Languages = ["th"], UnofficialNames = ["Thailand", "Thaïlande", "Tailandia", "タイ", "ประเทศไทย", "泰国"], Timezones = ["Asia/Bangkok,+0700"] + )] [ResourceDescription(nameof(Ln.泰国))] TH = 764 - , + , /// /// 日本 /// - [CountryInfo(Mcc = ["440", "441"], CallingCode = 81, Alpha3 = "JPN", ShortName = "Japan", LongName = "Japan", CurrencyCode = "JPY" - , Languages = ["ja"], UnofficialNames = ["Japan", "Japon", "Japón", "日本"], Timezones = ["Asia/Tokyo,+0900"])] + [CountryInfo( + Mcc = ["440", "441"], CallingCode = 81, Alpha3 = "JPN", ShortName = "Japan", LongName = "Japan", CurrencyCode = "JPY", Languages = ["ja"] + , UnofficialNames = ["Japan", "Japon", "Japón", "日本"], Timezones = ["Asia/Tokyo,+0900"] + )] [ResourceDescription(nameof(Ln.日本))] JP = 392 - , + , /// /// 韩国 /// - [CountryInfo(Mcc = ["450"], CallingCode = 82, Alpha3 = "KOR", ShortName = "Korea (Republic of)", LongName = "The Republic of Korea" - , CurrencyCode = "KRW", Languages = ["ko"] - , UnofficialNames = [ - "South Korea", "Korea (South)", "Südkorea", "Corée du Sud", "Corea del Sur", "大韓民国", "Zuid-Korea", "Korea (Republic of)", "韩国" - ], Timezones = ["Asia/Seoul,+0900"])] + [CountryInfo( + Mcc = ["450"], CallingCode = 82, Alpha3 = "KOR", ShortName = "Korea (Republic of)", LongName = "The Republic of Korea", CurrencyCode = "KRW" + , Languages = ["ko"] + , UnofficialNames = + [ + "South Korea", "Korea (South)", "Südkorea", "Corée du Sud", "Corea del Sur", "大韓民国", "Zuid-Korea", "Korea (Republic of)", "韩国" + ], Timezones = ["Asia/Seoul,+0900"] + )] [ResourceDescription(nameof(Ln.韩国))] KR = 410 - , + , /// /// 越南 /// - [CountryInfo(Mcc = ["452"], CallingCode = 84, Alpha3 = "VNM", ShortName = "Viet Nam", LongName = "The Socialist Republic of Viet Nam" - , CurrencyCode = "VND", Languages = ["vi"], UnofficialNames = ["Vietnam", "ベトナム", "Viet Nam", "越南"] - , Timezones = ["Asia/Ho_Chi_Minh,+0700"])] + [CountryInfo( + Mcc = ["452"], CallingCode = 84, Alpha3 = "VNM", ShortName = "Viet Nam", LongName = "The Socialist Republic of Viet Nam", CurrencyCode = "VND" + , Languages = ["vi"], UnofficialNames = ["Vietnam", "ベトナム", "Viet Nam", "越南"], Timezones = ["Asia/Ho_Chi_Minh,+0700"] + )] [ResourceDescription(nameof(Ln.越南))] VN = 704 - , + , /// /// 中国 /// - [CountryInfo(Mcc = ["460"], CallingCode = 86, Alpha3 = "CHN", ShortName = "China", LongName = "The People's Republic of China" - , CurrencyCode = "CNY", Languages = ["zh"], UnofficialNames = ["China", "Chine", "中国"] - , Timezones = ["Asia/Shanghai,+0800", "Asia/Urumqi,+0600"])] + [CountryInfo( + Mcc = ["460"], CallingCode = 86, Alpha3 = "CHN", ShortName = "China", LongName = "The People's Republic of China", CurrencyCode = "CNY" + , Languages = ["zh"], UnofficialNames = ["China", "Chine", "中国"], Timezones = ["Asia/Shanghai,+0800", "Asia/Urumqi,+0600"] + )] [ResourceDescription(nameof(Ln.中国))] CN = 156 - , + , /// /// 土耳其 /// - [CountryInfo(Mcc = ["286"], CallingCode = 90, Alpha3 = "TUR", ShortName = "Türkiye", LongName = "The Republic of Türkiye", CurrencyCode = "TRY" - , Languages = ["tr"], UnofficialNames = ["Turkey", "Türkei", "Turquie", "Turquía", "トルコ", "Turkije", "土耳其"] - , Timezones = ["Europe/Istanbul,+0300"])] + [CountryInfo( + Mcc = ["286"], CallingCode = 90, Alpha3 = "TUR", ShortName = "Türkiye", LongName = "The Republic of Türkiye", CurrencyCode = "TRY" + , Languages = ["tr"], UnofficialNames = ["Turkey", "Türkei", "Turquie", "Turquía", "トルコ", "Turkije", "土耳其"] + , Timezones = ["Europe/Istanbul,+0300"] + )] [ResourceDescription(nameof(Ln.土耳其))] TR = 792 - , + , /// /// 印度 /// - [CountryInfo(Mcc = ["404", "405"], CallingCode = 91, Alpha3 = "IND", ShortName = "India", LongName = "The Republic of India", CurrencyCode = "INR" - , Languages = ["hi", "en"], UnofficialNames = ["India", "Indien", "Inde", "インド", "印度"], Timezones = ["Asia/Kolkata,+0530"])] + [CountryInfo( + Mcc = ["404", "405"], CallingCode = 91, Alpha3 = "IND", ShortName = "India", LongName = "The Republic of India", CurrencyCode = "INR" + , Languages = ["hi", "en"], UnofficialNames = ["India", "Indien", "Inde", "インド", "印度"], Timezones = ["Asia/Kolkata,+0530"] + )] [ResourceDescription(nameof(Ln.印度))] IN = 356 - , + , /// /// 巴基斯坦 /// - [CountryInfo(Mcc = ["410"], CallingCode = 92, Alpha3 = "PAK", ShortName = "Pakistan", LongName = "The Islamic Republic of Pakistan" - , CurrencyCode = "PKR", Languages = ["en", "ur"], UnofficialNames = ["Pakistan", "Paquistán", "パキスタン", "巴基斯坦"] - , Timezones = ["Asia/Karachi,+0500"])] + [CountryInfo( + Mcc = ["410"], CallingCode = 92, Alpha3 = "PAK", ShortName = "Pakistan", LongName = "The Islamic Republic of Pakistan", CurrencyCode = "PKR" + , Languages = ["en", "ur"], UnofficialNames = ["Pakistan", "Paquistán", "パキスタン", "巴基斯坦"], Timezones = ["Asia/Karachi,+0500"] + )] [ResourceDescription(nameof(Ln.巴基斯坦))] PK = 586 - , + , /// /// 阿富汗 /// - [CountryInfo(Mcc = ["412"], CallingCode = 93, Alpha3 = "AFG", ShortName = "Afghanistan", LongName = "The Islamic Republic of Afghanistan" - , CurrencyCode = "AFN", Languages = ["ps", "uz", "tk"], UnofficialNames = ["Afghanistan", "Afganistán", "アフガニスタン", "阿富汗"] - , Timezones = ["Asia/Kabul,+0430"])] + [CountryInfo( + Mcc = ["412"], CallingCode = 93, Alpha3 = "AFG", ShortName = "Afghanistan", LongName = "The Islamic Republic of Afghanistan" + , CurrencyCode = "AFN", Languages = ["ps", "uz", "tk"], UnofficialNames = ["Afghanistan", "Afganistán", "アフガニスタン", "阿富汗"] + , Timezones = ["Asia/Kabul,+0430"] + )] [ResourceDescription(nameof(Ln.阿富汗))] AF = 004 - , + , /// /// 斯里兰卡 /// - [CountryInfo(Mcc = ["413"], CallingCode = 94, Alpha3 = "LKA", ShortName = "Sri Lanka", LongName = "The Democratic Socialist Republic of Sri Lanka" - , CurrencyCode = "LKR", Languages = ["si", "ta"], UnofficialNames = ["Sri Lanka", "スリランカ", "斯里兰卡"] - , Timezones = ["Asia/Colombo,+0530"])] + [CountryInfo( + Mcc = ["413"], CallingCode = 94, Alpha3 = "LKA", ShortName = "Sri Lanka", LongName = "The Democratic Socialist Republic of Sri Lanka" + , CurrencyCode = "LKR", Languages = ["si", "ta"], UnofficialNames = ["Sri Lanka", "スリランカ", "斯里兰卡"], Timezones = ["Asia/Colombo,+0530"] + )] [ResourceDescription(nameof(Ln.斯里兰卡))] LK = 144 - , + , /// /// 缅甸 /// - [CountryInfo(Mcc = ["414"], CallingCode = 95, Alpha3 = "MMR", ShortName = "Myanmar", LongName = "The Republic of the Union of Myanmar" - , CurrencyCode = "MMK", Languages = ["my"], UnofficialNames = ["Myanmar (Burma)", "ミャンマー", "缅甸"], Timezones = ["Asia/Yangon,+0630"])] + [CountryInfo( + Mcc = ["414"], CallingCode = 95, Alpha3 = "MMR", ShortName = "Myanmar", LongName = "The Republic of the Union of Myanmar" + , CurrencyCode = "MMK", Languages = ["my"], UnofficialNames = ["Myanmar (Burma)", "ミャンマー", "缅甸"], Timezones = ["Asia/Yangon,+0630"] + )] [ResourceDescription(nameof(Ln.缅甸))] MM = 104 - , + , /// /// 伊朗 /// - [CountryInfo(Mcc = ["432"], CallingCode = 98, Alpha3 = "IRN", ShortName = "Iran (Islamic Republic of)", LongName = "The Islamic Republic of Iran" - , CurrencyCode = "IRR", Languages = ["fa"] - , UnofficialNames = ["Iran", "Irán", "Iran (Islamic Republic Of)", "イラン・イスラム共和国", "Islamic Republic of Iran", "伊朗"] - , Timezones = ["Asia/Tehran,+0330"])] + [CountryInfo( + Mcc = ["432"], CallingCode = 98, Alpha3 = "IRN", ShortName = "Iran (Islamic Republic of)", LongName = "The Islamic Republic of Iran" + , CurrencyCode = "IRR", Languages = ["fa"] + , UnofficialNames = ["Iran", "Irán", "Iran (Islamic Republic Of)", "イラン・イスラム共和国", "Islamic Republic of Iran", "伊朗"] + , Timezones = ["Asia/Tehran,+0330"] + )] [ResourceDescription(nameof(Ln.伊朗))] IR = 364 - , + , /// /// 南苏丹 /// - [CountryInfo(Mcc = ["659"], CallingCode = 211, Alpha3 = "SSD", ShortName = "South Sudan", LongName = "The Republic of South Sudan" - , CurrencyCode = "SSP", Languages = ["ar", "en"], UnofficialNames = ["South Sudan", "Südsudan", "南スーダン", "Zuid-Soedan", "南苏丹"] - , Timezones = ["Africa/Juba,+0200"])] + [CountryInfo( + Mcc = ["659"], CallingCode = 211, Alpha3 = "SSD", ShortName = "South Sudan", LongName = "The Republic of South Sudan", CurrencyCode = "SSP" + , Languages = ["ar", "en"], UnofficialNames = ["South Sudan", "Südsudan", "南スーダン", "Zuid-Soedan", "南苏丹"], Timezones = ["Africa/Juba,+0200"] + )] [ResourceDescription(nameof(Ln.南苏丹))] SS = 728 - , + , /// /// 西撒哈拉 /// - [CountryInfo(Mcc = [], CallingCode = 212, Alpha3 = "ESH", ShortName = "Western Sahara", LongName = "The Sahrawi Arab Democratic Republic" - , CurrencyCode = "MAD", Languages = ["es", "fr"] - , UnofficialNames = ["Western Sahara", "الصحراء الغربية", "Westsahara", "Sahara Occidental", "西サハラ", "Westelijke Sahara", "西撒哈拉"])] + [CountryInfo( + Mcc = [], CallingCode = 212, Alpha3 = "ESH", ShortName = "Western Sahara", LongName = "The Sahrawi Arab Democratic Republic" + , CurrencyCode = "MAD", Languages = ["es", "fr"] + , UnofficialNames = ["Western Sahara", "الصحراء الغربية", "Westsahara", "Sahara Occidental", "西サハラ", "Westelijke Sahara", "西撒哈拉"] + )] [ResourceDescription(nameof(Ln.西撒哈拉))] EH = 732 - , + , /// /// 摩洛哥 /// - [CountryInfo(Mcc = ["604"], CallingCode = 212, Alpha3 = "MAR", ShortName = "Morocco", LongName = "The Kingdom of Morocco", CurrencyCode = "MAD" - , Languages = ["ar"], UnofficialNames = ["Morocco", "المغرب", "Marokko", "Maroc", "Marruecos", "モロッコ", "摩洛哥"], IsPreferred = true - , Timezones = ["Africa/Casablanca,+0100", "Africa/El_Aaiun,+0100"])] + [CountryInfo( + Mcc = ["604"], CallingCode = 212, Alpha3 = "MAR", ShortName = "Morocco", LongName = "The Kingdom of Morocco", CurrencyCode = "MAD" + , Languages = ["ar"], UnofficialNames = ["Morocco", "المغرب", "Marokko", "Maroc", "Marruecos", "モロッコ", "摩洛哥"], IsPreferred = true + , Timezones = ["Africa/Casablanca,+0100", "Africa/El_Aaiun,+0100"] + )] [ResourceDescription(nameof(Ln.摩洛哥))] MA = 504 - , + , /// /// 阿尔及利亚 /// - [CountryInfo(Mcc = ["603"], CallingCode = 213, Alpha3 = "DZA", ShortName = "Algeria", LongName = "The People's Democratic Republic of Algeria" - , CurrencyCode = "DZD", Languages = ["ar"] - , UnofficialNames = ["Algeria", "الجزائر", "Algerien", "Algérie", "Argelia", "アルジェリア", "Algerije", "阿尔及利亚"] - , Timezones = ["Africa/Algiers,+0100"])] + [CountryInfo( + Mcc = ["603"], CallingCode = 213, Alpha3 = "DZA", ShortName = "Algeria", LongName = "The People's Democratic Republic of Algeria" + , CurrencyCode = "DZD", Languages = ["ar"] + , UnofficialNames = ["Algeria", "الجزائر", "Algerien", "Algérie", "Argelia", "アルジェリア", "Algerije", "阿尔及利亚"] + , Timezones = ["Africa/Algiers,+0100"] + )] [ResourceDescription(nameof(Ln.阿尔及利亚))] DZ = 012 - , + , /// /// 突尼斯 /// - [CountryInfo(Mcc = ["605"], CallingCode = 216, Alpha3 = "TUN", ShortName = "Tunisia", LongName = "The Republic of Tunisia", CurrencyCode = "TND" - , Languages = ["ar", "fr"], UnofficialNames = ["Tunisia", "تونس", "Tunesien", "Tunisie", "Túnez", "チュニジア", "Tunesië", "突尼斯"] - , Timezones = ["Africa/Tunis,+0100"])] + [CountryInfo( + Mcc = ["605"], CallingCode = 216, Alpha3 = "TUN", ShortName = "Tunisia", LongName = "The Republic of Tunisia", CurrencyCode = "TND" + , Languages = ["ar", "fr"], UnofficialNames = ["Tunisia", "تونس", "Tunesien", "Tunisie", "Túnez", "チュニジア", "Tunesië", "突尼斯"] + , Timezones = ["Africa/Tunis,+0100"] + )] [ResourceDescription(nameof(Ln.突尼斯))] TN = 788 - , + , /// /// 利比亚 /// - [CountryInfo(Mcc = ["606"], CallingCode = 218, Alpha3 = "LBY", ShortName = "Libya", LongName = "The State of Libya", CurrencyCode = "LYD" - , Languages = ["ar"], UnofficialNames = ["Libya", "ليبيا", "Libyen", "Libye", "Libia", "リビア", "Libië", "Libyan Arab Jamahiriya", "利比亚"] - , Timezones = ["Africa/Tripoli,+0200"])] + [CountryInfo( + Mcc = ["606"], CallingCode = 218, Alpha3 = "LBY", ShortName = "Libya", LongName = "The State of Libya", CurrencyCode = "LYD" + , Languages = ["ar"], UnofficialNames = ["Libya", "ليبيا", "Libyen", "Libye", "Libia", "リビア", "Libië", "Libyan Arab Jamahiriya", "利比亚"] + , Timezones = ["Africa/Tripoli,+0200"] + )] [ResourceDescription(nameof(Ln.利比亚))] LY = 434 - , + , /// /// 冈比亚 /// - [CountryInfo(Mcc = ["607"], CallingCode = 220, Alpha3 = "GMB", ShortName = "Gambia", LongName = "The Republic of The Gambia", CurrencyCode = "GMD" - , Languages = ["en"], UnofficialNames = ["The Gambia", "ガンビア", "冈比亚"], Timezones = ["Africa/Banjul,+0000"])] + [CountryInfo( + Mcc = ["607"], CallingCode = 220, Alpha3 = "GMB", ShortName = "Gambia", LongName = "The Republic of The Gambia", CurrencyCode = "GMD" + , Languages = ["en"], UnofficialNames = ["The Gambia", "ガンビア", "冈比亚"], Timezones = ["Africa/Banjul,+0000"] + )] [ResourceDescription(nameof(Ln.冈比亚))] GM = 270 - , + , /// /// 塞内加尔 /// - [CountryInfo(Mcc = ["608"], CallingCode = 221, Alpha3 = "SEN", ShortName = "Senegal", LongName = "The Republic of Senegal", CurrencyCode = "XOF" - , Languages = ["fr"], UnofficialNames = ["Senegal", "Sénégal", "セネガル", "塞内加尔"], Timezones = ["Africa/Dakar,+0000"])] + [CountryInfo( + Mcc = ["608"], CallingCode = 221, Alpha3 = "SEN", ShortName = "Senegal", LongName = "The Republic of Senegal", CurrencyCode = "XOF" + , Languages = ["fr"], UnofficialNames = ["Senegal", "Sénégal", "セネガル", "塞内加尔"], Timezones = ["Africa/Dakar,+0000"] + )] [ResourceDescription(nameof(Ln.塞内加尔))] SN = 686 - , + , /// /// 毛里塔尼亚 /// - [CountryInfo(Mcc = ["609"], CallingCode = 222, Alpha3 = "MRT", ShortName = "Mauritania", LongName = "The Islamic Republic of Mauritania" - , CurrencyCode = "MRU", Languages = ["ar", "fr"] - , UnofficialNames = ["Mauritania", "موريتانيا", "Mauretanien", "Mauritanie", "モーリタニア", "Mauritanië", "毛里塔尼亚"] - , Timezones = ["Africa/Nouakchott,+0000"])] + [CountryInfo( + Mcc = ["609"], CallingCode = 222, Alpha3 = "MRT", ShortName = "Mauritania", LongName = "The Islamic Republic of Mauritania" + , CurrencyCode = "MRU", Languages = ["ar", "fr"] + , UnofficialNames = ["Mauritania", "موريتانيا", "Mauretanien", "Mauritanie", "モーリタニア", "Mauritanië", "毛里塔尼亚"] + , Timezones = ["Africa/Nouakchott,+0000"] + )] [ResourceDescription(nameof(Ln.毛里塔尼亚))] MR = 478 - , + , /// /// 马里 /// - [CountryInfo(Mcc = ["610"], CallingCode = 223, Alpha3 = "MLI", ShortName = "Mali", LongName = "The Republic of Mali", CurrencyCode = "XOF" - , Languages = ["fr"], UnofficialNames = ["Mali", "マリ", "马里"], Timezones = ["Africa/Bamako,+0000"])] + [CountryInfo( + Mcc = ["610"], CallingCode = 223, Alpha3 = "MLI", ShortName = "Mali", LongName = "The Republic of Mali", CurrencyCode = "XOF" + , Languages = ["fr"], UnofficialNames = ["Mali", "マリ", "马里"], Timezones = ["Africa/Bamako,+0000"] + )] [ResourceDescription(nameof(Ln.马里))] ML = 466 - , + , /// /// 几内亚 /// - [CountryInfo(Mcc = ["611"], CallingCode = 224, Alpha3 = "GIN", ShortName = "Guinea", LongName = "The Republic of Guinea", CurrencyCode = "GNF" - , Languages = ["fr", "ff"], UnofficialNames = ["Guinea", "Guinée", "ギニア", "Guinee", "几内亚"], Timezones = ["Africa/Conakry,+0000"])] + [CountryInfo( + Mcc = ["611"], CallingCode = 224, Alpha3 = "GIN", ShortName = "Guinea", LongName = "The Republic of Guinea", CurrencyCode = "GNF" + , Languages = ["fr", "ff"], UnofficialNames = ["Guinea", "Guinée", "ギニア", "Guinee", "几内亚"], Timezones = ["Africa/Conakry,+0000"] + )] [ResourceDescription(nameof(Ln.几内亚))] GN = 324 - , + , /// /// 科特迪瓦 /// - [CountryInfo(Mcc = ["612"], CallingCode = 225, Alpha3 = "CIV", ShortName = "Côte d'Ivoire", LongName = "The Republic of Côte d'Ivoire" - , CurrencyCode = "XOF", Languages = ["fr"] - , UnofficialNames = [ - "Côte D'Ivoire", "Elfenbeinküste", "コートジボワール", "Ivoorkust", "Cote D'Ivoire (Ivory Coast)", "Cote d Ivoire (Ivory Coast)" - , "Ivory Coast", "科特迪瓦" - ], Timezones = ["Africa/Abidjan,+0000"])] + [CountryInfo( + Mcc = ["612"], CallingCode = 225, Alpha3 = "CIV", ShortName = "Côte d'Ivoire", LongName = "The Republic of Côte d'Ivoire" + , CurrencyCode = "XOF", Languages = ["fr"] + , UnofficialNames = + [ + "Côte D'Ivoire", "Elfenbeinküste", "コートジボワール", "Ivoorkust", "Cote D'Ivoire (Ivory Coast)", "Cote d Ivoire (Ivory Coast)" + , "Ivory Coast", "科特迪瓦" + ], Timezones = ["Africa/Abidjan,+0000"] + )] [ResourceDescription(nameof(Ln.科特迪瓦))] CI = 384 - , + , /// /// 布基纳法索 /// - [CountryInfo(Mcc = ["613"], CallingCode = 226, Alpha3 = "BFA", ShortName = "Burkina Faso", LongName = "Burkina Faso", CurrencyCode = "XOF" - , Languages = ["fr", "ff"], UnofficialNames = ["Burkina Faso", "ブルキナファソ", "布基纳法索"], Timezones = ["Africa/Ouagadougou,+0000"])] + [CountryInfo( + Mcc = ["613"], CallingCode = 226, Alpha3 = "BFA", ShortName = "Burkina Faso", LongName = "Burkina Faso", CurrencyCode = "XOF" + , Languages = ["fr", "ff"], UnofficialNames = ["Burkina Faso", "ブルキナファソ", "布基纳法索"], Timezones = ["Africa/Ouagadougou,+0000"] + )] [ResourceDescription(nameof(Ln.布基纳法索))] BF = 854 - , + , /// /// 尼日尔 /// - [CountryInfo(Mcc = ["614"], CallingCode = 227, Alpha3 = "NER", ShortName = "Niger", LongName = "The Republic of the Niger", CurrencyCode = "XOF" - , Languages = ["fr"], UnofficialNames = ["Niger", "Níger", "ニジェール", "尼日尔"], Timezones = ["Africa/Niamey,+0100"])] + [CountryInfo( + Mcc = ["614"], CallingCode = 227, Alpha3 = "NER", ShortName = "Niger", LongName = "The Republic of the Niger", CurrencyCode = "XOF" + , Languages = ["fr"], UnofficialNames = ["Niger", "Níger", "ニジェール", "尼日尔"], Timezones = ["Africa/Niamey,+0100"] + )] [ResourceDescription(nameof(Ln.尼日尔))] NE = 562 - , + , /// /// 多哥 /// - [CountryInfo(Mcc = ["615"], CallingCode = 228, Alpha3 = "TGO", ShortName = "Togo", LongName = "The Togolese Republic", CurrencyCode = "XOF" - , Languages = ["fr"], UnofficialNames = ["Togo", "トーゴ", "多哥"], Timezones = ["Africa/Lome,+0000"])] + [CountryInfo( + Mcc = ["615"], CallingCode = 228, Alpha3 = "TGO", ShortName = "Togo", LongName = "The Togolese Republic", CurrencyCode = "XOF" + , Languages = ["fr"], UnofficialNames = ["Togo", "トーゴ", "多哥"], Timezones = ["Africa/Lome,+0000"] + )] [ResourceDescription(nameof(Ln.多哥))] TG = 768 - , + , /// /// 贝宁 /// - [CountryInfo(Mcc = ["616"], CallingCode = 229, Alpha3 = "BEN", ShortName = "Benin", LongName = "The Republic of Benin", CurrencyCode = "XOF" - , Languages = ["fr"], UnofficialNames = ["Benin", "Bénin", "ベナン", "贝宁"], Timezones = ["Africa/Porto-Novo,+0100"])] + [CountryInfo( + Mcc = ["616"], CallingCode = 229, Alpha3 = "BEN", ShortName = "Benin", LongName = "The Republic of Benin", CurrencyCode = "XOF" + , Languages = ["fr"], UnofficialNames = ["Benin", "Bénin", "ベナン", "贝宁"], Timezones = ["Africa/Porto-Novo,+0100"] + )] [ResourceDescription(nameof(Ln.贝宁))] BJ = 204 - , + , /// /// 毛里求斯 /// - [CountryInfo(Mcc = ["617"], CallingCode = 230, Alpha3 = "MUS", ShortName = "Mauritius", LongName = "The Republic of Mauritius" - , CurrencyCode = "MUR", Languages = ["en"], UnofficialNames = ["Mauritius", "Île Maurice", "Mauricio", "モーリシャス", "毛里求斯"] - , Timezones = ["Indian/Mauritius,+0400"])] + [CountryInfo( + Mcc = ["617"], CallingCode = 230, Alpha3 = "MUS", ShortName = "Mauritius", LongName = "The Republic of Mauritius", CurrencyCode = "MUR" + , Languages = ["en"], UnofficialNames = ["Mauritius", "Île Maurice", "Mauricio", "モーリシャス", "毛里求斯"], Timezones = ["Indian/Mauritius,+0400"] + )] [ResourceDescription(nameof(Ln.毛里求斯))] MU = 480 - , + , /// /// 利比里亚 /// - [CountryInfo(Mcc = ["618"], CallingCode = 231, Alpha3 = "LBR", ShortName = "Liberia", LongName = "The Republic of Liberia", CurrencyCode = "LRD" - , Languages = ["en"], UnofficialNames = ["Liberia", "リベリア", "利比里亚"], Timezones = ["Africa/Monrovia,+0000"])] + [CountryInfo( + Mcc = ["618"], CallingCode = 231, Alpha3 = "LBR", ShortName = "Liberia", LongName = "The Republic of Liberia", CurrencyCode = "LRD" + , Languages = ["en"], UnofficialNames = ["Liberia", "リベリア", "利比里亚"], Timezones = ["Africa/Monrovia,+0000"] + )] [ResourceDescription(nameof(Ln.利比里亚))] LR = 430 - , + , /// /// 塞拉利昂 /// - [CountryInfo(Mcc = ["619"], CallingCode = 232, Alpha3 = "SLE", ShortName = "Sierra Leone", LongName = "The Republic of Sierra Leone" - , CurrencyCode = "SLL", Languages = ["en"], UnofficialNames = ["Sierra Leone", "シエラレオネ", "塞拉利昂"] - , Timezones = ["Africa/Freetown,+0000"])] + [CountryInfo( + Mcc = ["619"], CallingCode = 232, Alpha3 = "SLE", ShortName = "Sierra Leone", LongName = "The Republic of Sierra Leone", CurrencyCode = "SLL" + , Languages = ["en"], UnofficialNames = ["Sierra Leone", "シエラレオネ", "塞拉利昂"], Timezones = ["Africa/Freetown,+0000"] + )] [ResourceDescription(nameof(Ln.塞拉利昂))] SL = 694 - , + , /// /// 加纳 /// - [CountryInfo(Mcc = ["620"], CallingCode = 233, Alpha3 = "GHA", ShortName = "Ghana", LongName = "The Republic of Ghana", CurrencyCode = "GHS" - , Languages = ["en"], UnofficialNames = ["Ghana", "ガーナ", "加纳"], Timezones = ["Africa/Accra,+0000"])] + [CountryInfo( + Mcc = ["620"], CallingCode = 233, Alpha3 = "GHA", ShortName = "Ghana", LongName = "The Republic of Ghana", CurrencyCode = "GHS" + , Languages = ["en"], UnofficialNames = ["Ghana", "ガーナ", "加纳"], Timezones = ["Africa/Accra,+0000"] + )] [ResourceDescription(nameof(Ln.加纳))] GH = 288 - , + , /// /// 尼日利亚 /// - [CountryInfo(Mcc = ["621"], CallingCode = 234, Alpha3 = "NGA", ShortName = "Nigeria", LongName = "The Federal Republic of Nigeria" - , CurrencyCode = "NGN", Languages = ["en"] - , UnofficialNames = ["Nigeria", "Nigéria", "the Federal Republic of Nigeria", "ナイジェリア", "尼日利亚"], Timezones = ["Africa/Lagos,+0100"])] + [CountryInfo( + Mcc = ["621"], CallingCode = 234, Alpha3 = "NGA", ShortName = "Nigeria", LongName = "The Federal Republic of Nigeria", CurrencyCode = "NGN" + , Languages = ["en"], UnofficialNames = ["Nigeria", "Nigéria", "the Federal Republic of Nigeria", "ナイジェリア", "尼日利亚"] + , Timezones = ["Africa/Lagos,+0100"] + )] [ResourceDescription(nameof(Ln.尼日利亚))] NG = 566 - , + , /// /// 乍得 /// - [CountryInfo(Mcc = ["622"], CallingCode = 235, Alpha3 = "TCD", ShortName = "Chad", LongName = "The Republic of Chad", CurrencyCode = "XAF" - , Languages = ["ar", "fr"], UnofficialNames = ["Chad", "تشاد", "Tschad", "Tchad", "チャド", "Tsjaad", "乍得"] - , Timezones = ["Africa/Ndjamena,+0100"])] + [CountryInfo( + Mcc = ["622"], CallingCode = 235, Alpha3 = "TCD", ShortName = "Chad", LongName = "The Republic of Chad", CurrencyCode = "XAF" + , Languages = ["ar", "fr"], UnofficialNames = ["Chad", "تشاد", "Tschad", "Tchad", "チャド", "Tsjaad", "乍得"] + , Timezones = ["Africa/Ndjamena,+0100"] + )] [ResourceDescription(nameof(Ln.乍得))] TD = 148 - , + , /// /// 中非 /// - [CountryInfo(Mcc = ["623"], CallingCode = 236, Alpha3 = "CAF", ShortName = "Central African Republic", LongName = "The Central African Republic" - , CurrencyCode = "XAF", Languages = ["fr", "sg"] - , UnofficialNames = [ - "Central African Republic", "Zentralafrikanische Republik", "République Centrafricaine", "República Centroafricana", "中央アフリカ共和国" - , "Centraal-Afrikaanse Republiek", "中非" - ], Timezones = ["Africa/Bangui,+0100"])] + [CountryInfo( + Mcc = ["623"], CallingCode = 236, Alpha3 = "CAF", ShortName = "Central African Republic", LongName = "The Central African Republic" + , CurrencyCode = "XAF", Languages = ["fr", "sg"] + , UnofficialNames = + [ + "Central African Republic", "Zentralafrikanische Republik", "République Centrafricaine", "República Centroafricana", "中央アフリカ共和国" + , "Centraal-Afrikaanse Republiek", "中非" + ], Timezones = ["Africa/Bangui,+0100"] + )] [ResourceDescription(nameof(Ln.中非))] CF = 140 - , + , /// /// 喀麦隆 /// - [CountryInfo(Mcc = ["624"], CallingCode = 237, Alpha3 = "CMR", ShortName = "Cameroon", LongName = "The Republic of Cameroon", CurrencyCode = "XAF" - , Languages = ["en", "fr"], UnofficialNames = ["Cameroon", "Kamerun", "Cameroun", "Camerún", "カメルーン", "Kameroen", "喀麦隆"] - , Timezones = ["Africa/Douala,+0100"])] + [CountryInfo( + Mcc = ["624"], CallingCode = 237, Alpha3 = "CMR", ShortName = "Cameroon", LongName = "The Republic of Cameroon", CurrencyCode = "XAF" + , Languages = ["en", "fr"], UnofficialNames = ["Cameroon", "Kamerun", "Cameroun", "Camerún", "カメルーン", "Kameroen", "喀麦隆"] + , Timezones = ["Africa/Douala,+0100"] + )] [ResourceDescription(nameof(Ln.喀麦隆))] CM = 120 - , + , /// /// 佛得角 /// - [CountryInfo(Mcc = ["625"], CallingCode = 238, Alpha3 = "CPV", ShortName = "Cabo Verde", LongName = "The Republic of Cabo Verde" - , CurrencyCode = "CVE", Languages = ["pt"] - , UnofficialNames = ["Cape Verde", "Kap Verde", "Cap Vert", "Cabo Verde", "カーボベルデ", "Kaapverdië", "佛得角"] - , Timezones = ["Atlantic/Cape_Verde,-0100"])] + [CountryInfo( + Mcc = ["625"], CallingCode = 238, Alpha3 = "CPV", ShortName = "Cabo Verde", LongName = "The Republic of Cabo Verde", CurrencyCode = "CVE" + , Languages = ["pt"], UnofficialNames = ["Cape Verde", "Kap Verde", "Cap Vert", "Cabo Verde", "カーボベルデ", "Kaapverdië", "佛得角"] + , Timezones = ["Atlantic/Cape_Verde,-0100"] + )] [ResourceDescription(nameof(Ln.佛得角))] CV = 132 - , + , /// /// 圣多美和普林西比 /// - [CountryInfo(Mcc = ["626"], CallingCode = 239, Alpha3 = "STP", ShortName = "Sao Tome and Principe" - , LongName = "The Democratic Republic of São Tomé and Príncipe", CurrencyCode = "STD", Languages = ["pt"] - , UnofficialNames = [ - "São Tomé and Príncipe", "São Tomé und Príncipe", "São Tomé et Príncipe", "Santo Tomé y Príncipe", "サントメ・プリンシペ" - , "Sao Tomé en Principe", "圣多美和普林西比" - ], Timezones = ["Africa/Sao_Tome,+0000"])] + [CountryInfo( + Mcc = ["626"], CallingCode = 239, Alpha3 = "STP", ShortName = "Sao Tome and Principe" + , LongName = "The Democratic Republic of São Tomé and Príncipe", CurrencyCode = "STD", Languages = ["pt"] + , UnofficialNames = + [ + "São Tomé and Príncipe", "São Tomé und Príncipe", "São Tomé et Príncipe", "Santo Tomé y Príncipe", "サントメ・プリンシペ" + , "Sao Tomé en Principe", "圣多美和普林西比" + ], Timezones = ["Africa/Sao_Tome,+0000"] + )] [ResourceDescription(nameof(Ln.圣多美和普林西比))] ST = 678 - , + , /// /// 赤道几内亚 /// - [CountryInfo(Mcc = ["627"], CallingCode = 240, Alpha3 = "GNQ", ShortName = "Equatorial Guinea", LongName = "The Republic of Equatorial Guinea" - , CurrencyCode = "XAF", Languages = ["es", "fr"] - , UnofficialNames = [ - "Equatorial Guinea", "Äquatorial-Guinea", "Guinée Équatoriale", "Guinea Ecuatorial", "赤道ギニア", "Equatoriaal-Guinea", "赤道几内亚" - ], Timezones = ["Africa/Malabo,+0100"])] + [CountryInfo( + Mcc = ["627"], CallingCode = 240, Alpha3 = "GNQ", ShortName = "Equatorial Guinea", LongName = "The Republic of Equatorial Guinea" + , CurrencyCode = "XAF", Languages = ["es", "fr"] + , UnofficialNames = + [ + "Equatorial Guinea", "Äquatorial-Guinea", "Guinée Équatoriale", "Guinea Ecuatorial", "赤道ギニア", "Equatoriaal-Guinea", "赤道几内亚" + ], Timezones = ["Africa/Malabo,+0100"] + )] [ResourceDescription(nameof(Ln.赤道几内亚))] GQ = 226 - , + , /// /// 加蓬 /// - [CountryInfo(Mcc = ["628"], CallingCode = 241, Alpha3 = "GAB", ShortName = "Gabon", LongName = "The Gabonese Republic", CurrencyCode = "XAF" - , Languages = ["fr"], UnofficialNames = ["Gabon", "Gabun", "Gabón", "ガボン", "加蓬"], Timezones = ["Africa/Libreville,+0100"])] + [CountryInfo( + Mcc = ["628"], CallingCode = 241, Alpha3 = "GAB", ShortName = "Gabon", LongName = "The Gabonese Republic", CurrencyCode = "XAF" + , Languages = ["fr"], UnofficialNames = ["Gabon", "Gabun", "Gabón", "ガボン", "加蓬"], Timezones = ["Africa/Libreville,+0100"] + )] [ResourceDescription(nameof(Ln.加蓬))] GA = 266 - , + , /// /// 刚果共和国 /// - [CountryInfo(Mcc = ["629"], CallingCode = 242, Alpha3 = "COG", ShortName = "Congo", LongName = "The Republic of the Congo", CurrencyCode = "XAF" - , Languages = ["fr", "ln"], UnofficialNames = ["Congo", "Kongo", "コンゴ共和国", "Congo [Republiek]", "Congo, Republic of", "刚果共和国"] - , Timezones = ["Africa/Brazzaville,+0100"])] + [CountryInfo( + Mcc = ["629"], CallingCode = 242, Alpha3 = "COG", ShortName = "Congo", LongName = "The Republic of the Congo", CurrencyCode = "XAF" + , Languages = ["fr", "ln"], UnofficialNames = ["Congo", "Kongo", "コンゴ共和国", "Congo [Republiek]", "Congo, Republic of", "刚果共和国"] + , Timezones = ["Africa/Brazzaville,+0100"] + )] [ResourceDescription(nameof(Ln.刚果共和国))] CG = 178 - , + , /// /// 刚果民主共和国 /// - [CountryInfo(Mcc = ["630"], CallingCode = 243, Alpha3 = "COD", ShortName = "Congo (Democratic Republic of the)" - , LongName = "The Democratic Republic of the Congo", CurrencyCode = "CDF", Languages = ["fr", "ln", "kg", "sw", "lu"] - , UnofficialNames = [ - "Congo (Dem. Rep.)", "Kongo (Dem. Rep.)", "Congo (Rep. Dem.)", "コンゴ民主共和国", "Congo [DRC]" - , "Congo (The Democratic Republic Of The)", "Democratic Republic of the Congo", "Congo, Democratic Republic of", "刚果民主共和国" - ], Timezones = ["Africa/Kinshasa,+0100", "Africa/Lubumbashi,+0200"])] + [CountryInfo( + Mcc = ["630"], CallingCode = 243, Alpha3 = "COD", ShortName = "Congo (Democratic Republic of the)" + , LongName = "The Democratic Republic of the Congo", CurrencyCode = "CDF", Languages = ["fr", "ln", "kg", "sw", "lu"] + , UnofficialNames = + [ + "Congo (Dem. Rep.)", "Kongo (Dem. Rep.)", "Congo (Rep. Dem.)", "コンゴ民主共和国", "Congo [DRC]", "Congo (The Democratic Republic Of The)" + , "Democratic Republic of the Congo", "Congo, Democratic Republic of", "刚果民主共和国" + ], Timezones = ["Africa/Kinshasa,+0100", "Africa/Lubumbashi,+0200"] + )] [ResourceDescription(nameof(Ln.刚果民主共和国))] CD = 180 - , + , /// /// 安哥拉 /// - [CountryInfo(Mcc = ["631"], CallingCode = 244, Alpha3 = "AGO", ShortName = "Angola", LongName = "The Republic of Angola", CurrencyCode = "AOA" - , Languages = ["pt"], UnofficialNames = ["Angola", "アンゴラ", "安哥拉"], Timezones = ["Africa/Luanda,+0100"])] + [CountryInfo( + Mcc = ["631"], CallingCode = 244, Alpha3 = "AGO", ShortName = "Angola", LongName = "The Republic of Angola", CurrencyCode = "AOA" + , Languages = ["pt"], UnofficialNames = ["Angola", "アンゴラ", "安哥拉"], Timezones = ["Africa/Luanda,+0100"] + )] [ResourceDescription(nameof(Ln.安哥拉))] AO = 024 - , + , /// /// 几内亚比绍 /// - [CountryInfo(Mcc = ["632"], CallingCode = 245, Alpha3 = "GNB", ShortName = "Guinea-Bissau", LongName = "The Republic of Guinea-Bissau" - , CurrencyCode = "XOF", Languages = ["pt"] - , UnofficialNames = ["Guinea-Bissau", "Guinée-Bissau", "ギニアビサウ", "Guinee-Bissau", "Guinea Bissau", "几内亚比绍"] - , Timezones = ["Africa/Bissau,+0000"])] + [CountryInfo( + Mcc = ["632"], CallingCode = 245, Alpha3 = "GNB", ShortName = "Guinea-Bissau", LongName = "The Republic of Guinea-Bissau" + , CurrencyCode = "XOF", Languages = ["pt"] + , UnofficialNames = ["Guinea-Bissau", "Guinée-Bissau", "ギニアビサウ", "Guinee-Bissau", "Guinea Bissau", "几内亚比绍"] + , Timezones = ["Africa/Bissau,+0000"] + )] [ResourceDescription(nameof(Ln.几内亚比绍))] GW = 624 - , + , /// /// 英属印度洋领地 /// - [CountryInfo(Mcc = ["995"], CallingCode = 246, Alpha3 = "IOT", ShortName = "British Indian Ocean Territory" - , LongName = "The British Indian Ocean Territory", CurrencyCode = "USD", Languages = ["en"] - , UnofficialNames = [ - "British Indian Ocean Territory", "Britisches Territorium im Indischen Ozean", "イギリス領インド洋地域" - , "Britse Gebieden in de Indische Oceaan", "英属印度洋领地" - ], Timezones = ["Indian/Chagos,+0600"])] + [CountryInfo( + Mcc = ["995"], CallingCode = 246, Alpha3 = "IOT", ShortName = "British Indian Ocean Territory" + , LongName = "The British Indian Ocean Territory", CurrencyCode = "USD", Languages = ["en"] + , UnofficialNames = + [ + "British Indian Ocean Territory", "Britisches Territorium im Indischen Ozean", "イギリス領インド洋地域", "Britse Gebieden in de Indische Oceaan" + , "英属印度洋领地" + ], Timezones = ["Indian/Chagos,+0600"] + )] [ResourceDescription(nameof(Ln.英属印度洋领地))] IO = 086 - , + , /// /// 塞舌尔 /// - [CountryInfo(Mcc = ["633"], CallingCode = 248, Alpha3 = "SYC", ShortName = "Seychelles", LongName = "The Republic of Seychelles" - , CurrencyCode = "SCR", Languages = ["fr", "en"], UnofficialNames = ["Seychelles", "Seychellen", "セーシェル", "塞舌尔"] - , Timezones = ["Indian/Mahe,+0400"])] + [CountryInfo( + Mcc = ["633"], CallingCode = 248, Alpha3 = "SYC", ShortName = "Seychelles", LongName = "The Republic of Seychelles", CurrencyCode = "SCR" + , Languages = ["fr", "en"], UnofficialNames = ["Seychelles", "Seychellen", "セーシェル", "塞舌尔"], Timezones = ["Indian/Mahe,+0400"] + )] [ResourceDescription(nameof(Ln.塞舌尔))] SC = 690 - , + , /// /// 苏丹 /// - [CountryInfo(Mcc = ["634"], CallingCode = 249, Alpha3 = "SDN", ShortName = "Sudan", LongName = "The Republic of the Sudan", CurrencyCode = "SDG" - , Languages = ["ar", "en"], UnofficialNames = ["Sudan", "السودان", "Soudan", "Sudán", "スーダン", "Soedan", "苏丹"] - , Timezones = ["Africa/Khartoum,+0200"])] + [CountryInfo( + Mcc = ["634"], CallingCode = 249, Alpha3 = "SDN", ShortName = "Sudan", LongName = "The Republic of the Sudan", CurrencyCode = "SDG" + , Languages = ["ar", "en"], UnofficialNames = ["Sudan", "السودان", "Soudan", "Sudán", "スーダン", "Soedan", "苏丹"] + , Timezones = ["Africa/Khartoum,+0200"] + )] [ResourceDescription(nameof(Ln.苏丹))] SD = 729 - , + , /// /// 卢旺达 /// - [CountryInfo(Mcc = ["635"], CallingCode = 250, Alpha3 = "RWA", ShortName = "Rwanda", LongName = "The Republic of Rwanda", CurrencyCode = "RWF" - , Languages = ["rw", "en", "fr"], UnofficialNames = ["Rwanda", "Ruanda", "ルワンダ", "卢旺达"], Timezones = ["Africa/Kigali,+0200"])] + [CountryInfo( + Mcc = ["635"], CallingCode = 250, Alpha3 = "RWA", ShortName = "Rwanda", LongName = "The Republic of Rwanda", CurrencyCode = "RWF" + , Languages = ["rw", "en", "fr"], UnofficialNames = ["Rwanda", "Ruanda", "ルワンダ", "卢旺达"], Timezones = ["Africa/Kigali,+0200"] + )] [ResourceDescription(nameof(Ln.卢旺达))] RW = 646 - , + , /// /// 埃塞俄比亚 /// - [CountryInfo(Mcc = ["636"], CallingCode = 251, Alpha3 = "ETH", ShortName = "Ethiopia", LongName = "The Federal Democratic Republic of Ethiopia" - , CurrencyCode = "ETB", Languages = ["am"] - , UnofficialNames = ["Ethiopia", "Äthiopien", "Éthiopie", "Etiopía", "エチオピア", "Ethiopië", "埃塞俄比亚"] - , Timezones = ["Africa/Addis_Ababa,+0300"])] + [CountryInfo( + Mcc = ["636"], CallingCode = 251, Alpha3 = "ETH", ShortName = "Ethiopia", LongName = "The Federal Democratic Republic of Ethiopia" + , CurrencyCode = "ETB", Languages = ["am"], UnofficialNames = ["Ethiopia", "Äthiopien", "Éthiopie", "Etiopía", "エチオピア", "Ethiopië", "埃塞俄比亚"] + , Timezones = ["Africa/Addis_Ababa,+0300"] + )] [ResourceDescription(nameof(Ln.埃塞俄比亚))] ET = 231 - , + , /// /// 索马里 /// - [CountryInfo(Mcc = ["637"], CallingCode = 252, Alpha3 = "SOM", ShortName = "Somalia", LongName = "The Federal Republic of Somalia" - , CurrencyCode = "SOS", Languages = ["so", "ar"], UnofficialNames = ["Somalia", "الصومال", "ソマリア", "Somalië", "索马里"] - , Timezones = ["Africa/Mogadishu,+0300"])] + [CountryInfo( + Mcc = ["637"], CallingCode = 252, Alpha3 = "SOM", ShortName = "Somalia", LongName = "The Federal Republic of Somalia", CurrencyCode = "SOS" + , Languages = ["so", "ar"], UnofficialNames = ["Somalia", "الصومال", "ソマリア", "Somalië", "索马里"], Timezones = ["Africa/Mogadishu,+0300"] + )] [ResourceDescription(nameof(Ln.索马里))] SO = 706 - , + , /// /// 吉布提 /// - [CountryInfo(Mcc = ["638"], CallingCode = 253, Alpha3 = "DJI", ShortName = "Djibouti", LongName = "The Republic of Djibouti", CurrencyCode = "DJF" - , Languages = ["ar", "fr"], UnofficialNames = ["Djibouti", "جيبوتي", "Dschibuti", "ジブチ", "吉布提"] - , Timezones = ["Africa/Djibouti,+0300"])] + [CountryInfo( + Mcc = ["638"], CallingCode = 253, Alpha3 = "DJI", ShortName = "Djibouti", LongName = "The Republic of Djibouti", CurrencyCode = "DJF" + , Languages = ["ar", "fr"], UnofficialNames = ["Djibouti", "جيبوتي", "Dschibuti", "ジブチ", "吉布提"], Timezones = ["Africa/Djibouti,+0300"] + )] [ResourceDescription(nameof(Ln.吉布提))] DJ = 262 - , + , /// /// 肯尼亚 /// - [CountryInfo(Mcc = ["639"], CallingCode = 254, Alpha3 = "KEN", ShortName = "Kenya", LongName = "The Republic of Kenya", CurrencyCode = "KES" - , Languages = ["en", "sw"], UnofficialNames = ["Kenya", "Kenia", "ケニア", "肯尼亚"], Timezones = ["Africa/Nairobi,+0300"])] + [CountryInfo( + Mcc = ["639"], CallingCode = 254, Alpha3 = "KEN", ShortName = "Kenya", LongName = "The Republic of Kenya", CurrencyCode = "KES" + , Languages = ["en", "sw"], UnofficialNames = ["Kenya", "Kenia", "ケニア", "肯尼亚"], Timezones = ["Africa/Nairobi,+0300"] + )] [ResourceDescription(nameof(Ln.肯尼亚))] KE = 404 - , + , /// /// 坦桑尼亚 /// - [CountryInfo(Mcc = ["640"], CallingCode = 255, Alpha3 = "TZA", ShortName = "Tanzania, United Republic of" - , LongName = "The United Republic of Tanzania", CurrencyCode = "TZS", Languages = ["sw", "en"] - , UnofficialNames = ["Tanzania", "Tansania", "Tanzanie", "タンザニア", "Tanzania United Republic", "坦桑尼亚"] - , Timezones = ["Africa/Dar_es_Salaam,+0300"])] + [CountryInfo( + Mcc = ["640"], CallingCode = 255, Alpha3 = "TZA", ShortName = "Tanzania, United Republic of", LongName = "The United Republic of Tanzania" + , CurrencyCode = "TZS", Languages = ["sw", "en"] + , UnofficialNames = ["Tanzania", "Tansania", "Tanzanie", "タンザニア", "Tanzania United Republic", "坦桑尼亚"] + , Timezones = ["Africa/Dar_es_Salaam,+0300"] + )] [ResourceDescription(nameof(Ln.坦桑尼亚))] TZ = 834 - , + , /// /// 乌干达 /// - [CountryInfo(Mcc = ["641"], CallingCode = 256, Alpha3 = "UGA", ShortName = "Uganda", LongName = "The Republic of Uganda", CurrencyCode = "UGX" - , Languages = ["en", "sw"], UnofficialNames = ["Uganda", "ウガンダ", "Oeganda", "乌干达"], Timezones = ["Africa/Kampala,+0300"])] + [CountryInfo( + Mcc = ["641"], CallingCode = 256, Alpha3 = "UGA", ShortName = "Uganda", LongName = "The Republic of Uganda", CurrencyCode = "UGX" + , Languages = ["en", "sw"], UnofficialNames = ["Uganda", "ウガンダ", "Oeganda", "乌干达"], Timezones = ["Africa/Kampala,+0300"] + )] [ResourceDescription(nameof(Ln.乌干达))] UG = 800 - , + , /// /// 布隆迪 /// - [CountryInfo(Mcc = ["642"], CallingCode = 257, Alpha3 = "BDI", ShortName = "Burundi", LongName = "The Republic of Burundi", CurrencyCode = "BIF" - , Languages = ["fr", "rn"], UnofficialNames = ["Burundi", "ブルンジ", "布隆迪"], Timezones = ["Africa/Bujumbura,+0200"])] + [CountryInfo( + Mcc = ["642"], CallingCode = 257, Alpha3 = "BDI", ShortName = "Burundi", LongName = "The Republic of Burundi", CurrencyCode = "BIF" + , Languages = ["fr", "rn"], UnofficialNames = ["Burundi", "ブルンジ", "布隆迪"], Timezones = ["Africa/Bujumbura,+0200"] + )] [ResourceDescription(nameof(Ln.布隆迪))] BI = 108 - , + , /// /// 莫桑比克 /// - [CountryInfo(Mcc = ["643"], CallingCode = 258, Alpha3 = "MOZ", ShortName = "Mozambique", LongName = "The Republic of Mozambique" - , CurrencyCode = "MZN", Languages = ["pt"], UnofficialNames = ["Mozambique", "Mosambik", "モザンビーク", "莫桑比克"] - , Timezones = ["Africa/Maputo,+0200"])] + [CountryInfo( + Mcc = ["643"], CallingCode = 258, Alpha3 = "MOZ", ShortName = "Mozambique", LongName = "The Republic of Mozambique", CurrencyCode = "MZN" + , Languages = ["pt"], UnofficialNames = ["Mozambique", "Mosambik", "モザンビーク", "莫桑比克"], Timezones = ["Africa/Maputo,+0200"] + )] [ResourceDescription(nameof(Ln.莫桑比克))] MZ = 508 - , + , /// /// 赞比亚 /// - [CountryInfo(Mcc = ["645"], CallingCode = 260, Alpha3 = "ZMB", ShortName = "Zambia", LongName = "The Republic of Zambia", CurrencyCode = "ZMW" - , Languages = ["en"], UnofficialNames = ["Zambia", "Sambia", "Zambie", "ザンビア", "赞比亚"], Timezones = ["Africa/Lusaka,+0200"])] + [CountryInfo( + Mcc = ["645"], CallingCode = 260, Alpha3 = "ZMB", ShortName = "Zambia", LongName = "The Republic of Zambia", CurrencyCode = "ZMW" + , Languages = ["en"], UnofficialNames = ["Zambia", "Sambia", "Zambie", "ザンビア", "赞比亚"], Timezones = ["Africa/Lusaka,+0200"] + )] [ResourceDescription(nameof(Ln.赞比亚))] ZM = 894 - , + , /// /// 马达加斯加 /// - [CountryInfo(Mcc = ["646"], CallingCode = 261, Alpha3 = "MDG", ShortName = "Madagascar", LongName = "The Republic of Madagascar" - , CurrencyCode = "MGA", Languages = ["fr", "mg"] - , UnofficialNames = ["Madagascar", "Madagaskar", "the Republic of Madagascar", "マダガスカル", "马达加斯加"] - , Timezones = ["Indian/Antananarivo,+0300"])] + [CountryInfo( + Mcc = ["646"], CallingCode = 261, Alpha3 = "MDG", ShortName = "Madagascar", LongName = "The Republic of Madagascar", CurrencyCode = "MGA" + , Languages = ["fr", "mg"], UnofficialNames = ["Madagascar", "Madagaskar", "the Republic of Madagascar", "マダガスカル", "马达加斯加"] + , Timezones = ["Indian/Antananarivo,+0300"] + )] [ResourceDescription(nameof(Ln.马达加斯加))] MG = 450 - , + , /// /// 留尼汪 /// - [CountryInfo(Mcc = [], CallingCode = 262, Alpha3 = "REU", ShortName = "Réunion", LongName = "Réunion", CurrencyCode = "EUR", Languages = ["fr"] - , UnofficialNames = ["Réunion", "Reunión", "Reunion", "レユニオン", "留尼汪"], IsPreferred = true, Timezones = ["Indian/Reunion,+0400"])] + [CountryInfo( + Mcc = [], CallingCode = 262, Alpha3 = "REU", ShortName = "Réunion", LongName = "Réunion", CurrencyCode = "EUR", Languages = ["fr"] + , UnofficialNames = ["Réunion", "Reunión", "Reunion", "レユニオン", "留尼汪"], IsPreferred = true, Timezones = ["Indian/Reunion,+0400"] + )] [ResourceDescription(nameof(Ln.留尼汪))] RE = 638 - , + , /// /// 法属南部和南极领地 /// - [CountryInfo(Mcc = [], CallingCode = 262, Alpha3 = "ATF", ShortName = "French Southern Territories" - , LongName = "The French Southern and Antarctic Lands", CurrencyCode = "EUR", Languages = ["fr"] - , UnofficialNames = [ - "French Southern Territories", "Französische Süd- und Antarktisgebiete", "Terres Australes Françaises" - , "Territorios Franceses del Sur", "フランス領南方・南極地域", "Franse Gebieden in de zuidelijke Indische Oceaan" - , "French Southern and Antarctic Lands", "法属南部和南极领地" - ], Timezones = ["Indian/Kerguelen,+0500"])] + [CountryInfo( + Mcc = [], CallingCode = 262, Alpha3 = "ATF", ShortName = "French Southern Territories", LongName = "The French Southern and Antarctic Lands" + , CurrencyCode = "EUR", Languages = ["fr"] + , UnofficialNames = + [ + "French Southern Territories", "Französische Süd- und Antarktisgebiete", "Terres Australes Françaises" + , "Territorios Franceses del Sur", "フランス領南方・南極地域", "Franse Gebieden in de zuidelijke Indische Oceaan" + , "French Southern and Antarctic Lands", "法属南部和南极领地" + ], Timezones = ["Indian/Kerguelen,+0500"] + )] [ResourceDescription(nameof(Ln.法属南部和南极领地))] TF = 260 - , + , /// /// 马约特 /// - [CountryInfo(Mcc = [], CallingCode = 262, CallingSubCode = ["269", "639"], Alpha3 = "MYT", ShortName = "Mayotte" - , LongName = "The Department of Mayotte", CurrencyCode = "EUR", Languages = ["fr"], UnofficialNames = ["Mayotte", "マヨット", "马约特"] - , Timezones = ["Indian/Mayotte,+0300"])] + [CountryInfo( + Mcc = [], CallingCode = 262, CallingSubCode = ["269", "639"], Alpha3 = "MYT", ShortName = "Mayotte", LongName = "The Department of Mayotte" + , CurrencyCode = "EUR", Languages = ["fr"], UnofficialNames = ["Mayotte", "マヨット", "马约特"], Timezones = ["Indian/Mayotte,+0300"] + )] [ResourceDescription(nameof(Ln.马约特))] YT = 175 - , + , /// /// 津巴布韦 /// - [CountryInfo(Mcc = ["648"], CallingCode = 263, Alpha3 = "ZWE", ShortName = "Zimbabwe", LongName = "The Republic of Zimbabwe", CurrencyCode = "USD" - , Languages = ["en", "sn", "nd"], UnofficialNames = ["Zimbabwe", "Simbabwe", "Zimbabue", "ジンバブエ", "津巴布韦"] - , Timezones = ["Africa/Harare,+0200"])] + [CountryInfo( + Mcc = ["648"], CallingCode = 263, Alpha3 = "ZWE", ShortName = "Zimbabwe", LongName = "The Republic of Zimbabwe", CurrencyCode = "USD" + , Languages = ["en", "sn", "nd"], UnofficialNames = ["Zimbabwe", "Simbabwe", "Zimbabue", "ジンバブエ", "津巴布韦"], Timezones = ["Africa/Harare,+0200"] + )] [ResourceDescription(nameof(Ln.津巴布韦))] ZW = 716 - , + , /// /// 纳米比亚 /// - [CountryInfo(Mcc = ["649"], CallingCode = 264, Alpha3 = "NAM", ShortName = "Namibia", LongName = "The Republic of Namibia", CurrencyCode = "NAD" - , Languages = ["en", "af"], UnofficialNames = ["Namibia", "Namibie", "ナミビア", "Namibië", "纳米比亚"] - , Timezones = ["Africa/Windhoek,+0200"])] + [CountryInfo( + Mcc = ["649"], CallingCode = 264, Alpha3 = "NAM", ShortName = "Namibia", LongName = "The Republic of Namibia", CurrencyCode = "NAD" + , Languages = ["en", "af"], UnofficialNames = ["Namibia", "Namibie", "ナミビア", "Namibië", "纳米比亚"], Timezones = ["Africa/Windhoek,+0200"] + )] [ResourceDescription(nameof(Ln.纳米比亚))] NA = 516 - , + , /// /// 马拉维 /// - [CountryInfo(Mcc = ["650"], CallingCode = 265, Alpha3 = "MWI", ShortName = "Malawi", LongName = "The Republic of Malawi", CurrencyCode = "MWK" - , Languages = ["en", "ny"], UnofficialNames = ["Malawi", "マラウイ", "马拉维"], Timezones = ["Africa/Blantyre,+0200"])] + [CountryInfo( + Mcc = ["650"], CallingCode = 265, Alpha3 = "MWI", ShortName = "Malawi", LongName = "The Republic of Malawi", CurrencyCode = "MWK" + , Languages = ["en", "ny"], UnofficialNames = ["Malawi", "マラウイ", "马拉维"], Timezones = ["Africa/Blantyre,+0200"] + )] [ResourceDescription(nameof(Ln.马拉维))] MW = 454 - , + , /// /// 莱索托 /// - [CountryInfo(Mcc = ["651"], CallingCode = 266, Alpha3 = "LSO", ShortName = "Lesotho", LongName = "The Kingdom of Lesotho", CurrencyCode = "LSL" - , Languages = ["en", "st"], UnofficialNames = ["Lesotho", "レソト", "莱索托"], Timezones = ["Africa/Maseru,+0200"])] + [CountryInfo( + Mcc = ["651"], CallingCode = 266, Alpha3 = "LSO", ShortName = "Lesotho", LongName = "The Kingdom of Lesotho", CurrencyCode = "LSL" + , Languages = ["en", "st"], UnofficialNames = ["Lesotho", "レソト", "莱索托"], Timezones = ["Africa/Maseru,+0200"] + )] [ResourceDescription(nameof(Ln.莱索托))] LS = 426 - , + , /// /// 博茨瓦纳 /// - [CountryInfo(Mcc = ["652"], CallingCode = 267, Alpha3 = "BWA", ShortName = "Botswana", LongName = "The Republic of Botswana", CurrencyCode = "BWP" - , Languages = ["en", "tn"], UnofficialNames = ["Botswana", "ボツワナ", "博茨瓦纳"], Timezones = ["Africa/Gaborone,+0200"])] + [CountryInfo( + Mcc = ["652"], CallingCode = 267, Alpha3 = "BWA", ShortName = "Botswana", LongName = "The Republic of Botswana", CurrencyCode = "BWP" + , Languages = ["en", "tn"], UnofficialNames = ["Botswana", "ボツワナ", "博茨瓦纳"], Timezones = ["Africa/Gaborone,+0200"] + )] [ResourceDescription(nameof(Ln.博茨瓦纳))] BW = 072 - , + , /// /// 斯威士兰 /// - [CountryInfo(Mcc = ["653"], CallingCode = 268, Alpha3 = "SWZ", ShortName = "Eswatini", LongName = "The Kingdom of Eswatini", CurrencyCode = "SZL" - , Languages = ["en", "ss"], UnofficialNames = ["Swaziland", "Swasiland", "Suazilandia", "スワジランド", "斯威士兰"] - , Timezones = ["Africa/Mbabane,+0200"])] + [CountryInfo( + Mcc = ["653"], CallingCode = 268, Alpha3 = "SWZ", ShortName = "Eswatini", LongName = "The Kingdom of Eswatini", CurrencyCode = "SZL" + , Languages = ["en", "ss"], UnofficialNames = ["Swaziland", "Swasiland", "Suazilandia", "スワジランド", "斯威士兰"] + , Timezones = ["Africa/Mbabane,+0200"] + )] [ResourceDescription(nameof(Ln.斯威士兰))] SZ = 748 - , + , /// /// 科摩罗 /// - [CountryInfo(Mcc = ["654"], CallingCode = 269, Alpha3 = "COM", ShortName = "Comoros", LongName = "The Union of the Comoros", CurrencyCode = "KMF" - , Languages = ["ar", "fr"], UnofficialNames = ["Comoros", "Union der Komoren", "Comores", "コモロ", "Comoren", "科摩罗"] - , Timezones = ["Indian/Comoro,+0300"])] + [CountryInfo( + Mcc = ["654"], CallingCode = 269, Alpha3 = "COM", ShortName = "Comoros", LongName = "The Union of the Comoros", CurrencyCode = "KMF" + , Languages = ["ar", "fr"], UnofficialNames = ["Comoros", "Union der Komoren", "Comores", "コモロ", "Comoren", "科摩罗"] + , Timezones = ["Indian/Comoro,+0300"] + )] [ResourceDescription(nameof(Ln.科摩罗))] KM = 174 - , + , /// /// 圣赫勒拿 /// - [CountryInfo(Mcc = ["658"], CallingCode = 290, Alpha3 = "SHN", ShortName = "Saint Helena, Ascension and Tristan da Cunha" - , LongName = "Saint Helena, Ascension and Tristan da Cunha", CurrencyCode = "SHP", Languages = ["en"] - , UnofficialNames = [ - "Saint Helena", "Sankt Helena", "Sainte Hélène", "Santa Helena", "セントヘレナ・アセンションおよびトリスタンダクーニャ", "Sint-Helena" - , "Saint Helena, Ascension and Tristan da Cunha", "圣赫勒拿" - ], Timezones = ["Atlantic/St_Helena,+0000"])] + [CountryInfo( + Mcc = ["658"], CallingCode = 290, Alpha3 = "SHN", ShortName = "Saint Helena, Ascension and Tristan da Cunha" + , LongName = "Saint Helena, Ascension and Tristan da Cunha", CurrencyCode = "SHP", Languages = ["en"] + , UnofficialNames = + [ + "Saint Helena", "Sankt Helena", "Sainte Hélène", "Santa Helena", "セントヘレナ・アセンションおよびトリスタンダクーニャ", "Sint-Helena" + , "Saint Helena, Ascension and Tristan da Cunha", "圣赫勒拿" + ], Timezones = ["Atlantic/St_Helena,+0000"] + )] [ResourceDescription(nameof(Ln.圣赫勒拿))] SH = 654 - , + , /// /// 厄立特里亚 /// - [CountryInfo(Mcc = ["657"], CallingCode = 291, Alpha3 = "ERI", ShortName = "Eritrea", LongName = "The State of Eritrea", CurrencyCode = "ETB" - , Languages = ["en", "ar", "ti"], UnofficialNames = ["Eritrea", "إريتريا", "Érythrée", "エリトリア", "厄立特里亚"] - , Timezones = ["Africa/Asmara,+0300"])] + [CountryInfo( + Mcc = ["657"], CallingCode = 291, Alpha3 = "ERI", ShortName = "Eritrea", LongName = "The State of Eritrea", CurrencyCode = "ETB" + , Languages = ["en", "ar", "ti"], UnofficialNames = ["Eritrea", "إريتريا", "Érythrée", "エリトリア", "厄立特里亚"], Timezones = ["Africa/Asmara,+0300"] + )] [ResourceDescription(nameof(Ln.厄立特里亚))] ER = 232 - , + , /// /// 阿鲁巴 /// - [CountryInfo(Mcc = ["363"], CallingCode = 297, Alpha3 = "ABW", ShortName = "Aruba", LongName = "Aruba", CurrencyCode = "AWG", Languages = ["nl"] - , UnofficialNames = ["Aruba", "アルバ", "阿鲁巴"], Timezones = ["America/Aruba,-0400"])] + [CountryInfo( + Mcc = ["363"], CallingCode = 297, Alpha3 = "ABW", ShortName = "Aruba", LongName = "Aruba", CurrencyCode = "AWG", Languages = ["nl"] + , UnofficialNames = ["Aruba", "アルバ", "阿鲁巴"], Timezones = ["America/Aruba,-0400"] + )] [ResourceDescription(nameof(Ln.阿鲁巴))] AW = 533 - , + , /// /// 法罗群岛 /// - [CountryInfo(Mcc = ["288"], CallingCode = 298, Alpha3 = "FRO", ShortName = "Faroe Islands", LongName = "The Faroe Islands", CurrencyCode = "DKK" - , Languages = ["fo"], UnofficialNames = ["Faroe Islands", "Färöer-Inseln", "Îles Féroé", "Islas Faroe", "フェロー諸島", "Faeröer", "法罗群岛"] - , Timezones = ["Atlantic/Faroe,+0000"])] + [CountryInfo( + Mcc = ["288"], CallingCode = 298, Alpha3 = "FRO", ShortName = "Faroe Islands", LongName = "The Faroe Islands", CurrencyCode = "DKK" + , Languages = ["fo"], UnofficialNames = ["Faroe Islands", "Färöer-Inseln", "Îles Féroé", "Islas Faroe", "フェロー諸島", "Faeröer", "法罗群岛"] + , Timezones = ["Atlantic/Faroe,+0000"] + )] [ResourceDescription(nameof(Ln.法罗群岛))] FO = 234 - , + , /// /// 格陵兰 /// - [CountryInfo(Mcc = ["290"], CallingCode = 299, Alpha3 = "GRL", ShortName = "Greenland", LongName = "Kalaallit Nunaat", CurrencyCode = "DKK" - , Languages = ["kl"], UnofficialNames = ["Greenland", "Grönland", "Groenland", "Groenlandia", "グリーンランド", "格陵兰"] - , Timezones = ["America/Danmarkshavn,+0000", "America/Nuuk,-0200", "America/Scoresbysund,-0200", "America/Thule,-0400"])] + [CountryInfo( + Mcc = ["290"], CallingCode = 299, Alpha3 = "GRL", ShortName = "Greenland", LongName = "Kalaallit Nunaat", CurrencyCode = "DKK" + , Languages = ["kl"], UnofficialNames = ["Greenland", "Grönland", "Groenland", "Groenlandia", "グリーンランド", "格陵兰"] + , Timezones = ["America/Danmarkshavn,+0000", "America/Nuuk,-0200", "America/Scoresbysund,-0200", "America/Thule,-0400"] + )] [ResourceDescription(nameof(Ln.格陵兰))] GL = 304 - , + , /// /// 直布罗陀 /// - [CountryInfo(Mcc = ["266"], CallingCode = 350, Alpha3 = "GIB", ShortName = "Gibraltar", LongName = "Gibraltar", CurrencyCode = "GIP" - , Languages = ["en"], UnofficialNames = ["Gibraltar", "ジブラルタル", "直布罗陀"], Timezones = ["Europe/Gibraltar,+0100"])] + [CountryInfo( + Mcc = ["266"], CallingCode = 350, Alpha3 = "GIB", ShortName = "Gibraltar", LongName = "Gibraltar", CurrencyCode = "GIP", Languages = ["en"] + , UnofficialNames = ["Gibraltar", "ジブラルタル", "直布罗陀"], Timezones = ["Europe/Gibraltar,+0100"] + )] [ResourceDescription(nameof(Ln.直布罗陀))] GI = 292 - , + , /// /// 葡萄牙 /// - [CountryInfo(Mcc = ["268"], CallingCode = 351, Alpha3 = "PRT", ShortName = "Portugal", LongName = "The Portuguese Republic", CurrencyCode = "EUR" - , Languages = ["pt"], UnofficialNames = ["Portugal", "ポルトガル", "葡萄牙"] - , Timezones = ["Atlantic/Azores,-0100", "Atlantic/Madeira,+0000", "Europe/Lisbon,+0000"])] + [CountryInfo( + Mcc = ["268"], CallingCode = 351, Alpha3 = "PRT", ShortName = "Portugal", LongName = "The Portuguese Republic", CurrencyCode = "EUR" + , Languages = ["pt"], UnofficialNames = ["Portugal", "ポルトガル", "葡萄牙"] + , Timezones = ["Atlantic/Azores,-0100", "Atlantic/Madeira,+0000", "Europe/Lisbon,+0000"] + )] [ResourceDescription(nameof(Ln.葡萄牙))] PT = 620 - , + , /// /// 卢森堡 /// - [CountryInfo(Mcc = ["270"], CallingCode = 352, Alpha3 = "LUX", ShortName = "Luxembourg", LongName = "The Grand Duchy of Luxembourg" - , CurrencyCode = "EUR", Languages = ["fr", "de", "lb"], UnofficialNames = ["Luxembourg", "Luxemburg", "Luxemburgo", "ルクセンブルク", "卢森堡"] - , Timezones = ["Europe/Luxembourg,+0100"])] + [CountryInfo( + Mcc = ["270"], CallingCode = 352, Alpha3 = "LUX", ShortName = "Luxembourg", LongName = "The Grand Duchy of Luxembourg", CurrencyCode = "EUR" + , Languages = ["fr", "de", "lb"], UnofficialNames = ["Luxembourg", "Luxemburg", "Luxemburgo", "ルクセンブルク", "卢森堡"] + , Timezones = ["Europe/Luxembourg,+0100"] + )] [ResourceDescription(nameof(Ln.卢森堡))] LU = 442 - , + , /// /// 爱尔兰 /// - [CountryInfo(Mcc = ["272"], CallingCode = 353, Alpha3 = "IRL", ShortName = "Ireland", LongName = "Ireland", CurrencyCode = "EUR" - , Languages = ["en", "ga"], UnofficialNames = ["Ireland", "Irland", "Irlande", "Irlanda", "アイルランド", "Ierland", "爱尔兰"] - , Timezones = ["Europe/Dublin,+0000"])] + [CountryInfo( + Mcc = ["272"], CallingCode = 353, Alpha3 = "IRL", ShortName = "Ireland", LongName = "Ireland", CurrencyCode = "EUR", Languages = ["en", "ga"] + , UnofficialNames = ["Ireland", "Irland", "Irlande", "Irlanda", "アイルランド", "Ierland", "爱尔兰"], Timezones = ["Europe/Dublin,+0000"] + )] [ResourceDescription(nameof(Ln.爱尔兰))] IE = 372 - , + , /// /// 冰岛 /// - [CountryInfo(Mcc = ["274"], CallingCode = 354, Alpha3 = "ISL", ShortName = "Iceland", LongName = "Iceland", CurrencyCode = "ISK" - , Languages = ["is"], UnofficialNames = ["Iceland", "Island", "Islande", "Islandia", "アイスランド", "IJsland", "冰岛"] - , Timezones = ["Atlantic/Reykjavik,+0000"])] + [CountryInfo( + Mcc = ["274"], CallingCode = 354, Alpha3 = "ISL", ShortName = "Iceland", LongName = "Iceland", CurrencyCode = "ISK", Languages = ["is"] + , UnofficialNames = ["Iceland", "Island", "Islande", "Islandia", "アイスランド", "IJsland", "冰岛"], Timezones = ["Atlantic/Reykjavik,+0000"] + )] [ResourceDescription(nameof(Ln.冰岛))] IS = 352 - , + , /// /// 阿尔巴尼亚 /// - [CountryInfo(Mcc = ["276"], CallingCode = 355, Alpha3 = "ALB", ShortName = "Albania", LongName = "The Republic of Albania", CurrencyCode = "ALL" - , Languages = ["sq"], UnofficialNames = ["Albania", "Albanien", "Albanie", "アルバニア", "Albanië", "阿尔巴尼亚"] - , Timezones = ["Europe/Tirane,+0100"])] + [CountryInfo( + Mcc = ["276"], CallingCode = 355, Alpha3 = "ALB", ShortName = "Albania", LongName = "The Republic of Albania", CurrencyCode = "ALL" + , Languages = ["sq"], UnofficialNames = ["Albania", "Albanien", "Albanie", "アルバニア", "Albanië", "阿尔巴尼亚"], Timezones = ["Europe/Tirane,+0100"] + )] [ResourceDescription(nameof(Ln.阿尔巴尼亚))] AL = 008 - , + , /// /// 马耳他 /// - [CountryInfo(Mcc = ["278"], CallingCode = 356, Alpha3 = "MLT", ShortName = "Malta", LongName = "The Republic of Malta", CurrencyCode = "EUR" - , Languages = ["mt", "en"], UnofficialNames = ["Malta", "Malte", "マルタ", "马耳他"], Timezones = ["Europe/Malta,+0100"])] + [CountryInfo( + Mcc = ["278"], CallingCode = 356, Alpha3 = "MLT", ShortName = "Malta", LongName = "The Republic of Malta", CurrencyCode = "EUR" + , Languages = ["mt", "en"], UnofficialNames = ["Malta", "Malte", "マルタ", "马耳他"], Timezones = ["Europe/Malta,+0100"] + )] [ResourceDescription(nameof(Ln.马耳他))] MT = 470 - , + , /// /// 塞浦路斯 /// - [CountryInfo(Mcc = ["280"], CallingCode = 357, Alpha3 = "CYP", ShortName = "Cyprus", LongName = "The Republic of Cyprus", CurrencyCode = "EUR" - , Languages = ["el", "tr", "hy"], UnofficialNames = ["Cyprus", "Zypern", "Chypre", "Chipre", "キプロス", "塞浦路斯"] - , Timezones = ["Asia/Famagusta,+0200", "Asia/Nicosia,+0200"])] + [CountryInfo( + Mcc = ["280"], CallingCode = 357, Alpha3 = "CYP", ShortName = "Cyprus", LongName = "The Republic of Cyprus", CurrencyCode = "EUR" + , Languages = ["el", "tr", "hy"], UnofficialNames = ["Cyprus", "Zypern", "Chypre", "Chipre", "キプロス", "塞浦路斯"] + , Timezones = ["Asia/Famagusta,+0200", "Asia/Nicosia,+0200"] + )] [ResourceDescription(nameof(Ln.塞浦路斯))] CY = 196 - , + , /// /// 奥兰 /// - [CountryInfo(Mcc = [], CallingCode = 358, CallingSubCode = ["18"], Alpha3 = "ALA", ShortName = "Åland Islands", LongName = "Åland" - , CurrencyCode = "EUR", Languages = ["sv"], UnofficialNames = ["Åland Islands", "Åland", "オーランド諸島", "Ålandeilanden", "奥兰"] - , Timezones = ["Europe/Mariehamn,+0200"])] + [CountryInfo( + Mcc = [], CallingCode = 358, CallingSubCode = ["18"], Alpha3 = "ALA", ShortName = "Åland Islands", LongName = "Åland", CurrencyCode = "EUR" + , Languages = ["sv"], UnofficialNames = ["Åland Islands", "Åland", "オーランド諸島", "Ålandeilanden", "奥兰"], Timezones = ["Europe/Mariehamn,+0200"] + )] [ResourceDescription(nameof(Ln.奥兰))] AX = 248 - , + , /// /// 芬兰 /// - [CountryInfo(Mcc = ["244"], CallingCode = 358, Alpha3 = "FIN", ShortName = "Finland", LongName = "The Republic of Finland", CurrencyCode = "EUR" - , Languages = ["fi", "sv"], UnofficialNames = ["Finland", "Finnland", "Finlande", "Finlandia", "フィンランド", "芬兰"], IsPreferred = true - , Timezones = ["Europe/Helsinki,+0200"])] + [CountryInfo( + Mcc = ["244"], CallingCode = 358, Alpha3 = "FIN", ShortName = "Finland", LongName = "The Republic of Finland", CurrencyCode = "EUR" + , Languages = ["fi", "sv"], UnofficialNames = ["Finland", "Finnland", "Finlande", "Finlandia", "フィンランド", "芬兰"], IsPreferred = true + , Timezones = ["Europe/Helsinki,+0200"] + )] [ResourceDescription(nameof(Ln.芬兰))] FI = 246 - , + , /// /// 保加利亚 /// - [CountryInfo(Mcc = ["284"], CallingCode = 359, Alpha3 = "BGR", ShortName = "Bulgaria", LongName = "The Republic of Bulgaria", CurrencyCode = "BGN" - , Languages = ["bg"], UnofficialNames = ["Bulgaria", "България", "Bulgarien", "Bulgarie", "ブルガリア", "Bulgarije", "保加利亚"] - , Timezones = ["Europe/Sofia,+0200"])] + [CountryInfo( + Mcc = ["284"], CallingCode = 359, Alpha3 = "BGR", ShortName = "Bulgaria", LongName = "The Republic of Bulgaria", CurrencyCode = "BGN" + , Languages = ["bg"], UnofficialNames = ["Bulgaria", "България", "Bulgarien", "Bulgarie", "ブルガリア", "Bulgarije", "保加利亚"] + , Timezones = ["Europe/Sofia,+0200"] + )] [ResourceDescription(nameof(Ln.保加利亚))] BG = 100 - , + , /// /// 立陶宛 /// - [CountryInfo(Mcc = ["246"], CallingCode = 370, Alpha3 = "LTU", ShortName = "Lithuania", LongName = "The Republic of Lithuania" - , CurrencyCode = "EUR", Languages = ["lt"] - , UnofficialNames = ["Lithuania", "Litauen", "Lituanie", "Lituania", "リトアニア", "Litouwen", "Літва", "Lietuva", "立陶宛"] - , Timezones = ["Europe/Vilnius,+0200"])] + [CountryInfo( + Mcc = ["246"], CallingCode = 370, Alpha3 = "LTU", ShortName = "Lithuania", LongName = "The Republic of Lithuania", CurrencyCode = "EUR" + , Languages = ["lt"], UnofficialNames = ["Lithuania", "Litauen", "Lituanie", "Lituania", "リトアニア", "Litouwen", "Літва", "Lietuva", "立陶宛"] + , Timezones = ["Europe/Vilnius,+0200"] + )] [ResourceDescription(nameof(Ln.立陶宛))] LT = 440 - , + , /// /// 拉脱维亚 /// - [CountryInfo(Mcc = ["247"], CallingCode = 371, Alpha3 = "LVA", ShortName = "Latvia", LongName = "The Republic of Latvia", CurrencyCode = "EUR" - , Languages = ["lv"], UnofficialNames = ["Latvia", "Lettland", "Lettonie", "Letonia", "ラトビア", "Letland", "拉脱维亚"] - , Timezones = ["Europe/Riga,+0200"])] + [CountryInfo( + Mcc = ["247"], CallingCode = 371, Alpha3 = "LVA", ShortName = "Latvia", LongName = "The Republic of Latvia", CurrencyCode = "EUR" + , Languages = ["lv"], UnofficialNames = ["Latvia", "Lettland", "Lettonie", "Letonia", "ラトビア", "Letland", "拉脱维亚"] + , Timezones = ["Europe/Riga,+0200"] + )] [ResourceDescription(nameof(Ln.拉脱维亚))] LV = 428 - , + , /// /// 爱沙尼亚 /// - [CountryInfo(Mcc = ["248"], CallingCode = 372, Alpha3 = "EST", ShortName = "Estonia", LongName = "The Republic of Estonia", CurrencyCode = "EUR" - , Languages = ["et"], UnofficialNames = ["Estonia", "Estland", "Estonie", "エストニア", "爱沙尼亚"], Timezones = ["Europe/Tallinn,+0200"])] + [CountryInfo( + Mcc = ["248"], CallingCode = 372, Alpha3 = "EST", ShortName = "Estonia", LongName = "The Republic of Estonia", CurrencyCode = "EUR" + , Languages = ["et"], UnofficialNames = ["Estonia", "Estland", "Estonie", "エストニア", "爱沙尼亚"], Timezones = ["Europe/Tallinn,+0200"] + )] [ResourceDescription(nameof(Ln.爱沙尼亚))] EE = 233 - , + , /// /// 摩尔多瓦 /// - [CountryInfo(Mcc = ["259"], CallingCode = 373, Alpha3 = "MDA", ShortName = "Moldova (Republic of)", LongName = "The Republic of Moldova" - , CurrencyCode = "MDL", Languages = ["ro"] - , UnofficialNames = ["Moldova", "Moldawien", "Moldavie", "Moldavia", "the Republic of Moldova", "モルドバ共和国", "Moldavië", "摩尔多瓦"] - , Timezones = ["Europe/Chisinau,+0200"])] + [CountryInfo( + Mcc = ["259"], CallingCode = 373, Alpha3 = "MDA", ShortName = "Moldova (Republic of)", LongName = "The Republic of Moldova" + , CurrencyCode = "MDL", Languages = ["ro"] + , UnofficialNames = ["Moldova", "Moldawien", "Moldavie", "Moldavia", "the Republic of Moldova", "モルドバ共和国", "Moldavië", "摩尔多瓦"] + , Timezones = ["Europe/Chisinau,+0200"] + )] [ResourceDescription(nameof(Ln.摩尔多瓦))] MD = 498 - , + , /// /// 亚美尼亚 /// - [CountryInfo(Mcc = ["283"], CallingCode = 374, Alpha3 = "ARM", ShortName = "Armenia", LongName = "The Republic of Armenia", CurrencyCode = "AMD" - , Languages = ["hy", "ru"], UnofficialNames = ["Armenia", "Armenien", "Arménie", "アルメニア", "Armenië", "亚美尼亚"] - , Timezones = ["Asia/Yerevan,+0400"])] + [CountryInfo( + Mcc = ["283"], CallingCode = 374, Alpha3 = "ARM", ShortName = "Armenia", LongName = "The Republic of Armenia", CurrencyCode = "AMD" + , Languages = ["hy", "ru"], UnofficialNames = ["Armenia", "Armenien", "Arménie", "アルメニア", "Armenië", "亚美尼亚"] + , Timezones = ["Asia/Yerevan,+0400"] + )] [ResourceDescription(nameof(Ln.亚美尼亚))] AM = 051 - , + , /// /// 白俄罗斯 /// - [CountryInfo(Mcc = ["257"], CallingCode = 375, Alpha3 = "BLR", ShortName = "Belarus", LongName = "The Republic of Belarus", CurrencyCode = "BYN" - , Languages = ["be", "ru"] - , UnofficialNames = ["Belarus", "Weißrussland", "Biélorussie", "Bielorrusia", "ベラルーシ", "Wit-Rusland", "Беларусь", "白俄罗斯"] - , Timezones = ["Europe/Minsk,+0300"])] + [CountryInfo( + Mcc = ["257"], CallingCode = 375, Alpha3 = "BLR", ShortName = "Belarus", LongName = "The Republic of Belarus", CurrencyCode = "BYN" + , Languages = ["be", "ru"] + , UnofficialNames = ["Belarus", "Weißrussland", "Biélorussie", "Bielorrusia", "ベラルーシ", "Wit-Rusland", "Беларусь", "白俄罗斯"] + , Timezones = ["Europe/Minsk,+0300"] + )] [ResourceDescription(nameof(Ln.白俄罗斯))] BY = 112 - , + , /// /// 安道尔 /// - [CountryInfo(Mcc = ["213"], CallingCode = 376, Alpha3 = "AND", ShortName = "Andorra", LongName = "The Principality of Andorra" - , CurrencyCode = "EUR", Languages = ["ca"], UnofficialNames = ["Andorre", "Andorra", "アンドラ", "安道尔"] - , Timezones = ["Europe/Andorra,+0100"])] + [CountryInfo( + Mcc = ["213"], CallingCode = 376, Alpha3 = "AND", ShortName = "Andorra", LongName = "The Principality of Andorra", CurrencyCode = "EUR" + , Languages = ["ca"], UnofficialNames = ["Andorre", "Andorra", "アンドラ", "安道尔"], Timezones = ["Europe/Andorra,+0100"] + )] [ResourceDescription(nameof(Ln.安道尔))] AD = 020 - , + , /// /// 摩纳哥 /// - [CountryInfo(Mcc = ["212"], CallingCode = 377, Alpha3 = "MCO", ShortName = "Monaco", LongName = "The Principality of Monaco", CurrencyCode = "EUR" - , Languages = ["fr"], UnofficialNames = ["Monaco", "Mónaco", "モナコ", "摩纳哥"], Timezones = ["Europe/Monaco,+0100"])] + [CountryInfo( + Mcc = ["212"], CallingCode = 377, Alpha3 = "MCO", ShortName = "Monaco", LongName = "The Principality of Monaco", CurrencyCode = "EUR" + , Languages = ["fr"], UnofficialNames = ["Monaco", "Mónaco", "モナコ", "摩纳哥"], Timezones = ["Europe/Monaco,+0100"] + )] [ResourceDescription(nameof(Ln.摩纳哥))] MC = 492 - , + , /// /// 圣马力诺 /// - [CountryInfo(Mcc = ["292"], CallingCode = 378, Alpha3 = "SMR", ShortName = "San Marino", LongName = "The Republic of San Marino" - , CurrencyCode = "EUR", Languages = ["it"], UnofficialNames = ["San Marino", "Saint-Marin", "サンマリノ", "圣马力诺"] - , Timezones = ["Europe/San_Marino,+0100"])] + [CountryInfo( + Mcc = ["292"], CallingCode = 378, Alpha3 = "SMR", ShortName = "San Marino", LongName = "The Republic of San Marino", CurrencyCode = "EUR" + , Languages = ["it"], UnofficialNames = ["San Marino", "Saint-Marin", "サンマリノ", "圣马力诺"], Timezones = ["Europe/San_Marino,+0100"] + )] [ResourceDescription(nameof(Ln.圣马力诺))] SM = 674 - , + , /// /// 梵蒂冈 /// - [CountryInfo(Mcc = [], CallingCode = 39, CallingSubCode = ["06698"], Alpha3 = "VAT", ShortName = "Holy See", LongName = "The Holy See" - , CurrencyCode = "EUR", Languages = ["it", "la"] - , UnofficialNames = [ - "Vatican City", "Vatikan", "Cité du Vatican", "Ciudad del Vaticano", "バチカン市国", "Vaticaanstad", "Vatican City State (Holy See)" - , "梵蒂冈" - ], Timezones = ["Europe/Vatican,+0100"])] + [CountryInfo( + Mcc = [], CallingCode = 39, CallingSubCode = ["06698"], Alpha3 = "VAT", ShortName = "Holy See", LongName = "The Holy See" + , CurrencyCode = "EUR", Languages = ["it", "la"] + , UnofficialNames = + [ + "Vatican City", "Vatikan", "Cité du Vatican", "Ciudad del Vaticano", "バチカン市国", "Vaticaanstad", "Vatican City State (Holy See)", "梵蒂冈" + ], Timezones = ["Europe/Vatican,+0100"] + )] [ResourceDescription(nameof(Ln.梵蒂冈))] VA = 336 - , + , /// /// 乌克兰 /// - [CountryInfo(Mcc = ["255"], CallingCode = 380, Alpha3 = "UKR", ShortName = "Ukraine", LongName = "Ukraine", CurrencyCode = "UAH" - , Languages = ["uk"], UnofficialNames = ["Ukraine", "Ucrania", "ウクライナ", "Oekraïne", "Украина", "Україна", "Украіна", "乌克兰"] - , Timezones = ["Europe/Kyiv,+0200", "Europe/Simferopol,+0300"])] + [CountryInfo( + Mcc = ["255"], CallingCode = 380, Alpha3 = "UKR", ShortName = "Ukraine", LongName = "Ukraine", CurrencyCode = "UAH", Languages = ["uk"] + , UnofficialNames = ["Ukraine", "Ucrania", "ウクライナ", "Oekraïne", "Украина", "Україна", "Украіна", "乌克兰"] + , Timezones = ["Europe/Kyiv,+0200", "Europe/Simferopol,+0300"] + )] [ResourceDescription(nameof(Ln.乌克兰))] UA = 804 - , + , /// /// 塞尔维亚 /// - [CountryInfo(Mcc = ["220"], CallingCode = 381, Alpha3 = "SRB", ShortName = "Serbia", LongName = "The Republic of Serbia", CurrencyCode = "RSD" - , Languages = ["sr"], UnofficialNames = ["Serbia", "Serbien", "Serbie", "セルビア", "Servië", "塞尔维亚"] - , Timezones = ["Europe/Belgrade,+0100"])] + [CountryInfo( + Mcc = ["220"], CallingCode = 381, Alpha3 = "SRB", ShortName = "Serbia", LongName = "The Republic of Serbia", CurrencyCode = "RSD" + , Languages = ["sr"], UnofficialNames = ["Serbia", "Serbien", "Serbie", "セルビア", "Servië", "塞尔维亚"], Timezones = ["Europe/Belgrade,+0100"] + )] [ResourceDescription(nameof(Ln.塞尔维亚))] RS = 688 - , + , /// /// 黑山 /// - [CountryInfo(Mcc = ["297"], CallingCode = 382, Alpha3 = "MNE", ShortName = "Montenegro", LongName = "Montenegro", CurrencyCode = "EUR" - , Languages = ["sr", "bs", "sq", "hr"], UnofficialNames = ["Crna Gora", "Montenegro", "モンテネグロ", "黑山"] - , Timezones = ["Europe/Podgorica,+0100"])] + [CountryInfo( + Mcc = ["297"], CallingCode = 382, Alpha3 = "MNE", ShortName = "Montenegro", LongName = "Montenegro", CurrencyCode = "EUR" + , Languages = ["sr", "bs", "sq", "hr"], UnofficialNames = ["Crna Gora", "Montenegro", "モンテネグロ", "黑山"], Timezones = ["Europe/Podgorica,+0100"] + )] [ResourceDescription(nameof(Ln.黑山))] ME = 499 - , + , /// /// 克罗地亚 /// - [CountryInfo(Mcc = ["219"], CallingCode = 385, Alpha3 = "HRV", ShortName = "Croatia", LongName = "The Republic of Croatia", CurrencyCode = "EUR" - , Languages = ["hr"], UnofficialNames = ["Croatia", "Kroatien", "Croatie", "Croacia", "クロアチア", "Kroatië", "Croatia (Hrvatska)", "克罗地亚"] - , Timezones = ["Europe/Zagreb,+0100"])] + [CountryInfo( + Mcc = ["219"], CallingCode = 385, Alpha3 = "HRV", ShortName = "Croatia", LongName = "The Republic of Croatia", CurrencyCode = "EUR" + , Languages = ["hr"], UnofficialNames = ["Croatia", "Kroatien", "Croatie", "Croacia", "クロアチア", "Kroatië", "Croatia (Hrvatska)", "克罗地亚"] + , Timezones = ["Europe/Zagreb,+0100"] + )] [ResourceDescription(nameof(Ln.克罗地亚))] HR = 191 - , + , /// /// 斯洛文尼亚 /// - [CountryInfo(Mcc = ["293"], CallingCode = 386, Alpha3 = "SVN", ShortName = "Slovenia", LongName = "The Republic of Slovenia", CurrencyCode = "EUR" - , Languages = ["sl"], UnofficialNames = ["Slovenia", "Slowenien", "Slovénie", "Eslovenia", "スロベニア", "Slovenië", "斯洛文尼亚"] - , Timezones = ["Europe/Ljubljana,+0100"])] + [CountryInfo( + Mcc = ["293"], CallingCode = 386, Alpha3 = "SVN", ShortName = "Slovenia", LongName = "The Republic of Slovenia", CurrencyCode = "EUR" + , Languages = ["sl"], UnofficialNames = ["Slovenia", "Slowenien", "Slovénie", "Eslovenia", "スロベニア", "Slovenië", "斯洛文尼亚"] + , Timezones = ["Europe/Ljubljana,+0100"] + )] [ResourceDescription(nameof(Ln.斯洛文尼亚))] SI = 705 - , + , /// /// 波黑 /// - [CountryInfo(Mcc = ["218"], CallingCode = 387, Alpha3 = "BIH", ShortName = "Bosnia and Herzegovina", LongName = "Bosnia and Herzegovina" - , CurrencyCode = "BAM", Languages = ["bs", "hr", "sr"] - , UnofficialNames = [ - "Bosnia and Herzegovina", "Bosnien und Herzegowina", "Bosnie et Herzégovine", "Bosnia y Herzegovina", "ボスニア・ヘルツェゴビナ" - , "Bosnië en Herzegovina", "Bosnia Herzegovina", "波黑" - ], Timezones = ["Europe/Sarajevo,+0100"])] + [CountryInfo( + Mcc = ["218"], CallingCode = 387, Alpha3 = "BIH", ShortName = "Bosnia and Herzegovina", LongName = "Bosnia and Herzegovina" + , CurrencyCode = "BAM", Languages = ["bs", "hr", "sr"] + , UnofficialNames = + [ + "Bosnia and Herzegovina", "Bosnien und Herzegowina", "Bosnie et Herzégovine", "Bosnia y Herzegovina", "ボスニア・ヘルツェゴビナ" + , "Bosnië en Herzegovina", "Bosnia Herzegovina", "波黑" + ], Timezones = ["Europe/Sarajevo,+0100"] + )] [ResourceDescription(nameof(Ln.波黑))] BA = 070 - , + , /// /// 北马其顿 /// - [CountryInfo(Mcc = ["294"], CallingCode = 389, Alpha3 = "MKD", ShortName = "North Macedonia", LongName = "The Republic of North Macedonia" - , CurrencyCode = "MKD", Languages = ["mk"] - , UnofficialNames = [ - "Macedonia", "Mazedonien", "Macédoine", "F.Y.R.O.M (Macedonia)", "マケドニア旧ユーゴスラビア共和国", "Macedonië [FYROM]" - , "Macedonia (The Former Yugoslav Republic of)", "North Macedonia", "Macedonia (FYROM)", "北马其顿" - ], Timezones = ["Europe/Skopje,+0100"])] + [CountryInfo( + Mcc = ["294"], CallingCode = 389, Alpha3 = "MKD", ShortName = "North Macedonia", LongName = "The Republic of North Macedonia" + , CurrencyCode = "MKD", Languages = ["mk"] + , UnofficialNames = + [ + "Macedonia", "Mazedonien", "Macédoine", "F.Y.R.O.M (Macedonia)", "マケドニア旧ユーゴスラビア共和国", "Macedonië [FYROM]" + , "Macedonia (The Former Yugoslav Republic of)", "North Macedonia", "Macedonia (FYROM)", "北马其顿" + ], Timezones = ["Europe/Skopje,+0100"] + )] [ResourceDescription(nameof(Ln.北马其顿))] MK = 807 - , + , /// /// 捷克 /// - [CountryInfo(Mcc = ["230"], CallingCode = 420, Alpha3 = "CZE", ShortName = "Czechia", LongName = "The Czech Republic", CurrencyCode = "CZK" - , Languages = ["cs"] - , UnofficialNames = [ - "Czech Republic", "Tschechische Republik", "République Tchèque", "República Checa", "チェコ", "Tsjechië", "Czechia" - , "Česká republika", "捷克" - ], Timezones = ["Europe/Prague,+0100"])] + [CountryInfo( + Mcc = ["230"], CallingCode = 420, Alpha3 = "CZE", ShortName = "Czechia", LongName = "The Czech Republic", CurrencyCode = "CZK" + , Languages = ["cs"] + , UnofficialNames = + [ + "Czech Republic", "Tschechische Republik", "République Tchèque", "República Checa", "チェコ", "Tsjechië", "Czechia", "Česká republika" + , "捷克" + ], Timezones = ["Europe/Prague,+0100"] + )] [ResourceDescription(nameof(Ln.捷克))] CZ = 203 - , + , /// /// 斯洛伐克 /// - [CountryInfo(Mcc = ["231"], CallingCode = 421, Alpha3 = "SVK", ShortName = "Slovakia", LongName = "The Slovak Republic", CurrencyCode = "EUR" - , Languages = ["sk"], UnofficialNames = ["Slovakia", "Slowakei", "Slovaquie", "República Eslovaca", "スロバキア", "Slowakije", "斯洛伐克"] - , Timezones = ["Europe/Bratislava,+0100"])] + [CountryInfo( + Mcc = ["231"], CallingCode = 421, Alpha3 = "SVK", ShortName = "Slovakia", LongName = "The Slovak Republic", CurrencyCode = "EUR" + , Languages = ["sk"], UnofficialNames = ["Slovakia", "Slowakei", "Slovaquie", "República Eslovaca", "スロバキア", "Slowakije", "斯洛伐克"] + , Timezones = ["Europe/Bratislava,+0100"] + )] [ResourceDescription(nameof(Ln.斯洛伐克))] SK = 703 - , + , /// /// 列支敦士登 /// - [CountryInfo(Mcc = ["295"], CallingCode = 423, Alpha3 = "LIE", ShortName = "Liechtenstein", LongName = "The Principality of Liechtenstein" - , CurrencyCode = "CHF", Languages = ["de"], UnofficialNames = ["Liechtenstein", "リヒテンシュタイン", "列支敦士登"] - , Timezones = ["Europe/Vaduz,+0100"])] + [CountryInfo( + Mcc = ["295"], CallingCode = 423, Alpha3 = "LIE", ShortName = "Liechtenstein", LongName = "The Principality of Liechtenstein" + , CurrencyCode = "CHF", Languages = ["de"], UnofficialNames = ["Liechtenstein", "リヒテンシュタイン", "列支敦士登"], Timezones = ["Europe/Vaduz,+0100"] + )] [ResourceDescription(nameof(Ln.列支敦士登))] LI = 438 - , + , /// /// 福克兰群岛 /// - [CountryInfo(Mcc = ["750"], CallingCode = 500, Alpha3 = "FLK", ShortName = "Falkland Islands (Malvinas)", LongName = "The Falkland Islands" - , CurrencyCode = "FKP", Languages = ["en"] - , UnofficialNames = [ - "Falkland Islands", "Falklandinseln", "Îles Malouines", "Islas Malvinas", "フォークランド(マルビナス)諸島", "Falklandeilanden [Islas Malvinas]" - , "福克兰群岛" - ], IsPreferred = true, Timezones = ["Atlantic/Stanley,-0300"])] + [CountryInfo( + Mcc = ["750"], CallingCode = 500, Alpha3 = "FLK", ShortName = "Falkland Islands (Malvinas)", LongName = "The Falkland Islands" + , CurrencyCode = "FKP", Languages = ["en"] + , UnofficialNames = + [ + "Falkland Islands", "Falklandinseln", "Îles Malouines", "Islas Malvinas", "フォークランド(マルビナス)諸島", "Falklandeilanden [Islas Malvinas]" + , "福克兰群岛" + ], IsPreferred = true, Timezones = ["Atlantic/Stanley,-0300"] + )] [ResourceDescription(nameof(Ln.福克兰群岛))] FK = 238 - , + , /// /// 南乔治亚和南桑威奇群岛 /// - [CountryInfo(Mcc = [], CallingCode = 500, Alpha3 = "SGS", ShortName = "South Georgia and the South Sandwich Islands" - , LongName = "South Georgia and the South Sandwich Islands", CurrencyCode = "GBP", Languages = ["en"] - , UnofficialNames = [ - "South Georgia", "South Georgia and the South Sandwich Islands", "Südgeorgien und die Südlichen Sandwichinseln" - , "サウスジョージア・サウスサンドウィッチ諸島", "Zuid-Georgia en Zuidelijke Sandwicheilanden", "南乔治亚和南桑威奇群岛" - ], Timezones = ["Atlantic/South_Georgia,-0200"])] + [CountryInfo( + Mcc = [], CallingCode = 500, Alpha3 = "SGS", ShortName = "South Georgia and the South Sandwich Islands" + , LongName = "South Georgia and the South Sandwich Islands", CurrencyCode = "GBP", Languages = ["en"] + , UnofficialNames = + [ + "South Georgia", "South Georgia and the South Sandwich Islands", "Südgeorgien und die Südlichen Sandwichinseln" + , "サウスジョージア・サウスサンドウィッチ諸島", "Zuid-Georgia en Zuidelijke Sandwicheilanden", "南乔治亚和南桑威奇群岛" + ], Timezones = ["Atlantic/South_Georgia,-0200"] + )] [ResourceDescription(nameof(Ln.南乔治亚和南桑威奇群岛))] GS = 239 - , + , /// /// 伯利兹 /// - [CountryInfo(Mcc = ["702"], CallingCode = 501, Alpha3 = "BLZ", ShortName = "Belize", LongName = "Belize", CurrencyCode = "BZD" - , Languages = ["en", "es"], UnofficialNames = ["Belize", "Belice", "ベリーズ", "伯利兹"], Timezones = ["America/Belize,-0600"])] + [CountryInfo( + Mcc = ["702"], CallingCode = 501, Alpha3 = "BLZ", ShortName = "Belize", LongName = "Belize", CurrencyCode = "BZD", Languages = ["en", "es"] + , UnofficialNames = ["Belize", "Belice", "ベリーズ", "伯利兹"], Timezones = ["America/Belize,-0600"] + )] [ResourceDescription(nameof(Ln.伯利兹))] BZ = 084 - , + , /// /// 危地马拉 /// - [CountryInfo(Mcc = ["704"], CallingCode = 502, Alpha3 = "GTM", ShortName = "Guatemala", LongName = "The Republic of Guatemala" - , CurrencyCode = "GTQ", Languages = ["es"], UnofficialNames = ["Guatemala", "グアテマラ", "危地马拉"], Timezones = ["America/Guatemala,-0600"])] + [CountryInfo( + Mcc = ["704"], CallingCode = 502, Alpha3 = "GTM", ShortName = "Guatemala", LongName = "The Republic of Guatemala", CurrencyCode = "GTQ" + , Languages = ["es"], UnofficialNames = ["Guatemala", "グアテマラ", "危地马拉"], Timezones = ["America/Guatemala,-0600"] + )] [ResourceDescription(nameof(Ln.危地马拉))] GT = 320 - , + , /// /// 萨尔瓦多 /// - [CountryInfo(Mcc = ["706"], CallingCode = 503, Alpha3 = "SLV", ShortName = "El Salvador", LongName = "The Republic of El Salvador" - , CurrencyCode = "USD", Languages = ["es"], UnofficialNames = ["El Salvador", "Salvador", "エルサルバドル", "萨尔瓦多"] - , Timezones = ["America/El_Salvador,-0600"])] + [CountryInfo( + Mcc = ["706"], CallingCode = 503, Alpha3 = "SLV", ShortName = "El Salvador", LongName = "The Republic of El Salvador", CurrencyCode = "USD" + , Languages = ["es"], UnofficialNames = ["El Salvador", "Salvador", "エルサルバドル", "萨尔瓦多"], Timezones = ["America/El_Salvador,-0600"] + )] [ResourceDescription(nameof(Ln.萨尔瓦多))] SV = 222 - , + , /// /// 洪都拉斯 /// - [CountryInfo(Mcc = ["708"], CallingCode = 504, Alpha3 = "HND", ShortName = "Honduras", LongName = "The Republic of Honduras", CurrencyCode = "HNL" - , Languages = ["es"], UnofficialNames = ["Honduras", "ホンジュラス", "洪都拉斯"], Timezones = ["America/Tegucigalpa,-0600"])] + [CountryInfo( + Mcc = ["708"], CallingCode = 504, Alpha3 = "HND", ShortName = "Honduras", LongName = "The Republic of Honduras", CurrencyCode = "HNL" + , Languages = ["es"], UnofficialNames = ["Honduras", "ホンジュラス", "洪都拉斯"], Timezones = ["America/Tegucigalpa,-0600"] + )] [ResourceDescription(nameof(Ln.洪都拉斯))] HN = 340 - , + , /// /// 尼加拉瓜 /// - [CountryInfo(Mcc = ["710"], CallingCode = 505, Alpha3 = "NIC", ShortName = "Nicaragua", LongName = "The Republic of Nicaragua" - , CurrencyCode = "NIO", Languages = ["es"], UnofficialNames = ["Nicaragua", "ニカラグア", "尼加拉瓜"], Timezones = ["America/Managua,-0600"])] + [CountryInfo( + Mcc = ["710"], CallingCode = 505, Alpha3 = "NIC", ShortName = "Nicaragua", LongName = "The Republic of Nicaragua", CurrencyCode = "NIO" + , Languages = ["es"], UnofficialNames = ["Nicaragua", "ニカラグア", "尼加拉瓜"], Timezones = ["America/Managua,-0600"] + )] [ResourceDescription(nameof(Ln.尼加拉瓜))] NI = 558 - , + , /// /// 哥斯达黎加 /// - [CountryInfo(Mcc = ["712"], CallingCode = 506, Alpha3 = "CRI", ShortName = "Costa Rica", LongName = "The Republic of Costa Rica" - , CurrencyCode = "CRC", Languages = ["es"], UnofficialNames = ["Costa Rica", "コスタリカ", "哥斯达黎加"] - , Timezones = ["America/Costa_Rica,-0600"])] + [CountryInfo( + Mcc = ["712"], CallingCode = 506, Alpha3 = "CRI", ShortName = "Costa Rica", LongName = "The Republic of Costa Rica", CurrencyCode = "CRC" + , Languages = ["es"], UnofficialNames = ["Costa Rica", "コスタリカ", "哥斯达黎加"], Timezones = ["America/Costa_Rica,-0600"] + )] [ResourceDescription(nameof(Ln.哥斯达黎加))] CR = 188 - , + , /// /// 巴拿马 /// - [CountryInfo(Mcc = ["714"], CallingCode = 507, Alpha3 = "PAN", ShortName = "Panama", LongName = "The Republic of Panamá", CurrencyCode = "PAB" - , Languages = ["es"], UnofficialNames = ["Panama", "Panamá", "パナマ", "巴拿马"], Timezones = ["America/Panama,-0500"])] + [CountryInfo( + Mcc = ["714"], CallingCode = 507, Alpha3 = "PAN", ShortName = "Panama", LongName = "The Republic of Panamá", CurrencyCode = "PAB" + , Languages = ["es"], UnofficialNames = ["Panama", "Panamá", "パナマ", "巴拿马"], Timezones = ["America/Panama,-0500"] + )] [ResourceDescription(nameof(Ln.巴拿马))] PA = 591 - , + , /// /// 圣皮埃尔和密克隆 /// - [CountryInfo(Mcc = ["308"], CallingCode = 508, Alpha3 = "SPM", ShortName = "Saint Pierre and Miquelon" - , LongName = "The Overseas Collectivity of Saint-Pierre and Miquelon", CurrencyCode = "EUR", Languages = ["fr"] - , UnofficialNames = [ - "Saint Pierre and Miquelon", "Saint-Pierre und Miquelon", "Saint-Pierre-et-Miquelon", "San Pedro y Miquelón", "サンピエール島・ミクロン島" - , "Saint Pierre en Miquelon", "圣皮埃尔和密克隆" - ], Timezones = ["America/Miquelon,-0300"])] + [CountryInfo( + Mcc = ["308"], CallingCode = 508, Alpha3 = "SPM", ShortName = "Saint Pierre and Miquelon" + , LongName = "The Overseas Collectivity of Saint-Pierre and Miquelon", CurrencyCode = "EUR", Languages = ["fr"] + , UnofficialNames = + [ + "Saint Pierre and Miquelon", "Saint-Pierre und Miquelon", "Saint-Pierre-et-Miquelon", "San Pedro y Miquelón", "サンピエール島・ミクロン島" + , "Saint Pierre en Miquelon", "圣皮埃尔和密克隆" + ], Timezones = ["America/Miquelon,-0300"] + )] [ResourceDescription(nameof(Ln.圣皮埃尔和密克隆))] PM = 666 - , + , /// /// 海地 /// - [CountryInfo(Mcc = ["372"], CallingCode = 509, Alpha3 = "HTI", ShortName = "Haiti", LongName = "The Republic of Haiti", CurrencyCode = "HTG" - , Languages = ["fr", "ht"], UnofficialNames = ["Haiti", "ハイチ", "Haïti", "海地"], Timezones = ["America/Port-au-Prince,-0500"])] + [CountryInfo( + Mcc = ["372"], CallingCode = 509, Alpha3 = "HTI", ShortName = "Haiti", LongName = "The Republic of Haiti", CurrencyCode = "HTG" + , Languages = ["fr", "ht"], UnofficialNames = ["Haiti", "ハイチ", "Haïti", "海地"], Timezones = ["America/Port-au-Prince,-0500"] + )] [ResourceDescription(nameof(Ln.海地))] HT = 332 - , + , /// /// 圣巴泰勒米 /// - [CountryInfo(Mcc = [], CallingCode = 590, Alpha3 = "BLM", ShortName = "Saint Barthélemy", LongName = "The Collectivity of Saint-Barthélemy" - , CurrencyCode = "EUR", Languages = ["fr"], UnofficialNames = ["Saint Barthélemy", "Saint-Barthélemy", "サン・バルテルミー", "圣巴泰勒米"] - , Timezones = ["America/St_Barthelemy,-0400"])] + [CountryInfo( + Mcc = [], CallingCode = 590, Alpha3 = "BLM", ShortName = "Saint Barthélemy", LongName = "The Collectivity of Saint-Barthélemy" + , CurrencyCode = "EUR", Languages = ["fr"], UnofficialNames = ["Saint Barthélemy", "Saint-Barthélemy", "サン・バルテルミー", "圣巴泰勒米"] + , Timezones = ["America/St_Barthelemy,-0400"] + )] [ResourceDescription(nameof(Ln.圣巴泰勒米))] BL = 652 - , + , /// /// 瓜德罗普 /// - [CountryInfo(Mcc = [], CallingCode = 590, Alpha3 = "GLP", ShortName = "Guadeloupe", LongName = "Guadeloupe", CurrencyCode = "EUR" - , Languages = ["fr"], UnofficialNames = ["Guadeloupe", "Guadalupe", "グアドループ", "瓜德罗普"], IsPreferred = true - , Timezones = ["America/Guadeloupe,-0400"])] + [CountryInfo( + Mcc = [], CallingCode = 590, Alpha3 = "GLP", ShortName = "Guadeloupe", LongName = "Guadeloupe", CurrencyCode = "EUR", Languages = ["fr"] + , UnofficialNames = ["Guadeloupe", "Guadalupe", "グアドループ", "瓜德罗普"], IsPreferred = true, Timezones = ["America/Guadeloupe,-0400"] + )] [ResourceDescription(nameof(Ln.瓜德罗普))] GP = 312 - , + , /// /// 法属圣马丁 /// - [CountryInfo(Mcc = [], CallingCode = 590, Alpha3 = "MAF", ShortName = "Saint Martin (French part)", LongName = "The Collectivity of Saint-Martin" - , CurrencyCode = "EUR", Languages = ["en", "fr", "nl"], UnofficialNames = ["Saint Martin", "サン・マルタン(フランス領)", "Saint-Martin", "法属圣马丁"] - , Timezones = ["America/Marigot,-0400"])] + [CountryInfo( + Mcc = [], CallingCode = 590, Alpha3 = "MAF", ShortName = "Saint Martin (French part)", LongName = "The Collectivity of Saint-Martin" + , CurrencyCode = "EUR", Languages = ["en", "fr", "nl"], UnofficialNames = ["Saint Martin", "サン・マルタン(フランス領)", "Saint-Martin", "法属圣马丁"] + , Timezones = ["America/Marigot,-0400"] + )] [ResourceDescription(nameof(Ln.法属圣马丁))] MF = 663 - , + , /// /// 玻利维亚 /// - [CountryInfo(Mcc = ["736"], CallingCode = 591, Alpha3 = "BOL", ShortName = "Bolivia (Plurinational State of)" - , LongName = "The Plurinational State of Bolivia", CurrencyCode = "BOB", Languages = ["es", "ay", "qu"] - , UnofficialNames = ["Bolivia", "Bolivien", "Bolivie", "ボリビア多民族国", "玻利维亚"], Timezones = ["America/La_Paz,-0400"])] + [CountryInfo( + Mcc = ["736"], CallingCode = 591, Alpha3 = "BOL", ShortName = "Bolivia (Plurinational State of)" + , LongName = "The Plurinational State of Bolivia", CurrencyCode = "BOB", Languages = ["es", "ay", "qu"] + , UnofficialNames = ["Bolivia", "Bolivien", "Bolivie", "ボリビア多民族国", "玻利维亚"], Timezones = ["America/La_Paz,-0400"] + )] [ResourceDescription(nameof(Ln.玻利维亚))] BO = 068 - , + , /// /// 圭亚那 /// - [CountryInfo(Mcc = ["738"], CallingCode = 592, Alpha3 = "GUY", ShortName = "Guyana", LongName = "The Co-operative Republic of Guyana" - , CurrencyCode = "GYD", Languages = ["en"], UnofficialNames = ["Guyana", "ガイアナ", "圭亚那"], Timezones = ["America/Guyana,-0400"])] + [CountryInfo( + Mcc = ["738"], CallingCode = 592, Alpha3 = "GUY", ShortName = "Guyana", LongName = "The Co-operative Republic of Guyana", CurrencyCode = "GYD" + , Languages = ["en"], UnofficialNames = ["Guyana", "ガイアナ", "圭亚那"], Timezones = ["America/Guyana,-0400"] + )] [ResourceDescription(nameof(Ln.圭亚那))] GY = 328 - , + , /// /// 厄瓜多尔 /// - [CountryInfo(Mcc = ["740"], CallingCode = 593, Alpha3 = "ECU", ShortName = "Ecuador", LongName = "The Republic of Ecuador", CurrencyCode = "USD" - , Languages = ["es"], UnofficialNames = ["Ecuador", "Équateur", "エクアドル", "厄瓜多尔"] - , Timezones = ["America/Guayaquil,-0500", "Pacific/Galapagos,-0600"])] + [CountryInfo( + Mcc = ["740"], CallingCode = 593, Alpha3 = "ECU", ShortName = "Ecuador", LongName = "The Republic of Ecuador", CurrencyCode = "USD" + , Languages = ["es"], UnofficialNames = ["Ecuador", "Équateur", "エクアドル", "厄瓜多尔"] + , Timezones = ["America/Guayaquil,-0500", "Pacific/Galapagos,-0600"] + )] [ResourceDescription(nameof(Ln.厄瓜多尔))] EC = 218 - , + , /// /// 法属圭亚那 /// - [CountryInfo(Mcc = [], CallingCode = 594, Alpha3 = "GUF", ShortName = "French Guiana", LongName = "Guyane", CurrencyCode = "EUR" - , Languages = ["fr"] - , UnofficialNames = ["French Guiana", "Französisch Guyana", "Guayana Francesa", "フランス領ギアナ", "Frans-Guyana", "法属圭亚那"] - , Timezones = ["America/Cayenne,-0300"])] + [CountryInfo( + Mcc = [], CallingCode = 594, Alpha3 = "GUF", ShortName = "French Guiana", LongName = "Guyane", CurrencyCode = "EUR", Languages = ["fr"] + , UnofficialNames = ["French Guiana", "Französisch Guyana", "Guayana Francesa", "フランス領ギアナ", "Frans-Guyana", "法属圭亚那"] + , Timezones = ["America/Cayenne,-0300"] + )] [ResourceDescription(nameof(Ln.法属圭亚那))] GF = 254 - , + , /// /// 巴拉圭 /// - [CountryInfo(Mcc = ["744"], CallingCode = 595, Alpha3 = "PRY", ShortName = "Paraguay", LongName = "The Republic of Paraguay", CurrencyCode = "PYG" - , Languages = ["es", "gn"], UnofficialNames = ["Paraguay", "パラグアイ", "巴拉圭"], Timezones = ["America/Asuncion,-0300"])] + [CountryInfo( + Mcc = ["744"], CallingCode = 595, Alpha3 = "PRY", ShortName = "Paraguay", LongName = "The Republic of Paraguay", CurrencyCode = "PYG" + , Languages = ["es", "gn"], UnofficialNames = ["Paraguay", "パラグアイ", "巴拉圭"], Timezones = ["America/Asuncion,-0300"] + )] [ResourceDescription(nameof(Ln.巴拉圭))] PY = 600 - , + , /// /// 马提尼克 /// - [CountryInfo(Mcc = [], CallingCode = 596, Alpha3 = "MTQ", ShortName = "Martinique", LongName = "Martinique", CurrencyCode = "EUR" - , Languages = ["fr"], UnofficialNames = ["Martinique", "Martinica", "マルティニーク", "马提尼克"], Timezones = ["America/Martinique,-0400"])] + [CountryInfo( + Mcc = [], CallingCode = 596, Alpha3 = "MTQ", ShortName = "Martinique", LongName = "Martinique", CurrencyCode = "EUR", Languages = ["fr"] + , UnofficialNames = ["Martinique", "Martinica", "マルティニーク", "马提尼克"], Timezones = ["America/Martinique,-0400"] + )] [ResourceDescription(nameof(Ln.马提尼克))] MQ = 474 - , + , /// /// 苏里南 /// - [CountryInfo(Mcc = ["746"], CallingCode = 597, Alpha3 = "SUR", ShortName = "Suriname", LongName = "The Republic of Suriname", CurrencyCode = "SRD" - , Languages = ["nl"], UnofficialNames = ["Suriname", "Surinam", "スリナム", "苏里南"], Timezones = ["America/Paramaribo,-0300"])] + [CountryInfo( + Mcc = ["746"], CallingCode = 597, Alpha3 = "SUR", ShortName = "Suriname", LongName = "The Republic of Suriname", CurrencyCode = "SRD" + , Languages = ["nl"], UnofficialNames = ["Suriname", "Surinam", "スリナム", "苏里南"], Timezones = ["America/Paramaribo,-0300"] + )] [ResourceDescription(nameof(Ln.苏里南))] SR = 740 - , + , /// /// 乌拉圭 /// - [CountryInfo(Mcc = ["748"], CallingCode = 598, Alpha3 = "URY", ShortName = "Uruguay", LongName = "The Oriental Republic of Uruguay" - , CurrencyCode = "UYU", Languages = ["es"], UnofficialNames = ["Uruguay", "ウルグアイ", "乌拉圭"], Timezones = ["America/Montevideo,-0300"])] + [CountryInfo( + Mcc = ["748"], CallingCode = 598, Alpha3 = "URY", ShortName = "Uruguay", LongName = "The Oriental Republic of Uruguay", CurrencyCode = "UYU" + , Languages = ["es"], UnofficialNames = ["Uruguay", "ウルグアイ", "乌拉圭"], Timezones = ["America/Montevideo,-0300"] + )] [ResourceDescription(nameof(Ln.乌拉圭))] UY = 858 - , + , /// /// 库拉索 /// - [CountryInfo(Mcc = [], CallingCode = 599, CallingSubCode = ["9"], Alpha3 = "CUW", ShortName = "Curaçao", LongName = "The Country of Curaçao" - , CurrencyCode = "ANG", Languages = ["nl"], UnofficialNames = ["Curaçao", "キュラソー島", "库拉索"], Timezones = ["America/Curacao,-0400"])] + [CountryInfo( + Mcc = [], CallingCode = 599, CallingSubCode = ["9"], Alpha3 = "CUW", ShortName = "Curaçao", LongName = "The Country of Curaçao" + , CurrencyCode = "ANG", Languages = ["nl"], UnofficialNames = ["Curaçao", "キュラソー島", "库拉索"], Timezones = ["America/Curacao,-0400"] + )] [ResourceDescription(nameof(Ln.库拉索))] CW = 531 - , + , /// /// 荷兰加勒比区 /// - [CountryInfo(Mcc = [], CallingCode = 599, Alpha3 = "BES", ShortName = "Bonaire, Sint Eustatius and Saba" - , LongName = "Bonaire, Sint Eustatius and Saba", CurrencyCode = "USD", Languages = ["nl", "en"] - , UnofficialNames = [ - "Bonaire, Sint Eustatius and Saba", "Caribbean Netherlands", "Caribisch Nederland", "ボネール、シント・ユースタティウスおよびサバ", "荷兰加勒比区" - ], IsPreferred = true, Timezones = ["America/Kralendijk,-0400"])] + [CountryInfo( + Mcc = [], CallingCode = 599, Alpha3 = "BES", ShortName = "Bonaire, Sint Eustatius and Saba", LongName = "Bonaire, Sint Eustatius and Saba" + , CurrencyCode = "USD", Languages = ["nl", "en"] + , UnofficialNames = ["Bonaire, Sint Eustatius and Saba", "Caribbean Netherlands", "Caribisch Nederland", "ボネール、シント・ユースタティウスおよびサバ", "荷兰加勒比区"] + , IsPreferred = true, Timezones = ["America/Kralendijk,-0400"] + )] [ResourceDescription(nameof(Ln.荷兰加勒比区))] BQ = 535 - , + , /// /// 东帝汶 /// - [CountryInfo(Mcc = ["514"], CallingCode = 670, Alpha3 = "TLS", ShortName = "Timor-Leste", LongName = "The Democratic Republic of Timor-Leste" - , CurrencyCode = "IDR", Languages = ["pt"] - , UnofficialNames = ["East Timor", "Timor-Leste", "Timor oriental", "Timor Oriental", "東ティモール", "Oost-Timor", "东帝汶"] - , Timezones = ["Asia/Dili,+0900"])] + [CountryInfo( + Mcc = ["514"], CallingCode = 670, Alpha3 = "TLS", ShortName = "Timor-Leste", LongName = "The Democratic Republic of Timor-Leste" + , CurrencyCode = "IDR", Languages = ["pt"] + , UnofficialNames = ["East Timor", "Timor-Leste", "Timor oriental", "Timor Oriental", "東ティモール", "Oost-Timor", "东帝汶"] + , Timezones = ["Asia/Dili,+0900"] + )] [ResourceDescription(nameof(Ln.东帝汶))] TL = 626 - , + , /// /// 南极洲 /// - [CountryInfo(Mcc = [], CallingCode = 672, Alpha3 = "ATA", ShortName = "Antarctica", LongName = "Antarctica", CurrencyCode = "USD", Languages = [] - , UnofficialNames = ["Antarctica", "Antarktis", "Antarctique", "Antártida", "南極", "南极洲"], IsPreferred = true - , Timezones = [ - "Antarctica/Casey,+0800", "Antarctica/Davis,+0700", "Antarctica/DumontDUrville,+1000", "Antarctica/Mawson,+0500" - , "Antarctica/McMurdo,+1300", "Antarctica/Palmer,-0300", "Antarctica/Rothera,-0300", "Antarctica/Syowa,+0300" - , "Antarctica/Troll,+0000", "Antarctica/Vostok,+0500" - ])] + [CountryInfo( + Mcc = [], CallingCode = 672, Alpha3 = "ATA", ShortName = "Antarctica", LongName = "Antarctica", CurrencyCode = "USD", Languages = [] + , UnofficialNames = ["Antarctica", "Antarktis", "Antarctique", "Antártida", "南極", "南极洲"], IsPreferred = true + , Timezones = + [ + "Antarctica/Casey,+0800", "Antarctica/Davis,+0700", "Antarctica/DumontDUrville,+1000", "Antarctica/Mawson,+0500" + , "Antarctica/McMurdo,+1300", "Antarctica/Palmer,-0300", "Antarctica/Rothera,-0300", "Antarctica/Syowa,+0300" + , "Antarctica/Troll,+0000", "Antarctica/Vostok,+0500" + ] + )] [ResourceDescription(nameof(Ln.南极洲))] AQ = 010 - , + , /// /// 诺福克岛 /// - [CountryInfo(Mcc = ["505"], CallingCode = 672, CallingSubCode = ["3"], Alpha3 = "NFK", ShortName = "Norfolk Island" - , LongName = "The Territory of Norfolk Island", CurrencyCode = "AUD", Languages = ["en"] - , UnofficialNames = ["Norfolk Island", "Norfolkinsel", "Île de Norfolk", "Isla de Norfolk", "ノーフォーク島", "Norfolkeiland", "诺福克岛"] - , Timezones = ["Pacific/Norfolk,+1200"])] + [CountryInfo( + Mcc = ["505"], CallingCode = 672, CallingSubCode = ["3"], Alpha3 = "NFK", ShortName = "Norfolk Island" + , LongName = "The Territory of Norfolk Island", CurrencyCode = "AUD", Languages = ["en"] + , UnofficialNames = ["Norfolk Island", "Norfolkinsel", "Île de Norfolk", "Isla de Norfolk", "ノーフォーク島", "Norfolkeiland", "诺福克岛"] + , Timezones = ["Pacific/Norfolk,+1200"] + )] [ResourceDescription(nameof(Ln.诺福克岛))] NF = 574 - , + , /// /// 文莱 /// - [CountryInfo(Mcc = ["528"], CallingCode = 673, Alpha3 = "BRN", ShortName = "Brunei Darussalam" - , LongName = "The Nation of Brunei, the Abode of Peace", CurrencyCode = "BND", Languages = ["ms"] - , UnofficialNames = ["Brunei", "ブルネイ・ダルサラーム", "文莱"], Timezones = ["Asia/Brunei,+0800"])] + [CountryInfo( + Mcc = ["528"], CallingCode = 673, Alpha3 = "BRN", ShortName = "Brunei Darussalam", LongName = "The Nation of Brunei, the Abode of Peace" + , CurrencyCode = "BND", Languages = ["ms"], UnofficialNames = ["Brunei", "ブルネイ・ダルサラーム", "文莱"], Timezones = ["Asia/Brunei,+0800"] + )] [ResourceDescription(nameof(Ln.文莱))] BN = 096 - , + , /// /// 瑙鲁 /// - [CountryInfo(Mcc = ["536"], CallingCode = 674, Alpha3 = "NRU", ShortName = "Nauru", LongName = "The Republic of Nauru", CurrencyCode = "AUD" - , Languages = ["en", "na"], UnofficialNames = ["Nauru", "ナウル", "瑙鲁"], Timezones = ["Pacific/Nauru,+1200"])] + [CountryInfo( + Mcc = ["536"], CallingCode = 674, Alpha3 = "NRU", ShortName = "Nauru", LongName = "The Republic of Nauru", CurrencyCode = "AUD" + , Languages = ["en", "na"], UnofficialNames = ["Nauru", "ナウル", "瑙鲁"], Timezones = ["Pacific/Nauru,+1200"] + )] [ResourceDescription(nameof(Ln.瑙鲁))] NR = 520 - , + , /// /// 巴布亚新几内亚 /// - [CountryInfo(Mcc = ["537"], CallingCode = 675, Alpha3 = "PNG", ShortName = "Papua New Guinea" - , LongName = "The Independent State of Papua New Guinea", CurrencyCode = "PGK", Languages = ["en"] - , UnofficialNames = [ - "Papua New Guinea", "Papua-Neuguinea", "Papouasie Nouvelle-Guinée", "Papúa Nueva Guinea", "パプアニューギニア", "Papoea-Nieuw-Guinea" - , "巴布亚新几内亚" - ], Timezones = ["Pacific/Bougainville,+1100", "Pacific/Port_Moresby,+1000"])] + [CountryInfo( + Mcc = ["537"], CallingCode = 675, Alpha3 = "PNG", ShortName = "Papua New Guinea", LongName = "The Independent State of Papua New Guinea" + , CurrencyCode = "PGK", Languages = ["en"] + , UnofficialNames = + [ + "Papua New Guinea", "Papua-Neuguinea", "Papouasie Nouvelle-Guinée", "Papúa Nueva Guinea", "パプアニューギニア", "Papoea-Nieuw-Guinea" + , "巴布亚新几内亚" + ], Timezones = ["Pacific/Bougainville,+1100", "Pacific/Port_Moresby,+1000"] + )] [ResourceDescription(nameof(Ln.巴布亚新几内亚))] PG = 598 - , + , /// /// 汤加 /// - [CountryInfo(Mcc = ["539"], CallingCode = 676, Alpha3 = "TON", ShortName = "Tonga", LongName = "The Kingdom of Tonga", CurrencyCode = "TOP" - , Languages = ["en", "to"], UnofficialNames = ["Tonga", "トンガ", "汤加"], Timezones = ["Pacific/Tongatapu,+1300"])] + [CountryInfo( + Mcc = ["539"], CallingCode = 676, Alpha3 = "TON", ShortName = "Tonga", LongName = "The Kingdom of Tonga", CurrencyCode = "TOP" + , Languages = ["en", "to"], UnofficialNames = ["Tonga", "トンガ", "汤加"], Timezones = ["Pacific/Tongatapu,+1300"] + )] [ResourceDescription(nameof(Ln.汤加))] TO = 776 - , + , /// /// 所罗门群岛 /// - [CountryInfo(Mcc = ["540"], CallingCode = 677, Alpha3 = "SLB", ShortName = "Solomon Islands", LongName = "The Solomon Islands" - , CurrencyCode = "SBD", Languages = ["en"] - , UnofficialNames = ["Solomon Islands", "Salomonen", "Îles Salomon", "Islas Salomón", "ソロモン諸島", "Salomonseilanden", "所罗门群岛"] - , Timezones = ["Pacific/Guadalcanal,+1100"])] + [CountryInfo( + Mcc = ["540"], CallingCode = 677, Alpha3 = "SLB", ShortName = "Solomon Islands", LongName = "The Solomon Islands", CurrencyCode = "SBD" + , Languages = ["en"] + , UnofficialNames = ["Solomon Islands", "Salomonen", "Îles Salomon", "Islas Salomón", "ソロモン諸島", "Salomonseilanden", "所罗门群岛"] + , Timezones = ["Pacific/Guadalcanal,+1100"] + )] [ResourceDescription(nameof(Ln.所罗门群岛))] SB = 090 - , + , /// /// 瓦努阿图 /// - [CountryInfo(Mcc = ["541"], CallingCode = 678, Alpha3 = "VUT", ShortName = "Vanuatu", LongName = "The Republic of Vanuatu", CurrencyCode = "VUV" - , Languages = ["bi", "en", "fr"], UnofficialNames = ["Vanuatu", "バヌアツ", "瓦努阿图"], Timezones = ["Pacific/Efate,+1100"])] + [CountryInfo( + Mcc = ["541"], CallingCode = 678, Alpha3 = "VUT", ShortName = "Vanuatu", LongName = "The Republic of Vanuatu", CurrencyCode = "VUV" + , Languages = ["bi", "en", "fr"], UnofficialNames = ["Vanuatu", "バヌアツ", "瓦努阿图"], Timezones = ["Pacific/Efate,+1100"] + )] [ResourceDescription(nameof(Ln.瓦努阿图))] VU = 548 - , + , /// /// 斐济 /// - [CountryInfo(Mcc = ["542"], CallingCode = 679, Alpha3 = "FJI", ShortName = "Fiji", LongName = "The Republic of Fiji", CurrencyCode = "FJD" - , Languages = ["en", "fj", "hi", "ur"], UnofficialNames = ["Fiji", "Fidschi", "Fidji", "フィジー", "斐济"] - , Timezones = ["Pacific/Fiji,+1200"])] + [CountryInfo( + Mcc = ["542"], CallingCode = 679, Alpha3 = "FJI", ShortName = "Fiji", LongName = "The Republic of Fiji", CurrencyCode = "FJD" + , Languages = ["en", "fj", "hi", "ur"], UnofficialNames = ["Fiji", "Fidschi", "Fidji", "フィジー", "斐济"], Timezones = ["Pacific/Fiji,+1200"] + )] [ResourceDescription(nameof(Ln.斐济))] FJ = 242 - , + , /// /// 帕劳 /// - [CountryInfo(Mcc = ["552"], CallingCode = 680, Alpha3 = "PLW", ShortName = "Palau", LongName = "The Republic of Palau", CurrencyCode = "USD" - , Languages = ["en"], UnofficialNames = ["Palau", "パラオ", "帕劳"], Timezones = ["Pacific/Palau,+0900"])] + [CountryInfo( + Mcc = ["552"], CallingCode = 680, Alpha3 = "PLW", ShortName = "Palau", LongName = "The Republic of Palau", CurrencyCode = "USD" + , Languages = ["en"], UnofficialNames = ["Palau", "パラオ", "帕劳"], Timezones = ["Pacific/Palau,+0900"] + )] [ResourceDescription(nameof(Ln.帕劳))] PW = 585 - , + , /// /// 瓦利斯和富图纳 /// - [CountryInfo(Mcc = ["543"], CallingCode = 681, Alpha3 = "WLF", ShortName = "Wallis and Futuna" - , LongName = "The Territory of the Wallis and Futuna Islands", CurrencyCode = "XPF", Languages = ["fr"] - , UnofficialNames = [ - "Wallis and Futuna", "Wallis und Futuna", "Wallis et Futuna", "Wallis y Futuna", "ウォリス・フツナ", "Wallis en Futuna", "瓦利斯和富图纳" - ], Timezones = ["Pacific/Wallis,+1200"])] + [CountryInfo( + Mcc = ["543"], CallingCode = 681, Alpha3 = "WLF", ShortName = "Wallis and Futuna", LongName = "The Territory of the Wallis and Futuna Islands" + , CurrencyCode = "XPF", Languages = ["fr"] + , UnofficialNames = + [ + "Wallis and Futuna", "Wallis und Futuna", "Wallis et Futuna", "Wallis y Futuna", "ウォリス・フツナ", "Wallis en Futuna", "瓦利斯和富图纳" + ], Timezones = ["Pacific/Wallis,+1200"] + )] [ResourceDescription(nameof(Ln.瓦利斯和富图纳))] WF = 876 - , + , /// /// 库克群岛 /// - [CountryInfo(Mcc = ["548"], CallingCode = 682, Alpha3 = "COK", ShortName = "Cook Islands", LongName = "The Cook Islands", CurrencyCode = "NZD" - , Languages = ["en"], UnofficialNames = ["Cook Islands", "Cookinseln", "Îles Cook", "Islas Cook", "クック諸島", "Cookeilanden", "库克群岛"] - , Timezones = ["Pacific/Rarotonga,-1000"])] + [CountryInfo( + Mcc = ["548"], CallingCode = 682, Alpha3 = "COK", ShortName = "Cook Islands", LongName = "The Cook Islands", CurrencyCode = "NZD" + , Languages = ["en"], UnofficialNames = ["Cook Islands", "Cookinseln", "Îles Cook", "Islas Cook", "クック諸島", "Cookeilanden", "库克群岛"] + , Timezones = ["Pacific/Rarotonga,-1000"] + )] [ResourceDescription(nameof(Ln.库克群岛))] CK = 184 - , + , /// /// 纽埃 /// - [CountryInfo(Mcc = ["555"], CallingCode = 683, Alpha3 = "NIU", ShortName = "Niue", LongName = "Niue", CurrencyCode = "NZD", Languages = ["en"] - , UnofficialNames = ["Niue", "ニウエ", "纽埃"], Timezones = ["Pacific/Niue,-1100"])] + [CountryInfo( + Mcc = ["555"], CallingCode = 683, Alpha3 = "NIU", ShortName = "Niue", LongName = "Niue", CurrencyCode = "NZD", Languages = ["en"] + , UnofficialNames = ["Niue", "ニウエ", "纽埃"], Timezones = ["Pacific/Niue,-1100"] + )] [ResourceDescription(nameof(Ln.纽埃))] NU = 570 - , + , /// /// 萨摩亚 /// - [CountryInfo(Mcc = ["549"], CallingCode = 685, Alpha3 = "WSM", ShortName = "Samoa", LongName = "The Independent State of Samoa" - , CurrencyCode = "WST", Languages = ["sm", "en"], UnofficialNames = ["Samoa", "サモア", "萨摩亚"], Timezones = ["Pacific/Apia,+1300"])] + [CountryInfo( + Mcc = ["549"], CallingCode = 685, Alpha3 = "WSM", ShortName = "Samoa", LongName = "The Independent State of Samoa", CurrencyCode = "WST" + , Languages = ["sm", "en"], UnofficialNames = ["Samoa", "サモア", "萨摩亚"], Timezones = ["Pacific/Apia,+1300"] + )] [ResourceDescription(nameof(Ln.萨摩亚))] WS = 882 - , + , /// /// 基里巴斯 /// - [CountryInfo(Mcc = ["545"], CallingCode = 686, Alpha3 = "KIR", ShortName = "Kiribati", LongName = "The Republic of Kiribati", CurrencyCode = "AUD" - , Languages = ["en"], UnofficialNames = ["Kiribati", "キリバス", "基里巴斯"] - , Timezones = ["Pacific/Kanton,+1300", "Pacific/Kiritimati,+1400", "Pacific/Tarawa,+1200"])] + [CountryInfo( + Mcc = ["545"], CallingCode = 686, Alpha3 = "KIR", ShortName = "Kiribati", LongName = "The Republic of Kiribati", CurrencyCode = "AUD" + , Languages = ["en"], UnofficialNames = ["Kiribati", "キリバス", "基里巴斯"] + , Timezones = ["Pacific/Kanton,+1300", "Pacific/Kiritimati,+1400", "Pacific/Tarawa,+1200"] + )] [ResourceDescription(nameof(Ln.基里巴斯))] KI = 296 - , + , /// /// 新喀里多尼亚 /// - [CountryInfo(Mcc = ["546"], CallingCode = 687, Alpha3 = "NCL", ShortName = "New Caledonia", LongName = "New Caledonia", CurrencyCode = "XPF" - , Languages = ["fr"] - , UnofficialNames = [ - "New Caledonia", "Neukaledonien", "Nouvelle-Calédonie", "Nueva Caledonia", "ニューカレドニア", "Nieuw-Caledonië", "新喀里多尼亚" - ], Timezones = ["Pacific/Noumea,+1100"])] + [CountryInfo( + Mcc = ["546"], CallingCode = 687, Alpha3 = "NCL", ShortName = "New Caledonia", LongName = "New Caledonia", CurrencyCode = "XPF" + , Languages = ["fr"] + , UnofficialNames = ["New Caledonia", "Neukaledonien", "Nouvelle-Calédonie", "Nueva Caledonia", "ニューカレドニア", "Nieuw-Caledonië", "新喀里多尼亚"] + , Timezones = ["Pacific/Noumea,+1100"] + )] [ResourceDescription(nameof(Ln.新喀里多尼亚))] NC = 540 - , + , /// /// 图瓦卢 /// - [CountryInfo(Mcc = ["553"], CallingCode = 688, Alpha3 = "TUV", ShortName = "Tuvalu", LongName = "Tuvalu", CurrencyCode = "AUD", Languages = ["en"] - , UnofficialNames = ["Tuvalu", "ツバル", "图瓦卢"], Timezones = ["Pacific/Funafuti,+1200"])] + [CountryInfo( + Mcc = ["553"], CallingCode = 688, Alpha3 = "TUV", ShortName = "Tuvalu", LongName = "Tuvalu", CurrencyCode = "AUD", Languages = ["en"] + , UnofficialNames = ["Tuvalu", "ツバル", "图瓦卢"], Timezones = ["Pacific/Funafuti,+1200"] + )] [ResourceDescription(nameof(Ln.图瓦卢))] TV = 798 - , + , /// /// 法属波利尼西亚 /// - [CountryInfo(Mcc = ["547"], CallingCode = 689, Alpha3 = "PYF", ShortName = "French Polynesia", LongName = "French Polynesia", CurrencyCode = "XPF" - , Languages = ["fr"] - , UnofficialNames = [ - "French Polynesia", "Französisch-Polynesien", "Polynésie Française", "Polinesia Francesa", "フランス領ポリネシア", "Frans-Polynesië" - , "法属波利尼西亚" - ], Timezones = ["Pacific/Gambier,-0900", "Pacific/Marquesas,-0930", "Pacific/Tahiti,-1000"])] + [CountryInfo( + Mcc = ["547"], CallingCode = 689, Alpha3 = "PYF", ShortName = "French Polynesia", LongName = "French Polynesia", CurrencyCode = "XPF" + , Languages = ["fr"] + , UnofficialNames = + [ + "French Polynesia", "Französisch-Polynesien", "Polynésie Française", "Polinesia Francesa", "フランス領ポリネシア", "Frans-Polynesië", "法属波利尼西亚" + ], Timezones = ["Pacific/Gambier,-0900", "Pacific/Marquesas,-0930", "Pacific/Tahiti,-1000"] + )] [ResourceDescription(nameof(Ln.法属波利尼西亚))] PF = 258 - , + , /// /// 托克劳 /// - [CountryInfo(Mcc = ["554"], CallingCode = 690, Alpha3 = "TKL", ShortName = "Tokelau", LongName = "Tokelau", CurrencyCode = "NZD" - , Languages = ["en"], UnofficialNames = ["Tokelau", "Îles Tokelau", "Islas Tokelau", "トケラウ", "托克劳"] - , Timezones = ["Pacific/Fakaofo,+1300"])] + [CountryInfo( + Mcc = ["554"], CallingCode = 690, Alpha3 = "TKL", ShortName = "Tokelau", LongName = "Tokelau", CurrencyCode = "NZD", Languages = ["en"] + , UnofficialNames = ["Tokelau", "Îles Tokelau", "Islas Tokelau", "トケラウ", "托克劳"], Timezones = ["Pacific/Fakaofo,+1300"] + )] [ResourceDescription(nameof(Ln.托克劳))] TK = 772 - , + , /// /// 密克罗尼西亚联邦 /// - [CountryInfo(Mcc = ["550"], CallingCode = 691, Alpha3 = "FSM", ShortName = "Micronesia (Federated States of)" - , LongName = "The Federated States of Micronesia", CurrencyCode = "USD", Languages = ["en"] - , UnofficialNames = ["Micronesia", "Mikronesien", "Micronésie", "ミクロネシア連邦", "Micronesië", "密克罗尼西亚联邦"] - , Timezones = ["Pacific/Chuuk,+1000", "Pacific/Kosrae,+1100", "Pacific/Pohnpei,+1100"])] + [CountryInfo( + Mcc = ["550"], CallingCode = 691, Alpha3 = "FSM", ShortName = "Micronesia (Federated States of)" + , LongName = "The Federated States of Micronesia", CurrencyCode = "USD", Languages = ["en"] + , UnofficialNames = ["Micronesia", "Mikronesien", "Micronésie", "ミクロネシア連邦", "Micronesië", "密克罗尼西亚联邦"] + , Timezones = ["Pacific/Chuuk,+1000", "Pacific/Kosrae,+1100", "Pacific/Pohnpei,+1100"] + )] [ResourceDescription(nameof(Ln.密克罗尼西亚联邦))] FM = 583 - , + , /// /// 马绍尔群岛 /// - [CountryInfo(Mcc = ["551"], CallingCode = 692, Alpha3 = "MHL", ShortName = "Marshall Islands", LongName = "The Republic of the Marshall Islands" - , CurrencyCode = "USD", Languages = ["en", "mh"] - , UnofficialNames = ["Marshall Islands", "Marshallinseln", "Îles Marshall", "Islas Marshall", "マーシャル諸島", "Marshalleilanden", "马绍尔群岛"] - , Timezones = ["Pacific/Kwajalein,+1200", "Pacific/Majuro,+1200"])] + [CountryInfo( + Mcc = ["551"], CallingCode = 692, Alpha3 = "MHL", ShortName = "Marshall Islands", LongName = "The Republic of the Marshall Islands" + , CurrencyCode = "USD", Languages = ["en", "mh"] + , UnofficialNames = ["Marshall Islands", "Marshallinseln", "Îles Marshall", "Islas Marshall", "マーシャル諸島", "Marshalleilanden", "马绍尔群岛"] + , Timezones = ["Pacific/Kwajalein,+1200", "Pacific/Majuro,+1200"] + )] [ResourceDescription(nameof(Ln.马绍尔群岛))] MH = 584 - , + , /// /// 朝鲜 /// - [CountryInfo(Mcc = ["467"], CallingCode = 850, Alpha3 = "PRK", ShortName = "Korea (Democratic People's Republic of)" - , LongName = "The Democratic People's Republic of Korea", CurrencyCode = "KPW", Languages = ["ko"] - , UnofficialNames = [ - "Korea (North)", "North Korea", "Nordkorea", "Corée du Nord", "Corea del Norte", "朝鮮民主主義人民共和国", "Noord-Korea" - , "Korea Democratic People's Republic", "Korea (Democratic People s Republic of)", "朝鲜" - ], Timezones = ["Asia/Pyongyang,+0900"])] + [CountryInfo( + Mcc = ["467"], CallingCode = 850, Alpha3 = "PRK", ShortName = "Korea (Democratic People's Republic of)" + , LongName = "The Democratic People's Republic of Korea", CurrencyCode = "KPW", Languages = ["ko"] + , UnofficialNames = + [ + "Korea (North)", "North Korea", "Nordkorea", "Corée du Nord", "Corea del Norte", "朝鮮民主主義人民共和国", "Noord-Korea" + , "Korea Democratic People's Republic", "Korea (Democratic People s Republic of)", "朝鲜" + ], Timezones = ["Asia/Pyongyang,+0900"] + )] [ResourceDescription(nameof(Ln.朝鲜))] KP = 408 - , + , /// /// 香港 /// - [CountryInfo(Mcc = ["454"], CallingCode = 852, Alpha3 = "HKG", ShortName = "Hong Kong" - , LongName = "The Hong Kong Special Administrative Region of China", CurrencyCode = "HKD", Languages = ["en", "zh"] - , UnofficialNames = ["Hong Kong", "香港", "Hongkong"], Timezones = ["Asia/Hong_Kong,+0800"])] + [CountryInfo( + Mcc = ["454"], CallingCode = 852, Alpha3 = "HKG", ShortName = "Hong Kong", LongName = "The Hong Kong Special Administrative Region of China" + , CurrencyCode = "HKD", Languages = ["en", "zh"], UnofficialNames = ["Hong Kong", "香港", "Hongkong"], Timezones = ["Asia/Hong_Kong,+0800"] + )] [ResourceDescription(nameof(Ln.香港))] HK = 344 - , + , /// /// 澳门 /// - [CountryInfo(Mcc = ["455"], CallingCode = 853, Alpha3 = "MAC", ShortName = "Macao", LongName = "The Macao Special Administrative Region of China" - , CurrencyCode = "MOP", Languages = ["zh", "pt"], UnofficialNames = ["Macao", "Macau", "マカオ", "澳门"], Timezones = ["Asia/Macau,+0800"])] + [CountryInfo( + Mcc = ["455"], CallingCode = 853, Alpha3 = "MAC", ShortName = "Macao", LongName = "The Macao Special Administrative Region of China" + , CurrencyCode = "MOP", Languages = ["zh", "pt"], UnofficialNames = ["Macao", "Macau", "マカオ", "澳门"], Timezones = ["Asia/Macau,+0800"] + )] [ResourceDescription(nameof(Ln.澳门))] MO = 446 - , + , /// /// 柬埔寨 /// - [CountryInfo(Mcc = ["456"], CallingCode = 855, Alpha3 = "KHM", ShortName = "Cambodia", LongName = "The Kingdom of Cambodia", CurrencyCode = "KHR" - , Languages = ["km"], UnofficialNames = ["Cambodia", "Kambodscha", "Cambodge", "Camboya", "カンボジア", "Cambodja", "柬埔寨"] - , Timezones = ["Asia/Phnom_Penh,+0700"])] + [CountryInfo( + Mcc = ["456"], CallingCode = 855, Alpha3 = "KHM", ShortName = "Cambodia", LongName = "The Kingdom of Cambodia", CurrencyCode = "KHR" + , Languages = ["km"], UnofficialNames = ["Cambodia", "Kambodscha", "Cambodge", "Camboya", "カンボジア", "Cambodja", "柬埔寨"] + , Timezones = ["Asia/Phnom_Penh,+0700"] + )] [ResourceDescription(nameof(Ln.柬埔寨))] KH = 116 - , + , /// /// 老挝 /// - [CountryInfo(Mcc = ["457"], CallingCode = 856, Alpha3 = "LAO", ShortName = "Lao People's Democratic Republic" - , LongName = "The Lao People's Democratic Republic", CurrencyCode = "LAK", Languages = ["lo"] - , UnofficialNames = ["Laos", "ラオス人民民主共和国", "Lao People s Democratic Republic", "老挝"], Timezones = ["Asia/Vientiane,+0700"])] + [CountryInfo( + Mcc = ["457"], CallingCode = 856, Alpha3 = "LAO", ShortName = "Lao People's Democratic Republic" + , LongName = "The Lao People's Democratic Republic", CurrencyCode = "LAK", Languages = ["lo"] + , UnofficialNames = ["Laos", "ラオス人民民主共和国", "Lao People s Democratic Republic", "老挝"], Timezones = ["Asia/Vientiane,+0700"] + )] [ResourceDescription(nameof(Ln.老挝))] LA = 418 - , + , /// /// 孟加拉国 /// - [CountryInfo(Mcc = ["470"], CallingCode = 880, Alpha3 = "BGD", ShortName = "Bangladesh", LongName = "The People's Republic of Bangladesh" - , CurrencyCode = "BDT", Languages = ["bn"], UnofficialNames = ["Bangladesh", "Bangladesch", "バングラデシュ", "孟加拉国"] - , Timezones = ["Asia/Dhaka,+0600"])] + [CountryInfo( + Mcc = ["470"], CallingCode = 880, Alpha3 = "BGD", ShortName = "Bangladesh", LongName = "The People's Republic of Bangladesh" + , CurrencyCode = "BDT", Languages = ["bn"], UnofficialNames = ["Bangladesh", "Bangladesch", "バングラデシュ", "孟加拉国"] + , Timezones = ["Asia/Dhaka,+0600"] + )] [ResourceDescription(nameof(Ln.孟加拉国))] BD = 050 - , + , /// /// 台湾 /// - [CountryInfo(Mcc = ["466"], CallingCode = 886, Alpha3 = "TWN", ShortName = "Taiwan, Province of China", LongName = "Taiwan, Province of China" - , CurrencyCode = "TWD", Languages = ["zh"], UnofficialNames = ["Taiwan", "Taiwán", "台灣", "臺灣", "台湾"] - , Timezones = ["Asia/Taipei,+0800"])] + [CountryInfo( + Mcc = ["466"], CallingCode = 886, Alpha3 = "TWN", ShortName = "Taiwan, Province of China", LongName = "Taiwan, Province of China" + , CurrencyCode = "TWD", Languages = ["zh"], UnofficialNames = ["Taiwan", "Taiwán", "台灣", "臺灣", "台湾"], Timezones = ["Asia/Taipei,+0800"] + )] [ResourceDescription(nameof(Ln.台湾))] TW = 158 - , + , /// /// 马尔代夫 /// - [CountryInfo(Mcc = ["472"], CallingCode = 960, Alpha3 = "MDV", ShortName = "Maldives", LongName = "The Republic of Maldives", CurrencyCode = "MVR" - , Languages = ["dv"], UnofficialNames = ["Maldives", "Malediven", "Maldivas", "モルディブ", "Maldiven", "马尔代夫"] - , Timezones = ["Indian/Maldives,+0500"])] + [CountryInfo( + Mcc = ["472"], CallingCode = 960, Alpha3 = "MDV", ShortName = "Maldives", LongName = "The Republic of Maldives", CurrencyCode = "MVR" + , Languages = ["dv"], UnofficialNames = ["Maldives", "Malediven", "Maldivas", "モルディブ", "Maldiven", "马尔代夫"] + , Timezones = ["Indian/Maldives,+0500"] + )] [ResourceDescription(nameof(Ln.马尔代夫))] MV = 462 - , + , /// /// 黎巴嫩 /// - [CountryInfo(Mcc = ["415"], CallingCode = 961, Alpha3 = "LBN", ShortName = "Lebanon", LongName = "The Lebanese Republic", CurrencyCode = "LBP" - , Languages = ["ar", "fr"], UnofficialNames = ["Lebanon", "لبنان", "Libanon", "Liban", "Líbano", "レバノン", "黎巴嫩"] - , Timezones = ["Asia/Beirut,+0200"])] + [CountryInfo( + Mcc = ["415"], CallingCode = 961, Alpha3 = "LBN", ShortName = "Lebanon", LongName = "The Lebanese Republic", CurrencyCode = "LBP" + , Languages = ["ar", "fr"], UnofficialNames = ["Lebanon", "لبنان", "Libanon", "Liban", "Líbano", "レバノン", "黎巴嫩"] + , Timezones = ["Asia/Beirut,+0200"] + )] [ResourceDescription(nameof(Ln.黎巴嫩))] LB = 422 - , + , /// /// 约旦 /// - [CountryInfo(Mcc = ["416"], CallingCode = 962, Alpha3 = "JOR", ShortName = "Jordan", LongName = "The Hashemite Kingdom of Jordan" - , CurrencyCode = "JOD", Languages = ["ar"] - , UnofficialNames = ["Jordan", "الأردن", "Jordanien", "Jordanie", "Jordania", "ヨルダン", "Jordanië", "约旦"] - , Timezones = ["Asia/Amman,+0300"])] + [CountryInfo( + Mcc = ["416"], CallingCode = 962, Alpha3 = "JOR", ShortName = "Jordan", LongName = "The Hashemite Kingdom of Jordan", CurrencyCode = "JOD" + , Languages = ["ar"], UnofficialNames = ["Jordan", "الأردن", "Jordanien", "Jordanie", "Jordania", "ヨルダン", "Jordanië", "约旦"] + , Timezones = ["Asia/Amman,+0300"] + )] [ResourceDescription(nameof(Ln.约旦))] JO = 400 - , + , /// /// 叙利亚 /// - [CountryInfo(Mcc = ["417"], CallingCode = 963, Alpha3 = "SYR", ShortName = "Syrian Arab Republic", LongName = "The Syrian Arab Republic" - , CurrencyCode = "SYP", Languages = ["ar"] - , UnofficialNames = ["Syria", "سوريا", "سورية", "Syrien", "Syrie", "Siria", "シリア・アラブ共和国", "Syrië", "叙利亚"] - , Timezones = ["Asia/Damascus,+0300"])] + [CountryInfo( + Mcc = ["417"], CallingCode = 963, Alpha3 = "SYR", ShortName = "Syrian Arab Republic", LongName = "The Syrian Arab Republic" + , CurrencyCode = "SYP", Languages = ["ar"] + , UnofficialNames = ["Syria", "سوريا", "سورية", "Syrien", "Syrie", "Siria", "シリア・アラブ共和国", "Syrië", "叙利亚"], Timezones = ["Asia/Damascus,+0300"] + )] [ResourceDescription(nameof(Ln.叙利亚))] SY = 760 - , + , /// /// 伊拉克 /// - [CountryInfo(Mcc = ["418"], CallingCode = 964, Alpha3 = "IRQ", ShortName = "Iraq", LongName = "The Republic of Iraq", CurrencyCode = "IQD" - , Languages = ["ar"], UnofficialNames = ["Iraq", "العراق", "Irak", "イラク", "伊拉克"], Timezones = ["Asia/Baghdad,+0300"])] + [CountryInfo( + Mcc = ["418"], CallingCode = 964, Alpha3 = "IRQ", ShortName = "Iraq", LongName = "The Republic of Iraq", CurrencyCode = "IQD" + , Languages = ["ar"], UnofficialNames = ["Iraq", "العراق", "Irak", "イラク", "伊拉克"], Timezones = ["Asia/Baghdad,+0300"] + )] [ResourceDescription(nameof(Ln.伊拉克))] IQ = 368 - , + , /// /// 科威特 /// - [CountryInfo(Mcc = ["419"], CallingCode = 965, Alpha3 = "KWT", ShortName = "Kuwait", LongName = "The State of Kuwait", CurrencyCode = "KWD" - , Languages = ["ar"], UnofficialNames = ["Kuwait", "الكويت", "Koweït", "クウェート", "Koeweit", "科威特"], Timezones = ["Asia/Kuwait,+0300"])] + [CountryInfo( + Mcc = ["419"], CallingCode = 965, Alpha3 = "KWT", ShortName = "Kuwait", LongName = "The State of Kuwait", CurrencyCode = "KWD" + , Languages = ["ar"], UnofficialNames = ["Kuwait", "الكويت", "Koweït", "クウェート", "Koeweit", "科威特"], Timezones = ["Asia/Kuwait,+0300"] + )] [ResourceDescription(nameof(Ln.科威特))] KW = 414 - , + , /// /// 沙特阿拉伯 /// - [CountryInfo(Mcc = ["420"], CallingCode = 966, Alpha3 = "SAU", ShortName = "Saudi Arabia", LongName = "The Kingdom of Saudi Arabia" - , CurrencyCode = "SAR", Languages = ["ar"] - , UnofficialNames = [ - "Saudi Arabia", "Kingdom of Saudi Arabia", "السعودية", "Saudi-Arabien", "Arabie Saoudite", "Arabia Saudí", "サウジアラビア" - , "Saoedi-Arabië", "沙特阿拉伯" - ], Timezones = ["Asia/Riyadh,+0300"])] + [CountryInfo( + Mcc = ["420"], CallingCode = 966, Alpha3 = "SAU", ShortName = "Saudi Arabia", LongName = "The Kingdom of Saudi Arabia", CurrencyCode = "SAR" + , Languages = ["ar"] + , UnofficialNames = + [ + "Saudi Arabia", "Kingdom of Saudi Arabia", "السعودية", "Saudi-Arabien", "Arabie Saoudite", "Arabia Saudí", "サウジアラビア", "Saoedi-Arabië" + , "沙特阿拉伯" + ], Timezones = ["Asia/Riyadh,+0300"] + )] [ResourceDescription(nameof(Ln.沙特阿拉伯))] SA = 682 - , + , /// /// 也门 /// - [CountryInfo(Mcc = ["421"], CallingCode = 967, Alpha3 = "YEM", ShortName = "Yemen", LongName = "The Republic of Yemen", CurrencyCode = "YER" - , Languages = ["ar"], UnofficialNames = ["Yemen", "اليمن", "Jemen", "Yémen", "イエメン", "也门"], Timezones = ["Asia/Aden,+0300"])] + [CountryInfo( + Mcc = ["421"], CallingCode = 967, Alpha3 = "YEM", ShortName = "Yemen", LongName = "The Republic of Yemen", CurrencyCode = "YER" + , Languages = ["ar"], UnofficialNames = ["Yemen", "اليمن", "Jemen", "Yémen", "イエメン", "也门"], Timezones = ["Asia/Aden,+0300"] + )] [ResourceDescription(nameof(Ln.也门))] YE = 887 - , + , /// /// 阿曼 /// - [CountryInfo(Mcc = ["422"], CallingCode = 968, Alpha3 = "OMN", ShortName = "Oman", LongName = "The Sultanate of Oman", CurrencyCode = "OMR" - , Languages = ["ar"], UnofficialNames = ["Oman", "عمان", "Omán", "オマーン", "阿曼"], Timezones = ["Asia/Muscat,+0400"])] + [CountryInfo( + Mcc = ["422"], CallingCode = 968, Alpha3 = "OMN", ShortName = "Oman", LongName = "The Sultanate of Oman", CurrencyCode = "OMR" + , Languages = ["ar"], UnofficialNames = ["Oman", "عمان", "Omán", "オマーン", "阿曼"], Timezones = ["Asia/Muscat,+0400"] + )] [ResourceDescription(nameof(Ln.阿曼))] OM = 512 - , + , /// /// 巴勒斯坦 /// - [CountryInfo(Mcc = ["425"], CallingCode = 970, Alpha3 = "PSE", ShortName = "Palestine, State of", LongName = "The State of Palestine" - , CurrencyCode = "ILS", Languages = ["ar", "he", "en"] - , UnofficialNames = [ - "Palestine", "فلسطين", "Palästina", "Palestina", "the Occupied Palestinian Territory", "パレスチナ", "Palestijnse gebieden" - , "Palestinian Territory Occupied", "Palestinian Authority", "巴勒斯坦" - ], Timezones = ["Asia/Gaza,+0200", "Asia/Hebron,+0200"])] + [CountryInfo( + Mcc = ["425"], CallingCode = 970, Alpha3 = "PSE", ShortName = "Palestine, State of", LongName = "The State of Palestine", CurrencyCode = "ILS" + , Languages = ["ar", "he", "en"] + , UnofficialNames = + [ + "Palestine", "فلسطين", "Palästina", "Palestina", "the Occupied Palestinian Territory", "パレスチナ", "Palestijnse gebieden" + , "Palestinian Territory Occupied", "Palestinian Authority", "巴勒斯坦" + ], Timezones = ["Asia/Gaza,+0200", "Asia/Hebron,+0200"] + )] [ResourceDescription(nameof(Ln.巴勒斯坦))] PS = 275 - , + , /// /// 阿联酋 /// - [CountryInfo(Mcc = ["424"], CallingCode = 971, Alpha3 = "ARE", ShortName = "United Arab Emirates", LongName = "The United Arab Emirates" - , CurrencyCode = "AED", Languages = ["ar"] - , UnofficialNames = [ - "United Arab Emirates", "الإمارات العربية المتحدة", "Vereinigte Arabische Emirate", "Émirats Arabes Unis" - , "Emiratos Árabes Unidos", "アラブ首長国連邦", "Verenigde Arabische Emiraten", "阿联酋" - ], Timezones = ["Asia/Dubai,+0400"])] + [CountryInfo( + Mcc = ["424"], CallingCode = 971, Alpha3 = "ARE", ShortName = "United Arab Emirates", LongName = "The United Arab Emirates" + , CurrencyCode = "AED", Languages = ["ar"] + , UnofficialNames = + [ + "United Arab Emirates", "الإمارات العربية المتحدة", "Vereinigte Arabische Emirate", "Émirats Arabes Unis", "Emiratos Árabes Unidos" + , "アラブ首長国連邦", "Verenigde Arabische Emiraten", "阿联酋" + ], Timezones = ["Asia/Dubai,+0400"] + )] [ResourceDescription(nameof(Ln.阿联酋))] AE = 784 - , + , /// /// 以色列 /// - [CountryInfo(Mcc = [], CallingCode = 972, Alpha3 = "ISR", ShortName = "Israel", LongName = "The State of Israel", CurrencyCode = "ILS" - , Languages = ["he", "ar"], UnofficialNames = ["Israel", "Israël", "イスラエル", "以色列"], Timezones = ["Asia/Jerusalem,+0200"])] + [CountryInfo( + Mcc = [], CallingCode = 972, Alpha3 = "ISR", ShortName = "Israel", LongName = "The State of Israel", CurrencyCode = "ILS" + , Languages = ["he", "ar"], UnofficialNames = ["Israel", "Israël", "イスラエル", "以色列"], Timezones = ["Asia/Jerusalem,+0200"] + )] [ResourceDescription(nameof(Ln.以色列))] IL = 376 - , + , /// /// 巴林 /// - [CountryInfo(Mcc = ["426"], CallingCode = 973, Alpha3 = "BHR", ShortName = "Bahrain", LongName = "The Kingdom of Bahrain", CurrencyCode = "BHD" - , Languages = ["ar"], UnofficialNames = ["Bahrain", "البحرين", "Bahreïn", "Bahrein", "バーレーン", "巴林"] - , Timezones = ["Asia/Bahrain,+0300"])] + [CountryInfo( + Mcc = ["426"], CallingCode = 973, Alpha3 = "BHR", ShortName = "Bahrain", LongName = "The Kingdom of Bahrain", CurrencyCode = "BHD" + , Languages = ["ar"], UnofficialNames = ["Bahrain", "البحرين", "Bahreïn", "Bahrein", "バーレーン", "巴林"], Timezones = ["Asia/Bahrain,+0300"] + )] [ResourceDescription(nameof(Ln.巴林))] BH = 048 - , + , /// /// 卡塔尔 /// - [CountryInfo(Mcc = ["427"], CallingCode = 974, Alpha3 = "QAT", ShortName = "Qatar", LongName = "The State of Qatar", CurrencyCode = "QAR" - , Languages = ["ar"], UnofficialNames = ["Qatar", "قطر", "Katar", "カタール", "卡塔尔"], Timezones = ["Asia/Qatar,+0300"])] + [CountryInfo( + Mcc = ["427"], CallingCode = 974, Alpha3 = "QAT", ShortName = "Qatar", LongName = "The State of Qatar", CurrencyCode = "QAR" + , Languages = ["ar"], UnofficialNames = ["Qatar", "قطر", "Katar", "カタール", "卡塔尔"], Timezones = ["Asia/Qatar,+0300"] + )] [ResourceDescription(nameof(Ln.卡塔尔))] QA = 634 - , + , /// /// 不丹 /// - [CountryInfo(Mcc = ["402"], CallingCode = 975, Alpha3 = "BTN", ShortName = "Bhutan", LongName = "The Kingdom of Bhutan", CurrencyCode = "BTN" - , Languages = ["dz"], UnofficialNames = ["Bhutan", "Bhoutan", "Bután", "ブータン", "不丹"], Timezones = ["Asia/Thimphu,+0600"])] + [CountryInfo( + Mcc = ["402"], CallingCode = 975, Alpha3 = "BTN", ShortName = "Bhutan", LongName = "The Kingdom of Bhutan", CurrencyCode = "BTN" + , Languages = ["dz"], UnofficialNames = ["Bhutan", "Bhoutan", "Bután", "ブータン", "不丹"], Timezones = ["Asia/Thimphu,+0600"] + )] [ResourceDescription(nameof(Ln.不丹))] BT = 064 - , + , /// /// 蒙古 /// - [CountryInfo(Mcc = ["428"], CallingCode = 976, Alpha3 = "MNG", ShortName = "Mongolia", LongName = "Mongolia", CurrencyCode = "MNT" - , Languages = ["mn"], UnofficialNames = ["Mongolia", "Mongolei", "Mongolie", "モンゴル", "Mongolië", "蒙古"] - , Timezones = ["Asia/Hovd,+0700", "Asia/Ulaanbaatar,+0800"])] + [CountryInfo( + Mcc = ["428"], CallingCode = 976, Alpha3 = "MNG", ShortName = "Mongolia", LongName = "Mongolia", CurrencyCode = "MNT", Languages = ["mn"] + , UnofficialNames = ["Mongolia", "Mongolei", "Mongolie", "モンゴル", "Mongolië", "蒙古"], Timezones = ["Asia/Hovd,+0700", "Asia/Ulaanbaatar,+0800"] + )] [ResourceDescription(nameof(Ln.蒙古))] MN = 496 - , + , /// /// 尼泊尔 /// - [CountryInfo(Mcc = ["429"], CallingCode = 977, Alpha3 = "NPL", ShortName = "Nepal", LongName = "The Federal Democratic Republic of Nepal" - , CurrencyCode = "NPR", Languages = ["ne", "mai", "bho", "new", "urd"] - , UnofficialNames = ["Nepal", "Népal", "the Federal Democratic Republic of Nepal", "ネパール", "尼泊尔"] - , Timezones = ["Asia/Kathmandu,+0545"])] + [CountryInfo( + Mcc = ["429"], CallingCode = 977, Alpha3 = "NPL", ShortName = "Nepal", LongName = "The Federal Democratic Republic of Nepal" + , CurrencyCode = "NPR", Languages = ["ne", "mai", "bho", "new", "urd"] + , UnofficialNames = ["Nepal", "Népal", "the Federal Democratic Republic of Nepal", "ネパール", "尼泊尔"], Timezones = ["Asia/Kathmandu,+0545"] + )] [ResourceDescription(nameof(Ln.尼泊尔))] NP = 524 - , + , /// /// 塔吉克斯坦 /// - [CountryInfo(Mcc = ["436"], CallingCode = 992, Alpha3 = "TJK", ShortName = "Tajikistan", LongName = "The Republic of Tajikistan" - , CurrencyCode = "TJS", Languages = ["tg", "ru"] - , UnofficialNames = ["Tajikistan", "Tadschikistan", "Tayikistán", "タジキスタン", "Tadzjikistan", "Tajikstan", "塔吉克斯坦"] - , Timezones = ["Asia/Dushanbe,+0500"])] + [CountryInfo( + Mcc = ["436"], CallingCode = 992, Alpha3 = "TJK", ShortName = "Tajikistan", LongName = "The Republic of Tajikistan", CurrencyCode = "TJS" + , Languages = ["tg", "ru"], UnofficialNames = ["Tajikistan", "Tadschikistan", "Tayikistán", "タジキスタン", "Tadzjikistan", "Tajikstan", "塔吉克斯坦"] + , Timezones = ["Asia/Dushanbe,+0500"] + )] [ResourceDescription(nameof(Ln.塔吉克斯坦))] TJ = 762 - , + , /// /// 土库曼斯坦 /// - [CountryInfo(Mcc = ["438"], CallingCode = 993, Alpha3 = "TKM", ShortName = "Turkmenistan", LongName = "Turkmenistan", CurrencyCode = "TMT" - , Languages = ["tk", "ru"], UnofficialNames = ["Turkmenistan", "Turkménistan", "Turkmenistán", "トルクメニスタン", "Turkmenia", "土库曼斯坦"] - , Timezones = ["Asia/Ashgabat,+0500"])] + [CountryInfo( + Mcc = ["438"], CallingCode = 993, Alpha3 = "TKM", ShortName = "Turkmenistan", LongName = "Turkmenistan", CurrencyCode = "TMT" + , Languages = ["tk", "ru"], UnofficialNames = ["Turkmenistan", "Turkménistan", "Turkmenistán", "トルクメニスタン", "Turkmenia", "土库曼斯坦"] + , Timezones = ["Asia/Ashgabat,+0500"] + )] [ResourceDescription(nameof(Ln.土库曼斯坦))] TM = 795 - , + , /// /// 阿塞拜疆 /// - [CountryInfo(Mcc = ["400"], CallingCode = 994, Alpha3 = "AZE", ShortName = "Azerbaijan", LongName = "The Republic of Azerbaijan" - , CurrencyCode = "AZN", Languages = ["az", "hy"] - , UnofficialNames = ["Azerbaijan", "Aserbaidschan", "Azerbaïdjan", "Azerbaiyán", "アゼルバイジャン", "Azerbeidzjan", "阿塞拜疆"] - , Timezones = ["Asia/Baku,+0400"])] + [CountryInfo( + Mcc = ["400"], CallingCode = 994, Alpha3 = "AZE", ShortName = "Azerbaijan", LongName = "The Republic of Azerbaijan", CurrencyCode = "AZN" + , Languages = ["az", "hy"], UnofficialNames = ["Azerbaijan", "Aserbaidschan", "Azerbaïdjan", "Azerbaiyán", "アゼルバイジャン", "Azerbeidzjan", "阿塞拜疆"] + , Timezones = ["Asia/Baku,+0400"] + )] [ResourceDescription(nameof(Ln.阿塞拜疆))] AZ = 031 - , + , /// /// 格鲁吉亚 /// - [CountryInfo(Mcc = ["282", "289"], CallingCode = 995, Alpha3 = "GEO", ShortName = "Georgia", LongName = "Georgia", CurrencyCode = "GEL" - , Languages = ["ka"], UnofficialNames = ["Georgia", "Georgien", "Géorgie", "グルジア", "Georgië", "格鲁吉亚"] - , Timezones = ["Asia/Tbilisi,+0400"])] + [CountryInfo( + Mcc = ["282", "289"], CallingCode = 995, Alpha3 = "GEO", ShortName = "Georgia", LongName = "Georgia", CurrencyCode = "GEL", Languages = ["ka"] + , UnofficialNames = ["Georgia", "Georgien", "Géorgie", "グルジア", "Georgië", "格鲁吉亚"], Timezones = ["Asia/Tbilisi,+0400"] + )] [ResourceDescription(nameof(Ln.格鲁吉亚))] GE = 268 - , + , /// /// 吉尔吉斯斯坦 /// - [CountryInfo(Mcc = ["437"], CallingCode = 996, Alpha3 = "KGZ", ShortName = "Kyrgyzstan", LongName = "The Kyrgyz Republic", CurrencyCode = "KGS" - , Languages = ["ky", "ru"] - , UnofficialNames = ["Kyrgyzstan", "Kirgisistan", "Kirghizistan", "Kirguizistán", "キルギス", "Kirgizië", "Kyrgzstan", "吉尔吉斯斯坦"] - , Timezones = ["Asia/Bishkek,+0600"])] + [CountryInfo( + Mcc = ["437"], CallingCode = 996, Alpha3 = "KGZ", ShortName = "Kyrgyzstan", LongName = "The Kyrgyz Republic", CurrencyCode = "KGS" + , Languages = ["ky", "ru"] + , UnofficialNames = ["Kyrgyzstan", "Kirgisistan", "Kirghizistan", "Kirguizistán", "キルギス", "Kirgizië", "Kyrgzstan", "吉尔吉斯斯坦"] + , Timezones = ["Asia/Bishkek,+0600"] + )] [ResourceDescription(nameof(Ln.吉尔吉斯斯坦))] KG = 417 - , + , /// /// 乌兹别克斯坦 /// - [CountryInfo(Mcc = ["434"], CallingCode = 998, Alpha3 = "UZB", ShortName = "Uzbekistan", LongName = "The Republic of Uzbekistan" - , CurrencyCode = "UZS", Languages = ["uz", "ru"] - , UnofficialNames = ["Uzbekistan", "Usbekistan", "Ouzbékistan", "Uzbekistán", "ウズベキスタン", "Oezbekistan", "乌兹别克斯坦"] - , Timezones = ["Asia/Samarkand,+0500", "Asia/Tashkent,+0500"])] + [CountryInfo( + Mcc = ["434"], CallingCode = 998, Alpha3 = "UZB", ShortName = "Uzbekistan", LongName = "The Republic of Uzbekistan", CurrencyCode = "UZS" + , Languages = ["uz", "ru"], UnofficialNames = ["Uzbekistan", "Usbekistan", "Ouzbékistan", "Uzbekistán", "ウズベキスタン", "Oezbekistan", "乌兹别克斯坦"] + , Timezones = ["Asia/Samarkand,+0500", "Asia/Tashkent,+0500"] + )] [ResourceDescription(nameof(Ln.乌兹别克斯坦))] UZ = 860 } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Educations.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Educations.cs index cf88e935..9bf1ff51 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Educations.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Educations.cs @@ -12,7 +12,7 @@ public enum Educations [ResourceDescription(nameof(Ln.小学))] Primary = 1 - , + , /// /// 初中 @@ -20,7 +20,7 @@ public enum Educations [ResourceDescription(nameof(Ln.初中))] Junior = 2 - , + , /// /// 高中 @@ -28,7 +28,7 @@ public enum Educations [ResourceDescription(nameof(Ln.高中))] Higher = 3 - , + , /// /// 中专 @@ -36,7 +36,7 @@ public enum Educations [ResourceDescription(nameof(Ln.中专))] Technical = 4 - , + , /// /// 大专 @@ -44,7 +44,7 @@ public enum Educations [ResourceDescription(nameof(Ln.大专))] College = 5 - , + , /// /// 本科 @@ -52,7 +52,7 @@ public enum Educations [ResourceDescription(nameof(Ln.本科))] Bachelor = 6 - , + , /// /// 硕士 @@ -60,7 +60,7 @@ public enum Educations [ResourceDescription(nameof(Ln.硕士))] Master = 7 - , + , /// /// 博士 @@ -68,7 +68,7 @@ public enum Educations [ResourceDescription(nameof(Ln.博士))] Doctor = 8 - , + , /// /// 博士后 diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/EnumExtensions.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/EnumExtensions.cs index 0e72262e..3fd9f2fc 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/EnumExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/EnumExtensions.cs @@ -9,8 +9,7 @@ public static class EnumExtensions /// 通过类泛型类型获取特性 /// public static T Attr(this Enum me) - where T : Attribute - { + where T : Attribute { return me.GetType().GetMember(me.ToString())[0].GetCustomAttributes(false).FirstOrDefault(); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/ErrorCodes.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/ErrorCodes.cs index 49ff76f1..94259579 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/ErrorCodes.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/ErrorCodes.cs @@ -12,15 +12,15 @@ public enum ErrorCodes [ResourceDescription(nameof(Ln.成功))] Succeed = 0 - , + , /// - /// 未处理异常 + /// 内部错误 /// - [ResourceDescription(nameof(Ln.未处理异常))] - Unhandled = 9000 + [ResourceDescription(nameof(Ln.内部错误))] + InternalError = 9000 - , + , /// /// 结果非预期 @@ -28,7 +28,7 @@ public enum ErrorCodes [ResourceDescription(nameof(Ln.结果非预期))] Unexpected = 9100 - , + , /// /// 无效输入 @@ -36,7 +36,7 @@ public enum ErrorCodes [ResourceDescription(nameof(Ln.无效输入))] InvalidInput = 9200 - , + , /// /// 无效操作 @@ -44,7 +44,7 @@ public enum ErrorCodes [ResourceDescription(nameof(Ln.无效操作))] InvalidOperation = 9300 - , + , /// /// 外部错误 diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/FreeSqlInitMethods.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/FreeSqlInitMethods.cs index 7cc4fc79..73174c14 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/FreeSqlInitMethods.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/FreeSqlInitMethods.cs @@ -11,7 +11,7 @@ public enum FreeSqlInitMethods /// None = 0 - , + , /// /// 同步数据库结构 @@ -19,7 +19,7 @@ public enum FreeSqlInitMethods [ResourceDescription(nameof(Ln.同步数据库结构))] SyncStructure = 1 - , + , /// /// 插入种子数据 @@ -27,7 +27,7 @@ public enum FreeSqlInitMethods [ResourceDescription(nameof(Ln.插入种子数据))] InsertSeedData = 1 << 1 - , + , /// /// 比较数据库结构 diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Genders.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Genders.cs index 374a0572..597378de 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Genders.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Genders.cs @@ -12,7 +12,7 @@ public enum Genders [ResourceDescription(nameof(Ln.男))] Male = 1 - , + , /// /// 女 @@ -20,7 +20,7 @@ public enum Genders [ResourceDescription(nameof(Ln.女))] Female = 2 - , + , /// /// 密 diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Indicates.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Indicates.cs index e9fe4e61..6e2073c1 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Indicates.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Indicates.cs @@ -11,35 +11,35 @@ public enum Indicates /// Info = 1 - , + , /// /// 主要 /// Primary = 2 - , + , /// /// 警告 /// Warning = 3 - , + , /// /// 成功 /// Success = 4 - , + , /// /// 危险 /// Danger = 5 - , + , /// /// 无 diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/LogLevels.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/LogLevels.cs index 64f8b898..7c959239 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/LogLevels.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/LogLevels.cs @@ -13,7 +13,7 @@ public enum LogLevels [ResourceDescription(nameof(Ln.追踪))] Trace = 0 - , + , /// /// 调试 @@ -22,7 +22,7 @@ public enum LogLevels [ResourceDescription(nameof(Ln.调试))] Debug = 1 - , + , /// /// 信息 @@ -31,7 +31,7 @@ public enum LogLevels [ResourceDescription(nameof(Ln.信息))] Information = 2 - , + , /// /// 警告 @@ -40,7 +40,7 @@ public enum LogLevels [ResourceDescription(nameof(Ln.警告))] Warning = 3 - , + , /// /// 错误 @@ -49,7 +49,7 @@ public enum LogLevels [ResourceDescription(nameof(Ln.错误))] Error = 4 - , + , /// /// 宕机 diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/MarriageStatues.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/MarriageStatues.cs index 0153174b..a8daf2cc 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/MarriageStatues.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/MarriageStatues.cs @@ -12,7 +12,7 @@ public enum MarriageStatues [ResourceDescription(nameof(Ln.未婚))] Unmarried = 1 - , + , /// /// 已婚 @@ -20,7 +20,7 @@ public enum MarriageStatues [ResourceDescription(nameof(Ln.已婚))] Married = 2 - , + , /// /// 离异 @@ -28,7 +28,7 @@ public enum MarriageStatues [ResourceDescription(nameof(Ln.离异))] Divorced = 3 - , + , /// /// 丧偶 diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/ModuleTypes.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/ModuleTypes.cs index 1dbe39f5..31f33f6c 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/ModuleTypes.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/ModuleTypes.cs @@ -12,7 +12,7 @@ public enum ModuleTypes [ResourceDescription(nameof(Ln.系统模块))] SysComponent = 1 - , + , /// /// 管理模块 diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Nations.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Nations.cs index 9f794bb1..a25db3cf 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Nations.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Nations.cs @@ -15,7 +15,7 @@ public enum Nations [ResourceDescription(nameof(Ln.汉族))] Han = 1 - , + , /// /// 壮族 @@ -23,7 +23,7 @@ public enum Nations [ResourceDescription(nameof(Ln.壮族))] Zhuang = 2 - , + , /// /// 满族 @@ -31,7 +31,7 @@ public enum Nations [ResourceDescription(nameof(Ln.满族))] Manchu = 3 - , + , /// /// 回族 @@ -39,7 +39,7 @@ public enum Nations [ResourceDescription(nameof(Ln.回族))] Hui = 4 - , + , /// /// 苗族 @@ -47,7 +47,7 @@ public enum Nations [ResourceDescription(nameof(Ln.苗族))] Miao = 5 - , + , /// /// 维吾尔族 @@ -55,7 +55,7 @@ public enum Nations [ResourceDescription(nameof(Ln.维吾尔族))] Uyghur = 6 - , + , /// /// 土家族 @@ -63,7 +63,7 @@ public enum Nations [ResourceDescription(nameof(Ln.土家族))] Tujia = 7 - , + , /// /// 彝族 @@ -71,7 +71,7 @@ public enum Nations [ResourceDescription(nameof(Ln.彝族))] Yi = 8 - , + , /// /// 蒙古族 @@ -79,7 +79,7 @@ public enum Nations [ResourceDescription(nameof(Ln.蒙古族))] Mongolian = 9 - , + , /// /// 藏族 @@ -87,7 +87,7 @@ public enum Nations [ResourceDescription(nameof(Ln.藏族))] Tibetan = 10 - , + , /// /// 布依族 @@ -95,7 +95,7 @@ public enum Nations [ResourceDescription(nameof(Ln.布依族))] Buyei = 11 - , + , /// /// 侗族 @@ -103,7 +103,7 @@ public enum Nations [ResourceDescription(nameof(Ln.侗族))] Dong = 12 - , + , /// /// 瑶族 @@ -111,7 +111,7 @@ public enum Nations [ResourceDescription(nameof(Ln.瑶族))] Yao = 13 - , + , /// /// 朝鲜族 @@ -119,7 +119,7 @@ public enum Nations [ResourceDescription(nameof(Ln.朝鲜族))] Korean = 14 - , + , /// /// 白族 @@ -127,7 +127,7 @@ public enum Nations [ResourceDescription(nameof(Ln.白族))] Bai = 15 - , + , /// /// 哈尼族 @@ -135,7 +135,7 @@ public enum Nations [ResourceDescription(nameof(Ln.哈尼族))] Hani = 16 - , + , /// /// 哈萨克族 @@ -143,7 +143,7 @@ public enum Nations [ResourceDescription(nameof(Ln.哈萨克族))] Kazakh = 17 - , + , /// /// 黎族 @@ -151,7 +151,7 @@ public enum Nations [ResourceDescription(nameof(Ln.黎族))] Li = 18 - , + , /// /// 傣族 @@ -159,7 +159,7 @@ public enum Nations [ResourceDescription(nameof(Ln.傣族))] Dai = 19 - , + , /// /// 畲族 @@ -167,7 +167,7 @@ public enum Nations [ResourceDescription(nameof(Ln.畲族))] She = 20 - , + , /// /// 傈僳族 @@ -175,7 +175,7 @@ public enum Nations [ResourceDescription(nameof(Ln.傈僳族))] Lisu = 21 - , + , /// /// 仡佬族 @@ -183,7 +183,7 @@ public enum Nations [ResourceDescription(nameof(Ln.仡佬族))] Gelao = 22 - , + , /// /// 东乡族 @@ -191,7 +191,7 @@ public enum Nations [ResourceDescription(nameof(Ln.东乡族))] Dongxiang = 23 - , + , /// /// 高山族 @@ -199,7 +199,7 @@ public enum Nations [ResourceDescription(nameof(Ln.高山族))] Gaoshan = 24 - , + , /// /// 拉祜族族 @@ -207,7 +207,7 @@ public enum Nations [ResourceDescription(nameof(Ln.拉祜族族))] Lahu = 25 - , + , /// /// 水族 @@ -215,7 +215,7 @@ public enum Nations [ResourceDescription(nameof(Ln.水族))] Shui = 26 - , + , /// /// 佤族 @@ -223,7 +223,7 @@ public enum Nations [ResourceDescription(nameof(Ln.佤族))] Va = 27 - , + , /// /// 纳西族 @@ -231,7 +231,7 @@ public enum Nations [ResourceDescription(nameof(Ln.纳西族))] Nakhi = 28 - , + , /// /// 羌族 @@ -239,7 +239,7 @@ public enum Nations [ResourceDescription(nameof(Ln.羌族))] Qiang = 29 - , + , /// /// 土族 @@ -247,7 +247,7 @@ public enum Nations [ResourceDescription(nameof(Ln.土族))] Monguor = 30 - , + , /// /// 仫佬族 @@ -255,7 +255,7 @@ public enum Nations [ResourceDescription(nameof(Ln.仫佬族))] Mulao = 31 - , + , /// /// 锡伯族 @@ -263,7 +263,7 @@ public enum Nations [ResourceDescription(nameof(Ln.锡伯族))] Xibe = 32 - , + , /// /// 柯尔克孜族 @@ -271,7 +271,7 @@ public enum Nations [ResourceDescription(nameof(Ln.柯尔克孜族))] Kyrgyz = 33 - , + , /// /// 达斡尔族 @@ -279,7 +279,7 @@ public enum Nations [ResourceDescription(nameof(Ln.达斡尔族))] Daur = 34 - , + , /// /// 景颇族 @@ -287,7 +287,7 @@ public enum Nations [ResourceDescription(nameof(Ln.景颇族))] Jingpo = 35 - , + , /// /// 毛南族 @@ -295,7 +295,7 @@ public enum Nations [ResourceDescription(nameof(Ln.毛南族))] Maonan = 36 - , + , /// /// 撒拉族 @@ -303,7 +303,7 @@ public enum Nations [ResourceDescription(nameof(Ln.撒拉族))] Salar = 37 - , + , /// /// 布朗族 @@ -311,7 +311,7 @@ public enum Nations [ResourceDescription(nameof(Ln.布朗族))] Blang = 38 - , + , /// /// 塔吉克族 @@ -319,7 +319,7 @@ public enum Nations [ResourceDescription(nameof(Ln.塔吉克族))] Tajik = 39 - , + , /// /// 阿昌族 @@ -327,7 +327,7 @@ public enum Nations [ResourceDescription(nameof(Ln.阿昌族))] Achang = 40 - , + , /// /// 普米族 @@ -335,7 +335,7 @@ public enum Nations [ResourceDescription(nameof(Ln.普米族))] Pumi = 41 - , + , /// /// 鄂温克族 @@ -343,7 +343,7 @@ public enum Nations [ResourceDescription(nameof(Ln.鄂温克族))] Evenk = 42 - , + , /// /// 怒族 @@ -351,7 +351,7 @@ public enum Nations [ResourceDescription(nameof(Ln.怒族))] Nu = 43 - , + , /// /// 京族 @@ -359,7 +359,7 @@ public enum Nations [ResourceDescription(nameof(Ln.京族))] Kinh = 44 - , + , /// /// 基诺族 @@ -367,7 +367,7 @@ public enum Nations [ResourceDescription(nameof(Ln.基诺族))] Jino = 45 - , + , /// /// 德昂族 @@ -375,7 +375,7 @@ public enum Nations [ResourceDescription(nameof(Ln.德昂族))] Deang = 46 - , + , /// /// 保安族 @@ -383,7 +383,7 @@ public enum Nations [ResourceDescription(nameof(Ln.保安族))] Bonan = 47 - , + , /// /// 俄罗斯族 @@ -391,7 +391,7 @@ public enum Nations [ResourceDescription(nameof(Ln.俄罗斯族))] Russian = 48 - , + , /// /// 裕固族 @@ -399,7 +399,7 @@ public enum Nations [ResourceDescription(nameof(Ln.裕固族))] Yughur = 49 - , + , /// /// 乌孜别克族 @@ -407,7 +407,7 @@ public enum Nations [ResourceDescription(nameof(Ln.乌孜别克族))] Uzbek = 50 - , + , /// /// 门巴族 @@ -415,7 +415,7 @@ public enum Nations [ResourceDescription(nameof(Ln.门巴族))] Monpa = 51 - , + , /// /// 鄂伦春族 @@ -423,7 +423,7 @@ public enum Nations [ResourceDescription(nameof(Ln.鄂伦春族))] Oroqen = 52 - , + , /// /// 独龙族 @@ -431,7 +431,7 @@ public enum Nations [ResourceDescription(nameof(Ln.独龙族))] Derung = 53 - , + , /// /// 塔塔尔族 @@ -439,7 +439,7 @@ public enum Nations [ResourceDescription(nameof(Ln.塔塔尔族))] Tatar = 54 - , + , /// /// 赫哲族 @@ -447,7 +447,7 @@ public enum Nations [ResourceDescription(nameof(Ln.赫哲族))] Nanai = 55 - , + , /// /// 珞巴族 diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Orders.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Orders.cs index 6ba56128..d711a853 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Orders.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/Orders.cs @@ -12,7 +12,7 @@ public enum Orders [ResourceDescription(nameof(Ln.顺序排序))] Ascending = 1 - , + , /// /// 倒序排序 @@ -20,7 +20,7 @@ public enum Orders [ResourceDescription(nameof(Ln.倒序排序))] Descending = 2 - , + , /// /// 随机排序 @@ -28,7 +28,7 @@ public enum Orders [ResourceDescription(nameof(Ln.随机排序))] Random = 3 - , + , /// /// 不排序 diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/PaymentModes.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/PaymentModes.cs index 5734d9d4..ffbb3993 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/PaymentModes.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/PaymentModes.cs @@ -12,7 +12,7 @@ public enum PaymentModes [ResourceDescription(nameof(Ln.USDT))] USDT = 1 - , + , /// /// 支付宝 @@ -20,7 +20,7 @@ public enum PaymentModes [ResourceDescription(nameof(Ln.支付宝))] Alipay = 2 - , + , /// /// 微信支付 diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/PoliticalStatues.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/PoliticalStatues.cs index 62b1be2e..3cbf8377 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/PoliticalStatues.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/PoliticalStatues.cs @@ -12,7 +12,7 @@ public enum PoliticalStatues [ResourceDescription(nameof(Ln.中共党员))] MemberOfCommunistParty = 1 - , + , /// /// 共青团员 @@ -20,7 +20,7 @@ public enum PoliticalStatues [ResourceDescription(nameof(Ln.共青团员))] MemberOfCommunistYouthLeague = 2 - , + , /// /// 群众 diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/TradeDirections.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/TradeDirections.cs index 5cab76cb..53c6b780 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/TradeDirections.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/TradeDirections.cs @@ -12,7 +12,7 @@ public enum TradeDirections [ResourceDescription(nameof(Ln.收入))] Income = 1 - , + , /// /// 支出 diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/TradeTypes.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/TradeTypes.cs index 62225771..9395d11f 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/TradeTypes.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/TradeTypes.cs @@ -13,7 +13,7 @@ public enum TradeTypes [Trade(Direction = TradeDirections.Income)] AdminGift = 1 - , + , /// /// 管理员扣费 @@ -22,7 +22,7 @@ public enum TradeTypes [Trade(Direction = TradeDirections.Expense)] AdminDeduct = 2 - , + , /// /// 自助充值 @@ -31,28 +31,39 @@ public enum TradeTypes [Trade(Direction = TradeDirections.Income)] SelfDeposit = 3 - , + , + + /// + /// 佣金收入 + /// + [ResourceDescription(nameof(Ln.佣金收入))] + [Trade(Direction = TradeDirections.Income)] + Commission = 5 + + , /// /// 转账支出 /// [ResourceDescription(nameof(Ln.转账支出))] [Trade(Direction = TradeDirections.Expense)] - TransferExpense = 4 + TransferExpense = 6 - , + , /// /// 转账收入 /// [ResourceDescription(nameof(Ln.转账收入))] [Trade(Direction = TradeDirections.Income)] - TransferIncome = 5, + TransferIncome = 7 + + , /// /// 管理员充值 /// [ResourceDescription(nameof(Ln.管理员充值))] [Trade(Direction = TradeDirections.Income)] - AdminDeposit = 6 + AdminDeposit = 8 } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/TypeExtensions.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/TypeExtensions.cs index 0e721031..4ed9348f 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/TypeExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Enums/TypeExtensions.cs @@ -11,11 +11,13 @@ public static class TypeExtensions /// 要查找的类型 /// 属性路径,如"a.b.c" /// 找到的属性信息,如果路径中任何属性不存在则返回null - public static PropertyInfo GetRecursiveProperty(this Type type, string propertyPath) - { - var properties = propertyPath.Split('.'); + public static PropertyInfo GetRecursiveProperty( + this Type type + , string propertyPath + ) { + var properties = propertyPath.Split('.'); PropertyInfo propertyInfo = null; - var currentType = type; + var currentType = type; foreach (var propertyName in properties) { propertyInfo = currentType.GetProperty(propertyName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase); diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/EventBus/DefaultEventPublisher.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/EventBus/DefaultEventPublisher.cs index c206f416..aecff790 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/EventBus/DefaultEventPublisher.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/EventBus/DefaultEventPublisher.cs @@ -12,28 +12,38 @@ public sealed class DefaultEventPublisher : IEventPublisher /// /// Initializes a new instance of the class. /// - public DefaultEventPublisher() - { + public DefaultEventPublisher() { _eventChannel = Channel.CreateUnbounded(); - _ = new TaskFactory().StartNew( // - async state => { + _ = new TaskFactory().StartNew( + async state => + { var subscribers = (List)state; - await Parallel.ForEachAsync(_eventChannel.Reader.ReadAllAsync(), (msg, __) => { - _ = Parallel.ForEach( // - subscribers.Where(x => x.GetParameters().FirstOrDefault()?.ParameterType == msg.GetType()) - , (x, _) => x.Invoke(App.GetService(x.DeclaringType), [msg])); - return ValueTask.CompletedTask; - }) - .ConfigureAwait(false); - }, App.EffectiveTypes.Where(x => typeof(IEventSubscriber).IsAssignableFrom(x) && x.IsClass && !x.IsAbstract).SelectMany(x => x.GetMethods(BindingFlags.Instance | BindingFlags.Public).Where(y => y.IsDefined(typeof(EventSubscribeAttribute)))).ToList()); + await Parallel + .ForEachAsync( + _eventChannel.Reader.ReadAllAsync(), ( + msg + , __ + ) => + { + _ = Parallel.ForEach( + subscribers.Where(x => x.GetParameters().FirstOrDefault()?.ParameterType == msg.GetType()), ( + x + , _ + ) => x.Invoke(App.GetService(x.DeclaringType), [msg]) + ); + return ValueTask.CompletedTask; + } + ) + .ConfigureAwait(false); + }, App.EffectiveTypes.Where(x => typeof(IEventSubscriber).IsAssignableFrom(x) && x.IsClass && !x.IsAbstract).SelectMany(x => x.GetMethods(BindingFlags.Instance | BindingFlags.Public).Where(y => y.IsDefined(typeof(EventSubscribeAttribute)))).ToList() + ); } /// public int ChannelCount => _eventChannel.Reader.Count; /// - public async Task PublishAsync(IEventData eventData) - { + public async Task PublishAsync(IEventData eventData) { await _eventChannel.Writer.WriteAsync(eventData).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminException.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminException.cs index 230e8906..af922e68 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminException.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminException.cs @@ -10,9 +10,12 @@ public abstract class NetAdminException(string message, Exception innerException /// /// Initializes a new instance of the class. /// - protected NetAdminException(ErrorCodes code, string message = null, Exception innerException = null) // - : this(message, innerException) - { + protected NetAdminException( + ErrorCodes code + , string message = null + , Exception innerException = null + ) + : this(message, innerException) { Code = code; } diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminExternalErrorException.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminExternalErrorException.cs index 8532406e..997c534f 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminExternalErrorException.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminExternalErrorException.cs @@ -9,4 +9,6 @@ namespace NetAdmin.Infrastructure.Exceptions; #pragma warning disable RCS1194 public sealed class NetAdminExternalErrorException(string message, Exception innerException = null) #pragma warning restore RCS1194 - : NetAdminException(ErrorCodes.ExternalError, message, innerException) { } \ No newline at end of file + : NetAdminException(ErrorCodes.ExternalError, message, innerException) +{ +} \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminGetLockerException.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminGetLockerException.cs index fb8871b8..0e9f4f71 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminGetLockerException.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminGetLockerException.cs @@ -7,5 +7,7 @@ namespace NetAdmin.Infrastructure.Exceptions; /// 并发执行时锁竞争失败 /// #pragma warning disable RCS1194 -public sealed class NetAdminGetLockerException(string message = null) : NetAdminInvalidOperationException(message) { } +public sealed class NetAdminGetLockerException(string message = null) : NetAdminInvalidOperationException(message) +{ +} #pragma warning restore RCS1194 \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminInvalidInputException.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminInvalidInputException.cs index f3d79819..2830ad52 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminInvalidInputException.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminInvalidInputException.cs @@ -9,4 +9,6 @@ namespace NetAdmin.Infrastructure.Exceptions; #pragma warning disable DesignedForInheritance, RCS1194 public class NetAdminInvalidInputException(string message = null, Exception innerException = null) #pragma warning restore RCS1194, DesignedForInheritance - : NetAdminException(ErrorCodes.InvalidInput, message, innerException) { } \ No newline at end of file + : NetAdminException(ErrorCodes.InvalidInput, message, innerException) +{ +} \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminInvalidOperationException.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminInvalidOperationException.cs index 0f84c508..87840412 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminInvalidOperationException.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Exceptions/NetAdminInvalidOperationException.cs @@ -9,4 +9,6 @@ namespace NetAdmin.Infrastructure.Exceptions; #pragma warning disable DesignedForInheritance, RCS1194 public class NetAdminInvalidOperationException(string message, Exception innerException = null) #pragma warning restore RCS1194, DesignedForInheritance - : NetAdminException(ErrorCodes.InvalidOperation, message, innerException) { } \ No newline at end of file + : NetAdminException(ErrorCodes.InvalidOperation, message, innerException) +{ +} \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/CountryCodesExtensions.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/CountryCodesExtensions.cs index 0c0bd7eb..090c1b86 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/CountryCodesExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/CountryCodesExtensions.cs @@ -8,8 +8,7 @@ public static class CountryCodesExtensions /// /// 获取国际电话呼号 /// - public static int GetCallingCode(this CountryCodes me) - { + public static int GetCallingCode(this CountryCodes me) { return me.Attr().CallingCode; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/HttpContextExtensions.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/HttpContextExtensions.cs index 19449485..af7a52b1 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/HttpContextExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/HttpContextExtensions.cs @@ -8,17 +8,17 @@ public static class HttpContextExtensions /// /// 获取客户端真实IP /// - public static IPAddress GetRealIpAddress(this HttpContext me) - { + public static IPAddress GetRealIpAddress(this HttpContext me) { #pragma warning disable IDE0046 - if (me.Request.Headers.TryGetValue(Chars.FLG_HTTP_HEADER_KEY_X_FORWARDED_FOR, out var ips1) && + if (me.Request.Headers.TryGetValue(Chars.FLG_HTTP_HEADER_KEY_X_FORWARDED_FOR, out var ips1) + && #pragma warning restore IDE0046 IPAddress.TryParse(ips1.FirstOrDefault()?.Split(',').FirstOrDefault(), out var ip1)) { return ip1; } - return me.Request.Headers.TryGetValue(Chars.FLG_HTTP_HEADER_KEY_X_REAL_IP, out var ips2) && - IPAddress.TryParse(ips2.FirstOrDefault()?.Split(',').FirstOrDefault(), out var ip2) + return me.Request.Headers.TryGetValue(Chars.FLG_HTTP_HEADER_KEY_X_REAL_IP, out var ips2) + && IPAddress.TryParse(ips2.FirstOrDefault()?.Split(',').FirstOrDefault(), out var ip2) ? ip2 : me.Connection.RemoteIpAddress; } @@ -26,8 +26,7 @@ public static class HttpContextExtensions /// /// 获取追踪标识 /// - public static Guid GetTraceId(this HttpContext me) - { + public static Guid GetTraceId(this HttpContext me) { return me.TraceIdentifier.Md5(Encoding.UTF8).Guid(); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/HttpRequestMessageExtensions.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/HttpRequestMessageExtensions.cs index 560dca9c..050cb68b 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/HttpRequestMessageExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/HttpRequestMessageExtensions.cs @@ -8,8 +8,10 @@ public static class HttpRequestMessageExtensions /// /// 记录日志 /// - public static async Task LogAsync(this HttpRequestMessage me, ILogger logger) - { + public static async Task LogAsync( + this HttpRequestMessage me + , ILogger logger + ) { logger.Info($"HTTP Request {await me.BuildJsonAsync().ConfigureAwait(false)}"); return me; } @@ -17,8 +19,7 @@ public static class HttpRequestMessageExtensions /// /// 将Http请求的Uri、Header、Body打包成Json字符串 /// - private static async Task BuildJsonAsync(this HttpRequestMessage me) - { + private static async Task BuildJsonAsync(this HttpRequestMessage me) { var body = me?.Content == null ? null : await me.Content!.ReadAsStringAsync().ConfigureAwait(false); return new { Uri = me?.RequestUri, Header = me?.ToString(), Body = body }.ToJson(); } diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/HttpRequestPartExtensions.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/HttpRequestPartExtensions.cs index 7c7ff880..aaf71f7f 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/HttpRequestPartExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/HttpRequestPartExtensions.cs @@ -8,22 +8,32 @@ public static class HttpRequestPartExtensions /// /// 设置日志 /// - public static HttpRequestPart SetLog(this HttpRequestPart me, ILogger logger, Func bodyHandle = null) - { + public static HttpRequestPart SetLog( + this HttpRequestPart me + , ILogger logger + , Func bodyHandle = null + ) { return me.OnRequesting(RequestHandleAsync).OnResponsing(ResponseHandleAsync).OnException(ExceptionHandleAsync); - Task ExceptionHandleAsync(HttpClient _, HttpResponseMessage rsp, string errors) - { + Task ExceptionHandleAsync( + HttpClient _ + , HttpResponseMessage rsp + , string errors + ) { return rsp.LogExceptionAsync(errors, logger, bodyHandle); } - Task ResponseHandleAsync(HttpClient _, HttpResponseMessage rsp) - { + Task ResponseHandleAsync( + HttpClient _ + , HttpResponseMessage rsp + ) { return rsp.LogAsync(logger, bodyHandle); } - Task RequestHandleAsync(HttpClient _, HttpRequestMessage req) - { + Task RequestHandleAsync( + HttpClient _ + , HttpRequestMessage req + ) { return req.LogAsync(logger); } } diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/HttpResponseMessageExtensions.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/HttpResponseMessageExtensions.cs index 663c0f45..e53a2648 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/HttpResponseMessageExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/HttpResponseMessageExtensions.cs @@ -8,32 +8,39 @@ public static class HttpResponseMessageExtensions /// /// 记录日志 /// - public static async Task LogAsync(this HttpResponseMessage me, ILogger logger, Func bodyPreHandle = null) - { + public static async Task LogAsync( + this HttpResponseMessage me + , ILogger logger + , Func bodyPreHandle = null + ) { logger.Info($"HTTP Response {await me.BuildJsonAsync(bodyPreHandle).ConfigureAwait(false)}"); } /// /// 记录异常日志 /// - public static async Task LogExceptionAsync(this HttpResponseMessage me, string errors, ILogger logger - , Func bodyHandle = null) - { + public static async Task LogExceptionAsync( + this HttpResponseMessage me + , string errors + , ILogger logger + , Func bodyHandle = null + ) { logger.Warn($"{errors}: {await me.BuildJsonAsync(bodyHandle).ConfigureAwait(false)}"); } /// /// 将Http请求的Uri、Header、Body打包成Json字符串 /// - private static async Task BuildJsonAsync( // - this HttpResponseMessage me, Func bodyHandle = null) - { + private static async Task BuildJsonAsync( + this HttpResponseMessage me + , Func bodyHandle = null + ) { var body = string.Empty; try { body = me?.Content is null ? null : await me.Content!.ReadAsStringAsync().ConfigureAwait(false); } - catch (Exception ex) when (ex.Message.Contains("The character set provided in ContentType is invalid") && - ex.InnerException?.Message.Contains("is not a supported encoding name") == true) { + catch (Exception ex) when (ex.Message.Contains("The character set provided in ContentType is invalid") + && ex.InnerException?.Message.Contains("is not a supported encoding name") == true) { #pragma warning disable S2589 var sr = me?.Content is null ? null : await me.Content!.ReadAsStreamAsync().ConfigureAwait(false); if (sr != null) { diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/ObjectExtensions.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/ObjectExtensions.cs index 0ad2047e..a13d29ec 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/ObjectExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/ObjectExtensions.cs @@ -8,8 +8,7 @@ public static class ObjectExtensions /// /// object -> json /// - public static string ToJson(this object me) - { + public static string ToJson(this object me) { return me.Json(GlobalStatic.JsonSerializerOptions); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/StringExtensions.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/StringExtensions.cs index 3ffb668f..6a0f2fe0 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/StringExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/StringExtensions.cs @@ -8,32 +8,31 @@ public static class StringExtensions /// /// object -> json /// - public static T ToObject(this string me) - { + public static T ToObject(this string me) { return me.Object(GlobalStatic.JsonSerializerOptions); } /// /// object -> json /// - public static object ToObject(this string me, Type toType) - { + public static object ToObject( + this string me + , Type toType + ) { return me.Object(toType, GlobalStatic.JsonSerializerOptions); } /// /// 去掉尾部字符串“Async” /// - public static string TrimAsyncSuffix(this string me) - { + public static string TrimAsyncSuffix(this string me) { return me.TrimSuffix("Async"); } /// /// 去掉尾部字符串“Options” /// - public static string TrimOptionsSuffix(this string me) - { + public static string TrimOptionsSuffix(this string me) { return me.TrimSuffix("Options"); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/GlobalStatic.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/GlobalStatic.cs index e1501ef5..6338bb28 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/GlobalStatic.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/GlobalStatic.cs @@ -45,13 +45,14 @@ public static class GlobalStatic /// /// NotImplementedException public static string SqlRandomSorting => - App.GetOptions().DbType switch { - DataType.MySql => "RAND()" - , DataType.SqlServer => "NEWID()" - , DataType.PostgreSQL => "RANDOM()" - , DataType.Oracle => "DBMS_RANDOM.value" - , DataType.Sqlite => "RANDOM()" - , _ => throw new NotImplementedException() + App.GetOptions().DbType switch + { + DataType.MySql => "RAND()" + , DataType.SqlServer => "NEWID()" + , DataType.PostgreSQL => "RANDOM()" + , DataType.Oracle => "DBMS_RANDOM.value" + , DataType.Sqlite => "RANDOM()" + , _ => throw new NotImplementedException() }; /// @@ -67,8 +68,7 @@ public static class GlobalStatic /// /// 增加日志计数器 /// - public static void IncrementLogCounter() - { + public static void IncrementLogCounter() { Volatile.Write(ref _latestLogTime, DateTime.Now.TimeUnixUtcMs()); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj b/src/backend/NetAdmin/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj index f392e168..3ec0ecfa 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Rpc/TronScan/ITronScanClient.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Rpc/TronScan/ITronScanClient.cs index d2cc3f6e..c33a2c06 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Rpc/TronScan/ITronScanClient.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Rpc/TronScan/ITronScanClient.cs @@ -11,8 +11,11 @@ public interface ITronScanClient : IHttpDispatchProxy /// 异常拦截 /// [Interceptor(InterceptorTypes.Exception)] - static Task OnExceptionAsync(HttpClient _, HttpResponseMessage rsp, string errors) - { + static Task OnExceptionAsync( + HttpClient _ + , HttpResponseMessage rsp + , string errors + ) { return rsp.LogExceptionAsync(errors, _logger); } @@ -20,8 +23,10 @@ public interface ITronScanClient : IHttpDispatchProxy /// 请求拦截 /// [Interceptor(InterceptorTypes.Request)] - static Task OnRequestAsyncAsync(HttpClient _, HttpRequestMessage req) - { + static Task OnRequestAsyncAsync( + HttpClient _ + , HttpRequestMessage req + ) { return req.LogAsync(_logger); } @@ -29,8 +34,10 @@ public interface ITronScanClient : IHttpDispatchProxy /// 响应拦截 /// [Interceptor(InterceptorTypes.Response)] - static Task OnResponsingAsync(HttpClient _, HttpResponseMessage rsp) - { + static Task OnResponsingAsync( + HttpClient _ + , HttpResponseMessage rsp + ) { return rsp.LogAsync(_logger); } @@ -39,5 +46,9 @@ public interface ITronScanClient : IHttpDispatchProxy /// [Client(nameof(TronScanOptions))] [Get("api/filter/trc20/transfers?limit={limit}&toAddress={toAddress}")] - Task TransfersAsync([Headers(Chars.FLG_HTTP_HEADER_KEY_TRON_PRO_API_KEY)] string token, int limit, string toAddress); + Task TransfersAsync( + [Headers(Chars.FLG_HTTP_HEADER_KEY_TRON_PRO_API_KEY)] string token + , int limit + , string toAddress + ); } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/ApplicationHelper.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/ApplicationHelper.cs index 6f0a74b2..16b4bba8 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/ApplicationHelper.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/ApplicationHelper.cs @@ -8,11 +8,11 @@ public static class ApplicationHelper /// /// 获取系统环境 /// - public static Dictionary GetEnvironmentInfo() - { - var ret = typeof(Environment).GetProperties(BindingFlags.Public | BindingFlags.Static) - .Where(x => x.Name is not (nameof(Environment.StackTrace) or nameof(Environment.NewLine))) - .ToDictionary(x => x.Name, x => x.GetValue(null)); + public static Dictionary GetEnvironmentInfo() { + var ret = typeof(Environment) + .GetProperties(BindingFlags.Public | BindingFlags.Static) + .Where(x => x.Name is not (nameof(Environment.StackTrace) or nameof(Environment.NewLine))) + .ToDictionary(x => x.Name, x => x.GetValue(null)); var vars = Environment.GetEnvironmentVariables(); var keys = new ArrayList(vars.Keys); diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/CaptchaImageHelper.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/CaptchaImageHelper.cs index 82dfbc0c..76e9cb9d 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/CaptchaImageHelper.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/CaptchaImageHelper.cs @@ -31,13 +31,19 @@ public static class CaptchaImageHelper /// 背景图(base64),滑块图(base64),缺口坐标 #pragma warning disable SA1414 public static async Task<(string BackgroundImage, string SliderImage, Point OffsetSaw)> CreateSawSliderImageAsync( - Assembly resAsm, string bgPath, string tempPath, (int, int) bgIndexScope, (int, int) tempIndexScope, Size sliderSize) + Assembly resAsm + , string bgPath + , string tempPath + , (int, int) bgIndexScope + , (int, int) tempIndexScope + , Size sliderSize + ) #pragma warning restore SA1414 { // 深色模板图 var templateIndex = new[] { tempIndexScope.Item1, tempIndexScope.Item2 }.Rand(); - await using var bgStream = resAsm.GetManifestResourceStream($"{bgPath}.{new[] { bgIndexScope.Item1, bgIndexScope.Item2 }.Rand()}.jpg"); + await using var bgStream = resAsm.GetManifestResourceStream($"{bgPath}.{new[] { bgIndexScope.Item1, bgIndexScope.Item2 }.Rand()}.jpg"); await using var darkStream = resAsm.GetManifestResourceStream($"{tempPath}._{templateIndex}.dark.png"); await using var tranStream = resAsm.GetManifestResourceStream($"{tempPath}._{templateIndex}.transparent.png"); @@ -66,10 +72,12 @@ public static class CaptchaImageHelper var blockShape = CalcBlockShape(darkTemplateImage); // 生成拼图 - blockImage.Mutate(x => { - // ReSharper disable once AccessToDisposedClosure - _ = x.Clip(blockShape, p => p.DrawImage(backgroundImage, new Point(-offsetRand.X, -offsetRand.Y), 1)); - }); + blockImage.Mutate(x => + { + // ReSharper disable once AccessToDisposedClosure + _ = x.Clip(blockShape, p => p.DrawImage(backgroundImage, new Point(-offsetRand.X, -offsetRand.Y), 1)); + } + ); // 拼图叠加透明模板图层 // ReSharper disable once AccessToDisposedClosure @@ -86,8 +94,9 @@ public static class CaptchaImageHelper backgroundImage.Mutate(x => x.DrawImage(darkTemplateImage, new Point(offsetRand.X, offsetRand.Y), opacity)); // 生成干扰图坐标 - var interferencePoint = GenerateInterferencePoint(backgroundImage.Width, backgroundImage.Height, sliderSize.Width, sliderSize.Height - , offsetRand.X, offsetRand.Y); + var interferencePoint = GenerateInterferencePoint( + backgroundImage.Width, backgroundImage.Height, sliderSize.Width, sliderSize.Height, offsetRand.X, offsetRand.Y + ); // 底图叠加深色干扰模板图 // ReSharper disable once AccessToDisposedClosure @@ -95,12 +104,20 @@ public static class CaptchaImageHelper return (backgroundImage.ToBase64String(PngFormat.Instance), sliderBlockImage.ToBase64String(PngFormat.Instance), offsetRand); } - private static int BuildPathList(Span rowSpan, int temp, List pathList, int y) - { + private static int BuildPathList( + Span rowSpan + , int temp + , List pathList + , int y + ) { for (var x = 0; x < rowSpan.Length; x++) { ref var pixel = ref rowSpan[x]; if (pixel.A != 0) { - temp = temp switch { 0 => x, _ => temp }; + temp = temp switch + { + 0 => x + , _ => temp + }; } else { if (temp == 0) { @@ -115,16 +132,17 @@ public static class CaptchaImageHelper return temp; } - private static ComplexPolygon CalcBlockShape(Image templateDarkImage) - { - var temp = 0; + private static ComplexPolygon CalcBlockShape(Image templateDarkImage) { + var temp = 0; var pathList = new List(); - templateDarkImage.ProcessPixelRows(accessor => { - for (var y = 0; y < templateDarkImage.Height; y++) { - var rowSpan = accessor.GetRowSpan(y); - temp = BuildPathList(rowSpan, temp, pathList, y); + templateDarkImage.ProcessPixelRows(accessor => + { + for (var y = 0; y < templateDarkImage.Height; y++) { + var rowSpan = accessor.GetRowSpan(y); + temp = BuildPathList(rowSpan, temp, pathList, y); + } } - }); + ); return new ComplexPolygon(new PathCollection(pathList)); } @@ -132,9 +150,14 @@ public static class CaptchaImageHelper /// /// 随机生成干扰图坐标 /// - private static Point GenerateInterferencePoint(int originalWidth, int originalHeight, int templateWidth, int templateHeight, int blockX - , int blockY) - { + private static Point GenerateInterferencePoint( + int originalWidth + , int originalHeight + , int templateWidth + , int templateHeight + , int blockX + , int blockY + ) { var x = // 在原扣图右边插入干扰图 @@ -161,13 +184,25 @@ public static class CaptchaImageHelper /// /// 随机生成拼图坐标 /// - private static Point GeneratePoint(int originalWidth, int originalHeight, int templateWidth, int templateHeight) - { - var widthDifference = originalWidth - templateWidth; + private static Point GeneratePoint( + int originalWidth + , int originalHeight + , int templateWidth + , int templateHeight + ) { + var widthDifference = originalWidth - templateWidth; var heightDifference = originalHeight - templateHeight; - var x = widthDifference switch { <= 0 => 5, _ => new[] { 0, originalWidth - templateWidth - 100 }.Rand() + 100 }; + var x = widthDifference switch + { + <= 0 => 5 + , _ => new[] { 0, originalWidth - templateWidth - 100 }.Rand() + 100 + }; - var y = heightDifference switch { <= 0 => 5, _ => new[] { 0, originalHeight - templateHeight - 5 }.Rand() + 5 }; + var y = heightDifference switch + { + <= 0 => 5 + , _ => new[] { 0, originalHeight - templateHeight - 5 }.Rand() + 5 + }; return new Point(x, y); } @@ -175,8 +210,10 @@ public static class CaptchaImageHelper /// /// 随机范围内数字 /// - private static int GetRandomInt(int startNum, int endNum) - { + private static int GetRandomInt( + int startNum + , int endNum + ) { return (endNum > startNum ? new[] { 0, endNum - startNum }.Rand() : 0) + startNum; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/FreeSqlBuilder.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/FreeSqlBuilder.cs index 8df855ad..9eaea114 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/FreeSqlBuilder.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/FreeSqlBuilder.cs @@ -13,90 +13,97 @@ public sealed class FreeSqlBuilder(DatabaseOptions databaseOptions) /// /// 构建freeSql对象 /// - public IFreeSql Build(FreeSqlInitMethods initMethods, Func onSeedDataInserted = null) - { + public IFreeSql Build( + FreeSqlInitMethods initMethods + , Func onSeedDataInserted = null + ) { var freeSql = new FreeSql.FreeSqlBuilder() - #if DBTYPE_SQLSERVER + #if DBTYPE_SQLSERVER .UseConnectionFactory(databaseOptions.DbType, () => new SqlConnection(databaseOptions.ConnStr)) .UseAdoConnectionPool(true) - #else - .UseConnectionString(databaseOptions.DbType, databaseOptions.ConnStr) - #endif - .UseGenerateCommandParameterWithLambda(true) - .UseAutoSyncStructure(initMethods.HasFlag(FreeSqlInitMethods.SyncStructure)) - .Build(); + #else + .UseConnectionString(databaseOptions.DbType, databaseOptions.ConnStr) + #endif + .UseGenerateCommandParameterWithLambda(true) + .UseAutoSyncStructure(initMethods.HasFlag(FreeSqlInitMethods.SyncStructure)) + .Build(); _ = InitDbAsync(freeSql, initMethods, onSeedDataInserted); // 初始化数据库 ,异步 return freeSql; } - private static void CompareStructure(IFreeSql freeSql, Type[] entityTypes) - { - File.WriteAllText( // - $"{nameof(CompareStructure)}.sql", freeSql.CodeFirst.GetComparisonDDLStatements(entityTypes)); + private static void CompareStructure( + IFreeSql freeSql + , Type[] entityTypes + ) { + File.WriteAllText($"{nameof(CompareStructure)}.sql", freeSql.CodeFirst.GetComparisonDDLStatements(entityTypes)); } /// /// 获取所有实体类型定义 /// - private static Type[] GetEntityTypes() - { - return (from type in App.EffectiveTypes - from attr in type.GetCustomAttributes() - where attr is TableAttribute { DisableSyncStructure: false } - select type).ToArray(); + private static Type[] GetEntityTypes() { + return ( + from type in App.EffectiveTypes + from attr in type.GetCustomAttributes() + where attr is TableAttribute { DisableSyncStructure: false } + select type).ToArray(); } - private static MethodInfo MakeGetRepositoryMethod(Type entityType) - { - return typeof(FreeSqlDbContextExtensions).GetMethods() - .Where(x => x.Name == nameof(FreeSqlDbContextExtensions.GetRepository)) - .FirstOrDefault(x => x.GetGenericArguments().Length == 1) - ?.MakeGenericMethod(entityType); + private static MethodInfo MakeGetRepositoryMethod(Type entityType) { + return typeof(FreeSqlDbContextExtensions) + .GetMethods() + .Where(x => x.Name == nameof(FreeSqlDbContextExtensions.GetRepository)) + .FirstOrDefault(x => x.GetGenericArguments().Length == 1) + ?.MakeGenericMethod(entityType); } - private static MethodInfo MakeInsertMethod(Type entityType) - { - return typeof(IBaseRepository<>).MakeGenericType(entityType) - .GetMethod( // - nameof(IBaseRepository<>.Insert) // - , BindingFlags.Public | BindingFlags.Instance // - , null // - , CallingConventions.Any // - , [typeof(IEnumerable<>).MakeGenericType(entityType)] // - , null); + private static MethodInfo MakeInsertMethod(Type entityType) { + return typeof(IBaseRepository<>) + .MakeGenericType(entityType) + .GetMethod( + nameof(IBaseRepository<>.Insert), BindingFlags.Public | BindingFlags.Instance, null, CallingConventions.Any + , [typeof(IEnumerable<>).MakeGenericType(entityType)], null + ); } /// /// 初始化数据库 /// - private Task InitDbAsync(IFreeSql freeSql, FreeSqlInitMethods initMethods, Func onSeedDataInserted) - { - return Task.Run(() => { - if (initMethods == FreeSqlInitMethods.None) { - return; - } + private Task InitDbAsync( + IFreeSql freeSql + , FreeSqlInitMethods initMethods + , Func onSeedDataInserted + ) { + return Task.Run(() => + { + if (initMethods == FreeSqlInitMethods.None) { + return; + } - var entityTypes = GetEntityTypes(); - if (initMethods.HasFlag(FreeSqlInitMethods.SyncStructure)) { - SyncStructure(freeSql, entityTypes); - } + var entityTypes = GetEntityTypes(); + if (initMethods.HasFlag(FreeSqlInitMethods.SyncStructure)) { + SyncStructure(freeSql, entityTypes); + } - if (initMethods.HasFlag(FreeSqlInitMethods.InsertSeedData)) { - var insertCount = InsertSeedData(freeSql, entityTypes); - _ = onSeedDataInserted?.Invoke(insertCount); - } + if (initMethods.HasFlag(FreeSqlInitMethods.InsertSeedData)) { + var insertCount = InsertSeedData(freeSql, entityTypes); + _ = onSeedDataInserted?.Invoke(insertCount); + } - if (initMethods.HasFlag(FreeSqlInitMethods.CompareStructure)) { - CompareStructure(freeSql, entityTypes); + if (initMethods.HasFlag(FreeSqlInitMethods.CompareStructure)) { + CompareStructure(freeSql, entityTypes); + } } - }); + ); } /// /// 插入种子数据 /// - private int InsertSeedData(IFreeSql freeSql, IEnumerable entityTypes) - { + private int InsertSeedData( + IFreeSql freeSql + , IEnumerable entityTypes + ) { var ret = 0; foreach (var entityType in entityTypes) { var file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, databaseOptions.SeedDataRelativePath, $"{entityType.Name}.json"); @@ -105,17 +112,16 @@ public sealed class FreeSqlBuilder(DatabaseOptions databaseOptions) } using var fs = File.OpenRead(file); - var jsonSerializerOptions = new JsonSerializerOptions(JsonSerializerOptions.Default) // - { - AllowTrailingCommas = true - , ReadCommentHandling = JsonCommentHandling.Skip - , TypeInfoResolver - = new DefaultJsonTypeInfoResolver { Modifiers = { JsonIgnoreRemover.RemoveJsonIgnore(entityType) } } - }; + var jsonSerializerOptions = new JsonSerializerOptions(JsonSerializerOptions.Default) + { + AllowTrailingCommas = true + , ReadCommentHandling = JsonCommentHandling.Skip + , TypeInfoResolver = new DefaultJsonTypeInfoResolver { Modifiers = { JsonIgnoreRemover.RemoveJsonIgnore(entityType) } } + }; _ = jsonSerializerOptions.Converters.AddDateTimeTypeConverters(); - var jsonTypeInfo = JsonTypeInfo.CreateJsonTypeInfo(typeof(IEnumerable<>).MakeGenericType(entityType), jsonSerializerOptions); - dynamic entities = JsonSerializer.Deserialize(fs, jsonTypeInfo); + var jsonTypeInfo = JsonTypeInfo.CreateJsonTypeInfo(typeof(IEnumerable<>).MakeGenericType(entityType), jsonSerializerOptions); + dynamic entities = JsonSerializer.Deserialize(fs, jsonTypeInfo); // 如果表存在数据,跳过 var select = typeof(IFreeSql).GetMethod(nameof(freeSql.Select), 1, Type.EmptyTypes)?.MakeGenericMethod(entityType).Invoke(freeSql, null); @@ -126,12 +132,12 @@ public sealed class FreeSqlBuilder(DatabaseOptions databaseOptions) var rep = MakeGetRepositoryMethod(entityType)?.Invoke(null, [freeSql, null]); if (rep?.GetType().GetProperty(nameof(DbContextOptions))?.GetValue(rep) is DbContextOptions options) { options.EnableCascadeSave = true; - options.NoneParameter = true; + options.NoneParameter = true; } var insert = MakeInsertMethod(entityType); - _ = insert?.Invoke(rep, [entities]); + _ = insert?.Invoke(rep, [entities]); ret += entities!.Count; } @@ -141,8 +147,10 @@ public sealed class FreeSqlBuilder(DatabaseOptions databaseOptions) /// /// 同步数据库结构 /// - private void SyncStructure(IFreeSql freeSql, Type[] entityTypes) - { + private void SyncStructure( + IFreeSql freeSql + , Type[] entityTypes + ) { if (databaseOptions.DbType == DataType.Oracle) { freeSql.CodeFirst.IsSyncStructureToUpper = true; } diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/JsonIgnoreRemover.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/JsonIgnoreRemover.cs index cc99c836..32ad087e 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/JsonIgnoreRemover.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/JsonIgnoreRemover.cs @@ -10,16 +10,17 @@ public static class JsonIgnoreRemover /// /// 忽略 JsonIgnore 特性 /// - public static Action RemoveJsonIgnore(Type type) - { - return typeInfo => { + public static Action RemoveJsonIgnore(Type type) { + return typeInfo => + { if (!type.IsAssignableFrom(typeInfo.Type) || typeInfo.Kind != JsonTypeInfoKind.Object) { return; } - foreach (var property in typeInfo.Properties.Where(property => property.ShouldSerialize != null && - property.AttributeProvider?.IsDefined(typeof(JsonIgnoreAttribute), true) == - true)) { + foreach (var property in typeInfo.Properties.Where(property => property.ShouldSerialize != null + && property.AttributeProvider?.IsDefined(typeof(JsonIgnoreAttribute), true) + == true + )) { property.Get ??= CreatePropertyGetter(property); property.Set ??= CreatePropertySetter(property); if (property.Get != null) { @@ -29,8 +30,10 @@ public static class JsonIgnoreRemover }; } - private static Func CreateGetter(Type type, MethodInfo method) - { + private static Func CreateGetter( + Type type + , MethodInfo method + ) { if (method == null) { return null; } @@ -41,13 +44,13 @@ public static class JsonIgnoreRemover return (Func)myMethod.MakeGenericMethod(type, method.ReturnType).Invoke(null, [method])!; } - private static Func CreateGetterGeneric(MethodInfo method) - { + private static Func CreateGetterGeneric(MethodInfo method) { ArgumentNullException.ThrowIfNull(method); if (typeof(TObject).IsValueType) { var func = (RefFunc)Delegate.CreateDelegate(typeof(RefFunc), null, method); - return o => { + return o => + { var tObj = (TObject)o; return func(ref tObj); }; @@ -58,22 +61,22 @@ public static class JsonIgnoreRemover } } - private static Func CreatePropertyGetter(JsonPropertyInfo property) - { + private static Func CreatePropertyGetter(JsonPropertyInfo property) { return property.AttributeProvider as PropertyInfo is { ReflectedType: not null } info && info.GetGetMethod() is { } getMethod ? CreateGetter(info.ReflectedType, getMethod) : null; } - private static Action CreatePropertySetter(JsonPropertyInfo property) - { + private static Action CreatePropertySetter(JsonPropertyInfo property) { return property.AttributeProvider as PropertyInfo is { ReflectedType: not null } info && info.GetSetMethod() is { } setMethod ? CreateSetter(info.ReflectedType, setMethod) : null; } - private static Action CreateSetter(Type type, MethodInfo method) - { + private static Action CreateSetter( + Type type + , MethodInfo method + ) { if (method == null) { return null; } @@ -84,15 +87,20 @@ public static class JsonIgnoreRemover return (Action)myMethod.MakeGenericMethod(type, method.GetParameters().Single().ParameterType).Invoke(null, [method])!; } - private static Action CreateSetterGeneric(MethodInfo method) - { + private static Action CreateSetterGeneric(MethodInfo method) { ArgumentNullException.ThrowIfNull(method); if (typeof(TObject).IsValueType) { - return (o, v) => method.Invoke(o, [v]); + return ( + o + , v + ) => method.Invoke(o, [v]); } var func = (Action)Delegate.CreateDelegate(typeof(Action), method); - return (o, v) => func((TObject)o, (TValue)v); + return ( + o + , v + ) => func((TObject)o, (TValue)v); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/LogHelper.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/LogHelper.cs index 5ac74075..b566fbc2 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/LogHelper.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/LogHelper.cs @@ -8,8 +8,7 @@ public static class LogHelper /// /// 获取ILogger /// - public static ILogger Get() - { + public static ILogger Get() { return App.GetService>(); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/MimeTypeHelper.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/MimeTypeHelper.cs index 690cb3a5..75a5a34a 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/MimeTypeHelper.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/MimeTypeHelper.cs @@ -1018,16 +1018,14 @@ public static class MimeTypeHelper zmm application/vnd.handheld-entertainment+xml """; - private static readonly Dictionary _mimeTypeDic = _MIME_TYPES_RAW_STRING.Split('\n', StringSplitOptions.RemoveEmptyEntries) - .ToDictionary( // - x => x.Split(' ')[0].Trim() - , x => x.Split(' ')[1].Trim()); + private static readonly Dictionary _mimeTypeDic = _MIME_TYPES_RAW_STRING + .Split('\n', StringSplitOptions.RemoveEmptyEntries) + .ToDictionary(x => x.Split(' ')[0].Trim(), x => x.Split(' ')[1].Trim()); /// /// 通过扩展名获取MIME类型 /// - public static string GetMimeTypeByExtName(string extName) - { + public static string GetMimeTypeByExtName(string extName) { _ = _mimeTypeDic.TryGetValue(extName.ToLowerInvariant(), out var ret); return ret; } diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/MinioHelper.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/MinioHelper.cs index b5ddb5a5..c6fd5628 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/MinioHelper.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/MinioHelper.cs @@ -16,13 +16,17 @@ public sealed class MinioHelper(IOptions uploadOptions) : IScoped /// 文件类型 /// 文件大小 /// 文件名,可访问的url地址 - public async Task<(string FileName, string Url)> UploadAsync(string objectName, Stream fileStream, string contentType, long fileSize) - { - using var minio = new MinioClient().WithEndpoint(uploadOptions.Value.Minio.ServerAddress) - .WithCredentials( // - uploadOptions.Value.Minio.AccessKey, uploadOptions.Value.Minio.SecretKey) - .WithSSL(uploadOptions.Value.Minio.Secure) - .Build(); + public async Task<(string FileName, string Url)> UploadAsync( + string objectName + , Stream fileStream + , string contentType + , long fileSize + ) { + using var minio = new MinioClient() + .WithEndpoint(uploadOptions.Value.Minio.ServerAddress) + .WithCredentials(uploadOptions.Value.Minio.AccessKey, uploadOptions.Value.Minio.SecretKey) + .WithSSL(uploadOptions.Value.Minio.Secure) + .Build(); var beArgs = new BucketExistsArgs().WithBucket(uploadOptions.Value.Minio.BucketName); @@ -31,11 +35,12 @@ public sealed class MinioHelper(IOptions uploadOptions) : IScoped await minio.MakeBucketAsync(mbArgs).ConfigureAwait(false); } - var putArgs = new PutObjectArgs().WithBucket(uploadOptions.Value.Minio.BucketName) - .WithObject(objectName) - .WithStreamData(fileStream) - .WithObjectSize(fileSize) - .WithContentType(contentType); + var putArgs = new PutObjectArgs() + .WithBucket(uploadOptions.Value.Minio.BucketName) + .WithObject(objectName) + .WithStreamData(fileStream) + .WithObjectSize(fileSize) + .WithContentType(contentType); _ = await minio.PutObjectAsync(putArgs).ConfigureAwait(false); return (objectName, $"{uploadOptions.Value.Minio.AccessUrl}/{uploadOptions.Value.Minio.BucketName}/{objectName}"); diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/PhoneNumberHelper.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/PhoneNumberHelper.cs index 2a545776..a7605f59 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/PhoneNumberHelper.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/PhoneNumberHelper.cs @@ -11,25 +11,27 @@ public static class PhoneNumberHelper static PhoneNumberHelper() #pragma warning restore S3963 { - _countryList = Enum.GetValues() - .SelectMany(x => { - var attribute = x.Attr(); + _countryList = Enum + .GetValues() + .SelectMany(x => + { + var attribute = x.Attr(); - // ReSharper disable once UseCollectionExpression - return (attribute.CallingSubCode ?? new[] { string.Empty }).Select(y => (attribute.CallingCode + y, x)); - }) - .OrderBy(x => x.Item1) - .ThenByDescending(x => x.x.Attr().IsPreferred) - .DistinctBy(x => x.Item1) - .OrderByDescending(x => x.Item1.Length) - .ToImmutableList(); + // ReSharper disable once UseCollectionExpression + return (attribute.CallingSubCode ?? new[] { string.Empty }).Select(y => (attribute.CallingCode + y, x)); + } + ) + .OrderBy(x => x.Item1) + .ThenByDescending(x => x.x.Attr().IsPreferred) + .DistinctBy(x => x.Item1) + .OrderByDescending(x => x.Item1.Length) + .ToImmutableList(); } /// /// 电话号码转国家代码 /// - public static CountryCodes? PhoneNumberToCountryCode(string phoneNumber) - { + public static CountryCodes? PhoneNumberToCountryCode(string phoneNumber) { phoneNumber = phoneNumber.Trim(); if (phoneNumber.StartsWith('+')) { phoneNumber = phoneNumber[1..]; diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/RedisLocker.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/RedisLocker.cs index 38e4d89c..847ce6c7 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/RedisLocker.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/RedisLocker.cs @@ -20,26 +20,32 @@ public sealed class RedisLocker : IAsyncDisposable /// Initializes a new instance of the class. /// Redis 分布锁 /// - private RedisLocker(IDatabase redisDatabase, string redisKey) - { + private RedisLocker( + IDatabase redisDatabase + , string redisKey + ) { _redisDatabase = redisDatabase; - _redisKey = redisKey; + _redisKey = redisKey; } /// /// 获取锁 /// /// NetAdminGetLockerException - public static async Task GetLockerAsync(IDatabase redisDatabase, string lockerName, TimeSpan lockerExpire, int retryCount - , TimeSpan retryDelay) - { + public static async Task GetLockerAsync( + IDatabase redisDatabase + , string lockerName + , TimeSpan lockerExpire + , int retryCount + , TimeSpan retryDelay + ) { lockerName = $"{nameof(RedisLocker)}.{lockerName}"; var setOk = false; for (var i = 0; i != retryCount; ++i) { try { setOk = await redisDatabase - .StringSetAsync(lockerName, RedisValue.EmptyString, lockerExpire, When.NotExists, CommandFlags.DemandMaster) - .ConfigureAwait(false); + .StringSetAsync(lockerName, RedisValue.EmptyString, lockerExpire, When.NotExists, CommandFlags.DemandMaster) + .ConfigureAwait(false); } catch (Exception ex) { LogHelper.Get().Error(ex.Message); @@ -58,8 +64,7 @@ public sealed class RedisLocker : IAsyncDisposable } /// - public async ValueTask DisposeAsync() - { + public async ValueTask DisposeAsync() { try { _ = await _redisDatabase.KeyDeleteAsync(_redisKey, CommandFlags.DemandMaster | CommandFlags.FireAndForget).ConfigureAwait(false); } diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/UserAgentParser.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/UserAgentParser.cs index 9247e56e..51c0bc9d 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/UserAgentParser.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/UserAgentParser.cs @@ -7,207 +7,210 @@ namespace NetAdmin.Infrastructure.Utils; /// public sealed class UserAgentParser { - private static readonly Dictionary _browsers = new() { - { "OPR", "Opera" } - , { "Flock", "Flock" } - , { "Edge", "Spartan" } - , { "Chrome", "Chrome" } - , { "Opera.*?Version", "Opera" } - , { "Opera", "Opera" } - , { "MSIE", "Internet Explorer" } - , { "Internet Explorer", "Internet Explorer" } - , { "Trident.* rv", "Internet Explorer" } - , { "Shiira", "Shiira" } - , { "Firefox", "Firefox" } - , { "Chimera", "Chimera" } - , { "Phoenix", "Phoenix" } - , { "Firebird", "Firebird" } - , { "Camino", "Camino" } - , { "Netscape", "Netscape" } - , { "OmniWeb", "OmniWeb" } - , { "Safari", "Safari" } - , { "Mozilla", "Mozilla" } - , { "Konqueror", "Konqueror" } - , { "icab", "iCab" } - , { "Lynx", "Lynx" } - , { "Links", "Links" } - , { "hotjava", "HotJava" } - , { "amaya", "Amaya" } - , { "IBrowse", "IBrowse" } - , { "Maxthon", "Maxthon" } - , { "Ubuntu", "Ubuntu Web Browser" } - }; + private static readonly Dictionary _browsers = new() + { + { "OPR", "Opera" } + , { "Flock", "Flock" } + , { "Edge", "Spartan" } + , { "Chrome", "Chrome" } + , { "Opera.*?Version", "Opera" } + , { "Opera", "Opera" } + , { "MSIE", "Internet Explorer" } + , { "Internet Explorer", "Internet Explorer" } + , { "Trident.* rv", "Internet Explorer" } + , { "Shiira", "Shiira" } + , { "Firefox", "Firefox" } + , { "Chimera", "Chimera" } + , { "Phoenix", "Phoenix" } + , { "Firebird", "Firebird" } + , { "Camino", "Camino" } + , { "Netscape", "Netscape" } + , { "OmniWeb", "OmniWeb" } + , { "Safari", "Safari" } + , { "Mozilla", "Mozilla" } + , { "Konqueror", "Konqueror" } + , { "icab", "iCab" } + , { "Lynx", "Lynx" } + , { "Links", "Links" } + , { "hotjava", "HotJava" } + , { "amaya", "Amaya" } + , { "IBrowse", "IBrowse" } + , { "Maxthon", "Maxthon" } + , { "Ubuntu", "Ubuntu Web Browser" } + }; - private static readonly Dictionary _mobiles = new() { - // Legacy - { "mobileexplorer", "Mobile Explorer" } - , { "palmsource", "Palm" } - , { "palmscape", "Palmscape" } - , + private static readonly Dictionary _mobiles = new() + { + // Legacy + { "mobileexplorer", "Mobile Explorer" } + , { "palmsource", "Palm" } + , { "palmscape", "Palmscape" } + , - // Phones and Manufacturers - { "motorola", "Motorola" } - , { "nokia", "Nokia" } - , { "palm", "Palm" } - , { "iphone", "Apple iPhone" } - , { "ipad", "iPad" } - , { "ipod", "Apple iPod Touch" } - , { "sony", "Sony Ericsson" } - , { "ericsson", "Sony Ericsson" } - , { "blackberry", "BlackBerry" } - , { "cocoon", "O2 Cocoon" } - , { "blazer", "Treo" } - , { "lg", "LG" } - , { "amoi", "Amoi" } - , { "xda", "XDA" } - , { "mda", "MDA" } - , { "vario", "Vario" } - , { "htc", "HTC" } - , { "samsung", "Samsung" } - , { "sharp", "Sharp" } - , { "sie-", "Siemens" } - , { "alcatel", "Alcatel" } - , { "benq", "BenQ" } - , { "ipaq", "HP iPaq" } - , { "mot-", "Motorola" } - , { "playstation portable", "PlayStation Portable" } - , { "playstation 3", "PlayStation 3" } - , { "playstation vita", "PlayStation Vita" } - , { "hiptop", "Danger Hiptop" } - , { "nec-", "NEC" } - , { "panasonic", "Panasonic" } - , { "philips", "Philips" } - , { "sagem", "Sagem" } - , { "sanyo", "Sanyo" } - , { "spv", "SPV" } - , { "zte", "ZTE" } - , { "sendo", "Sendo" } - , { "nintendo dsi", "Nintendo DSi" } - , { "nintendo ds", "Nintendo DS" } - , { "nintendo 3ds", "Nintendo 3DS" } - , { "wii", "Nintendo Wii" } - , { "open web", "Open Web" } - , { "openweb", "OpenWeb" } - , + // Phones and Manufacturers + { "motorola", "Motorola" } + , { "nokia", "Nokia" } + , { "palm", "Palm" } + , { "iphone", "Apple iPhone" } + , { "ipad", "iPad" } + , { "ipod", "Apple iPod Touch" } + , { "sony", "Sony Ericsson" } + , { "ericsson", "Sony Ericsson" } + , { "blackberry", "BlackBerry" } + , { "cocoon", "O2 Cocoon" } + , { "blazer", "Treo" } + , { "lg", "LG" } + , { "amoi", "Amoi" } + , { "xda", "XDA" } + , { "mda", "MDA" } + , { "vario", "Vario" } + , { "htc", "HTC" } + , { "samsung", "Samsung" } + , { "sharp", "Sharp" } + , { "sie-", "Siemens" } + , { "alcatel", "Alcatel" } + , { "benq", "BenQ" } + , { "ipaq", "HP iPaq" } + , { "mot-", "Motorola" } + , { "playstation portable", "PlayStation Portable" } + , { "playstation 3", "PlayStation 3" } + , { "playstation vita", "PlayStation Vita" } + , { "hiptop", "Danger Hiptop" } + , { "nec-", "NEC" } + , { "panasonic", "Panasonic" } + , { "philips", "Philips" } + , { "sagem", "Sagem" } + , { "sanyo", "Sanyo" } + , { "spv", "SPV" } + , { "zte", "ZTE" } + , { "sendo", "Sendo" } + , { "nintendo dsi", "Nintendo DSi" } + , { "nintendo ds", "Nintendo DS" } + , { "nintendo 3ds", "Nintendo 3DS" } + , { "wii", "Nintendo Wii" } + , { "open web", "Open Web" } + , { "openweb", "OpenWeb" } + , - // Operating Systems - { "android", "Android" } - , { "symbian", "Symbian" } - , { "SymbianOS", "SymbianOS" } - , { "elaine", "Palm" } - , { "series60", "Symbian S60" } - , { "windows ce", "Windows CE" } - , + // Operating Systems + { "android", "Android" } + , { "symbian", "Symbian" } + , { "SymbianOS", "SymbianOS" } + , { "elaine", "Palm" } + , { "series60", "Symbian S60" } + , { "windows ce", "Windows CE" } + , - // Browsers - { "obigo", "Obigo" } - , { "netfront", "Netfront Browser" } - , { "openwave", "Openwave Browser" } - , { "mobilexplorer", "Mobile Explorer" } - , { "operamini", "Opera Mini" } - , { "opera mini", "Opera Mini" } - , { "opera mobi", "Opera Mobile" } - , { "fennec", "Firefox Mobile" } - , + // Browsers + { "obigo", "Obigo" } + , { "netfront", "Netfront Browser" } + , { "openwave", "Openwave Browser" } + , { "mobilexplorer", "Mobile Explorer" } + , { "operamini", "Opera Mini" } + , { "opera mini", "Opera Mini" } + , { "opera mobi", "Opera Mobile" } + , { "fennec", "Firefox Mobile" } + , - // Other - { "digital paths", "Digital Paths" } - , { "avantgo", "AvantGo" } - , { "xiino", "Xiino" } - , { "novarra", "Novarra Transcoder" } - , { "vodafone", "Vodafone" } - , { "docomo", "NTT DoCoMo" } - , { "o2", "O2" } - , + // Other + { "digital paths", "Digital Paths" } + , { "avantgo", "AvantGo" } + , { "xiino", "Xiino" } + , { "novarra", "Novarra Transcoder" } + , { "vodafone", "Vodafone" } + , { "docomo", "NTT DoCoMo" } + , { "o2", "O2" } + , - // Fallback - { "mobile", "Generic Mobile" } - , { "wireless", "Generic Mobile" } - , { "j2me", "Generic Mobile" } - , { "midp", "Generic Mobile" } - , { "cldc", "Generic Mobile" } - , { "up.link", "Generic Mobile" } - , { "up.browser", "Generic Mobile" } - , { "smartphone", "Generic Mobile" } - , { "cellphone", "Generic Mobile" } - }; + // Fallback + { "mobile", "Generic Mobile" } + , { "wireless", "Generic Mobile" } + , { "j2me", "Generic Mobile" } + , { "midp", "Generic Mobile" } + , { "cldc", "Generic Mobile" } + , { "up.link", "Generic Mobile" } + , { "up.browser", "Generic Mobile" } + , { "smartphone", "Generic Mobile" } + , { "cellphone", "Generic Mobile" } + }; - private static readonly Dictionary _platforms = new() { - { "windows nt 10.0", "Windows 10" } - , { "windows nt 6.3", "Windows 8.1" } - , { "windows nt 6.2", "Windows 8" } - , { "windows nt 6.1", "Windows 7" } - , { "windows nt 6.0", "Windows Vista" } - , { "windows nt 5.2", "Windows 2003" } - , { "windows nt 5.1", "Windows XP" } - , { "windows nt 5.0", "Windows 2000" } - , { "windows nt 4.0", "Windows NT 4.0" } - , { "winnt4.0", "Windows NT 4.0" } - , { "winnt 4.0", "Windows NT" } - , { "winnt", "Windows NT" } - , { "windows 98", "Windows 98" } - , { "win98", "Windows 98" } - , { "windows 95", "Windows 95" } - , { "win95", "Windows 95" } - , { "windows phone", "Windows Phone" } - , { "windows", "Unknown Windows OS" } - , { "android", "Android" } - , { "blackberry", "BlackBerry" } - , { "iphone", "iOS" } - , { "ipad", "iOS" } - , { "ipod", "iOS" } - , { "os x", "Mac OS X" } - , { "ppc mac", "Power PC Mac" } - , { "freebsd", "FreeBSD" } - , { "ppc", "Macintosh" } - , { "linux", "Linux" } - , { "debian", "Debian" } - , { "sunos", "Sun Solaris" } - , { "beos", "BeOS" } - , { "apachebench", "ApacheBench" } - , { "aix", "AIX" } - , { "irix", "Irix" } - , { "osf", "DEC OSF" } - , { "hp-ux", "HP-UX" } - , { "netbsd", "NetBSD" } - , { "bsdi", "BSDi" } - , { "openbsd", "OpenBSD" } - , { "gnu", "GNU/Linux" } - , { "unix", "Unknown Unix OS" } - , { "symbian", "Symbian OS" } - }; + private static readonly Dictionary _platforms = new() + { + { "windows nt 10.0", "Windows 10" } + , { "windows nt 6.3", "Windows 8.1" } + , { "windows nt 6.2", "Windows 8" } + , { "windows nt 6.1", "Windows 7" } + , { "windows nt 6.0", "Windows Vista" } + , { "windows nt 5.2", "Windows 2003" } + , { "windows nt 5.1", "Windows XP" } + , { "windows nt 5.0", "Windows 2000" } + , { "windows nt 4.0", "Windows NT 4.0" } + , { "winnt4.0", "Windows NT 4.0" } + , { "winnt 4.0", "Windows NT" } + , { "winnt", "Windows NT" } + , { "windows 98", "Windows 98" } + , { "win98", "Windows 98" } + , { "windows 95", "Windows 95" } + , { "win95", "Windows 95" } + , { "windows phone", "Windows Phone" } + , { "windows", "Unknown Windows OS" } + , { "android", "Android" } + , { "blackberry", "BlackBerry" } + , { "iphone", "iOS" } + , { "ipad", "iOS" } + , { "ipod", "iOS" } + , { "os x", "Mac OS X" } + , { "ppc mac", "Power PC Mac" } + , { "freebsd", "FreeBSD" } + , { "ppc", "Macintosh" } + , { "linux", "Linux" } + , { "debian", "Debian" } + , { "sunos", "Sun Solaris" } + , { "beos", "BeOS" } + , { "apachebench", "ApacheBench" } + , { "aix", "AIX" } + , { "irix", "Irix" } + , { "osf", "DEC OSF" } + , { "hp-ux", "HP-UX" } + , { "netbsd", "NetBSD" } + , { "bsdi", "BSDi" } + , { "openbsd", "OpenBSD" } + , { "gnu", "GNU/Linux" } + , { "unix", "Unknown Unix OS" } + , { "symbian", "Symbian OS" } + }; - private static readonly Dictionary _robots = new() { - { "googlebot", "Googlebot" } - , { "msnbot", "MSNBot" } - , { "baiduspider", "Baiduspider" } - , { "bingbot", "Bing" } - , { "slurp", "Inktomi Slurp" } - , { "yahoo", "Yahoo" } - , { "ask jeeves", "Ask Jeeves" } - , { "fastcrawler", "FastCrawler" } - , { "infoseek", "InfoSeek Robot 1.0" } - , { "lycos", "Lycos" } - , { "yandex", "YandexBot" } - , { "mediapartners-google", "MediaPartners Google" } - , { "CRAZYWEBCRAWLER", "Crazy Webcrawler" } - , { "adsbot-google", "AdsBot Google" } - , { "feedfetcher-google", "Feedfetcher Google" } - , { "curious george", "Curious George" } - , { "ia_archiver", "Alexa Crawler" } - , { "MJ12bot", "Majestic-12" } - , { "Uptimebot", "Uptimebot" } - }; + private static readonly Dictionary _robots = new() + { + { "googlebot", "Googlebot" } + , { "msnbot", "MSNBot" } + , { "baiduspider", "Baiduspider" } + , { "bingbot", "Bing" } + , { "slurp", "Inktomi Slurp" } + , { "yahoo", "Yahoo" } + , { "ask jeeves", "Ask Jeeves" } + , { "fastcrawler", "FastCrawler" } + , { "infoseek", "InfoSeek Robot 1.0" } + , { "lycos", "Lycos" } + , { "yandex", "YandexBot" } + , { "mediapartners-google", "MediaPartners Google" } + , { "CRAZYWEBCRAWLER", "Crazy Webcrawler" } + , { "adsbot-google", "AdsBot Google" } + , { "feedfetcher-google", "Feedfetcher Google" } + , { "curious george", "Curious George" } + , { "ia_archiver", "Alexa Crawler" } + , { "MJ12bot", "Majestic-12" } + , { "Uptimebot", "Uptimebot" } + }; private readonly string _agent; /// /// Initializes a new instance of the class. /// - private UserAgentParser(string userAgentString) - { + private UserAgentParser(string userAgentString) { _agent = userAgentString.Trim(); - _ = SetPlatform(); + _ = SetPlatform(); if (SetRobot()) { return; } @@ -217,7 +220,7 @@ public sealed class UserAgentParser } if (SetMobile()) { - // + // todo } } @@ -264,47 +267,41 @@ public sealed class UserAgentParser /// /// 创建 UserAgentParser /// - public static UserAgentParser Create(string userAgentString) - { + public static UserAgentParser Create(string userAgentString) { return userAgentString == null ? null : new UserAgentParser(userAgentString); } - private bool SetBrowser() - { + private bool SetBrowser() { foreach (var item in _browsers) { var match = Regex.Match(_agent, $@"{item.Key}.*?([0-9\.]+)", RegexOptions.IgnoreCase); if (!match.Success) { continue; } - IsBrowser = true; + IsBrowser = true; BrowserVersion = match.Groups[1].Value; - Browser = item.Value; - _ = SetMobile(); + Browser = item.Value; + _ = SetMobile(); return true; } return false; } - private bool SetMobile() - { - var kv = _mobiles.FirstOrDefault(x => // - _agent.Contains(x.Key, StringComparison.OrdinalIgnoreCase)); + private bool SetMobile() { + var kv = _mobiles.FirstOrDefault(x => _agent.Contains(x.Key, StringComparison.OrdinalIgnoreCase)); if (kv.Key == null) { return false; } IsMobile = true; - Mobile = kv.Value; + Mobile = kv.Value; return false; } - private bool SetPlatform() - { - var kv = _platforms.FirstOrDefault(x => // - Regex.IsMatch(_agent, $"{Regex.Escape(x.Key)}", RegexOptions.IgnoreCase)); + private bool SetPlatform() { + var kv = _platforms.FirstOrDefault(x => Regex.IsMatch(_agent, $"{Regex.Escape(x.Key)}", RegexOptions.IgnoreCase)); if (kv.Key == null) { Platform = "Unknown Platform"; @@ -315,17 +312,15 @@ public sealed class UserAgentParser return true; } - private bool SetRobot() - { - var kv = _robots.FirstOrDefault(x => // - Regex.IsMatch(_agent, $"{Regex.Escape(x.Key)}", RegexOptions.IgnoreCase)); + private bool SetRobot() { + var kv = _robots.FirstOrDefault(x => Regex.IsMatch(_agent, $"{Regex.Escape(x.Key)}", RegexOptions.IgnoreCase)); if (kv.Key == null) { return false; } IsRobot = true; - Robot = kv.Value; - _ = SetMobile(); + Robot = kv.Value; + _ = SetMobile(); return true; } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/XmlCommentReader.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/XmlCommentReader.cs index a2d739fe..6212ec99 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/XmlCommentReader.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Utils/XmlCommentReader.cs @@ -7,20 +7,19 @@ namespace NetAdmin.Infrastructure.Utils; /// public sealed class XmlCommentReader : ISingleton { - private const string _XPATH = "//doc/members/member[@name=\"{0}\"]"; - private static readonly Regex _regex = new(@"`\d+"); - private readonly List _xmlDocuments = []; + private const string _XPATH = "//doc/members/member[@name=\"{0}\"]"; + private static readonly Regex _regex = new(@"`\d+"); + private readonly List _xmlDocuments = []; /// /// Initializes a new instance of the class. /// - public XmlCommentReader(IOptions specificationDocumentSettings) - { - var xmlComments = specificationDocumentSettings.Value.XmlComments // + public XmlCommentReader(IOptions specificationDocumentSettings) { + var xmlComments = specificationDocumentSettings.Value.XmlComments ?? App.GetConfig(nameof(SpecificationDocumentSettingsOptions).TrimOptionsSuffix()) - .XmlComments; + .XmlComments; foreach (var commentFile in xmlComments) { - var xmlDoc = new XmlDocument(); + var xmlDoc = new XmlDocument(); var xmlFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, commentFile); if (!File.Exists(xmlFilePath)) { LogHelper.Get().Warn($"{Ln.XML注释文件不存在}: {xmlFilePath}"); @@ -36,11 +35,13 @@ public sealed class XmlCommentReader : ISingleton /// 获取指定类型的注释 /// /// InvalidCastException - public string GetComments(MemberInfo memberInfo) - { - var node = memberInfo switch { - MethodInfo method => GetNodeByMethod(method), Type type => GetNodeByType(type), _ => throw new InvalidCastException() - }; + public string GetComments(MemberInfo memberInfo) { + var node = memberInfo switch + { + MethodInfo method => GetNodeByMethod(method) + , Type type => GetNodeByType(type) + , _ => throw new InvalidCastException() + }; if (node?.FirstChild?.Name != "inheritdoc") { return node?.FirstChild?.InnerText.Trim(); @@ -61,32 +62,35 @@ public sealed class XmlCommentReader : ISingleton return methodFromInterface == null ? null : GetComments(methodFromInterface); } - private XmlNode GetNodeByMethod(MethodInfo method) - { - var nodeName = $"M:{method.DeclaringType}.{method.Name}"; + private XmlNode GetNodeByMethod(MethodInfo method) { + var nodeName = $"M:{method.DeclaringType}.{method.Name}"; var parameters = method.GetParameters(); if (parameters.Length != 0) { nodeName += $"({string.Join(',', parameters.Select(Replace))})"; } - return _xmlDocuments.Select(xmlDoc => xmlDoc.SelectSingleNode( - #pragma warning disable CA1863 - string.Format(NumberFormatInfo.InvariantInfo, _XPATH, nodeName))) - #pragma warning restore CA1863 - .FirstOrDefault(ret => ret != null); + return _xmlDocuments + .Select(xmlDoc => xmlDoc.SelectSingleNode( + #pragma warning disable CA1863 + string.Format(NumberFormatInfo.InvariantInfo, _XPATH, nodeName) + ) + ) + #pragma warning restore CA1863 + .FirstOrDefault(ret => ret != null); - static string Replace(ParameterInfo parameterInfo) - { + static string Replace(ParameterInfo parameterInfo) { return _regex.Replace(parameterInfo.ParameterType.ToString(), string.Empty).Replace("[", "{").Replace("]", "}"); } } - private XmlNode GetNodeByType(Type type) - { - return _xmlDocuments.Select(xmlDoc => xmlDoc.SelectSingleNode( - #pragma warning disable CA1863 - string.Format(NumberFormatInfo.InvariantInfo, _XPATH, $"T:{type.FullName}"))) - #pragma warning restore CA1863 - .FirstOrDefault(ret => ret != null); + private XmlNode GetNodeByType(Type type) { + return _xmlDocuments + .Select(xmlDoc => xmlDoc.SelectSingleNode( + #pragma warning disable CA1863 + string.Format(NumberFormatInfo.InvariantInfo, _XPATH, $"T:{type.FullName}") + ) + ) + #pragma warning restore CA1863 + .FirstOrDefault(ret => ret != null); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IApiModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IApiModule.cs index 264454dd..f5ebb32e 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IApiModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IApiModule.cs @@ -6,9 +6,9 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 接口模块 /// public interface IApiModule : ICrudModule { /// diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ICodeTemplateModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ICodeTemplateModule.cs index d2f2efe9..804dce53 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ICodeTemplateModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ICodeTemplateModule.cs @@ -6,7 +6,7 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 代码模板模块 /// public interface ICodeTemplateModule : ICrudModule; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IConfigModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IConfigModule.cs index 125d7495..1fe19186 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IConfigModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IConfigModule.cs @@ -6,9 +6,9 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 配置模块 /// public interface IConfigModule : ICrudModule { /// diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDepositOrderModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDepositOrderModule.cs index fb0d22fd..a83baa6a 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDepositOrderModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDepositOrderModule.cs @@ -6,9 +6,9 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 充值订单模块 /// public interface IDepositOrderModule : ICrudModule { /// diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDeptModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDeptModule.cs index fcff2e7e..7c4d7683 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDeptModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDeptModule.cs @@ -6,9 +6,9 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 部门模块 /// public interface IDeptModule : ICrudModule { /// diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDicCatalogModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDicCatalogModule.cs index 951f8f43..7fa189f8 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDicCatalogModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDicCatalogModule.cs @@ -6,7 +6,7 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 字典目录模块 /// public interface IDicCatalogModule : ICrudModule; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDicContentModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDicContentModule.cs index 0df3a8ec..129438a1 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDicContentModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDicContentModule.cs @@ -6,9 +6,9 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 字典内容模块 /// public interface IDicContentModule : ICrudModule { /// diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDocCatalogModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDocCatalogModule.cs index 51e0f415..fd8f9d58 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDocCatalogModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDocCatalogModule.cs @@ -6,7 +6,7 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 文档分类模块 /// public interface IDocCatalogModule : ICrudModule; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDocContentModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDocContentModule.cs index d70a4b86..78379493 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDocContentModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IDocContentModule.cs @@ -6,9 +6,9 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 文档内容模块 /// public interface IDocContentModule : ICrudModule { /// diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IJobModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IJobModule.cs index 84fe7e21..046edf65 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IJobModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IJobModule.cs @@ -8,9 +8,9 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 计划作业模块 /// public interface IJobModule : ICrudModule { /// diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IJobRecordModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IJobRecordModule.cs index 64f03db6..918dd752 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IJobRecordModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IJobRecordModule.cs @@ -6,7 +6,7 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 计划作业执行记录模块 /// public interface IJobRecordModule : ICrudModule; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ILoginLogModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ILoginLogModule.cs index 1bdc5711..d6508b0a 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ILoginLogModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ILoginLogModule.cs @@ -6,7 +6,7 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 登录日志模块 /// public interface ILoginLogModule : ICrudModule; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IMenuModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IMenuModule.cs index a3018bb2..360618cf 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IMenuModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IMenuModule.cs @@ -6,9 +6,9 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 菜单模块 /// public interface IMenuModule : ICrudModule { /// diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IRequestLogDetailModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IRequestLogDetailModule.cs index f415dc3e..90c2578d 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IRequestLogDetailModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IRequestLogDetailModule.cs @@ -6,7 +6,7 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 请求日志明细模块 /// public interface IRequestLogDetailModule : ICrudModule; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IRequestLogModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IRequestLogModule.cs index c51dbf9b..0ee39032 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IRequestLogModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IRequestLogModule.cs @@ -7,9 +7,9 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 请求日志模块 /// public interface IRequestLogModule : ICrudModule { /// diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IRoleModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IRoleModule.cs index 8fe5c1ed..2e1712d4 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IRoleModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IRoleModule.cs @@ -7,9 +7,9 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 角色模块 /// public interface IRoleModule : ICrudModule { /// diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgDeptModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgDeptModule.cs index b9164ef9..6367e737 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgDeptModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgDeptModule.cs @@ -6,7 +6,7 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 站内信-部门映射模块 /// public interface ISiteMsgDeptModule : ICrudModule; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgFlagModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgFlagModule.cs index 9e054e37..94f28609 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgFlagModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgFlagModule.cs @@ -6,7 +6,7 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 站内信标记模块 /// public interface ISiteMsgFlagModule : ICrudModule; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgModule.cs index 60a9a913..e96c83db 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgModule.cs @@ -7,9 +7,9 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 站内信模块 /// public interface ISiteMsgModule : ICrudModule { /// diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgRoleModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgRoleModule.cs index d0fa3e05..3731a73f 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgRoleModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgRoleModule.cs @@ -6,7 +6,7 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 站内信-角色映射模块 /// public interface ISiteMsgRoleModule : ICrudModule; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgUserModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgUserModule.cs index f23cbf5f..b11e7f42 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgUserModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ISiteMsgUserModule.cs @@ -6,7 +6,7 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 站内信-用户映射模块 /// public interface ISiteMsgUserModule : ICrudModule; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserInviteModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserInviteModule.cs index cbd0d8eb..833e44a0 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserInviteModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserInviteModule.cs @@ -8,9 +8,9 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 用户邀请模块 /// public interface IUserInviteModule : ICrudModule { /// @@ -21,7 +21,7 @@ public interface IUserInviteModule : ICrudModule /// 获取自己是否允许自助充值 /// - Task GetSelfRechargeAllowedAsync(); + Task GetSelfDepositAllowedAsync(); /// /// 查询可分配的角色 @@ -33,6 +33,11 @@ public interface IUserInviteModule : ICrudModule Task SetCommissionRatioAsync(SetCommissionRatioReq req); + /// + /// 设置粉丝是否启用 + /// + Task SetEnabledAsync(SetUserInviteEnabledReq req); + /// /// 修改粉丝角色 /// @@ -46,5 +51,5 @@ public interface IUserInviteModule : ICrudModule /// 设置允许自助充值 /// - Task SetSelfRechargeAllowedAsync(SetSelfRechargeAllowedReq req); + Task SetSelfDepositAllowedAsync(SetSelfDepositAllowedReq req); } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserModule.cs index 5255b7a3..4a384469 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserModule.cs @@ -7,9 +7,9 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 用户模块 /// public partial interface IUserModule : ICrudModule { /// @@ -37,6 +37,11 @@ public partial interface IUserModule : ICrudModule Task LoginBySmsAsync(LoginBySmsReq req); + /// + /// 用户编号登录 + /// + Task LoginByUserIdAsync(LoginByUserIdReq req); + /// /// 查询用户档案 /// diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserProfileModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserProfileModule.cs index ec0d4021..e7643a76 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserProfileModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserProfileModule.cs @@ -6,7 +6,7 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 用户档案模块 /// public interface IUserProfileModule : ICrudModule; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserRoleModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserRoleModule.cs index 1d0a01fb..f9db9d2b 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserRoleModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserRoleModule.cs @@ -6,7 +6,7 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 用户-角色映射模块 /// public interface IUserRoleModule : ICrudModule; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserWalletModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserWalletModule.cs index e9606188..8c86d10d 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserWalletModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IUserWalletModule.cs @@ -6,7 +6,7 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 用户钱包模块 /// public interface IUserWalletModule : ICrudModule; \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IVerifyCodeModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IVerifyCodeModule.cs index 27fbbfbe..109861a0 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IVerifyCodeModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IVerifyCodeModule.cs @@ -6,9 +6,9 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 验证码模块 /// public interface IVerifyCodeModule : ICrudModule { /// diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IWalletFrozenModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IWalletFrozenModule.cs index 15aa9a8f..77e67c64 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IWalletFrozenModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IWalletFrozenModule.cs @@ -6,9 +6,9 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 钱包冻结模块 /// public interface IWalletFrozenModule : ICrudModule { /// diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IWalletTradeModule.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IWalletTradeModule.cs index 17734a5a..4d2bab43 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IWalletTradeModule.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/IWalletTradeModule.cs @@ -6,9 +6,9 @@ namespace NetAdmin.SysComponent.Application.Modules.Sys; /// 钱包交易模块 /// public interface IWalletTradeModule : ICrudModule { /// diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/ApiService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/ApiService.cs index 855c1959..ce3b6113 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/ApiService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/ApiService.cs @@ -7,149 +7,132 @@ namespace NetAdmin.SysComponent.Application.Services.Sys; /// public sealed class ApiService( - BasicRepository rpo // - , XmlCommentReader xmlCommentReader // - , IActionDescriptorCollectionProvider actionDescriptorCollectionProvider) // - : RedisService(rpo), IApiService + BasicRepository rpo + , XmlCommentReader xmlCommentReader + , IActionDescriptorCollectionProvider actionDescriptorCollectionProvider) : RedisService(rpo), IApiService { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_Api).GetProperty(y)!.GetValue(x.Key)?.ToString()) - , x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_Api).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public Task CreateAsync(CreateApiReq req) - { + public Task CreateAsync(CreateApiReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public Task EditAsync(EditApiReq req) - { + public Task EditAsync(EditApiReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public Task ExistAsync(QueryReq req) - { + public Task ExistAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).AnyAsync(); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); return ExportAsync(QueryInternal, req, Ln.接口导出); } /// - public Task GetAsync(QueryApiReq req) - { + public Task GetAsync(QueryApiReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public async Task> PlainQueryAsync(QueryReq req) - { + public async Task> PlainQueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter).ToTreeListAsync().ConfigureAwait(false); return ret.Adapt>(); } /// - public IEnumerable ReflectionList(bool excludeAnonymous = true) - { + public IEnumerable ReflectionList(bool excludeAnonymous = true) { var regex = new Regex(@"\.(\w+)$", RegexOptions.Compiled); - var actionDescriptors // - = actionDescriptorCollectionProvider.ActionDescriptors.Items.Cast(); + var actionDescriptors = actionDescriptorCollectionProvider.ActionDescriptors.Items.Cast(); if (excludeAnonymous) { actionDescriptors = actionDescriptors.Where(x => x.EndpointMetadata.All(y => y is AllowAnonymousAttribute)); } - var actionGroup // - = actionDescriptors.GroupBy(x => x.ControllerTypeInfo); + var actionGroup = actionDescriptors.GroupBy(x => x.ControllerTypeInfo); return actionGroup.Select(SelectQueryApiRsp); - QueryApiRsp SelectQueryApiRsp(IGrouping group) - { + QueryApiRsp SelectQueryApiRsp(IGrouping group) { var first = group.First()!; - var id = Regex.Replace( // - first.AttributeRouteInfo!.Template!, $"/{first.ActionName}$", string.Empty); - return new QueryApiRsp { - Summary = xmlCommentReader.GetComments(group.Key) - , Name = first.ControllerName - , Id = id - , Children = GetChildren(group) - , Namespace = regex.Match(group.Key.Namespace!).Groups[1].Value.ToLowerInvariant() - , PathCrc32 = id.Crc32() - }; + var id = Regex.Replace(first.AttributeRouteInfo!.Template!, $"/{first.ActionName}$", string.Empty); + return new QueryApiRsp + { + Summary = xmlCommentReader.GetComments(group.Key) + , Name = first.ControllerName + , Id = id + , Children = GetChildren(group) + , Namespace = regex.Match(group.Key.Namespace!).Groups[1].Value.ToLowerInvariant() + , PathCrc32 = id.Crc32() + }; } } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } /// - public async Task SyncAsync() - { + public async Task SyncAsync() { await using var locker = await GetLockerOnceAsync(nameof(SyncAsync)).ConfigureAwait(false); _ = await Rpo.DeleteAsync(_ => true).ConfigureAwait(false); @@ -162,23 +145,23 @@ public sealed class ApiService( } } - private IEnumerable GetChildren(IEnumerable actionDescriptors) - { - return actionDescriptors // - .Select(x => { + private IEnumerable GetChildren(IEnumerable actionDescriptors) { + return actionDescriptors.Select(x => + { var id = x.AttributeRouteInfo!.Template; - return new QueryApiRsp { - Summary = xmlCommentReader.GetComments(x.MethodInfo) - , Name = x.ActionName - , Id = id - , Method = x.ActionConstraints?.OfType().FirstOrDefault()?.HttpMethods.First() - , PathCrc32 = id.Crc32() - }; - }); + return new QueryApiRsp + { + Summary = xmlCommentReader.GetComments(x.MethodInfo) + , Name = x.ActionName + , Id = id + , Method = x.ActionConstraints?.OfType().FirstOrDefault()?.HttpMethods.First() + , PathCrc32 = id.Crc32() + }; + } + ); } - private ISelect QueryInternal(QueryReq req) - { + private ISelect QueryInternal(QueryReq req) { var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/CacheService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/CacheService.cs index bfc32d3b..cedc42c4 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/CacheService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/CacheService.cs @@ -5,23 +5,23 @@ using StackExchange.Redis; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class CacheService(IConnectionMultiplexer connectionMultiplexer) // - : ServiceBase, ICacheService +public sealed class CacheService(IConnectionMultiplexer connectionMultiplexer) : ServiceBase, ICacheService { private readonly InstanceNode _redisInstance; /// /// Initializes a new instance of the class. /// - public CacheService(IConnectionMultiplexer connectionMultiplexer, IOptions redisOptions) // - : this(connectionMultiplexer) // - { + public CacheService( + IConnectionMultiplexer connectionMultiplexer + , IOptions redisOptions + ) + : this(connectionMultiplexer) { _redisInstance = redisOptions.Value.Instances.First(x => x.Name == Chars.FLG_REDIS_INSTANCE_DATA_CACHE); } /// - public async Task BulkDeleteEntryAsync(BulkReq req) - { + public async Task BulkDeleteEntryAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -34,27 +34,25 @@ public sealed class CacheService(IConnectionMultiplexer connectionMultiplexer) / } /// - public async Task CacheStatisticsAsync() - { + public async Task CacheStatisticsAsync() { var database = connectionMultiplexer.GetDatabase(_redisInstance.Database); - return new CacheStatisticsRsp((string)await database.ExecuteAsync("info").ConfigureAwait(false)) { - DbSize = (long)await database.ExecuteAsync("dbSize").ConfigureAwait(false) - }; + return new CacheStatisticsRsp((string)await database.ExecuteAsync("info").ConfigureAwait(false)) + { + DbSize = (long)await database.ExecuteAsync("dbSize").ConfigureAwait(false) + }; } /// - public async Task DeleteEntryAsync(DelEntryReq req) - { + public async Task DeleteEntryAsync(DelEntryReq req) { req.ThrowIfInvalid(); #pragma warning disable VSTHRD103 - var database = connectionMultiplexer.GetDatabase(_redisInstance.Database); + var database = connectionMultiplexer.GetDatabase(_redisInstance.Database); var delSuccess = await database.KeyDeleteAsync(req.Key).ConfigureAwait(false); return delSuccess ? 1 : 0; } /// - public async Task> GetAllEntriesAsync(GetAllEntriesReq req) - { + public async Task> GetAllEntriesAsync(GetAllEntriesReq req) { req.ThrowIfInvalid(); #pragma warning disable VSTHRD103 var server = connectionMultiplexer.GetServers()[0]; @@ -65,37 +63,42 @@ public sealed class CacheService(IConnectionMultiplexer connectionMultiplexer) / var dic = new ConcurrentDictionary(); - await Parallel.ForEachAsync( - keys - , async (key, _) => - dic.TryAdd( - key - , (DateTime.Now + await database.KeyTimeToLiveAsync(key).ConfigureAwait(false) - , await database.KeyTypeAsync(key).ConfigureAwait(false)))) - .ConfigureAwait(false); + await Parallel + .ForEachAsync( + keys, async ( + key + , _ + ) => dic.TryAdd( + key + , (DateTime.Now + await database.KeyTimeToLiveAsync(key).ConfigureAwait(false) + , await database.KeyTypeAsync(key).ConfigureAwait(false)) + ) + ) + .ConfigureAwait(false); return dic.Select(x => new GetEntryRsp { Key = x.Key, ExpireTime = x.Value.Item1, Type = x.Value.Item2 }); } /// - public async Task GetEntryAsync(GetEntriesReq req) - { + public async Task GetEntryAsync(GetEntriesReq req) { req.ThrowIfInvalid(); var database = connectionMultiplexer.GetDatabase(_redisInstance.Database); - var ret = new GetEntryRsp { - Type = await database.KeyTypeAsync(req.Key).ConfigureAwait(false) - , Key = req.Key - , ExpireTime = DateTime.Now + await database.KeyTimeToLiveAsync(req.Key).ConfigureAwait(false) - }; + var ret = new GetEntryRsp + { + Type = await database.KeyTypeAsync(req.Key).ConfigureAwait(false) + , Key = req.Key + , ExpireTime = DateTime.Now + await database.KeyTimeToLiveAsync(req.Key).ConfigureAwait(false) + }; - ret.Data = ret.Type switch { - RedisType.String => await database.StringGetAsync(req.Key).ConfigureAwait(false) - , RedisType.List => string.Join(", ", await database.ListRangeAsync(req.Key).ConfigureAwait(false)) - , RedisType.Set => string.Join(", ", await database.SetMembersAsync(req.Key).ConfigureAwait(false)) - , RedisType.SortedSet => string.Join(", ", await database.SortedSetRangeByRankAsync(req.Key).ConfigureAwait(false)) - , RedisType.Hash => string.Join(", ", await database.HashGetAllAsync(req.Key).ConfigureAwait(false)) - , _ => "Unsupported key type" - }; + ret.Data = ret.Type switch + { + RedisType.String => await database.StringGetAsync(req.Key).ConfigureAwait(false) + , RedisType.List => string.Join(", ", await database.ListRangeAsync(req.Key).ConfigureAwait(false)) + , RedisType.Set => string.Join(", ", await database.SetMembersAsync(req.Key).ConfigureAwait(false)) + , RedisType.SortedSet => string.Join(", ", await database.SortedSetRangeByRankAsync(req.Key).ConfigureAwait(false)) + , RedisType.Hash => string.Join(", ", await database.HashGetAllAsync(req.Key).ConfigureAwait(false)) + , _ => "Unsupported key type" + }; return ret; } diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/CaptchaService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/CaptchaService.cs index e5b2f8fb..a19d56fe 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/CaptchaService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/CaptchaService.cs @@ -12,25 +12,23 @@ namespace NetAdmin.SysComponent.Application.Services.Sys; /// public sealed class CaptchaService : ServiceBase, ICaptchaService { - private static readonly Assembly _currAsm = Assembly.GetAssembly(typeof(CaptchaService)); - private static readonly string _currAsmName = _currAsm.FullName![.._currAsm.FullName.IndexOf(',')]; + private static readonly Assembly _currAsm = Assembly.GetAssembly(typeof(CaptchaService)); + private static readonly string _currAsmName = _currAsm.FullName![.._currAsm.FullName.IndexOf(',')]; /// - public async Task GetCaptchaImageAsync() - { - var (backgroundImage, sliderImage, offsetSaw) = await CaptchaImageHelper.CreateSawSliderImageAsync( - _currAsm, $"{_currAsmName}.Assets.Captcha.background" - , $"{_currAsmName}.Assets.Captcha.template", (1, 101), (1, 7) - , new Size(50, 50)) - .ConfigureAwait(false); + public async Task GetCaptchaImageAsync() { + var (backgroundImage, sliderImage, offsetSaw) = await CaptchaImageHelper + .CreateSawSliderImageAsync( + _currAsm, $"{_currAsmName}.Assets.Captcha.background", $"{_currAsmName}.Assets.Captcha.template", (1, 101), (1, 7), new Size(50, 50) + ) + .ConfigureAwait(false); var id = $"{nameof(GetCaptchaImageAsync)}_{YitIdHelper.NextId()}"; return new GetCaptchaRsp { Id = id, BackgroundImage = backgroundImage, SliderImage = sliderImage, SawOffsetX = offsetSaw.X }; } /// - public Task VerifyCaptchaAsync(VerifyCaptchaReq req) - { + public Task VerifyCaptchaAsync(VerifyCaptchaReq req) { req.ThrowIfInvalid(); if (req.SawOffsetX == null) { return Task.FromResult(false); diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/CodeTemplateService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/CodeTemplateService.cs index 06b1d9ae..1ba9ad2c 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/CodeTemplateService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/CodeTemplateService.cs @@ -6,12 +6,11 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class CodeTemplateService(BasicRepository rpo) // +public sealed class CodeTemplateService(BasicRepository rpo) : RepositoryService(rpo), ICodeTemplateService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -24,50 +23,49 @@ public sealed class CodeTemplateService(BasicRepository } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary( - y => y - , y => y.Contains('.') - ? typeof(Sys_CodeTemplate).GetRecursiveProperty(y)!.GetValue( - x.Key.GetType().GetRecursiveProperty(y[..y.LastIndexOf('.')]).GetValue(x.Key)) - ?.ToString() - : typeof(Sys_CodeTemplate).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary( + y => y + , y => y.Contains('.') + ? typeof(Sys_CodeTemplate).GetRecursiveProperty(y)! + .GetValue(x.Key.GetType().GetRecursiveProperty(y[..y.LastIndexOf('.')]).GetValue(x.Key)) + ?.ToString() + : typeof(Sys_CodeTemplate).GetProperty(y)!.GetValue(x.Key)?.ToString() + ), x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateCodeTemplateReq req) - { + public async Task CreateAsync(CreateCodeTemplateReq req) { req.ThrowIfInvalid(); var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); return Rpo.DeleteAsync(a => a.Id == req.Id); } /// - public async Task EditAsync(EditCodeTemplateReq req) - { + public async Task EditAsync(EditCodeTemplateReq req) { req.ThrowIfInvalid(); #if DBTYPE_SQLSERVER return (await UpdateReturnListAsync(req).ConfigureAwait(false)).FirstOrDefault()?.Adapt(); @@ -79,51 +77,45 @@ public sealed class CodeTemplateService(BasicRepository } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); return ExportAsync(QueryInternal, req, Ln.代码模板导出); } /// - public async Task GetAsync(QueryCodeTemplateReq req) - { + public async Task GetAsync(QueryCodeTemplateReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(req) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private ISelect QueryInternal(QueryReq req) - { + private ISelect QueryInternal(QueryReq req) { var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/ConfigService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/ConfigService.cs index e996350e..df261838 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/ConfigService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/ConfigService.cs @@ -6,12 +6,10 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class ConfigService(BasicRepository rpo) // - : RepositoryService(rpo), IConfigService +public sealed class ConfigService(BasicRepository rpo) : RepositoryService(rpo), IConfigService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -24,45 +22,42 @@ public sealed class ConfigService(BasicRepository rpo) // } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_Config).GetProperty(y)!.GetValue(x.Key)?.ToString()) - , x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_Config).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateConfigReq req) - { + public async Task CreateAsync(CreateConfigReq req) { req.ThrowIfInvalid(); var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); return Rpo.DeleteAsync(a => a.Id == req.Id); } /// - public async Task EditAsync(EditConfigReq req) - { + public async Task EditAsync(EditConfigReq req) { req.ThrowIfInvalid(); #if DBTYPE_SQLSERVER return (await UpdateReturnListAsync(req).ConfigureAwait(false)).FirstOrDefault()?.Adapt(); @@ -72,80 +67,71 @@ public sealed class ConfigService(BasicRepository rpo) // } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); return ExportAsync(QueryInternal, req, Ln.配置导出); } /// - public async Task GetAsync(QueryConfigReq req) - { + public async Task GetAsync(QueryConfigReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public async Task GetLatestConfigAsync() - { + public async Task GetLatestConfigAsync() { var ret = await QueryAsync(new QueryReq { Count = 1, Filter = new QueryConfigReq { Enabled = true } }).ConfigureAwait(false); return ret.FirstOrDefault(); } /// - public async Task GetRegisterConfigAsync() - { + public async Task GetRegisterConfigAsync() { var latestConfigAsync = await GetLatestConfigAsync().ConfigureAwait(false); - return new QueryConfigRsp { - RegisterInviteRequired = latestConfigAsync.RegisterInviteRequired - , RegisterMobileRequired = latestConfigAsync.RegisterMobileRequired - }; + return new QueryConfigRsp + { + RegisterInviteRequired = latestConfigAsync.RegisterInviteRequired, RegisterMobileRequired = latestConfigAsync.RegisterMobileRequired + }; } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(req) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public Task SetEnabledAsync(SetConfigEnabledReq req) - { + public Task SetEnabledAsync(SetConfigEnabledReq req) { req.ThrowIfInvalid(); return UpdateAsync(req, [nameof(req.Enabled)]); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private ISelect QueryInternal(QueryReq req) - { - var ret = Rpo.Select.Include(a => a.UserRegisterDept) - .Include(a => a.UserRegisterRole) - .WhereDynamicFilter(req.DynamicFilter) - .WhereIf( // - req.Filter?.Enabled.HasValue ?? false, a => a.Enabled == req.Filter.Enabled.Value); + private ISelect QueryInternal(QueryReq req) { + var ret = Rpo + .Select.Include(a => a.UserRegisterDept) + .Include(a => a.UserRegisterRole) + .WhereDynamicFilter(req.DynamicFilter) + .WhereIf(req.Filter?.Enabled.HasValue ?? false, a => a.Enabled == req.Filter.Enabled.Value); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault switch (req.Order) { diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/ConstantService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/ConstantService.cs index ce817aba..e79d7dae 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/ConstantService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/ConstantService.cs @@ -6,65 +6,66 @@ namespace NetAdmin.SysComponent.Application.Services.Sys; public sealed class ConstantService : ServiceBase, IConstantService { /// - public IDictionary GetCharsDic() - { - return typeof(Chars).GetFields(BindingFlags.Public | BindingFlags.Static) - .Where(x => x.FieldType == typeof(string)) - .ToImmutableSortedDictionary( // - x => x.Name, x => x.GetValue(null)?.ToString()); + public IDictionary GetCharsDic() { + return typeof(Chars) + .GetFields(BindingFlags.Public | BindingFlags.Static) + .Where(x => x.FieldType == typeof(string)) + .ToImmutableSortedDictionary(x => x.Name, x => x.GetValue(null)?.ToString()); } /// - public IDictionary> GetEnums() - { - var ret = App.EffectiveTypes.Where(x => x.IsEnum && x.GetCustomAttribute(false) != null) - .ToDictionary(x => x.Name, x => // - x.GetEnumValues().Cast().ToDictionary(y => y.ToString(), GetDicValue)); + public IDictionary> GetEnums() { + var ret = App + .EffectiveTypes.Where(x => x.IsEnum && x.GetCustomAttribute(false) != null) + .ToDictionary(x => x.Name, x => x.GetEnumValues().Cast().ToDictionary(y => y.ToString(), GetDicValue)); var httpStatusCodes = Enum.GetNames().ToDictionary(x => x, GetHttpStatusCodeDicValue); - httpStatusCodes.Add( // - nameof(ErrorCodes.Unhandled) - , [Numbers.HTTP_STATUS_BIZ_FAIL.ToInvString(), nameof(ErrorCodes.Unhandled), nameof(Indicates.Danger).ToLowerInvariant()]); + httpStatusCodes.Add( + nameof(ErrorCodes.InternalError) + , [Numbers.HTTP_STATUS_BIZ_FAIL.ToInvString(), nameof(ErrorCodes.InternalError), nameof(Indicates.Danger).ToLowerInvariant()] + ); ret.Add($"{nameof(HttpStatusCode)}s", httpStatusCodes); return ret; - static string[] GetDicValue(Enum y) - { + static string[] GetDicValue(Enum y) { var ret = new[] { Convert.ToInt64(y, CultureInfo.InvariantCulture).ToString(CultureInfo.InvariantCulture), y.ResDesc() }; var decorationAttribute = y.Attr() ?? new EnumDecorationAttribute(); - ret = [ + ret = + [ ..ret, decorationAttribute.Indicate.ToLowerInvariant(), decorationAttribute.Pulse.ToString().ToLowerInvariant() - , decorationAttribute.Sort.ToInvString() + , decorationAttribute.Sort.ToInvString() ]; return y is CountryCodes z ? [..ret, z.GetCallingCode().ToInvString()] : ret; } - static string[] GetHttpStatusCodeDicValue(string name) - { + static string[] GetHttpStatusCodeDicValue(string name) { var codeInt = Convert.ToInt64(Enum.Parse(name), CultureInfo.InvariantCulture); - return [ - codeInt.ToString(CultureInfo.InvariantCulture), name - , (codeInt switch { >= 200 and < 300 => nameof(Indicates.Success), < 400 => nameof(Indicates.Warning), _ => nameof(Indicates.Danger) }) - .ToLowerInvariant() + return + [ + codeInt.ToString(CultureInfo.InvariantCulture), name, (codeInt switch + { + >= 200 and < 300 => nameof(Indicates.Success) + , < 400 => nameof(Indicates.Warning) + , _ => nameof(Indicates.Danger) + }).ToLowerInvariant() ]; } } /// - public IDictionary GetLocalizedStrings() - { - return typeof(Ln).GetProperties(BindingFlags.Public | BindingFlags.Static) - .Where(x => x.PropertyType == typeof(string)) - .ToImmutableSortedDictionary(x => x.Name, x => x.GetValue(null)?.ToString()); + public IDictionary GetLocalizedStrings() { + return typeof(Ln) + .GetProperties(BindingFlags.Public | BindingFlags.Static) + .Where(x => x.PropertyType == typeof(string)) + .ToImmutableSortedDictionary(x => x.Name, x => x.GetValue(null)?.ToString()); } /// - public IDictionary GetNumbersDic() - { - return typeof(Numbers).GetFields(BindingFlags.Public | BindingFlags.Static) - .Where(x => x.FieldType == typeof(int) || x.FieldType == typeof(long)) - .ToImmutableSortedDictionary( // - x => x.Name, x => Convert.ToInt64(x.GetValue(null), CultureInfo.InvariantCulture)); + public IDictionary GetNumbersDic() { + return typeof(Numbers) + .GetFields(BindingFlags.Public | BindingFlags.Static) + .Where(x => x.FieldType == typeof(int) || x.FieldType == typeof(long)) + .ToImmutableSortedDictionary(x => x.Name, x => Convert.ToInt64(x.GetValue(null), CultureInfo.InvariantCulture)); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/Dependency/IDeptService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/Dependency/IDeptService.cs index 6ca02bdf..c2be479f 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/Dependency/IDeptService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/Dependency/IDeptService.cs @@ -8,5 +8,5 @@ public interface IDeptService : IService, IDeptModule /// /// 获取所有子部门编号 /// - Task> GetChildDeptIdsAsync(long deptId); + Task> GetChildDeptIdsAsync(long deptId); } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/Dependency/IUserInviteService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/Dependency/IUserInviteService.cs index 8437ca15..303288d1 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/Dependency/IUserInviteService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/Dependency/IUserInviteService.cs @@ -8,5 +8,8 @@ public interface IUserInviteService : IService, IUserInviteModule /// /// 获取关联用户Id /// - Task> GetAssociatedUserIdAsync(long userId, bool up = true); + Task> GetAssociatedUserIdAsync( + long userId + , bool up = true + ); } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/Dependency/IUserService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/Dependency/IUserService.cs index 1984df08..b2c35d35 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/Dependency/IUserService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/Dependency/IUserService.cs @@ -11,9 +11,4 @@ public interface IUserService : IService, IUserModule /// 用户是否存在 /// Task ExistAsync(QueryReq req); - - /// - /// 用户编号登录 - /// - Task LoginByUserIdAsync(long userId); } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DepositOrderService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DepositOrderService.cs index edb5ebca..4557a60f 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DepositOrderService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DepositOrderService.cs @@ -1,19 +1,54 @@ +using System.Net.Http.Headers; +using Ganss.Excel; using NetAdmin.Application.Extensions; using NetAdmin.Domain.DbMaps.Sys; using NetAdmin.Domain.Dto.Sys.DepositOrder; using NetAdmin.Domain.Dto.Sys.WalletTrade; +using NetAdmin.Domain.Enums.Sys; using NetAdmin.Domain.Extensions; using NetAdmin.Infrastructure.Rpc.TronScan; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class DepositOrderService(BasicRepository rpo) // +public sealed class DepositOrderService(BasicRepository rpo) : RepositoryService(rpo), IDepositOrderService { - /// - public async Task BulkDeleteAsync(BulkReq req) + private readonly Expression> _toListExp = a => new Sys_DepositOrder { + Id = a.Id + , CreatedTime = a.CreatedTime + , ModifiedTime = a.ModifiedTime + , Version = a.Version + , Owner = new Sys_User + { + Id = a.Owner.Id + , UserName = a.Owner.UserName + , Avatar = a.Owner.Avatar + , Invite = new Sys_UserInvite + { + Owner = new Sys_User + { + Id = a.Owner.Invite.Owner.Id, UserName = a.Owner.Invite.Owner.UserName, Avatar = a.Owner.Invite.Owner.Avatar + } + , Channel + = new Sys_User + { + Id = a.Owner.Invite.Channel.Id + , UserName = a.Owner.Invite.Channel.UserName + , Avatar = a.Owner.Invite.Channel.Avatar + } + } + } + , DepositOrderStatus = a.DepositOrderStatus + , ActualPayAmount = a.ActualPayAmount + , DepositPoint = a.DepositPoint + , ToPointRate = a.ToPointRate + , PaymentMode = a.PaymentMode + }; + + /// + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -26,62 +61,68 @@ public sealed class DepositOrderService(BasicRepository } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary( - y => y, y => typeof(Sys_DepositOrder).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value)) - .Where(x => x.Key.Any(y => !y.Value.NullOrEmpty())) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_DepositOrder).GetProperty(y)!.GetValue(x.Key)?.ToString()) + , x.Value + ) + ) + .Where(x => x.Key.Any(y => !y.Value.NullOrEmpty())) + .OrderByDescending(x => x.Value); } /// req /// - public async Task CreateAsync(CreateDepositOrderReq req) - { + public async Task CreateAsync(CreateDepositOrderReq req) { req.ThrowIfInvalid(); var config = await GetDepositConfigAsync().ConfigureAwait(false); - var toPointRate = req.PaymentMode switch { - PaymentModes.USDT => config.UsdToPointRate - , PaymentModes.Alipay => config.CnyToPointRate - , PaymentModes.WeChat => config.CnyToPointRate - , _ => throw new ArgumentOutOfRangeException(nameof(req)) - }; + var toPointRate = req.PaymentMode switch + { + PaymentModes.USDT => config.UsdToPointRate + , PaymentModes.Alipay => config.CnyToPointRate + , PaymentModes.WeChat => config.CnyToPointRate + , _ => throw new ArgumentOutOfRangeException(nameof(req)) + }; - var ret = await Rpo.InsertAsync(req with { - ActualPayAmount = (long)(((decimal)req.DepositPoint / toPointRate).Round(3) * 1000) - , ToPointRate = toPointRate - , ReceiptAccount = config.Trc20ReceiptAddress - }) - .ConfigureAwait(false); + var ret = await Rpo + .InsertAsync( + req with + { + ActualPayAmount = (long)(((decimal)req.DepositPoint / toPointRate).Round(3) * 1000) + , ToPointRate = toPointRate + , ReceiptAccount = config.Trc20ReceiptAddress + } + ) + .ConfigureAwait(false); return ret.Adapt(); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); - return Rpo.DeleteAsync(a => a.Id == req.Id); + return Rpo.DeleteAsync(a => + a.Id == req.Id + && (a.DepositOrderStatus == DepositOrderStatues.WaitingForPayment || a.DepositOrderStatus == DepositOrderStatues.PaymentConfirming) + ); } /// - public async Task EditAsync(EditDepositOrderReq req) - { + public async Task EditAsync(EditDepositOrderReq req) { req.ThrowIfInvalid(); #if DBTYPE_SQLSERVER return (await UpdateReturnListAsync(req).ConfigureAwait(false)).FirstOrDefault()?.Adapt(); @@ -93,82 +134,117 @@ public sealed class DepositOrderService(BasicRepository } /// - public Task ExportAsync(QueryReq req) - { + public async Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); - return ExportAsync(QueryInternal, req, Ln.充值订单导出); + var list = await QueryInternal(req) + .Include(a => a.Owner) + .WithNoLockNoWait() + .Take(Numbers.MAX_LIMIT_EXPORT) + .ToListAsync(_toListExp) + .ConfigureAwait(false); + + var stream = new MemoryStream(); + await new ExcelMapper() + .SaveAsync( + stream + , list.ConvertAll(x => new ExportDepositOrderRsp + { + 充值金额 = (x.DepositPoint / 100m).Round(2) + , 订单编号 = x.Id.ToInvString() + , 订单状态 = x.DepositOrderStatus.ResDesc() + , 归属用户 = x.Owner.UserName + , 上级 = x.Owner.Invite.Owner?.UserName + , 渠道 = x.Owner.Invite.Channel?.UserName + , 汇率 = (x.ToPointRate / 100m).Round(2) + , 支付方式 = x.PaymentMode.ResDesc() + , 支付金额 = (x.ActualPayAmount / 1000m).Round(3) + } + ) + ) + .ConfigureAwait(false); + _ = stream.Seek(0, SeekOrigin.Begin); + App.HttpContext.Response.Headers.ContentDisposition = new ContentDispositionHeaderValue(Chars.FLG_HTTP_HEADER_VALUE_ATTACHMENT) + { + FileNameStar = $"充值订单{list.Count}个-{list.Min(x => x.CreatedTime):MMddHHmm}-{list.Max(x => x.CreatedTime):MMddHHmm}.xlsx" + }.ToString(); + return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM); } /// - public async Task GetAsync(QueryDepositOrderReq req) - { + public async Task GetAsync(QueryDepositOrderReq req) { req.ThrowIfInvalid(); - var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); + var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }) + .Include(a => a.Owner.Invite.Owner) + .Include(a => a.Owner.Invite.Channel) + .ToOneAsync() + .ConfigureAwait(false); return ret.Adapt(); } /// - public async Task GetDepositConfigAsync() - { + public async Task GetDepositConfigAsync() { var ret = await S().GetLatestConfigAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Include(a => a.Owner) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Include(a => a.Owner.Invite.Owner) + .Include(a => a.Owner.Invite.Channel) + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(_toListExp) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public Task PayConfirmAsync(PayConfirmReq req) - { + public Task PayConfirmAsync(PayConfirmReq req) { req.ThrowIfInvalid(); - return UpdateAsync(req with { DepositOrderStatus = DepositOrderStatues.PaymentConfirming }, [nameof(req.DepositOrderStatus)], null - , a => a.DepositOrderStatus == DepositOrderStatues.WaitingForPayment && a.Id == req.Id, null, true); + return UpdateAsync( + req with { DepositOrderStatus = DepositOrderStatues.PaymentConfirming }, [nameof(req.DepositOrderStatus)], null + , a => a.DepositOrderStatus == DepositOrderStatues.WaitingForPayment && a.Id == req.Id, null, true + ); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public async Task ReceivedConfirmationAsync(JobReq req) - { + public async Task ReceivedConfirmationAsync(JobReq req) { req.ThrowIfInvalid(); - var ret = 0; + var ret = 0; var config = await S().GetLatestConfigAsync().ConfigureAwait(false); - var waitConfirmList = (await QueryAsync(new QueryReq { - Count = Numbers.MAX_LIMIT_QUERY_PAGE_SIZE - , DynamicFilter - = new DynamicFilterInfo { - Field = nameof( - QueryDepositOrderReq.DepositOrderStatus) - , Operator = DynamicFilterOperators.Eq - , Value = DepositOrderStatues.PaymentConfirming - } - , Order = Orders.Ascending - , Prop = nameof(QueryDepositOrderReq.Id) - }) + var waitConfirmList = (await QueryAsync( + new QueryReq + { + Count = Numbers.MAX_LIMIT_QUERY_PAGE_SIZE + , DynamicFilter + = new DynamicFilterInfo + { + Field = nameof(QueryDepositOrderReq.DepositOrderStatus) + , Operator = DynamicFilterOperators.Eq + , Value = DepositOrderStatues.PaymentConfirming + } + , Order = Orders.Ascending + , Prop = nameof(QueryDepositOrderReq.Id) + } + ) .ConfigureAwait(false)).ToList(); var apiResult = await S() - .TransfersAsync(S>().Value.Token, req.Count!.Value, config.Trc20ReceiptAddress) - .ConfigureAwait(false); - foreach (var apiItem in apiResult.TokenTransfers.Where(x => x.TokenInfo.TokenAbbr == "USDT" && x.Confirmed && x.ContractRet == "SUCCESS" && - x.FinalResult == "SUCCESS")) { + .TransfersAsync(S>().Value.Token, req.Count!.Value, config.Trc20ReceiptAddress) + .ConfigureAwait(false); + foreach (var apiItem in apiResult.TokenTransfers.Where(x => + x.TokenInfo.TokenAbbr == "USDT" && x.Confirmed && x.ContractRet == "SUCCESS" && x.FinalResult == "SUCCESS" + )) { var order = waitConfirmList.SingleOrDefault(x => x.ActualPayAmount == apiItem.Quant.Int64() / 1000); if (order == null || order.CreatedTime > apiItem.BlockTs.Time()) { continue; @@ -176,33 +252,42 @@ public sealed class DepositOrderService(BasicRepository try { await S() - .AtomicOperateAsync(async () => { - var updated = await UpdateAsync( // - new Sys_DepositOrder { - DepositOrderStatus = DepositOrderStatues.Succeeded - , Version = order.Version - , FinishTimestamp = DateTime.Now.TimeUnixUtcMs() - , PaidAccount = apiItem.FromAddress - , PaidTime = apiItem.BlockTs.Time() - , PaymentFinger = apiItem.TransactionId - }, [nameof(Sys_DepositOrder.DepositOrderStatus), nameof(Sys_DepositOrder.FinishTimestamp), nameof(Sys_DepositOrder.PaidAccount), nameof(Sys_DepositOrder.PaidTime), nameof(Sys_DepositOrder.PaymentFinger)] - , null, a => a.Id == order.Id && a.DepositOrderStatus == DepositOrderStatues.PaymentConfirming) - .ConfigureAwait(false); - if (updated != 1) { - throw new NetAdminUnexpectedException(Ln.结果非预期); - } + .AtomicOperateAsync(async () => + { + var updated = await UpdateAsync( + new Sys_DepositOrder + { + DepositOrderStatus = DepositOrderStatues.Succeeded + , Version = order.Version + , FinishTimestamp = DateTime.Now.TimeUnixUtcMs() + , PaidAccount = apiItem.FromAddress + , PaidTime = apiItem.BlockTs.Time() + , PaymentFinger = apiItem.TransactionId + }, [nameof(Sys_DepositOrder.DepositOrderStatus), nameof(Sys_DepositOrder.FinishTimestamp), nameof(Sys_DepositOrder.PaidAccount), nameof(Sys_DepositOrder.PaidTime), nameof(Sys_DepositOrder.PaymentFinger)] + , null, a => a.Id == order.Id && a.DepositOrderStatus == DepositOrderStatues.PaymentConfirming + ) + .ConfigureAwait(false); + if (updated != 1) { + throw new NetAdminUnexpectedException(Ln.结果非预期); + } - _ = await S() - .CreateAsync(new CreateWalletTradeReq { - Amount = order.DepositPoint - , BusinessOrderNumber = order.Id - , TradeDirection = TradeDirections.Income - , TradeType = TradeTypes.SelfDeposit - , OwnerId = order.OwnerId - }) - .ConfigureAwait(false) ?? throw new NetAdminUnexpectedException(Ln.结果非预期); - }) - .ConfigureAwait(false); + _ = await S() + .CreateAsync( + new CreateWalletTradeReq + { + Amount = order.DepositPoint + , BusinessOrderNumber = order.Id + , TradeDirection = TradeDirections.Income + , TradeType = TradeTypes.SelfDeposit + , OwnerId = order.OwnerId + , OwnerDeptId = order.OwnerDeptId + } + ) + .ConfigureAwait(false) + ?? throw new NetAdminUnexpectedException(Ln.结果非预期); + } + ) + .ConfigureAwait(false); ret++; } catch { @@ -214,15 +299,13 @@ public sealed class DepositOrderService(BasicRepository } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private ISelect QueryInternal(QueryReq req) - { - var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); + private ISelect QueryInternal(QueryReq req) { + var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereIf(req.Filter?.Id > 0, a => a.Id == req.Filter.Id); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault switch (req.Order) { diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DeptService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DeptService.cs index 0eb12c1a..7790f1a8 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DeptService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DeptService.cs @@ -6,12 +6,10 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class DeptService(BasicRepository rpo) // - : RepositoryService(rpo), IDeptService +public sealed class DeptService(BasicRepository rpo) : RepositoryService(rpo), IDeptService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -24,31 +22,30 @@ public sealed class DeptService(BasicRepository rpo) // } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_Dept).GetProperty(y)!.GetValue(x.Key)?.ToString()) - , x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_Dept).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// /// Parent_department_does_not_exist - public async Task CreateAsync(CreateDeptReq req) - { + public async Task CreateAsync(CreateDeptReq req) { req.ThrowIfInvalid(); if (req.ParentId != 0 && !await Rpo.Select.AnyAsync(a => a.Id == req.ParentId).ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.父节点不存在); @@ -62,8 +59,7 @@ public sealed class DeptService(BasicRepository rpo) // /// /// 该部门下存在用户 /// 该部门下存在子部门 - public async Task DeleteAsync(DelReq req) - { + public async Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); if (await Rpo.Orm.Select().AnyAsync(a => a.DeptId == req.Id).ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.该部门下存在用户); @@ -79,8 +75,7 @@ public sealed class DeptService(BasicRepository rpo) // } /// - public async Task EditAsync(EditDeptReq req) - { + public async Task EditAsync(EditDeptReq req) { req.ThrowIfInvalid(); #if DBTYPE_SQLSERVER return (await UpdateReturnListAsync(req).ConfigureAwait(false)).FirstOrDefault()?.Adapt(); @@ -90,66 +85,62 @@ public sealed class DeptService(BasicRepository rpo) // } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); return ExportAsync(QueryInternal, req, Ln.部门导出); } /// - public async Task GetAsync(QueryDeptReq req) - { + public async Task GetAsync(QueryDeptReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> GetChildDeptIdsAsync(long deptId) - { - return await Rpo.Where(a => a.Id == deptId).AsTreeCte().ToListAsync(a => a.Id).ConfigureAwait(false); + public async Task> GetChildDeptIdsAsync(long deptId) { + var ret = await Rpo.Where(a => a.Id == deptId).AsTreeCte().ToListAsync(a => new { a.Id, a.ParentId }).ConfigureAwait(false); + return ret.ConvertAll(x => new[] { x.Id, x.ParentId }); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); return (await QueryInternal(req).WithNoLockNoWait().ToTreeListAsync().ConfigureAwait(false)).Adapt>(); } /// - public Task SetEnabledAsync(SetDeptEnabledReq req) - { + public Task SetEnabledAsync(SetDeptEnabledReq req) { req.ThrowIfInvalid(); return UpdateAsync(req, [nameof(req.Enabled)]); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private ISelect QueryInternal(QueryReq req) - { + private ISelect QueryInternal(QueryReq req) { return QueryInternal(req, false); } - private ISelect QueryInternal(QueryReq req, bool asTreeCte) - { - var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter) - .WhereDynamic(req.Filter) - .WhereIf( // - req.Keywords?.Length > 0 - , a => a.Id == req.Keywords.Int64Try(0) || a.Name.Contains(req.Keywords) || a.Summary.Contains(req.Keywords)); + private ISelect QueryInternal( + QueryReq req + , bool asTreeCte + ) { + var ret = Rpo + .Select.WhereDynamicFilter(req.DynamicFilter) + .WhereDynamic(req.Filter) + .WhereIf( + req.Keywords?.Length > 0, a => a.Id == req.Keywords.Int64Try(0) || a.Name.Contains(req.Keywords) || a.Summary.Contains(req.Keywords) + ); if (asTreeCte) { ret = ret.AsTreeCte(); } diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DevService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DevService.cs index fbb7fc98..581e7bef 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DevService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DevService.cs @@ -10,17 +10,15 @@ public sealed class DevService(IApiService apiService) : ServiceBase { private const string _REPLACE_TO_EMPTY = "//~"; - private static readonly string _clientProjectPath = Path.Combine( // - Environment.CurrentDirectory, "../../frontend/admin"); + private static readonly string _clientProjectPath = Path.Combine(Environment.CurrentDirectory, "../../frontend/admin"); - private static readonly Regex _regex = new(@"\.(\w)"); + private static readonly Regex _regex = new(@"\.(\w)"); private static readonly Regex _regex2 = new("([a-zA-Z]+):"); private static readonly Regex _regex3 = new(@"`\d+"); private static readonly Regex _regex4 = new(@"^.+?[/\\]dist[/\\]"); /// - public async Task GenerateCsCodeAsync(GenerateCsCodeReq req) - { + public async Task GenerateCsCodeAsync(GenerateCsCodeReq req) { req.ThrowIfInvalid(); // 生成 dbMaps @@ -49,12 +47,12 @@ public sealed class DevService(IApiService apiService) : ServiceBase } /// - public async Task GenerateIconCodeAsync(GenerateIconCodeReq req) - { + public async Task GenerateIconCodeAsync(GenerateIconCodeReq req) { req.ThrowIfInvalid(); var tplSvg = await File.ReadAllTextAsync(Path.Combine(_clientProjectPath, "src", "assets", "icon", "tpl", "svg.vue")).ConfigureAwait(false); - var tplExport = await File.ReadAllTextAsync(Path.Combine(_clientProjectPath, "src", "assets", "icon", "tpl", "export.js")) - .ConfigureAwait(false); + var tplExport = await File + .ReadAllTextAsync(Path.Combine(_clientProjectPath, "src", "assets", "icon", "tpl", "export.js")) + .ConfigureAwait(false); var vueContent = tplSvg.Replace("$svgCode$", req.SvgCode).Replace(_REPLACE_TO_EMPTY, string.Empty); @@ -68,12 +66,14 @@ public sealed class DevService(IApiService apiService) : ServiceBase var indexJsFile = Path.Combine(dir, "index.js"); - await File.AppendAllTextAsync( - indexJsFile, Environment.NewLine + tplExport.Replace("$iconName$", req.IconName).Replace(_REPLACE_TO_EMPTY, string.Empty)) - .ConfigureAwait(false); + await File + .AppendAllTextAsync( + indexJsFile, Environment.NewLine + tplExport.Replace("$iconName$", req.IconName).Replace(_REPLACE_TO_EMPTY, string.Empty) + ) + .ConfigureAwait(false); // 修改icon-select.js - var iconSelectFile = Path.Combine(_clientProjectPath, "src", "config", "icon-select.js"); + var iconSelectFile = Path.Combine(_clientProjectPath, "src", "config", "icon-select.js"); var iconSelectContent = await File.ReadAllTextAsync(iconSelectFile).ConfigureAwait(false); iconSelectContent = iconSelectContent.Replace("export default", "exportDefault:").Replace("'", "\""); iconSelectContent = _regex2.Replace(iconSelectContent, "\"$1\":"); @@ -86,8 +86,7 @@ public sealed class DevService(IApiService apiService) : ServiceBase } /// - public async Task GenerateJsCodeAsync() - { + public async Task GenerateJsCodeAsync() { // 模板文件 var tplOuter = await File.ReadAllTextAsync(Path.Combine(_clientProjectPath, "src", "api", "tpl", "outer.js")).ConfigureAwait(false); var tplInner = await File.ReadAllTextAsync(Path.Combine(_clientProjectPath, "src", "api", "tpl", "inner.js")).ConfigureAwait(false); @@ -100,71 +99,78 @@ public sealed class DevService(IApiService apiService) : ServiceBase var file = Path.Combine(dir, $"{item.Name.Replace(".", string.Empty)}.js"); - var content = tplOuter.Replace("$controllerDesc$", item.Summary) - .Replace("$controllerPath$", item.Id) - .Replace( // - "$inner$", string.Join(Environment.NewLine + Environment.NewLine, Select(item))) - .Replace(_REPLACE_TO_EMPTY, string.Empty); + var content = tplOuter + .Replace("$controllerDesc$", item.Summary) + .Replace("$controllerPath$", item.Id) + .Replace("$inner$", string.Join(Environment.NewLine + Environment.NewLine, Select(item))) + .Replace(_REPLACE_TO_EMPTY, string.Empty); await File.WriteAllTextAsync(file, content).ConfigureAwait(false); } // ReSharper disable once SeparateLocalFunctionsWithJumpStatement - IEnumerable Select(QueryApiRsp item) - { - return item.Children.Select(x => tplInner.Replace("$actionDesc$", x.Summary) - .Replace( // - "$actionName$", _regex.Replace(x.Name, y => y.Groups[1].Value.ToUpperInvariant())) - .Replace("$actionPath$", x.Id) - .Replace( // - "$actionMethod$", x.Method?.ToLowerInvariant()) - .Replace(_REPLACE_TO_EMPTY, string.Empty)); // + IEnumerable Select(QueryApiRsp item) { + return item.Children.Select(x => tplInner + .Replace("$actionDesc$", x.Summary) + .Replace("$actionName$", _regex.Replace(x.Name, y => y.Groups[1].Value.ToUpperInvariant())) + .Replace("$actionPath$", x.Id) + .Replace("$actionMethod$", x.Method?.ToLowerInvariant()) + .Replace(_REPLACE_TO_EMPTY, string.Empty) + ); } } /// - public Task>> GetDomainProjectsAsync() - { - return Task.FromResult(Directory.EnumerateFiles("../", "*.Domain.csproj", SearchOption.AllDirectories) - .Select(x => new Tuple(Path.GetFileName(x), Path.GetFullPath(x)))); + public Task>> GetDomainProjectsAsync() { + return Task.FromResult( + Directory + .EnumerateFiles("../", "*.Domain.csproj", SearchOption.AllDirectories) + .Select(x => new Tuple(Path.GetFileName(x), Path.GetFullPath(x))) + ); } /// - public IEnumerable GetDotnetDataTypes(GetDotnetDataTypesReq req) - { - return AppDomain.CurrentDomain.GetAssemblies() - .SelectMany(x => x.ExportedTypes.Select(y => _regex3.Replace(y.Name, string.Empty))) - .Distinct() - .Where(x => x.StartsWith(req.StartWith, true, CultureInfo.InvariantCulture)) - .Order() - .Take(Numbers.MAX_LIMIT_QUERY_PAGE_SIZE); + public IEnumerable GetDotnetDataTypes(GetDotnetDataTypesReq req) { + return AppDomain + .CurrentDomain.GetAssemblies() + .SelectMany(x => x.ExportedTypes.Select(y => _regex3.Replace(y.Name, string.Empty))) + .Distinct() + .Where(x => x.StartsWith(req.StartWith, true, CultureInfo.InvariantCulture)) + .Order() + .Take(Numbers.MAX_LIMIT_QUERY_PAGE_SIZE); } /// - public IEnumerable> GetEntityBaseClasses() - { - return typeof(EntityBase<>).Assembly.GetExportedTypes() - .Where(x => x.IsAbstract && x.IsClass && x.Name.EndsWith("Entity", StringComparison.InvariantCulture)) - .Select(x => new Tuple(x.Name, x.FullName)); + public IEnumerable> GetEntityBaseClasses() { + return typeof(EntityBase<>) + .Assembly.GetExportedTypes() + .Where(x => x.IsAbstract && x.IsClass && x.Name.EndsWith("Entity", StringComparison.InvariantCulture)) + .Select(x => new Tuple(x.Name, x.FullName)); } /// - public IEnumerable> GetFieldInterfaces() - { - return typeof(IFieldEnabled).Assembly.GetExportedTypes() - .Where(x => x.IsInterface && x.Name.StartsWith("IField", StringComparison.InvariantCulture)) - .Select(x => new Tuple(x.Name, x.FullName)); + public IEnumerable> GetFieldInterfaces() { + return typeof(IFieldEnabled) + .Assembly.GetExportedTypes() + .Where(x => x.IsInterface && x.Name.StartsWith("IField", StringComparison.InvariantCulture)) + .Select(x => new Tuple(x.Name, x.FullName)); } - private static async Task GenerateAppIServiceFileAsync(GenerateCsCodeReq req, string project, string prefix) - { - var templatePath = Path.Combine( // + private static async Task GenerateAppIServiceFileAsync( + GenerateCsCodeReq req + , string project + , string prefix + ) { + var templatePath = Path.Combine( _regex4.Match(Environment.ProcessPath!).Value - , "../src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/Dependency/ICodeTemplateService.cs"); + , "../src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/Dependency/ICodeTemplateService.cs" + ); var templateContent = await File.ReadAllTextAsync(templatePath).ConfigureAwait(false); - var appProject = project.Replace(".Domain", ".Application"); - var dir = Path.Combine(templatePath, prefix == "Sys" ? "../../../../../NetAdmin.SysComponent.Application" : $"../../../../../../{appProject}" - , "Services", prefix, "Dependency"); + var appProject = project.Replace(".Domain", ".Application"); + var dir = Path.Combine( + templatePath, prefix == "Sys" ? "../../../../../NetAdmin.SysComponent.Application" : $"../../../../../../{appProject}", "Services", prefix + , "Dependency" + ); _ = Directory.CreateDirectory(dir); if (prefix != "Sys") { @@ -173,9 +179,11 @@ public sealed class DevService(IApiService apiService) : ServiceBase using {appProject}.Modules.{prefix}; - """ + templateContent; - templateContent = templateContent.Replace( // - "NetAdmin.SysComponent.Application.Services.Sys.Dependency", $"{appProject}.Services.{prefix}.Dependency"); + """ + + templateContent; + templateContent = templateContent.Replace( + "NetAdmin.SysComponent.Application.Services.Sys.Dependency", $"{appProject}.Services.{prefix}.Dependency" + ); } templateContent = templateContent.Replace("CodeTemplate", req.EntityName).Replace("代码模板", req.Summary); @@ -183,52 +191,65 @@ public sealed class DevService(IApiService apiService) : ServiceBase await WriteCsCodeAsync(Path.Combine(dir, $"I{req.EntityName}Service.cs"), templateContent).ConfigureAwait(false); } - private static async Task GenerateAppModuleFileAsync(GenerateCsCodeReq req, string project, string prefix) - { - var templatePath = Path.Combine( // + private static async Task GenerateAppModuleFileAsync( + GenerateCsCodeReq req + , string project + , string prefix + ) { + var templatePath = Path.Combine( _regex4.Match(Environment.ProcessPath!).Value - , "../src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ICodeTemplateModule.cs"); + , "../src/backend/NetAdmin/NetAdmin.SysComponent.Application/Modules/Sys/ICodeTemplateModule.cs" + ); var templateContent = await File.ReadAllTextAsync(templatePath).ConfigureAwait(false); - var appProject = project.Replace(".Domain", ".Application"); - var dir = Path.Combine(templatePath, prefix == "Sys" ? "../../../../NetAdmin.SysComponent.Application" : $"../../../../../{appProject}" - , "Modules", prefix); + var appProject = project.Replace(".Domain", ".Application"); + var dir = Path.Combine( + templatePath, prefix == "Sys" ? "../../../../NetAdmin.SysComponent.Application" : $"../../../../../{appProject}", "Modules", prefix + ); _ = Directory.CreateDirectory(dir); if (prefix != "Sys") { templateContent = """ using NetAdmin.Application.Modules; using NetAdmin.Domain.Dto.Dependency; - """ + templateContent; - templateContent = templateContent.Replace("NetAdmin.SysComponent.Application.Modules.Sys", $"{appProject}.Modules.{prefix}") - .Replace("NetAdmin.Domain.Dto.Sys", $"{project}.Dto.{prefix}"); + """ + + templateContent; + templateContent = templateContent + .Replace("NetAdmin.SysComponent.Application.Modules.Sys", $"{appProject}.Modules.{prefix}") + .Replace("NetAdmin.Domain.Dto.Sys", $"{project}.Dto.{prefix}"); } templateContent = templateContent.Replace("CodeTemplate", req.EntityName).Replace("代码模板", req.Summary); if (req.Interfaces.Any(x => x == nameof(IFieldEnabled))) { - templateContent = templateContent[..^1] + $$""" + templateContent = templateContent[..^1] + + $$""" - { - /// - /// 设置{{req.Summary}}启用状态 - /// - Task SetEnabledAsync(Set{{req.EntityName}}EnabledReq req); - } - """; + { + /// + /// 设置{{req.Summary}}启用状态 + /// + Task SetEnabledAsync(Set{{req.EntityName}}EnabledReq req); + } + """; } await WriteCsCodeAsync(Path.Combine(dir, $"I{req.EntityName}Module.cs"), templateContent).ConfigureAwait(false); } - private static async Task GenerateAppServiceFileAsync(GenerateCsCodeReq req, string project, string prefix) - { - var templatePath = Path.Combine( // + private static async Task GenerateAppServiceFileAsync( + GenerateCsCodeReq req + , string project + , string prefix + ) { + var templatePath = Path.Combine( _regex4.Match(Environment.ProcessPath!).Value - , "../src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/CodeTemplateService.cs"); + , "../src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/CodeTemplateService.cs" + ); var templateContent = await File.ReadAllTextAsync(templatePath).ConfigureAwait(false); - var appProject = project.Replace(".Domain", ".Application"); - var dir = Path.Combine(templatePath, prefix == "Sys" ? "../../../../NetAdmin.SysComponent.Application" : $"../../../../../{appProject}" - , "Services", prefix); + var appProject = project.Replace(".Domain", ".Application"); + var dir = Path.Combine( + templatePath, prefix == "Sys" ? "../../../../NetAdmin.SysComponent.Application" : $"../../../../../{appProject}", "Services", prefix + ); _ = Directory.CreateDirectory(dir); if (prefix != "Sys") { @@ -239,34 +260,41 @@ public sealed class DevService(IApiService apiService) : ServiceBase using {appProject}.Services.{prefix}.Dependency; using {project}.DbMaps.{prefix}; - """ + templateContent; + """ + + templateContent; - templateContent = templateContent.Replace("NetAdmin.SysComponent.Application.Services.Sys", $"{appProject}.Services.{prefix}") - .Replace("NetAdmin.Domain.Dto.Sys", $"{project}.Dto.{prefix}"); + templateContent = templateContent + .Replace("NetAdmin.SysComponent.Application.Services.Sys", $"{appProject}.Services.{prefix}") + .Replace("NetAdmin.Domain.Dto.Sys", $"{project}.Dto.{prefix}"); } templateContent = templateContent.Replace("CodeTemplate", req.EntityName).Replace("代码模板", req.Summary).Replace("Sys_", $"{prefix}_"); if (req.Interfaces.Contains(nameof(IFieldEnabled))) { - templateContent = templateContent[..^1] + $$""" + templateContent = templateContent[..^1] + + $$""" - /// - public Task SetEnabledAsync(Set{{req.EntityName}}EnabledReq req) - { - req.ThrowIfInvalid(); - return UpdateAsync(req, [nameof(req.Enabled)]); - } - } - """; + /// + public Task SetEnabledAsync(Set{{req.EntityName}}EnabledReq req) + { + req.ThrowIfInvalid(); + return UpdateAsync(req, [nameof(req.Enabled)]); + } + } + """; } await WriteCsCodeAsync(Path.Combine(dir, $"{req.EntityName}Service.cs"), templateContent).ConfigureAwait(false); } - private static async Task GenerateCacheFileAsync(GenerateCsCodeReq req, string project, string prefix) - { - var templatePath = Path.Combine( // - _regex4.Match(Environment.ProcessPath!).Value, "../src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/CodeTemplateCache.cs"); + private static async Task GenerateCacheFileAsync( + GenerateCsCodeReq req + , string project + , string prefix + ) { + var templatePath = Path.Combine( + _regex4.Match(Environment.ProcessPath!).Value, "../src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/CodeTemplateCache.cs" + ); var templateContent = await File.ReadAllTextAsync(templatePath).ConfigureAwait(false); var cacheProject = project.Replace(".Domain", ".Cache"); var appProject = project.Replace(".Domain", ".Application"); @@ -280,30 +308,36 @@ public sealed class DevService(IApiService apiService) : ServiceBase using NetAdmin.Domain.Dto.Dependency; using {cacheProject}.{prefix}.Dependency; - """ + templateContent; - templateContent = templateContent.Replace("NetAdmin.SysComponent.Cache.Sys", $"{cacheProject}.{prefix}") - .Replace("NetAdmin.Domain.Dto.Sys", $"{project}.Dto.{prefix}"); + """ + + templateContent; + templateContent = templateContent + .Replace("NetAdmin.SysComponent.Cache.Sys", $"{cacheProject}.{prefix}") + .Replace("NetAdmin.Domain.Dto.Sys", $"{project}.Dto.{prefix}"); } templateContent = templateContent.Replace("CodeTemplate", req.EntityName).Replace("代码模板", req.Summary); if (req.Interfaces.Contains(nameof(IFieldEnabled))) { - templateContent = templateContent[..^1] + $$""" + templateContent = templateContent[..^1] + + $$""" - /// - public Task SetEnabledAsync(Set{{req.EntityName}}EnabledReq req) - { - return Service.SetEnabledAsync(req); - } - } - """; + /// + public Task SetEnabledAsync(Set{{req.EntityName}}EnabledReq req) + { + return Service.SetEnabledAsync(req); + } + } + """; } await WriteCsCodeAsync(Path.Combine(dir, $"{req.EntityName}Cache.cs"), templateContent).ConfigureAwait(false); } - private static Task GenerateDomainCreateReqFileAsync(GenerateCsCodeReq req, string project, string prefix) - { + private static Task GenerateDomainCreateReqFileAsync( + GenerateCsCodeReq req + , string project + , string prefix + ) { var sb = new StringBuilder(); _ = sb.AppendLine(CultureInfo.InvariantCulture, $"using {project}.DbMaps.{prefix};"); if (!req.Interfaces.NullOrEmpty()) { @@ -313,53 +347,63 @@ public sealed class DevService(IApiService apiService) : ServiceBase _ = sb.AppendLine(); _ = sb.AppendLine(CultureInfo.InvariantCulture, $"namespace {project}.Dto.{prefix}.{req.EntityName};"); _ = sb.AppendLine(); - _ = sb.AppendLine(CultureInfo.InvariantCulture, $""" - /// - /// 请求:创建{req.Summary} - /// - """); + _ = sb.AppendLine( + CultureInfo.InvariantCulture, $""" + /// + /// 请求:创建{req.Summary} + /// + """ + ); _ = sb.AppendLine(CultureInfo.InvariantCulture, $"public record Create{req.EntityName}Req : {prefix}_{req.EntityName}"); _ = sb.Append('{'); if (req.Interfaces?.Contains(nameof(IFieldEnabled)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - public override bool Enabled { get; init; } = true; - """); + /// + public override bool Enabled { get; init; } = true; + """ + ); } if (req.BaseClass != nameof(SimpleEntity) && req.FieldList.Single(x => x.IsPrimary).Type == "string") { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - [Required] - public override string Id { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + [Required] + public override string Id { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldSort)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - [JsonIgnore(Condition = JsonIgnoreCondition.Never)] - public override long Sort { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.Never)] + public override long Sort { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldSummary)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public override string Summary { get; set; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public override string Summary { get; set; } + """ + ); } foreach (var field in req.FieldList) { - var condition = field.IsStruct ? "Never" : "WhenWritingNull"; - var nul = field.IsStruct && field.IsNullable ? "?" : null; - var isEnum = S().GetEnums().FirstOrDefault(x => x.Key == field.Type); + var condition = field.IsStruct ? "Never" : "WhenWritingNull"; + var nul = field.IsStruct && field.IsNullable ? "?" : null; + var isEnum = S().GetEnums().FirstOrDefault(x => x.Key == field.Type); string enumConstraint = null; if (!isEnum.Key.NullOrEmpty()) { enumConstraint = $""" @@ -368,12 +412,14 @@ public sealed class DevService(IApiService apiService) : ServiceBase """; } - _ = sb.AppendLine(CultureInfo.InvariantCulture, $$""" + _ = sb.AppendLine( + CultureInfo.InvariantCulture, $$""" - /// - [JsonIgnore(Condition = JsonIgnoreCondition.{{condition}})]{{enumConstraint}} - public override {{field.Type}}{{nul}} {{field.Name}} { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.{{condition}})]{{enumConstraint}} + public override {{field.Type}}{{nul}} {{field.Name}} { get; init; } + """ + ); } _ = sb.Append('}'); @@ -383,8 +429,11 @@ public sealed class DevService(IApiService apiService) : ServiceBase return WriteCsCodeAsync(Path.Combine(outPath, $"Create{req.EntityName}Req.cs"), sb.ToString()); } - private static Task GenerateDomainEditReqFileAsync(GenerateCsCodeReq req, string project, string prefix) - { + private static Task GenerateDomainEditReqFileAsync( + GenerateCsCodeReq req + , string project + , string prefix + ) { var sb = new StringBuilder(); if (!req.Interfaces.NullOrEmpty()) { _ = sb.AppendLine("using NetAdmin.Domain.DbMaps.Dependency.Fields;"); @@ -393,22 +442,27 @@ public sealed class DevService(IApiService apiService) : ServiceBase _ = sb.AppendLine(); _ = sb.AppendLine(CultureInfo.InvariantCulture, $"namespace {project}.Dto.{prefix}.{req.EntityName};"); _ = sb.AppendLine(); - _ = sb.AppendLine(CultureInfo.InvariantCulture, $""" - /// - /// 请求:编辑{req.Summary} - /// - """); + _ = sb.AppendLine( + CultureInfo.InvariantCulture, $""" + /// + /// 请求:编辑{req.Summary} + /// + """ + ); _ = sb.AppendLine(CultureInfo.InvariantCulture, $"public sealed record Edit{req.EntityName}Req : Create{req.EntityName}Req"); _ = sb.Append('{'); - if (req.BaseClass == nameof(VersionEntity) || req.BaseClass == nameof(LiteVersionEntity) || - req.Interfaces?.Contains(nameof(IFieldVersion)) == true) { - _ = sb.AppendLine(""" + if (req.BaseClass == nameof(VersionEntity) + || req.BaseClass == nameof(LiteVersionEntity) + || req.Interfaces?.Contains(nameof(IFieldVersion)) == true) { + _ = sb.AppendLine( + """ - /// - [JsonIgnore(Condition = JsonIgnoreCondition.Never)] - public override long Version { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.Never)] + public override long Version { get; init; } + """ + ); } _ = sb.Append('}'); @@ -418,13 +472,16 @@ public sealed class DevService(IApiService apiService) : ServiceBase return WriteCsCodeAsync(Path.Combine(outPath, $"Edit{req.EntityName}Req.cs"), sb.ToString()); } - private static Task GenerateDomainEntityFileAsync(GenerateCsCodeReq req, out string project, out string prefix) - { + private static Task GenerateDomainEntityFileAsync( + GenerateCsCodeReq req + , out string project + , out string prefix + ) { project = $"{Path.GetFileNameWithoutExtension(req.Project)}"; - prefix = project == "NetAdmin.Domain" ? "Sys" : project[(project.IndexOf('.') + 1)..(project.IndexOf('.') + 4)]; - var ns = project + $".DbMaps.{prefix}"; + prefix = project == "NetAdmin.Domain" ? "Sys" : project[(project.IndexOf('.') + 1)..(project.IndexOf('.') + 4)]; + var ns = project + $".DbMaps.{prefix}"; var className = $"{prefix}_{req.EntityName}"; - var sb = new StringBuilder(); + var sb = new StringBuilder(); _ = sb.AppendLine("using NetAdmin.Domain.DbMaps.Dependency;"); _ = sb.AppendLine("using NetAdmin.Domain.Attributes;"); @@ -439,13 +496,14 @@ public sealed class DevService(IApiService apiService) : ServiceBase _ = sb.Append(CultureInfo.InvariantCulture, $"namespace {ns};"); _ = sb.AppendLine(); _ = sb.AppendLine(); - _ = sb.AppendLine(CultureInfo.InvariantCulture, $""" - /// - /// {req.Summary}表 - /// - """); - _ = sb.Append( // - CultureInfo.InvariantCulture, $"[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof({className}))]"); + _ = sb.AppendLine( + CultureInfo.InvariantCulture, $""" + /// + /// {req.Summary}表 + /// + """ + ); + _ = sb.Append(CultureInfo.InvariantCulture, $"[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof({className}))]"); _ = sb.AppendLine(); _ = sb.Append(CultureInfo.InvariantCulture, $"public record {className} : {req.BaseClass}"); @@ -463,224 +521,250 @@ public sealed class DevService(IApiService apiService) : ServiceBase _ = sb.Append('{'); if (req.Interfaces?.Contains(nameof(IFieldEnabled)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - /// 是否启用 - /// - /// true - [Column] - [CsvIgnore] - [JsonIgnore] - public virtual bool Enabled { get; init; } - """); + /// + /// 是否启用 + /// + /// true + [Column] + [CsvIgnore] + [JsonIgnore] + public virtual bool Enabled { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldCreatedTime)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - /// 创建时间 - /// - /// 2025-07-03 17:56:44 - [Column(ServerTime = DateTimeKind.Local, CanUpdate = false, Position = -1)] - [CsvIgnore] - [JsonIgnore] - public virtual DateTime CreatedTime { get; init; } - """); + /// + /// 创建时间 + /// + /// 2025-07-03 17:56:44 + [Column(ServerTime = DateTimeKind.Local, CanUpdate = false, Position = -1)] + [CsvIgnore] + [JsonIgnore] + public virtual DateTime CreatedTime { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldModifiedTime)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - /// 修改时间 - /// - /// 2025-07-03 17:56:44 - [Column(ServerTime = DateTimeKind.Local, CanInsert = false, Position = -1)] - [CsvIgnore] - [JsonIgnore] - public virtual DateTime? ModifiedTime { get; init; } - """); + /// + /// 修改时间 + /// + /// 2025-07-03 17:56:44 + [Column(ServerTime = DateTimeKind.Local, CanInsert = false, Position = -1)] + [CsvIgnore] + [JsonIgnore] + public virtual DateTime? ModifiedTime { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldCreatedClientIp)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - /// 创建者客户端IP - /// - /// 127.0.0.1 - [Column] - [CsvIgnore] - [JsonIgnore] - public virtual int? CreatedClientIp { get; init; } - """); + /// + /// 创建者客户端IP + /// + /// 127.0.0.1 + [Column] + [CsvIgnore] + [JsonIgnore] + public virtual int? CreatedClientIp { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldModifiedClientIp)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - /// 修改者客户端IP - /// - /// 127.0.0.1 - [Column] - [CsvIgnore] - [JsonIgnore] - public virtual int? ModifiedClientIp { get; init; } - """); + /// + /// 修改者客户端IP + /// + /// 127.0.0.1 + [Column] + [CsvIgnore] + [JsonIgnore] + public virtual int? ModifiedClientIp { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldCreatedClientUserAgent)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - /// 创建者客户端用户代理 - /// - /// Mozilla/5.0 - [Column(Position = -1, DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_1022)] - [CsvIgnore] - [JsonIgnore] - public virtual string CreatedUserAgent { get; init; } - """); + /// + /// 创建者客户端用户代理 + /// + /// Mozilla/5.0 + [Column(Position = -1, DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_1022)] + [CsvIgnore] + [JsonIgnore] + public virtual string CreatedUserAgent { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldModifiedClientUserAgent)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - /// 修改者客户端用户代理 - /// - /// Mozilla/5.0 - [Column(Position = -1, DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_1022)] - [CsvIgnore] - [JsonIgnore] - public virtual string ModifiedUserAgent { get; init; } - """); + /// + /// 修改者客户端用户代理 + /// + /// Mozilla/5.0 + [Column(Position = -1, DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_1022)] + [CsvIgnore] + [JsonIgnore] + public virtual string ModifiedUserAgent { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldCreatedUser)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - /// 创建者编号 - /// - /// 370942943322181 - [Column(CanUpdate = false, Position = -1)] - [CsvIgnore] - [JsonIgnore] - public virtual long? CreatedUserId { get; init; } + /// + /// 创建者编号 + /// + /// 370942943322181 + [Column(CanUpdate = false, Position = -1)] + [CsvIgnore] + [JsonIgnore] + public virtual long? CreatedUserId { get; init; } - /// - /// 创建者用户名 - /// - /// root - [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)] - [CsvIgnore] - [JsonIgnore] - public virtual string CreatedUserName { get; init; } - """); + /// + /// 创建者用户名 + /// + /// root + [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)] + [CsvIgnore] + [JsonIgnore] + public virtual string CreatedUserName { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldModifiedUser)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - /// 修改者编号 - /// - /// 370942943322181 - [Column(CanUpdate = false, Position = -1)] - [CsvIgnore] - [JsonIgnore] - public virtual long? ModifiedUserId { get; init; } + /// + /// 修改者编号 + /// + /// 370942943322181 + [Column(CanUpdate = false, Position = -1)] + [CsvIgnore] + [JsonIgnore] + public virtual long? ModifiedUserId { get; init; } - /// - /// 修改者用户名 - /// - /// root - [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)] - [CsvIgnore] - [JsonIgnore] - public virtual string ModifiedUserName { get; init; } - """); + /// + /// 修改者用户名 + /// + /// root + [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)] + [CsvIgnore] + [JsonIgnore] + public virtual string ModifiedUserName { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldOwner)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - /// 归属用户 - /// - [CsvIgnore] - [JsonIgnore] - [Navigate(nameof(OwnerId))] - public Sys_User Owner { get; init; } + /// + /// 归属用户 + /// + [CsvIgnore] + [JsonIgnore] + [Navigate(nameof(OwnerId))] + public Sys_User Owner { get; init; } - /// - /// 归属部门编号 - /// - /// 370942943322181 - [Column] - [CsvIgnore] - [JsonIgnore] - public virtual long? OwnerDeptId { get; init; } + /// + /// 归属部门编号 + /// + /// 370942943322181 + [Column] + [CsvIgnore] + [JsonIgnore] + public virtual long? OwnerDeptId { get; init; } - /// - /// 归属用户编号 - /// - /// 370942943322181 - [Column] - [CsvIgnore] - [JsonIgnore] - public virtual long? OwnerId { get; init; } - """); + /// + /// 归属用户编号 + /// + /// 370942943322181 + [Column] + [CsvIgnore] + [JsonIgnore] + public virtual long? OwnerId { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldSort)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - /// 排序值,越大越前 - /// - /// 100 - [Column] - [CsvIgnore] - [JsonIgnore] - public virtual long Sort { get; init; } - """); + /// + /// 排序值,越大越前 + /// + /// 100 + [Column] + [CsvIgnore] + [JsonIgnore] + public virtual long Sort { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldSummary)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - /// 备注 - /// - /// 备注文字 - [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] - [CsvIgnore] - [JsonIgnore] - public virtual string Summary { get; set; } - """); + /// + /// 备注 + /// + /// 备注文字 + [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] + [CsvIgnore] + [JsonIgnore] + public virtual string Summary { get; set; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldVersion)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - /// 数据版本 - /// - /// 100 - [Column(IsVersion = true, Position = -1)] - [CsvIgnore] - [JsonIgnore] - public virtual long Version { get; init; } - """); + /// + /// 数据版本 + /// + /// 100 + [Column(IsVersion = true, Position = -1)] + [CsvIgnore] + [JsonIgnore] + public virtual long Version { get; init; } + """ + ); } foreach (var field in req.FieldList) { - var column = new StringBuilder(); + var column = new StringBuilder(); string snowflake = null; if (!field.DbType.NullOrEmpty()) { _ = column.Append(",DbType = Chars." + field.DbType); @@ -702,18 +786,20 @@ public sealed class DevService(IApiService apiService) : ServiceBase } var decoration = field.IsPrimary ? "override" : "virtual"; - var nul = field.IsStruct && field.IsNullable ? "?" : string.Empty; - _ = sb.AppendLine(CultureInfo.InvariantCulture, $$""" + var nul = field.IsStruct && field.IsNullable ? "?" : string.Empty; + _ = sb.AppendLine( + CultureInfo.InvariantCulture, $$""" - /// - /// {{field.Summary}} - /// - /// {{field.Example}} - [Column{{column}}] - [CsvIgnore] - [JsonIgnore]{{snowflake}} - public {{decoration}} {{field.Type}}{{nul}} {{field.Name}} { get; init; } - """); + /// + /// {{field.Summary}} + /// + /// {{field.Example}} + [Column{{column}}] + [CsvIgnore] + [JsonIgnore]{{snowflake}} + public {{decoration}} {{field.Type}}{{nul}} {{field.Name}} { get; init; } + """ + ); } _ = sb.Append('}'); @@ -723,8 +809,11 @@ public sealed class DevService(IApiService apiService) : ServiceBase return WriteCsCodeAsync(Path.Combine(outPath, $"{className}.cs"), sb.ToString()); } - private static Task GenerateDomainQueryReqFileAsync(GenerateCsCodeReq req, string project, string prefix) - { + private static Task GenerateDomainQueryReqFileAsync( + GenerateCsCodeReq req + , string project + , string prefix + ) { var sb = new StringBuilder(); _ = sb.AppendLine(CultureInfo.InvariantCulture, $"using {project}.DbMaps.{prefix};"); _ = sb.AppendLine("using NetAdmin.Domain.DbMaps.Dependency;"); @@ -732,23 +821,27 @@ public sealed class DevService(IApiService apiService) : ServiceBase _ = sb.AppendLine(); _ = sb.AppendLine(CultureInfo.InvariantCulture, $"namespace {project}.Dto.{prefix}.{req.EntityName};"); _ = sb.AppendLine(); - _ = sb.AppendLine(CultureInfo.InvariantCulture, $""" - /// - /// 请求:查询{req.Summary} - /// - """); + _ = sb.AppendLine( + CultureInfo.InvariantCulture, $""" + /// + /// 请求:查询{req.Summary} + /// + """ + ); _ = sb.AppendLine(CultureInfo.InvariantCulture, $"public sealed record Query{req.EntityName}Req : {prefix}_{req.EntityName}"); _ = sb.Append('{'); if (req.BaseClass != nameof(SimpleEntity)) { - var id = req.FieldList.Single(x => x.IsPrimary); + var id = req.FieldList.Single(x => x.IsPrimary); var condition = id.IsStruct ? "Never" : "WhenWritingNull"; - _ = sb.AppendLine(CultureInfo.InvariantCulture, $$""" + _ = sb.AppendLine( + CultureInfo.InvariantCulture, $$""" - /// - [JsonIgnore(Condition = JsonIgnoreCondition.{{condition}})] - public override {{id.Type}} Id { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.{{condition}})] + public override {{id.Type}} Id { get; init; } + """ + ); } _ = sb.Append('}'); @@ -758,16 +851,19 @@ public sealed class DevService(IApiService apiService) : ServiceBase return WriteCsCodeAsync(Path.Combine(outPath, $"Query{req.EntityName}Req.cs"), sb.ToString()); } - private static Task GenerateDomainQueryRspFileAsync(GenerateCsCodeReq req, string project, string prefix) - { + private static Task GenerateDomainQueryRspFileAsync( + GenerateCsCodeReq req + , string project + , string prefix + ) { var isSealed = " sealed "; - var sb = new StringBuilder(); + var sb = new StringBuilder(); _ = sb.AppendLine(CultureInfo.InvariantCulture, $"using {project}.DbMaps.{prefix};"); _ = sb.AppendLine("using NetAdmin.Domain.DbMaps.Dependency;"); if (!req.Interfaces.NullOrEmpty()) { _ = sb.AppendLine("using NetAdmin.Domain.DbMaps.Dependency.Fields;"); if (req.Interfaces.Contains(nameof(IFieldOwner))) { - _ = sb.AppendLine("using NetAdmin.Domain.Dto.Sys.User;"); + _ = sb.AppendLine("using NetAdmin.Domain.Dto.Sys.User;"); isSealed = " "; } } @@ -775,158 +871,189 @@ public sealed class DevService(IApiService apiService) : ServiceBase _ = sb.AppendLine(); _ = sb.AppendLine(CultureInfo.InvariantCulture, $"namespace {project}.Dto.{prefix}.{req.EntityName};"); _ = sb.AppendLine(); - _ = sb.AppendLine(CultureInfo.InvariantCulture, $""" - /// - /// 响应:查询{req.Summary} - /// - """); + _ = sb.AppendLine( + CultureInfo.InvariantCulture, $""" + /// + /// 响应:查询{req.Summary} + /// + """ + ); _ = sb.AppendLine(CultureInfo.InvariantCulture, $"public{isSealed}record Query{req.EntityName}Rsp : {prefix}_{req.EntityName}"); _ = sb.Append('{'); if (req.Interfaces?.Contains(nameof(IFieldEnabled)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - [JsonIgnore(Condition = JsonIgnoreCondition.Never)] - public override bool Enabled { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.Never)] + public override bool Enabled { get; init; } + """ + ); } if (req.BaseClass != nameof(SimpleEntity)) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - [JsonIgnore(Condition = JsonIgnoreCondition.Never)] - public override DateTime CreatedTime { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.Never)] + public override DateTime CreatedTime { get; init; } + """ + ); } - if ((req.BaseClass != nameof(SimpleEntity) && req.BaseClass != nameof(ImmutableEntity) && req.BaseClass != nameof(LiteImmutableEntity)) || - req.Interfaces?.Contains(nameof(IFieldModifiedTime)) == true) { - _ = sb.AppendLine(""" + if ((req.BaseClass != nameof(SimpleEntity) && req.BaseClass != nameof(ImmutableEntity) && req.BaseClass != nameof(LiteImmutableEntity)) + || req.Interfaces?.Contains(nameof(IFieldModifiedTime)) == true) { + _ = sb.AppendLine( + """ - /// - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public override DateTime? ModifiedTime { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public override DateTime? ModifiedTime { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldCreatedClientIp)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public override int? CreatedClientIp { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public override int? CreatedClientIp { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldModifiedClientIp)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public override int? ModifiedClientIp { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public override int? ModifiedClientIp { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldCreatedClientUserAgent)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public override string CreatedUserAgent { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public override string CreatedUserAgent { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldModifiedClientUserAgent)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public override string ModifiedUserAgent { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public override string ModifiedUserAgent { get; init; } + """ + ); } - if (new[] { nameof(VersionEntity), nameof(MutableEntity), nameof(ImmutableEntity) }.Contains(req.BaseClass) || - req.Interfaces?.Contains(nameof(IFieldCreatedUser)) == true) { - _ = sb.AppendLine(""" + if (new[] { nameof(VersionEntity), nameof(MutableEntity), nameof(ImmutableEntity) }.Contains(req.BaseClass) + || req.Interfaces?.Contains(nameof(IFieldCreatedUser)) == true) { + _ = sb.AppendLine( + """ - /// - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public override long? CreatedUserId { get; init; } + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public override long? CreatedUserId { get; init; } - /// - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public override string CreatedUserName { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public override string CreatedUserName { get; init; } + """ + ); } - if (new[] { nameof(VersionEntity), nameof(MutableEntity) }.Contains(req.BaseClass) || - req.Interfaces?.Contains(nameof(IFieldModifiedUser)) == true) { - _ = sb.AppendLine(""" + if (new[] { nameof(VersionEntity), nameof(MutableEntity) }.Contains(req.BaseClass) + || req.Interfaces?.Contains(nameof(IFieldModifiedUser)) == true) { + _ = sb.AppendLine( + """ - /// - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public override long? ModifiedUserId { get; init; } + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public override long? ModifiedUserId { get; init; } - /// - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public override string ModifiedUserName { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public override string ModifiedUserName { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldOwner)) == true) { - _ = sb.AppendLine(CultureInfo.InvariantCulture, $$""" + _ = sb.AppendLine( + CultureInfo.InvariantCulture, $$""" - /// - public new virtual QueryUserRsp Owner { get; init; } + /// + public new virtual QueryUserRsp Owner { get; init; } - /// - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public override long? OwnerDeptId { get; init; } + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public override long? OwnerDeptId { get; init; } - /// - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public override long? OwnerId { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public override long? OwnerId { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldSort)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - [JsonIgnore(Condition = JsonIgnoreCondition.Never)] - public override long Sort { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.Never)] + public override long Sort { get; init; } + """ + ); } if (req.Interfaces?.Contains(nameof(IFieldSummary)) == true) { - _ = sb.AppendLine(""" + _ = sb.AppendLine( + """ - /// - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public override string Summary { get; set; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public override string Summary { get; set; } + """ + ); } - if (req.BaseClass == nameof(VersionEntity) || req.BaseClass == nameof(LiteVersionEntity) || - req.Interfaces?.Contains(nameof(IFieldVersion)) == true) { - _ = sb.AppendLine(""" + if (req.BaseClass == nameof(VersionEntity) + || req.BaseClass == nameof(LiteVersionEntity) + || req.Interfaces?.Contains(nameof(IFieldVersion)) == true) { + _ = sb.AppendLine( + """ - /// - [JsonIgnore(Condition = JsonIgnoreCondition.Never)] - public override long Version { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.Never)] + public override long Version { get; init; } + """ + ); } foreach (var field in req.FieldList) { - var nul = field.IsStruct && field.IsNullable ? "?" : string.Empty; + var nul = field.IsStruct && field.IsNullable ? "?" : string.Empty; var condition = field.IsStruct ? "Never" : "WhenWritingNull"; - _ = sb.AppendLine(CultureInfo.InvariantCulture, $$""" + _ = sb.AppendLine( + CultureInfo.InvariantCulture, $$""" - /// - [JsonIgnore(Condition = JsonIgnoreCondition.{{condition}})] - public override {{field.Type}}{{nul}} {{field.Name}} { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.{{condition}})] + public override {{field.Type}}{{nul}} {{field.Name}} { get; init; } + """ + ); } _ = sb.Append('}'); @@ -936,8 +1063,11 @@ public sealed class DevService(IApiService apiService) : ServiceBase return WriteCsCodeAsync(Path.Combine(outPath, $"Query{req.EntityName}Rsp.cs"), sb.ToString()); } - private static Task GenerateDomainSetEnabledReqFileAsync(GenerateCsCodeReq req, string project, string prefix) - { + private static Task GenerateDomainSetEnabledReqFileAsync( + GenerateCsCodeReq req + , string project + , string prefix + ) { var sb = new StringBuilder(); if (!req.Interfaces.NullOrEmpty()) { _ = sb.AppendLine("using NetAdmin.Domain.DbMaps.Dependency.Fields;"); @@ -950,33 +1080,40 @@ public sealed class DevService(IApiService apiService) : ServiceBase _ = sb.AppendLine(); _ = sb.AppendLine(CultureInfo.InvariantCulture, $"namespace {project}.Dto.{prefix}.{req.EntityName};"); _ = sb.AppendLine(); - _ = sb.AppendLine(CultureInfo.InvariantCulture, $""" - /// - /// 请求:设置{req.Summary}启用状态 - /// - """); + _ = sb.AppendLine( + CultureInfo.InvariantCulture, $""" + /// + /// 请求:设置{req.Summary}启用状态 + /// + """ + ); _ = sb.AppendLine(CultureInfo.InvariantCulture, $"public sealed record Set{req.EntityName}EnabledReq : {prefix}_{req.EntityName}"); _ = sb.Append('{'); - _ = sb.AppendLine(CultureInfo.InvariantCulture, $$""" + _ = sb.AppendLine( + CultureInfo.InvariantCulture, $$""" - /// - [JsonIgnore(Condition = JsonIgnoreCondition.Never)] - public override bool Enabled { get; init; } + /// + [JsonIgnore(Condition = JsonIgnoreCondition.Never)] + public override bool Enabled { get; init; } - /// - [JsonIgnore(Condition = JsonIgnoreCondition.Never)] - public override long Id { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.Never)] + public override long Id { get; init; } + """ + ); - if (req.BaseClass == nameof(VersionEntity) || req.BaseClass == nameof(LiteVersionEntity) || - req.Interfaces?.Contains(nameof(IFieldVersion)) == true) { - _ = sb.AppendLine(""" + if (req.BaseClass == nameof(VersionEntity) + || req.BaseClass == nameof(LiteVersionEntity) + || req.Interfaces?.Contains(nameof(IFieldVersion)) == true) { + _ = sb.AppendLine( + """ - /// - [JsonIgnore(Condition = JsonIgnoreCondition.Never)] - public override long Version { get; init; } - """); + /// + [JsonIgnore(Condition = JsonIgnoreCondition.Never)] + public override long Version { get; init; } + """ + ); } _ = sb.Append('}'); @@ -986,18 +1123,22 @@ public sealed class DevService(IApiService apiService) : ServiceBase return WriteCsCodeAsync(Path.Combine(outPath, $"Set{req.EntityName}EnabledReq.cs"), sb.ToString()); } - private static async Task GenerateHostControllerFileAsync(GenerateCsCodeReq req, string project, string prefix) - { - var templatePath = Path.Combine( // + private static async Task GenerateHostControllerFileAsync( + GenerateCsCodeReq req + , string project + , string prefix + ) { + var templatePath = Path.Combine( _regex4.Match(Environment.ProcessPath!).Value - , "../src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/CodeTemplateController.cs"); + , "../src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/CodeTemplateController.cs" + ); var templateContent = await File.ReadAllTextAsync(templatePath).ConfigureAwait(false); - var hostProject = project.Replace(".Domain", ".Host"); - var cacheProject = project.Replace(".Domain", ".Cache"); - var appProject = project.Replace(".Domain", ".Application"); + var hostProject = project.Replace(".Domain", ".Host"); + var cacheProject = project.Replace(".Domain", ".Cache"); + var appProject = project.Replace(".Domain", ".Application"); var dir = Path.Combine( - templatePath, prefix == "Sys" ? "../../../../NetAdmin.SysComponent.Host/Controllers" : $"../../../../../{hostProject}/Controllers" - , prefix); + templatePath, prefix == "Sys" ? "../../../../NetAdmin.SysComponent.Host/Controllers" : $"../../../../../{hostProject}/Controllers", prefix + ); _ = Directory.CreateDirectory(dir); if (prefix != "Sys") { @@ -1009,40 +1150,47 @@ public sealed class DevService(IApiService apiService) : ServiceBase using {appProject}.Modules.{prefix}; using {cacheProject}.{prefix}.Dependency; - """ + templateContent; - templateContent = templateContent.Replace("NetAdmin.SysComponent.Host.Controllers.Sys", $"{hostProject}.Controllers.{prefix}") - .Replace("NetAdmin.Domain.Dto.Sys", $"{project}.Dto.{prefix}") - .Replace("nameof(Sys)", $"nameof({prefix})"); + """ + + templateContent; + templateContent = templateContent + .Replace("NetAdmin.SysComponent.Host.Controllers.Sys", $"{hostProject}.Controllers.{prefix}") + .Replace("NetAdmin.Domain.Dto.Sys", $"{project}.Dto.{prefix}") + .Replace("nameof(Sys)", $"nameof({prefix})"); } templateContent = templateContent.Replace("CodeTemplate", req.EntityName).Replace("代码模板", req.Summary); if (req.Interfaces.Contains(nameof(IFieldEnabled))) { - templateContent = templateContent[..^1] + $$""" + templateContent = templateContent[..^1] + + $$""" - /// - /// 设置{{req.Summary}}启用状态 - /// - public Task SetEnabledAsync(Set{{req.EntityName}}EnabledReq req) - { - return Cache.SetEnabledAsync(req); - } - } - """; + /// + /// 设置{{req.Summary}}启用状态 + /// + public Task SetEnabledAsync(Set{{req.EntityName}}EnabledReq req) + { + return Cache.SetEnabledAsync(req); + } + } + """; } await WriteCsCodeAsync(Path.Combine(dir, $"{req.EntityName}Controller.cs"), templateContent).ConfigureAwait(false); } - private static async Task GenerateICacheFileAsync(GenerateCsCodeReq req, string project, string prefix) - { - var templatePath = Path.Combine( // - _regex4.Match(Environment.ProcessPath!).Value - , "../src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/Dependency/ICodeTemplateCache.cs"); + private static async Task GenerateICacheFileAsync( + GenerateCsCodeReq req + , string project + , string prefix + ) { + var templatePath = Path.Combine( + _regex4.Match(Environment.ProcessPath!).Value, "../src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/Dependency/ICodeTemplateCache.cs" + ); var templateContent = await File.ReadAllTextAsync(templatePath).ConfigureAwait(false); - var cacheProject = project.Replace(".Domain", ".Cache"); - var appProject = project.Replace(".Domain", ".Application"); - var dir = Path.Combine(templatePath, prefix == "Sys" ? "../../../../NetAdmin.SysComponent.Cache" : $"../../../../../{cacheProject}", prefix - , "Dependency"); + var cacheProject = project.Replace(".Domain", ".Cache"); + var appProject = project.Replace(".Domain", ".Application"); + var dir = Path.Combine( + templatePath, prefix == "Sys" ? "../../../../NetAdmin.SysComponent.Cache" : $"../../../../../{cacheProject}", prefix, "Dependency" + ); _ = Directory.CreateDirectory(dir); if (prefix != "Sys") { @@ -1052,9 +1200,9 @@ public sealed class DevService(IApiService apiService) : ServiceBase using {appProject}.Services.{prefix}.Dependency; - """ + templateContent; - templateContent = templateContent.Replace( // - "NetAdmin.SysComponent.Cache.Sys.Dependency", $"{cacheProject}.{prefix}.Dependency"); + """ + + templateContent; + templateContent = templateContent.Replace("NetAdmin.SysComponent.Cache.Sys.Dependency", $"{cacheProject}.{prefix}.Dependency"); } templateContent = templateContent.Replace("CodeTemplate", req.EntityName).Replace("代码模板", req.Summary); @@ -1062,10 +1210,12 @@ public sealed class DevService(IApiService apiService) : ServiceBase await WriteCsCodeAsync(Path.Combine(dir, $"I{req.EntityName}Cache.cs"), templateContent).ConfigureAwait(false); } - private static Task WriteCsCodeAsync(string path, string content) - { + private static Task WriteCsCodeAsync( + string path + , string content + ) { content = content.Replace("\r", string.Empty); - var sb = new StringBuilder(); + var sb = new StringBuilder(); var usings = new List(); foreach (var line in content.Split('\n')) { diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DicCatalogService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DicCatalogService.cs index f6052fa9..a9963762 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DicCatalogService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DicCatalogService.cs @@ -6,12 +6,11 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class DicCatalogService(BasicRepository rpo) // +public sealed class DicCatalogService(BasicRepository rpo) : RepositoryService(rpo), IDicCatalogService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -24,31 +23,30 @@ public sealed class DicCatalogService(BasicRepository rpo) } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary( - y => y, y => typeof(Sys_DicCatalog).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_DicCatalog).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// /// The_parent_node_does_not_exist - public async Task CreateAsync(CreateDicCatalogReq req) - { + public async Task CreateAsync(CreateDicCatalogReq req) { req.ThrowIfInvalid(); if (req.ParentId != 0 && !await Rpo.Where(a => a.Id == req.ParentId).WithNoLockNoWait().AnyAsync().ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.父节点不存在); @@ -59,8 +57,7 @@ public sealed class DicCatalogService(BasicRepository rpo) } /// - public async Task DeleteAsync(DelReq req) - { + public async Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); var ret = await Rpo.DeleteCascadeByDatabaseAsync(a => a.Id == req.Id).ConfigureAwait(false); return ret.Count; @@ -68,8 +65,7 @@ public sealed class DicCatalogService(BasicRepository rpo) /// /// The_parent_node_does_not_exist - public async Task EditAsync(EditDicCatalogReq req) - { + public async Task EditAsync(EditDicCatalogReq req) { req.ThrowIfInvalid(); if (req.ParentId != 0 && !await Rpo.Where(a => a.Id == req.ParentId).WithNoLockNoWait().AnyAsync().ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.父节点不存在); @@ -84,54 +80,49 @@ public sealed class DicCatalogService(BasicRepository rpo) } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public async Task GetAsync(QueryDicCatalogReq req) - { + public async Task GetAsync(QueryDicCatalogReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(req) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().ToTreeListAsync().ConfigureAwait(false); return ret.Adapt>(); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private ISelect QueryInternal(QueryReq req) - { - var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter) - .WhereIf(req.Filter?.Id > 0, a => a.Id == req.Filter.Id) - .WhereIf(req.Filter?.Code?.Length > 0, a => a.Code == req.Filter.Code); + private ISelect QueryInternal(QueryReq req) { + var ret = Rpo + .Select.WhereDynamicFilter(req.DynamicFilter) + .WhereIf(req.Filter?.Id > 0, a => a.Id == req.Filter.Id) + .WhereIf(req.Filter?.Code?.Length > 0, a => a.Code == req.Filter.Code); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault switch (req.Order) { diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DicContentService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DicContentService.cs index bf9745b5..0bfb4792 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DicContentService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DicContentService.cs @@ -6,12 +6,11 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class DicContentService(BasicRepository rpo) // +public sealed class DicContentService(BasicRepository rpo) : RepositoryService(rpo), IDicContentService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -24,31 +23,30 @@ public sealed class DicContentService(BasicRepository rpo) } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary( - y => y, y => typeof(Sys_DicContent).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_DicContent).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// /// Dictionary_directory_does_not_exist - public async Task CreateAsync(CreateDicContentReq req) - { + public async Task CreateAsync(CreateDicContentReq req) { req.ThrowIfInvalid(); if (!await Rpo.Orm.Select().Where(a => a.Id == req.CatalogId).WithNoLockNoWait().AnyAsync().ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.字典目录不存在); @@ -59,16 +57,14 @@ public sealed class DicContentService(BasicRepository rpo) } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); return Rpo.DeleteAsync(a => a.Id == req.Id); } /// /// Dictionary_directory_does_not_exist - public async Task EditAsync(EditDicContentReq req) - { + public async Task EditAsync(EditDicContentReq req) { req.ThrowIfInvalid(); if (!await Rpo.Orm.Select().Where(a => a.Id == req.CatalogId).WithNoLockNoWait().AnyAsync().ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.字典目录不存在); @@ -82,76 +78,70 @@ public sealed class DicContentService(BasicRepository rpo) } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); return ExportAsync(QueryInternal, req, Ln.字典内容导出); } /// - public async Task GetAsync(QueryDicContentReq req) - { + public async Task GetAsync(QueryDicContentReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(req) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public async Task> QueryByCatalogCodeAsync(string catalogCode) - { - var ret = await Rpo.Orm.Select() - .WithNoLockNoWait() - .Include(a => a.Catalog) - .Where(a => a.Catalog.Code == catalogCode) - .Where(a => a.Enabled) - .ToListAsync() - .ConfigureAwait(false); + public async Task> QueryByCatalogCodeAsync(string catalogCode) { + var ret = await Rpo + .Orm.Select() + .WithNoLockNoWait() + .Include(a => a.Catalog) + .Where(a => a.Catalog.Code == catalogCode) + .Where(a => a.Enabled) + .ToListAsync() + .ConfigureAwait(false); return ret.Adapt>(); } /// - public Task SetEnabledAsync(SetDicContentEnabledReq req) - { + public Task SetEnabledAsync(SetDicContentEnabledReq req) { req.ThrowIfInvalid(); return UpdateAsync(req, [nameof(Sys_DicContent.Enabled)]); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private ISelect QueryInternal(QueryReq req) - { - var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter) - .WhereDynamic(req.Filter) - .WhereIf( // - req.Keywords?.Length > 0 - , a => a.Key.Contains(req.Keywords) || a.Value.Contains(req.Keywords) || a.Summary.Contains(req.Keywords)); + private ISelect QueryInternal(QueryReq req) { + var ret = Rpo + .Select.WhereDynamicFilter(req.DynamicFilter) + .WhereDynamic(req.Filter) + .WhereIf( + req.Keywords?.Length > 0, a => a.Key.Contains(req.Keywords) || a.Value.Contains(req.Keywords) || a.Summary.Contains(req.Keywords) + ); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault switch (req.Order) { diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DicService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DicService.cs index d63c57f0..55e5be34 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DicService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DicService.cs @@ -4,146 +4,124 @@ using NetAdmin.Domain.Dto.Sys.Dic.Content; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class DicService(IDicCatalogService catalogService, IDicContentService contentService) // - : ServiceBase, IDicService +public sealed class DicService(IDicCatalogService catalogService, IDicContentService contentService) : ServiceBase, IDicService { /// - public Task BulkDeleteCatalogAsync(BulkReq req) - { + public Task BulkDeleteCatalogAsync(BulkReq req) { req.ThrowIfInvalid(); return catalogService.BulkDeleteAsync(req); } /// - public Task BulkDeleteContentAsync(BulkReq req) - { + public Task BulkDeleteContentAsync(BulkReq req) { req.ThrowIfInvalid(); return contentService.BulkDeleteAsync(req); } /// - public Task, int>>> ContentCountByAsync(QueryReq req) - { + public Task, int>>> ContentCountByAsync(QueryReq req) { req.ThrowIfInvalid(); return contentService.CountByAsync(req); } /// - public Task CreateCatalogAsync(CreateDicCatalogReq req) - { + public Task CreateCatalogAsync(CreateDicCatalogReq req) { req.ThrowIfInvalid(); return catalogService.CreateAsync(req); } /// - public Task CreateContentAsync(CreateDicContentReq req) - { + public Task CreateContentAsync(CreateDicContentReq req) { req.ThrowIfInvalid(); return contentService.CreateAsync(req); } /// - public Task DeleteCatalogAsync(DelReq req) - { + public Task DeleteCatalogAsync(DelReq req) { req.ThrowIfInvalid(); return catalogService.DeleteAsync(req); } /// - public Task DeleteContentAsync(DelReq req) - { + public Task DeleteContentAsync(DelReq req) { req.ThrowIfInvalid(); return contentService.DeleteAsync(req); } /// - public Task EditCatalogAsync(EditDicCatalogReq req) - { + public Task EditCatalogAsync(EditDicCatalogReq req) { req.ThrowIfInvalid(); return catalogService.EditAsync(req); } /// - public Task EditContentAsync(EditDicContentReq req) - { + public Task EditContentAsync(EditDicContentReq req) { req.ThrowIfInvalid(); return contentService.EditAsync(req); } /// - public Task ExportContentAsync(QueryReq req) - { + public Task ExportContentAsync(QueryReq req) { req.ThrowIfInvalid(); return contentService.ExportAsync(req); } /// - public Task GetCatalogAsync(QueryDicCatalogReq req) - { + public Task GetCatalogAsync(QueryDicCatalogReq req) { req.ThrowIfInvalid(); return catalogService.GetAsync(req); } /// - public Task GetContentAsync(QueryDicContentReq req) - { + public Task GetContentAsync(QueryDicContentReq req) { req.ThrowIfInvalid(); return contentService.GetAsync(req); } /// - public async Task GetDicValueAsync(GetDicValueReq req) - { + public async Task GetDicValueAsync(GetDicValueReq req) { req.ThrowIfInvalid(); - var df = new DynamicFilterInfo { - Filters = [ - new DynamicFilterInfo { - Field = nameof(QueryDicContentReq.CatalogId) - , Operator = DynamicFilterOperators.Eq - , Value = req.CatalogId - } - , new DynamicFilterInfo { - Field = nameof(QueryDicContentReq.Key) - , Operator = DynamicFilterOperators.Eq - , Value = req.Key - } - ] - }; + var df = new DynamicFilterInfo + { + Filters = + [ + new DynamicFilterInfo + { + Field = nameof(QueryDicContentReq.CatalogId), Operator = DynamicFilterOperators.Eq, Value = req.CatalogId + } + , new DynamicFilterInfo { Field = nameof(QueryDicContentReq.Key), Operator = DynamicFilterOperators.Eq, Value = req.Key } + ] + }; var queryParam = new QueryReq { Count = 1, DynamicFilter = df }; return (await QueryContentAsync(queryParam).ConfigureAwait(false)).FirstOrDefault()?.Value; } /// - public Task> PagedQueryCatalogAsync(PagedQueryReq req) - { + public Task> PagedQueryCatalogAsync(PagedQueryReq req) { req.ThrowIfInvalid(); return catalogService.PagedQueryAsync(req); } /// - public Task> PagedQueryContentAsync(PagedQueryReq req) - { + public Task> PagedQueryContentAsync(PagedQueryReq req) { req.ThrowIfInvalid(); return contentService.PagedQueryAsync(req); } /// - public Task> QueryCatalogAsync(QueryReq req) - { + public Task> QueryCatalogAsync(QueryReq req) { req.ThrowIfInvalid(); return catalogService.QueryAsync(req); } /// - public Task> QueryContentAsync(QueryReq req) - { + public Task> QueryContentAsync(QueryReq req) { req.ThrowIfInvalid(); return contentService.QueryAsync(req); } /// - public Task SetEnabledAsync(SetDicContentEnabledReq req) - { + public Task SetEnabledAsync(SetDicContentEnabledReq req) { req.ThrowIfInvalid(); return contentService.SetEnabledAsync(req); } diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DocCatalogService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DocCatalogService.cs index 416cdc00..80334f04 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DocCatalogService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DocCatalogService.cs @@ -6,12 +6,11 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class DocCatalogService(BasicRepository rpo) // +public sealed class DocCatalogService(BasicRepository rpo) : RepositoryService(rpo), IDocCatalogService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -24,31 +23,30 @@ public sealed class DocCatalogService(BasicRepository rpo) } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary( - y => y, y => typeof(Sys_DocCatalog).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_DocCatalog).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// /// The_parent_node_does_not_exist - public async Task CreateAsync(CreateDocCatalogReq req) - { + public async Task CreateAsync(CreateDocCatalogReq req) { req.ThrowIfInvalid(); if (req.ParentId != 0 && !await Rpo.Where(a => a.Id == req.ParentId).WithNoLockNoWait().AnyAsync().ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.父节点不存在); @@ -59,8 +57,7 @@ public sealed class DocCatalogService(BasicRepository rpo) } /// - public async Task DeleteAsync(DelReq req) - { + public async Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); var ret = await Rpo.DeleteCascadeByDatabaseAsync(a => a.Id == req.Id).ConfigureAwait(false); return ret.Count; @@ -68,8 +65,7 @@ public sealed class DocCatalogService(BasicRepository rpo) /// /// The_parent_node_does_not_exist - public async Task EditAsync(EditDocCatalogReq req) - { + public async Task EditAsync(EditDocCatalogReq req) { req.ThrowIfInvalid(); if (req.ParentId != 0 && !await Rpo.Where(a => a.Id == req.ParentId).WithNoLockNoWait().AnyAsync().ConfigureAwait(false)) { @@ -79,57 +75,51 @@ public sealed class DocCatalogService(BasicRepository rpo) return #if DBTYPE_SQLSERVER (await UpdateReturnListAsync(req).ConfigureAwait(false)).FirstOrDefault()?.Adapt(); - #else + #else await UpdateAsync(req).ConfigureAwait(false) > 0 ? await GetAsync(new QueryDocCatalogReq { Id = req.Id }).ConfigureAwait(false) : null; #endif } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public async Task GetAsync(QueryDocCatalogReq req) - { + public async Task GetAsync(QueryDocCatalogReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(req) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().ToTreeListAsync().ConfigureAwait(false); return ret.Adapt>(); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private ISelect QueryInternal(QueryReq req) - { + private ISelect QueryInternal(QueryReq req) { var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DocContentService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DocContentService.cs index d8aabd8d..1d9b8010 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DocContentService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DocContentService.cs @@ -10,12 +10,11 @@ using NetAdmin.Domain.DbMaps.Dependency.Fields; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class DocContentService(BasicRepository rpo) // +public sealed class DocContentService(BasicRepository rpo) : RepositoryService(rpo), IDocContentService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -28,31 +27,30 @@ public sealed class DocContentService(BasicRepository rpo) } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary( - y => y, y => typeof(Sys_DocContent).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_DocContent).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// /// Doctionary_directory_does_not_exist - public async Task CreateAsync(CreateDocContentReq req) - { + public async Task CreateAsync(CreateDocContentReq req) { req.ThrowIfInvalid(); if (!await Rpo.Orm.Select().Where(a => a.Id == req.CatalogId).WithNoLockNoWait().AnyAsync().ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.文档分类不存在); @@ -63,16 +61,14 @@ public sealed class DocContentService(BasicRepository rpo) } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); return Rpo.DeleteAsync(a => a.Id == req.Id); } /// /// Doctionary_directory_does_not_exist - public async Task EditAsync(EditDocContentReq req) - { + public async Task EditAsync(EditDocContentReq req) { req.ThrowIfInvalid(); if (!await Rpo.Orm.Select().Where(a => a.Id == req.CatalogId).WithNoLockNoWait().AnyAsync().ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.文档分类不存在); @@ -88,59 +84,52 @@ public sealed class DocContentService(BasicRepository rpo) } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); return ExportAsync(QueryInternal, req, Ln.文档内容导出); } /// - public async Task GetAsync(QueryDocContentReq req) - { + public async Task GetAsync(QueryDocContentReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(req) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public Task SetEnabledAsync(SetDocContentEnabledReq req) - { + public Task SetEnabledAsync(SetDocContentEnabledReq req) { req.ThrowIfInvalid(); return UpdateAsync(req, [nameof(Sys_DocContent.Enabled)]); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } /// - public async Task ViewAsync(QueryDocContentReq req) - { + public async Task ViewAsync(QueryDocContentReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); @@ -169,12 +158,11 @@ public sealed class DocContentService(BasicRepository rpo) return ret?.Enabled == false ? null : ret?.Adapt(); } - private ISelect QueryInternal(QueryReq req) - { - var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter) - .WhereDynamic(req.Filter) - .WhereIf( // - req.Keywords?.Length > 0, a => a.Title.Contains(req.Keywords)); + private ISelect QueryInternal(QueryReq req) { + var ret = Rpo + .Select.WhereDynamicFilter(req.DynamicFilter) + .WhereDynamic(req.Filter) + .WhereIf(req.Keywords?.Length > 0, a => a.Title.Contains(req.Keywords)); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault switch (req.Order) { diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DocService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DocService.cs index b341196f..200f1136 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DocService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/DocService.cs @@ -4,131 +4,112 @@ using NetAdmin.Domain.Dto.Sys.Doc.Content; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class DocService(IDocCatalogService catalogService, IDocContentService contentService) // - : ServiceBase, IDocService +public sealed class DocService(IDocCatalogService catalogService, IDocContentService contentService) : ServiceBase, IDocService { /// - public Task BulkDeleteCatalogAsync(BulkReq req) - { + public Task BulkDeleteCatalogAsync(BulkReq req) { req.ThrowIfInvalid(); return catalogService.BulkDeleteAsync(req); } /// - public Task BulkDeleteContentAsync(BulkReq req) - { + public Task BulkDeleteContentAsync(BulkReq req) { req.ThrowIfInvalid(); return contentService.BulkDeleteAsync(req); } /// - public Task, int>>> ContentCountByAsync(QueryReq req) - { + public Task, int>>> ContentCountByAsync(QueryReq req) { req.ThrowIfInvalid(); return contentService.CountByAsync(req); } /// - public Task CreateCatalogAsync(CreateDocCatalogReq req) - { + public Task CreateCatalogAsync(CreateDocCatalogReq req) { req.ThrowIfInvalid(); return catalogService.CreateAsync(req); } /// - public Task CreateContentAsync(CreateDocContentReq req) - { + public Task CreateContentAsync(CreateDocContentReq req) { req.ThrowIfInvalid(); return contentService.CreateAsync(req); } /// - public Task DeleteCatalogAsync(DelReq req) - { + public Task DeleteCatalogAsync(DelReq req) { req.ThrowIfInvalid(); return catalogService.DeleteAsync(req); } /// - public Task DeleteContentAsync(DelReq req) - { + public Task DeleteContentAsync(DelReq req) { req.ThrowIfInvalid(); return contentService.DeleteAsync(req); } /// - public Task EditCatalogAsync(EditDocCatalogReq req) - { + public Task EditCatalogAsync(EditDocCatalogReq req) { req.ThrowIfInvalid(); return catalogService.EditAsync(req); } /// - public Task EditContentAsync(EditDocContentReq req) - { + public Task EditContentAsync(EditDocContentReq req) { req.ThrowIfInvalid(); return contentService.EditAsync(req); } /// - public Task ExportContentAsync(QueryReq req) - { + public Task ExportContentAsync(QueryReq req) { req.ThrowIfInvalid(); return contentService.ExportAsync(req); } /// - public Task GetCatalogAsync(QueryDocCatalogReq req) - { + public Task GetCatalogAsync(QueryDocCatalogReq req) { req.ThrowIfInvalid(); return catalogService.GetAsync(req); } /// - public Task GetContentAsync(QueryDocContentReq req) - { + public Task GetContentAsync(QueryDocContentReq req) { req.ThrowIfInvalid(); return contentService.GetAsync(req); } /// - public Task> PagedQueryCatalogAsync(PagedQueryReq req) - { + public Task> PagedQueryCatalogAsync(PagedQueryReq req) { req.ThrowIfInvalid(); return catalogService.PagedQueryAsync(req); } /// - public Task> PagedQueryContentAsync(PagedQueryReq req) - { + public Task> PagedQueryContentAsync(PagedQueryReq req) { req.ThrowIfInvalid(); return contentService.PagedQueryAsync(req); } /// - public Task> QueryCatalogAsync(QueryReq req) - { + public Task> QueryCatalogAsync(QueryReq req) { req.ThrowIfInvalid(); return catalogService.QueryAsync(req); } /// - public Task> QueryContentAsync(QueryReq req) - { + public Task> QueryContentAsync(QueryReq req) { req.ThrowIfInvalid(); return contentService.QueryAsync(req); } /// - public Task SetEnabledAsync(SetDocContentEnabledReq req) - { + public Task SetEnabledAsync(SetDocContentEnabledReq req) { req.ThrowIfInvalid(); return contentService.SetEnabledAsync(req); } /// - public Task ViewContentAsync(QueryDocContentReq req) - { + public Task ViewContentAsync(QueryDocContentReq req) { req.ThrowIfInvalid(); return contentService.ViewAsync(req); } diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/FileService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/FileService.cs index ab3ff341..937fd87f 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/FileService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/FileService.cs @@ -3,15 +3,13 @@ using NetAdmin.Domain.Dto.Sys.File; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class FileService(IOptions uploadOptions, MinioHelper minioHelper) // - : ServiceBase, IFileService +public sealed class FileService(IOptions uploadOptions, MinioHelper minioHelper) : ServiceBase, IFileService { /// /// 文件不能为空 /// 允许上传的文件格式 /// 允许的文件大小 - public async Task UploadAsync(IFormFile file) - { + public async Task UploadAsync(IFormFile file) { if (file == null || file.Length < 1) { throw new NetAdminInvalidOperationException(Ln.文件不能为空); } @@ -24,8 +22,8 @@ public sealed class FileService(IOptions uploadOptions, MinioHelp throw new NetAdminInvalidOperationException($"{Ln.允许的文件大小} {uploadOptions.Value.MaxSize}"); } - var objectName = $"{UserToken.Id}/{file.FileName}"; - await using var fs = file.OpenReadStream(); + var objectName = $"{UserToken.Id}/{file.FileName}"; + await using var fs = file.OpenReadStream(); var (fileName, url) = await minioHelper.UploadAsync(objectName, fs, file.ContentType, file.Length).ConfigureAwait(false); return new UploadFileRsp { FileName = fileName, Url = url }; } diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/JobRecordService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/JobRecordService.cs index e30cfbc6..e0a069fd 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/JobRecordService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/JobRecordService.cs @@ -7,12 +7,11 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class JobRecordService(BasicRepository rpo) // +public sealed class JobRecordService(BasicRepository rpo) : RepositoryService(rpo), IJobRecordService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -25,146 +24,136 @@ public sealed class JobRecordService(BasicRepository rpo) / } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_JobRecord).GetProperty(y)!.GetValue(x.Key)?.ToString()) - , x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_JobRecord).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateJobRecordReq req) - { + public async Task CreateAsync(CreateJobRecordReq req) { req.ThrowIfInvalid(); var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); return Rpo.DeleteAsync(a => a.Id == req.Id); } /// - public Task EditAsync(EditJobRecordReq req) - { + public Task EditAsync(EditJobRecordReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); return ExportAsync(QueryInternal, req, Ln.计划作业执行记录导出); } /// - public async Task GetAsync(QueryJobRecordReq req) - { + public async Task GetAsync(QueryJobRecordReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> GetBarChartAsync(QueryReq req) - { + public async Task> GetBarChartAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(a => new { a.CreatedTime.Year, a.CreatedTime.Month, a.CreatedTime.Day, a.CreatedTime.Hour }) - .ToListAsync(a => new GetBarChartRsp { - Timestamp = new DateTime(a.Key.Year, a.Key.Month, a.Key.Day, a.Key.Hour, 0, 0 - , DateTimeKind.Unspecified) - , Value = a.Count() - }) - .ConfigureAwait(false); + .WithNoLockNoWait() + .GroupBy(a => new { a.CreatedTime.Year, a.CreatedTime.Month, a.CreatedTime.Day, a.CreatedTime.Hour }) + .ToListAsync(a => new GetBarChartRsp + { + Timestamp = new DateTime(a.Key.Year, a.Key.Month, a.Key.Day, a.Key.Hour, 0, 0, DateTimeKind.Unspecified), Value = a.Count() + } + ) + .ConfigureAwait(false); return ret.OrderBy(x => x.Timestamp); } /// - public async Task> GetPieChartByHttpStatusCodeAsync(QueryReq req) - { + public async Task> GetPieChartByHttpStatusCodeAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .Include(a => a.Job) - .GroupBy(a => a.HttpStatusCode) - #pragma warning disable CA1305 - .ToListAsync(a => new GetPieChartRsp { Value = a.Count(), Key = a.Key.ToString() }) - #pragma warning restore CA1305 - .ConfigureAwait(false); + .WithNoLockNoWait() + .Include(a => a.Job) + .GroupBy(a => a.HttpStatusCode) + #pragma warning disable CA1305 + .ToListAsync(a => new GetPieChartRsp { Value = a.Count(), Key = a.Key.ToString() }) + #pragma warning restore CA1305 + .ConfigureAwait(false); return ret.Select(x => x with { Key = Enum.Parse(x.Key).ToString() }).OrderByDescending(x => x.Value); } /// - public async Task> GetPieChartByNameAsync(QueryReq req) - { + public async Task> GetPieChartByNameAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .Include(a => a.Job) - .GroupBy(a => a.Job.JobName) - .ToListAsync(a => new GetPieChartRsp { Value = a.Count(), Key = a.Key }) - .ConfigureAwait(false); + .WithNoLockNoWait() + .Include(a => a.Job) + .GroupBy(a => a.Job.JobName) + .ToListAsync(a => new GetPieChartRsp { Value = a.Count(), Key = a.Key }) + .ConfigureAwait(false); return ret.OrderByDescending(x => x.Value); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(req) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private ISelect QueryInternal(QueryReq req) - { - var ret = Rpo.Select.Include(a => a.Job) - .WhereDynamicFilter(req.DynamicFilter) - .WhereDynamic(req.Filter) - .WhereIf( // - req.Keywords?.Length > 0 - , a => a.JobId == req.Keywords.Int64Try(0) || a.Id == req.Keywords.Int64Try(0) || a.Job.JobName == req.Keywords); + private ISelect QueryInternal(QueryReq req) { + var ret = Rpo + .Select.Include(a => a.Job) + .WhereDynamicFilter(req.DynamicFilter) + .WhereDynamic(req.Filter) + .WhereIf( + req.Keywords?.Length > 0 + , a => a.JobId == req.Keywords.Int64Try(0) || a.Id == req.Keywords.Int64Try(0) || a.Job.JobName == req.Keywords + ); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault switch (req.Order) { diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/JobService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/JobService.cs index c70cc6e2..fcf5ba40 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/JobService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/JobService.cs @@ -11,12 +11,11 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class JobService(BasicRepository rpo, IJobRecordService jobRecordService) // +public sealed class JobService(BasicRepository rpo, IJobRecordService jobRecordService) : RepositoryService(rpo), IJobService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -29,71 +28,67 @@ public sealed class JobService(BasicRepository rpo, IJobRecordSer } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_Job).GetProperty(y)!.GetValue(x.Key)?.ToString()) - , x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_Job).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public Task CountRecordAsync(QueryReq req) - { + public Task CountRecordAsync(QueryReq req) { return jobRecordService.CountAsync(req); } /// - public async Task CreateAsync(CreateJobReq req) - { + public async Task CreateAsync(CreateJobReq req) { req.ThrowIfInvalid(); var nextExecTime = GetNextExecTime(req.ExecutionCron); - var ret = await Rpo.InsertAsync(req with { - NextExecTime = nextExecTime - , NextTimeId = nextExecTime?.TimeUnixUtc() - , RequestHeader = req.RequestHeaders?.Json() - }) - .ConfigureAwait(false); + var ret = await Rpo + .InsertAsync( + req with { NextExecTime = nextExecTime, NextTimeId = nextExecTime?.TimeUnixUtc(), RequestHeader = req.RequestHeaders?.Json() } + ) + .ConfigureAwait(false); return ret.Adapt(); } /// - public async Task DeleteAsync(DelReq req) - { + public async Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); var ret = await Rpo.DeleteCascadeByDatabaseAsync(a => a.Id == req.Id).ConfigureAwait(false); return ret.Count; } /// - public async Task EditAsync(EditJobReq req) - { + public async Task EditAsync(EditJobReq req) { req.ThrowIfInvalid(); - var update = Rpo.UpdateDiy.Set(a => a.ExecutionCron == req.ExecutionCron) - .Set(a => a.HttpMethod == req.HttpMethod) - .Set(a => a.JobName == req.JobName) - .SetIf(req.RequestHeaders == null, a => a.RequestHeader, null) - .SetIf(req.RequestHeaders != null, a => a.RequestHeader, req.RequestHeaders.Json()) - .Set(a => a.RequestBody == req.RequestBody) - .Set(a => a.RequestUrl == req.RequestUrl) - .Set(a => a.RandomDelayBegin == req.RandomDelayBegin) - .Set(a => a.RandomDelayEnd == req.RandomDelayEnd) - .Set(a => a.UserId == req.UserId) - .Set(a => a.Summary == req.Summary) - .Where(a => a.Id == req.Id); + var update = Rpo + .UpdateDiy.Set(a => a.ExecutionCron == req.ExecutionCron) + .Set(a => a.HttpMethod == req.HttpMethod) + .Set(a => a.JobName == req.JobName) + .SetIf(req.RequestHeaders == null, a => a.RequestHeader, null) + .SetIf(req.RequestHeaders != null, a => a.RequestHeader, req.RequestHeaders.Json()) + .Set(a => a.RequestBody == req.RequestBody) + .Set(a => a.RequestUrl == req.RequestUrl) + .Set(a => a.RandomDelayBegin == req.RandomDelayBegin) + .Set(a => a.RandomDelayEnd == req.RandomDelayEnd) + .Set(a => a.UserId == req.UserId) + .Set(a => a.Summary == req.Summary) + .Where(a => a.Id == req.Id); #if DBTYPE_SQLSERVER return (await update.ExecuteUpdatedAsync().ConfigureAwait(false)).FirstOrDefault()?.Adapt(); @@ -105,32 +100,27 @@ public sealed class JobService(BasicRepository rpo, IJobRecordSer } /// - public async Task ExecuteAsync(QueryJobReq req) - { + public async Task ExecuteAsync(QueryJobReq req) { req.ThrowIfInvalid(); - var df = new DynamicFilterInfo { - Filters = [ - new DynamicFilterInfo { - Field = nameof(QueryJobReq.Enabled) - , Operator = DynamicFilterOperators.Eq - , Value = true - } - , new DynamicFilterInfo { - Field = nameof(QueryJobReq.Status) - , Operator = DynamicFilterOperators.Eq - , Value = JobStatues.Idle - } - ] - }; + var df = new DynamicFilterInfo + { + Filters = + [ + new DynamicFilterInfo { Field = nameof(QueryJobReq.Enabled), Operator = DynamicFilterOperators.Eq, Value = true } + , new DynamicFilterInfo { Field = nameof(QueryJobReq.Status), Operator = DynamicFilterOperators.Eq, Value = JobStatues.Idle } + ] + }; var job = await QueryInternal(new QueryReq { Count = 1, Filter = req, DynamicFilter = df, Order = Orders.None }) - .ToOneAsync() - .ConfigureAwait(false) ?? throw new NetAdminInvalidOperationException(Ln.未获取到待执行任务); + .ToOneAsync() + .ConfigureAwait(false) + ?? throw new NetAdminInvalidOperationException(Ln.未获取到待执行任务); var nextExecTime = GetNextExecTime(Chars.FLG_CRON_PER_SECS); try { - _ = await UpdateAsync( // + _ = await UpdateAsync( job with { NextExecTime = nextExecTime, NextTimeId = nextExecTime?.TimeUnixUtc() } - , [nameof(job.NextExecTime), nameof(job.NextTimeId)]) + , [nameof(job.NextExecTime), nameof(job.NextTimeId)] + ) .ConfigureAwait(false); } catch (DbUpdateVersionException) { @@ -139,213 +129,200 @@ public sealed class JobService(BasicRepository rpo, IJobRecordSer } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); return ExportAsync(QueryInternal, req, Ln.计划作业导出); } /// - public Task ExportRecordAsync(QueryReq req) - { + public Task ExportRecordAsync(QueryReq req) { req.ThrowIfInvalid(); return jobRecordService.ExportAsync(req); } /// - public async Task FinishJobAsync(FinishJobReq req) - { + public async Task FinishJobAsync(FinishJobReq req) { req.ThrowIfInvalid(); var nextExecTime = GetNextExecTime(req.ExecutionCron); - _ = await UpdateAsync( // + _ = await UpdateAsync( req with { Status = JobStatues.Idle, NextExecTime = nextExecTime, NextTimeId = nextExecTime?.TimeUnixUtc() } - , [nameof(req.Status), nameof(req.NextExecTime), nameof(req.NextTimeId), nameof(req.LastDuration), nameof(req.LastStatusCode)]) + , [nameof(req.Status), nameof(req.NextExecTime), nameof(req.NextTimeId), nameof(req.LastDuration), nameof(req.LastStatusCode)] + ) .ConfigureAwait(false); } /// - public async Task GetAsync(QueryJobReq req) - { + public async Task GetAsync(QueryJobReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public async Task GetNextJobAsync() - { - var df = new DynamicFilterInfo { - Filters = [ - new DynamicFilterInfo { - Field = nameof(QueryJobReq.NextExecTime) - , Value = DateTime.Now - , Operator = DynamicFilterOperators.LessThan - } - , new DynamicFilterInfo { - Field = nameof(QueryJobReq.Status) - , Value = JobStatues.Idle - , Operator = DynamicFilterOperators.Eq - } - , new DynamicFilterInfo { - Field = nameof(QueryJobReq.Enabled) - , Value = true - , Operator = DynamicFilterOperators.Eq - } - ] - }; + public async Task GetNextJobAsync() { + var df = new DynamicFilterInfo + { + Filters = + [ + new DynamicFilterInfo + { + Field = nameof(QueryJobReq.NextExecTime), Value = DateTime.Now, Operator = DynamicFilterOperators.LessThan + } + , new DynamicFilterInfo { Field = nameof(QueryJobReq.Status), Value = JobStatues.Idle, Operator = DynamicFilterOperators.Eq } + , new DynamicFilterInfo { Field = nameof(QueryJobReq.Enabled), Value = true, Operator = DynamicFilterOperators.Eq } + ] + }; var job = await QueryInternal(new QueryReq { DynamicFilter = df, Order = Orders.Random }, false) - .WithNoLockNoWait() - .Where(a => !Rpo.Orm.Select().As("b").Where(b => b.JobId == a.Id && b.TimeId == a.NextTimeId).Any()) - .ToOneAsync(a => new { - a.RequestUrl - , a.HttpMethod - , a.RequestHeader - , a.RequestBody - , a.RandomDelayBegin - , a.RandomDelayEnd - , a.UserId - , a.Id - , a.NextTimeId - , a.Version - }) - .ConfigureAwait(false); + .WithNoLockNoWait() + .Where(a => !Rpo.Orm.Select().As("b").Where(b => b.JobId == a.Id && b.TimeId == a.NextTimeId).Any()) + .ToOneAsync(a => new + { + a.RequestUrl + , a.HttpMethod + , a.RequestHeader + , a.RequestBody + , a.RandomDelayBegin + , a.RandomDelayEnd + , a.UserId + , a.Id + , a.NextTimeId + , a.Version + } + ) + .ConfigureAwait(false); if (job == null) { return null; } #if DBTYPE_SQLSERVER - var ret = await UpdateReturnListAsync( // + var ret = await UpdateReturnListAsync( job.Adapt() with { Status = JobStatues.Running, LastExecTime = DateTime.Now } - , [nameof(Sys_Job.Status), nameof(Sys_Job.LastExecTime)]) + , [nameof(Sys_Job.Status), nameof(Sys_Job.LastExecTime)] + ) .ConfigureAwait(false); return ret.FirstOrDefault()?.Adapt(); #else - return await UpdateAsync( // - job.Adapt() with { Status = JobStatues.Running, LastExecTime = DateTime.Now } - , [nameof(Sys_Job.Status), nameof(Sys_Job.LastExecTime)]) - .ConfigureAwait(false) > 0 + return await UpdateAsync( + job.Adapt() with { Status = JobStatues.Running, LastExecTime = DateTime.Now } + , [nameof(Sys_Job.Status), nameof(Sys_Job.LastExecTime)] + ) + .ConfigureAwait(false) + > 0 ? await GetAsync(new QueryJobReq { Id = job.Id }).ConfigureAwait(false) : null; #endif } /// - public Task GetRecordAsync(QueryJobRecordReq req) - { + public Task GetRecordAsync(QueryJobRecordReq req) { req.ThrowIfInvalid(); return jobRecordService.GetAsync(req); } /// - public Task> GetRecordBarChartAsync(QueryReq req) - { + public Task> GetRecordBarChartAsync(QueryReq req) { req.ThrowIfInvalid(); return jobRecordService.GetBarChartAsync(req); } /// - public Task> GetRecordPieChartByHttpStatusCodeAsync(QueryReq req) - { + public Task> GetRecordPieChartByHttpStatusCodeAsync(QueryReq req) { req.ThrowIfInvalid(); return jobRecordService.GetPieChartByHttpStatusCodeAsync(req); } /// - public Task> GetRecordPieChartByNameAsync(QueryReq req) - { + public Task> GetRecordPieChartByNameAsync(QueryReq req) { req.ThrowIfInvalid(); return jobRecordService.GetPieChartByNameAsync(req); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(req) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public Task> PagedQueryRecordAsync(PagedQueryReq req) - { + public Task> PagedQueryRecordAsync(PagedQueryReq req) { req.ThrowIfInvalid(); return jobRecordService.PagedQueryAsync(req); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public Task, int>>> RecordCountByAsync(QueryReq req) - { + public Task, int>>> RecordCountByAsync(QueryReq req) { req.ThrowIfInvalid(); return jobRecordService.CountByAsync(req); } /// - public async Task ReleaseStuckTaskAsync() - { + public async Task ReleaseStuckTaskAsync() { var ret1 = await UpdateAsync( // 运行中,运行时间超过超时设定;置为空闲状态 new Sys_Job { Status = JobStatues.Idle }, [nameof(Sys_Job.Status)], null - , a => a.Status == JobStatues.Running && a.LastExecTime < DateTime.Now.AddSeconds(-Numbers.SECS_TIMEOUT_JOB), null, true) + , a => a.Status == JobStatues.Running && a.LastExecTime < DateTime.Now.AddSeconds(-Numbers.SECS_TIMEOUT_JOB), null, true + ) .ConfigureAwait(false); var ret2 = await UpdateAsync( // 空闲中,下次执行时间在当前时间减去超时时间以前;将下次执行时间调整到现在 new Sys_Job { NextExecTime = DateTime.Now, NextTimeId = DateTime.Now.TimeUnixUtc() } - , [nameof(Sys_Job.NextExecTime), nameof(Sys_Job.NextTimeId)], null - , a => a.Status == JobStatues.Idle && a.NextExecTime < DateTime.Now.AddSeconds(-Numbers.SECS_TIMEOUT_JOB), null, true) + , [nameof(Sys_Job.NextExecTime), nameof(Sys_Job.NextTimeId)], null + , a => a.Status == JobStatues.Idle && a.NextExecTime < DateTime.Now.AddSeconds(-Numbers.SECS_TIMEOUT_JOB), null, true + ) .ConfigureAwait(false); return ret1 + ret2; } /// - public Task SetEnabledAsync(SetJobEnabledReq req) - { + public Task SetEnabledAsync(SetJobEnabledReq req) { req.ThrowIfInvalid(); return UpdateAsync(req, [nameof(Sys_Job.Enabled)]); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private static DateTime? GetNextExecTime(string cron) - { + private static DateTime? GetNextExecTime(string cron) { return CronExpression.Parse(cron, CronFormat.IncludeSeconds).GetNextOccurrence(DateTime.UtcNow, TimeZoneInfo.Local)?.ToLocalTime(); } - private ISelect QueryInternal(QueryReq req) - { + private ISelect QueryInternal(QueryReq req) { return QueryInternal(req, true); } - private ISelect QueryInternal(QueryReq req, bool includeUser) - { + private ISelect QueryInternal( + QueryReq req + , bool includeUser + ) { var ret = Rpo.Select; if (includeUser) { ret = ret.Include(a => a.User); } - ret = ret.WhereDynamicFilter(req.DynamicFilter) - .WhereDynamic(req.Filter) - .WhereIf( // - req.Keywords?.Length > 0 - , a => a.Id == req.Keywords.Int64Try(0) || a.JobName.Contains(req.Keywords) || a.RequestUrl.Contains(req.Keywords)); + ret = ret + .WhereDynamicFilter(req.DynamicFilter) + .WhereDynamic(req.Filter) + .WhereIf( + req.Keywords?.Length > 0 + , a => a.Id == req.Keywords.Int64Try(0) || a.JobName.Contains(req.Keywords) || a.RequestUrl.Contains(req.Keywords) + ); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault switch (req.Order) { diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/LoginLogService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/LoginLogService.cs index 0a514f7e..8b4cb7f8 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/LoginLogService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/LoginLogService.cs @@ -6,12 +6,11 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class LoginLogService(BasicRepository rpo) // +public sealed class LoginLogService(BasicRepository rpo) : RepositoryService(rpo), ILoginLogService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -24,108 +23,101 @@ public sealed class LoginLogService(BasicRepository rpo) // } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_LoginLog).GetProperty(y)!.GetValue(x.Key)?.ToString()) - , x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_LoginLog).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateLoginLogReq req) - { + public async Task CreateAsync(CreateLoginLogReq req) { req.ThrowIfInvalid(); var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); return Rpo.DeleteAsync(a => a.Id == req.Id); } /// - public Task EditAsync(EditLoginLogReq req) - { + public Task EditAsync(EditLoginLogReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); return ExportAsync(QueryInternal, req, Ln.登录日志导出); } /// - public async Task GetAsync(QueryLoginLogReq req) - { + public async Task GetAsync(QueryLoginLogReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Include(a => a.Owner) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(a => new { - a.CreatedClientIp - , a.CreatedTime - , a.CreatedUserAgent - , a.Duration - , a.ErrorCode - , a.HttpStatusCode - , a.Id - , a.LoginUserName - , Owner = new { a.Owner.Id, a.Owner.UserName } - , a.RequestUrl - , a.ServerIp - }) - .ConfigureAwait(false); + .Include(a => a.Owner) + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(a => new + { + a.CreatedClientIp + , a.CreatedTime + , a.CreatedUserAgent + , a.Duration + , a.ErrorCode + , a.HttpStatusCode + , a.Id + , a.LoginUserName + , Owner = new { a.Owner.Id, a.Owner.UserName } + , a.RequestUrl + , a.ServerIp + } + ) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private ISelect QueryInternal(QueryReq req) - { + private ISelect QueryInternal(QueryReq req) { var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); if (req.Keywords?.Length > 0) { diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/MenuService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/MenuService.cs index 8f88882a..c6f87890 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/MenuService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/MenuService.cs @@ -6,12 +6,11 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class MenuService(BasicRepository rpo, IUserService userService) // +public sealed class MenuService(BasicRepository rpo, IUserService userService) : RepositoryService(rpo), IMenuService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -24,38 +23,36 @@ public sealed class MenuService(BasicRepository rpo, IUserServic } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_Menu).GetProperty(y)!.GetValue(x.Key)?.ToString()) - , x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_Menu).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateMenuReq req) - { + public async Task CreateAsync(CreateMenuReq req) { req.ThrowIfInvalid(); var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } /// - public async Task DeleteAsync(DelReq req) - { + public async Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); var ret = await Rpo.DeleteAsync(a => a.Id == req.Id).ConfigureAwait(false); _ = await Rpo.Orm.Delete().Where(a => a.MenuId == req.Id).ExecuteEffectsAsync().ConfigureAwait(false); @@ -63,8 +60,7 @@ public sealed class MenuService(BasicRepository rpo, IUserServic } /// - public async Task EditAsync(EditMenuReq req) - { + public async Task EditAsync(EditMenuReq req) { req.ThrowIfInvalid(); #if DBTYPE_SQLSERVER return (await UpdateReturnListAsync(req).ConfigureAwait(false)).FirstOrDefault()?.Adapt(); @@ -74,48 +70,42 @@ public sealed class MenuService(BasicRepository rpo, IUserServic } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public async Task GetAsync(QueryMenuReq req) - { + public async Task GetAsync(QueryMenuReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().ToTreeListAsync().ConfigureAwait(false); return ret.Adapt>(); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } /// - public async Task> UserMenusAsync() - { - var userInfo = await userService.UserInfoAsync().ConfigureAwait(false); + public async Task> UserMenusAsync() { + var userInfo = await userService.UserInfoAsync().ConfigureAwait(false); Task> ret; - var req = new QueryReq(); + var req = new QueryReq(); if (userInfo.Roles.Any(x => x.IgnorePermissionControl)) { // 忽略权限控制 @@ -134,18 +124,19 @@ public sealed class MenuService(BasicRepository rpo, IUserServic return await ret.ConfigureAwait(false); } - private ISelect QueryInternal(QueryReq req) - { + private ISelect QueryInternal(QueryReq req) { var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); - ret = req.Order switch { - Orders.None => ret - , Orders.Random => ret.OrderByRandom() - , _ => ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending) - .OrderByDescending(a => a.Sort) - .OrderBy(a => a.Name) - .OrderBy(a => a.Id) - }; + ret = req.Order switch + { + Orders.None => ret + , Orders.Random => ret.OrderByRandom() + , _ => ret + .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending) + .OrderByDescending(a => a.Sort) + .OrderBy(a => a.Name) + .OrderBy(a => a.Id) + }; return ret.AppendOtherFilters(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/RequestLogDetailService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/RequestLogDetailService.cs index 92d3568a..8e410d5c 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/RequestLogDetailService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/RequestLogDetailService.cs @@ -6,12 +6,11 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class RequestLogDetailService(BasicRepository rpo) // +public sealed class RequestLogDetailService(BasicRepository rpo) : RepositoryService(rpo), IRequestLogDetailService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -24,98 +23,91 @@ public sealed class RequestLogDetailService(BasicRepository - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// public async Task, int>>> CountByAsync( - QueryReq req) - { + QueryReq req + ) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary( - y => y, y => typeof(Sys_RequestLogDetail).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_RequestLogDetail).GetProperty(y)!.GetValue(x.Key)?.ToString()) + , x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateRequestLogDetailReq req) - { + public async Task CreateAsync(CreateRequestLogDetailReq req) { req.ThrowIfInvalid(); var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); return Rpo.DeleteAsync(a => a.Id == req.Id); } /// - public Task EditAsync(EditRequestLogDetailReq req) - { + public Task EditAsync(EditRequestLogDetailReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public async Task GetAsync(QueryRequestLogDetailReq req) - { + public async Task GetAsync(QueryRequestLogDetailReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }) - .ToOneAsync() - .ConfigureAwait(false); + .ToOneAsync() + .ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(req) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private ISelect QueryInternal(QueryReq req) - { + private ISelect QueryInternal(QueryReq req) { var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/RequestLogService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/RequestLogService.cs index 19846955..7496bd8a 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/RequestLogService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/RequestLogService.cs @@ -8,12 +8,11 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class RequestLogService(BasicRepository rpo, LoginLogService loginLogService) // +public sealed class RequestLogService(BasicRepository rpo, LoginLogService loginLogService) : RepositoryService(rpo), IRequestLogService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -26,30 +25,29 @@ public sealed class RequestLogService(BasicRepository rpo, } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary( - y => y, y => typeof(Sys_RequestLog).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_RequestLog).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateRequestLogReq req) - { + public async Task CreateAsync(CreateRequestLogReq req) { req.ThrowIfInvalid(); var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); @@ -62,148 +60,140 @@ public sealed class RequestLogService(BasicRepository rpo, } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public Task EditAsync(EditRequestLogReq req) - { + public Task EditAsync(EditRequestLogReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); - return ExportAsync( // - QueryInternal, req, Ln.请求日志导出, a => new { - a.Id - , Api = new { a.Api.Id } - , a.CreatedClientIp - , a.CreatedTime - , a.Duration - , a.HttpMethod - , a.HttpStatusCode - , Owner = new { a.Owner.UserName } - }); + return ExportAsync( + QueryInternal, req, Ln.请求日志导出, a => new + { + a.Id + , Api = new { a.Api.Id } + , a.CreatedClientIp + , a.CreatedTime + , a.Duration + , a.HttpMethod + , a.HttpStatusCode + , Owner = new { a.Owner.UserName } + } + ); } /// - public async Task GetAsync(QueryRequestLogReq req) - { + public async Task GetAsync(QueryRequestLogReq req) { req.ThrowIfInvalid(); - var df = new DynamicFilterInfo { - Field = nameof(QueryRequestLogReq.CreatedTime) - , Operator = DynamicFilterOperators.DateRange - , Value = new[] { - req.CreatedTime.AddHours(-1).yyyy_MM_dd_HH_mm_ss() - , req.CreatedTime.AddHours(1).yyyy_MM_dd_HH_mm_ss() - }.Json() - .Object() - }; + var df = new DynamicFilterInfo + { + Field = nameof(QueryRequestLogReq.CreatedTime) + , Operator = DynamicFilterOperators.DateRange + , Value = new[] { req.CreatedTime.AddHours(-1).yyyy_MM_dd_HH_mm_ss(), req.CreatedTime.AddHours(1).yyyy_MM_dd_HH_mm_ss() } + .Json() + .Object() + }; var ret = await QueryInternal(new QueryReq { Filter = req, DynamicFilter = df, Order = Orders.None }) - .Include(a => a.Detail) - .ToOneAsync() - .ConfigureAwait(false); + .Include(a => a.Detail) + .ToOneAsync() + .ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> GetBarChartAsync(QueryReq req) - { + public async Task> GetBarChartAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }, false) - .WithNoLockNoWait() - .GroupBy(a => new { a.CreatedTime.Year, a.CreatedTime.Month, a.CreatedTime.Day, a.CreatedTime.Hour }) - .ToListAsync(a => new GetBarChartRsp { - Timestamp = new DateTime(a.Key.Year, a.Key.Month, a.Key.Day, a.Key.Hour, 0, 0 - , DateTimeKind.Unspecified) - , Value = a.Count() - }) - .ConfigureAwait(false); + .WithNoLockNoWait() + .GroupBy(a => new { a.CreatedTime.Year, a.CreatedTime.Month, a.CreatedTime.Day, a.CreatedTime.Hour }) + .ToListAsync(a => new GetBarChartRsp + { + Timestamp = new DateTime(a.Key.Year, a.Key.Month, a.Key.Day, a.Key.Hour, 0, 0, DateTimeKind.Unspecified), Value = a.Count() + } + ) + .ConfigureAwait(false); return ret.OrderBy(x => x.Timestamp); } /// - public async Task> GetPieChartByApiSummaryAsync(QueryReq req) - { + public async Task> GetPieChartByApiSummaryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(a => a.Api.Summary) - .ToListAsync(a => new GetPieChartRsp { Value = a.Count(), Key = a.Key }) - .ConfigureAwait(false); + .WithNoLockNoWait() + .GroupBy(a => a.Api.Summary) + .ToListAsync(a => new GetPieChartRsp { Value = a.Count(), Key = a.Key }) + .ConfigureAwait(false); return ret.OrderByDescending(x => x.Value); } /// - public async Task> GetPieChartByHttpStatusCodeAsync(QueryReq req) - { + public async Task> GetPieChartByHttpStatusCodeAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }, false) - .WithNoLockNoWait() - .GroupBy(a => a.HttpStatusCode) - #pragma warning disable CA1305 - .ToListAsync(a => new GetPieChartRsp { Value = a.Count(), Key = a.Key.ToString() }) - #pragma warning restore CA1305 - .ConfigureAwait(false); + .WithNoLockNoWait() + .GroupBy(a => a.HttpStatusCode) + #pragma warning disable CA1305 + .ToListAsync(a => new GetPieChartRsp { Value = a.Count(), Key = a.Key.ToString() }) + #pragma warning restore CA1305 + .ConfigureAwait(false); return ret.Select(x => x with { Key = Enum.Parse(x.Key).ToString() }).OrderByDescending(x => x.Value); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); - var select = QueryInternal(req with { Order = Orders.None }, false); + var select = QueryInternal(req with { Order = Orders.None }, false); var selectTemp = select.WithTempQuery(a => new { temp = a }); if (req.Order == Orders.Random) { selectTemp = selectTemp.OrderByRandom(); } else { - selectTemp = selectTemp.OrderBy( // - req.Prop?.Length > 0, $"{req.Prop} {(req.Order == Orders.Ascending ? "ASC" : "DESC")}"); + selectTemp = selectTemp.OrderBy(req.Prop?.Length > 0, $"{req.Prop} {(req.Order == Orders.Ascending ? "ASC" : "DESC")}"); if (!req.Prop?.Equals(nameof(req.Filter.CreatedTime), StringComparison.OrdinalIgnoreCase) ?? true) { selectTemp = selectTemp.OrderByDescending(a => a.temp.CreatedTime); } } - var ret = await selectTemp.Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(a => a.temp) - .ConfigureAwait(false); + var ret = await selectTemp + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(a => a.temp) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, ret.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private ISelect QueryInternal(QueryReq req) - { + private ISelect QueryInternal(QueryReq req) { return QueryInternal(req, true); } - private ISelect QueryInternal(QueryReq req, bool include) - { + private ISelect QueryInternal( + QueryReq req + , bool include + ) { var ret = Rpo.Select; if (include) { ret = ret.Include(a => a.Api).Include(a => a.Owner); diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/RoleService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/RoleService.cs index 261818bf..699dd61a 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/RoleService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/RoleService.cs @@ -7,12 +7,11 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class RoleService(BasicRepository rpo, IUserRoleService userRoleService) // +public sealed class RoleService(BasicRepository rpo, IUserRoleService userRoleService) : RepositoryService(rpo), IRoleService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -25,33 +24,32 @@ public sealed class RoleService(BasicRepository rpo, IUserRoleSe } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_Role).GetProperty(y)!.GetValue(x.Key)?.ToString()) - , x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_Role).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateRoleReq req) - { + public async Task CreateAsync(CreateRoleReq req) { req.ThrowIfInvalid(); var entity = req.Adapt(); - var ret = await Rpo.InsertAsync(entity).ConfigureAwait(false); + var ret = await Rpo.InsertAsync(entity).ConfigureAwait(false); await Rpo.SaveManyAsync(entity, nameof(entity.Depts)).ConfigureAwait(false); await Rpo.SaveManyAsync(entity, nameof(entity.Menus)).ConfigureAwait(false); @@ -63,8 +61,7 @@ public sealed class RoleService(BasicRepository rpo, IUserRoleSe /// /// Users_exist_under_this_role_and_deletion_is_not_allowed - public async Task DeleteAsync(DelReq req) - { + public async Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); return await Rpo.Orm.Select().WithNoLockNoWait().AnyAsync(a => a.RoleId == req.Id).ConfigureAwait(false) ? throw new NetAdminInvalidOperationException(Ln.该角色下存在用户) @@ -72,8 +69,7 @@ public sealed class RoleService(BasicRepository rpo, IUserRoleSe } /// - public async Task EditAsync(EditRoleReq req) - { + public async Task EditAsync(EditRoleReq req) { req.ThrowIfInvalid(); var entity = req.Adapt(); _ = await Rpo.UpdateAsync(entity).ConfigureAwait(false); @@ -85,90 +81,81 @@ public sealed class RoleService(BasicRepository rpo, IUserRoleSe } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); return ExportAsync(QueryInternal, req, Ln.角色导出); } /// - public async Task GetAsync(QueryRoleReq req) - { + public async Task GetAsync(QueryRoleReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(req) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public Task SetDisplayDashboardAsync(SetDisplayDashboardReq req) - { + public Task SetDisplayDashboardAsync(SetDisplayDashboardReq req) { req.ThrowIfInvalid(); return UpdateAsync(req, [nameof(req.DisplayDashboard)]); } /// - public Task SetEnabledAsync(SetRoleEnabledReq req) - { + public Task SetEnabledAsync(SetRoleEnabledReq req) { req.ThrowIfInvalid(); return UpdateAsync(req, [nameof(req.Enabled)]); } /// - public Task SetIgnorePermissionControlAsync(SetIgnorePermissionControlReq req) - { + public Task SetIgnorePermissionControlAsync(SetIgnorePermissionControlReq req) { req.ThrowIfInvalid(); return UpdateAsync(req, [nameof(req.IgnorePermissionControl)]); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } /// - public Task, int>>> UserCountByAsync(QueryReq req) - { + public Task, int>>> UserCountByAsync(QueryReq req) { req.ThrowIfInvalid(); return userRoleService.CountByAsync(req); } - private ISelect QueryInternal(QueryReq req) - { + private ISelect QueryInternal(QueryReq req) { #pragma warning disable RCS1196 // ReSharper disable InvokeAsExtensionMethod - var ret = Rpo.Select.IncludeMany(a => Enumerable.Select(a.Depts, b => new Sys_Dept { Id = b.Id })) - .IncludeMany(a => Enumerable.Select(a.Menus, b => new Sys_Menu { Id = b.Id })) - .IncludeMany(a => Enumerable.Select(a.Apis, b => new Sys_Api { Id = b.Id })) - .WhereDynamicFilter(req.DynamicFilter) - .WhereDynamic(req.Filter) - .WhereIf( // - req.Keywords?.Length > 0 - , a => a.Id == req.Keywords.Int64Try(0) || a.Name.Contains(req.Keywords) || a.Summary.Contains(req.Keywords)); + var ret = Rpo + .Select.IncludeMany(a => Enumerable.Select(a.Depts, b => new Sys_Dept { Id = b.Id })) + .IncludeMany(a => Enumerable.Select(a.Menus, b => new Sys_Menu { Id = b.Id })) + .IncludeMany(a => Enumerable.Select(a.Apis, b => new Sys_Api { Id = b.Id })) + .WhereDynamicFilter(req.DynamicFilter) + .WhereDynamic(req.Filter) + .WhereIf( + req.Keywords?.Length > 0, a => a.Id == req.Keywords.Int64Try(0) || a.Name.Contains(req.Keywords) || a.Summary.Contains(req.Keywords) + ); // ReSharper restore InvokeAsExtensionMethod #pragma warning restore RCS1196 diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgDeptService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgDeptService.cs index 38ce91b8..0a88b5ba 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgDeptService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgDeptService.cs @@ -6,12 +6,11 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class SiteMsgDeptService(BasicRepository rpo) // +public sealed class SiteMsgDeptService(BasicRepository rpo) : RepositoryService(rpo), ISiteMsgDeptService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -24,95 +23,87 @@ public sealed class SiteMsgDeptService(BasicRepository rp } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary( - y => y, y => typeof(Sys_SiteMsgDept).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_SiteMsgDept).GetProperty(y)!.GetValue(x.Key)?.ToString()) + , x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateSiteMsgDeptReq req) - { + public async Task CreateAsync(CreateSiteMsgDeptReq req) { req.ThrowIfInvalid(); var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); return Rpo.DeleteAsync(a => a.Id == req.Id); } /// - public Task EditAsync(EditSiteMsgDeptReq req) - { + public Task EditAsync(EditSiteMsgDeptReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public async Task GetAsync(QuerySiteMsgDeptReq req) - { + public async Task GetAsync(QuerySiteMsgDeptReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(req) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private ISelect QueryInternal(QueryReq req) - { + private ISelect QueryInternal(QueryReq req) { var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgFlagService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgFlagService.cs index b6298b12..0e614f9d 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgFlagService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgFlagService.cs @@ -6,12 +6,11 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class SiteMsgFlagService(BasicRepository rpo) // +public sealed class SiteMsgFlagService(BasicRepository rpo) : RepositoryService(rpo), ISiteMsgFlagService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -24,102 +23,93 @@ public sealed class SiteMsgFlagService(BasicRepository rp } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary( - y => y, y => typeof(Sys_SiteMsgFlag).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_SiteMsgFlag).GetProperty(y)!.GetValue(x.Key)?.ToString()) + , x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateSiteMsgFlagReq req) - { + public async Task CreateAsync(CreateSiteMsgFlagReq req) { req.ThrowIfInvalid(); var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); return Rpo.DeleteAsync(a => a.Id == req.Id); } /// - public Task EditAsync(EditSiteMsgFlagReq req) - { + public Task EditAsync(EditSiteMsgFlagReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public async Task GetAsync(QuerySiteMsgFlagReq req) - { + public async Task GetAsync(QuerySiteMsgFlagReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(req) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public Task SetUserSiteMsgStatusAsync(SetUserSiteMsgStatusReq req) - { + public Task SetUserSiteMsgStatusAsync(SetUserSiteMsgStatusReq req) { req.ThrowIfInvalid(); return UpdateAsync(req, [nameof(req.UserSiteMsgStatus)], null, a => a.UserId == req.UserId && a.SiteMsgId == req.SiteMsgId); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private ISelect QueryInternal(QueryReq req) - { + private ISelect QueryInternal(QueryReq req) { var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgRoleService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgRoleService.cs index 1741fc97..c19cf575 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgRoleService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgRoleService.cs @@ -6,12 +6,11 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class SiteMsgRoleService(BasicRepository rpo) // +public sealed class SiteMsgRoleService(BasicRepository rpo) : RepositoryService(rpo), ISiteMsgRoleService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -24,95 +23,87 @@ public sealed class SiteMsgRoleService(BasicRepository rp } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary( - y => y, y => typeof(Sys_SiteMsgRole).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_SiteMsgRole).GetProperty(y)!.GetValue(x.Key)?.ToString()) + , x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateSiteMsgRoleReq req) - { + public async Task CreateAsync(CreateSiteMsgRoleReq req) { req.ThrowIfInvalid(); var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); return Rpo.DeleteAsync(a => a.Id == req.Id); } /// - public Task EditAsync(EditSiteMsgRoleReq req) - { + public Task EditAsync(EditSiteMsgRoleReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public async Task GetAsync(QuerySiteMsgRoleReq req) - { + public async Task GetAsync(QuerySiteMsgRoleReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(req) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private ISelect QueryInternal(QueryReq req) - { + private ISelect QueryInternal(QueryReq req) { var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgService.cs index fa72df88..55e3b3d8 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgService.cs @@ -10,12 +10,11 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class SiteMsgService(BasicRepository rpo, ContextUserInfo contextUserInfo, ISiteMsgFlagService siteMsgFlagService) // +public sealed class SiteMsgService(BasicRepository rpo, ContextUserInfo contextUserInfo, ISiteMsgFlagService siteMsgFlagService) : RepositoryService(rpo), ISiteMsgService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -28,35 +27,34 @@ public sealed class SiteMsgService(BasicRepository rpo, Conte } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_SiteMsg).GetProperty(y)!.GetValue(x.Key)?.ToString()) - , x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_SiteMsg).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateSiteMsgReq req) - { + public async Task CreateAsync(CreateSiteMsgReq req) { req.ThrowIfInvalid(); await CreateEditCheckAsync(req).ConfigureAwait(false); // 主表 - var entity = req.Adapt(); + var entity = req.Adapt(); var dbSiteMsg = await Rpo.InsertAsync(entity).ConfigureAwait(false); // 分表 @@ -74,16 +72,14 @@ public sealed class SiteMsgService(BasicRepository rpo, Conte } /// - public async Task DeleteAsync(DelReq req) - { + public async Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); var ret = await Rpo.DeleteCascadeByDatabaseAsync(a => a.Id == req.Id).ConfigureAwait(false); return ret.Count; } /// - public async Task EditAsync(EditSiteMsgReq req) - { + public async Task EditAsync(EditSiteMsgReq req) { req.ThrowIfInvalid(); await CreateEditCheckAsync(req).ConfigureAwait(false); @@ -104,86 +100,79 @@ public sealed class SiteMsgService(BasicRepository rpo, Conte } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); return ExportAsync(QueryInternal, req, Ln.站内信导出); } /// - public async Task GetAsync(QuerySiteMsgReq req) - { + public async Task GetAsync(QuerySiteMsgReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }) - .IncludeMany(a => a.Roles) - .IncludeMany(a => a.Users) - .IncludeMany(a => a.Depts) - .ToOneAsync() - .ConfigureAwait(false); + .IncludeMany(a => a.Roles) + .IncludeMany(a => a.Users) + .IncludeMany(a => a.Depts) + .ToOneAsync() + .ConfigureAwait(false); return ret.Adapt(); } /// - public async Task GetMineAsync(QuerySiteMsgReq req) - { + public async Task GetMineAsync(QuerySiteMsgReq req) { req.ThrowIfInvalid(); var ret = await PagedQueryMineAsync( - new PagedQueryReq { - DynamicFilter = new DynamicFilterInfo { - Field = nameof(req.Id) - , Value = req.Id - , Operator = DynamicFilterOperators.Eq - } - }, true) + new PagedQueryReq + { + DynamicFilter = new DynamicFilterInfo { Field = nameof(req.Id), Value = req.Id, Operator = DynamicFilterOperators.Eq } + }, true + ) .ConfigureAwait(false); return ret.Rows.FirstOrDefault(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(a => new { - a.CreatedTime - , a.CreatedUserName - , a.Id - , a.MsgType - , a.Summary - , a.Title - , a.Version - }) - .ConfigureAwait(false); + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(a => new + { + a.CreatedTime + , a.CreatedUserName + , a.Id + , a.MsgType + , a.Summary + , a.Title + , a.Version + } + ) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public Task> PagedQueryMineAsync(PagedQueryReq req) - { + public Task> PagedQueryMineAsync(PagedQueryReq req) { req.ThrowIfInvalid(); return PagedQueryMineAsync(req, false); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public async Task SetSiteMsgStatusAsync(SetUserSiteMsgStatusReq req) - { + public async Task SetSiteMsgStatusAsync(SetUserSiteMsgStatusReq req) { req.ThrowIfInvalid(); if (!await QueryInternal(new QueryReq { Filter = new QuerySiteMsgReq { Id = req.SiteMsgId } }) - .WithNoLockNoWait() - .AnyAsync() - .ConfigureAwait(false)) { + .WithNoLockNoWait() + .AnyAsync() + .ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.站内信不存在); } @@ -196,26 +185,24 @@ public sealed class SiteMsgService(BasicRepository rpo, Conte } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } /// - public async Task UnreadCountAsync() - { + public async Task UnreadCountAsync() { // 减去标记已读的数量 - var subtract = await Rpo.Orm.Select() - .Where(a => a.UserId == contextUserInfo.Id && a.UserSiteMsgStatus == UserSiteMsgStatues.Read) - .CountAsync() - .ConfigureAwait(false); + var subtract = await Rpo + .Orm.Select() + .Where(a => a.UserId == contextUserInfo.Id && a.UserSiteMsgStatus == UserSiteMsgStatues.Read) + .CountAsync() + .ConfigureAwait(false); return await QueryMineInternal(new QueryReq()).CountAsync().ConfigureAwait(false) - subtract; } - private async Task CreateEditCheckAsync(CreateSiteMsgReq req) - { + private async Task CreateEditCheckAsync(CreateSiteMsgReq req) { // 检查角色是否存在 if (!req.RoleIds.NullOrEmpty()) { var roles = await Rpo.Orm.Select().Where(a => req.RoleIds.Contains(a.Id)).ToListAsync(a => a.Id).ConfigureAwait(false); @@ -241,40 +228,48 @@ public sealed class SiteMsgService(BasicRepository rpo, Conte } } - private async Task> PagedQueryMineAsync(PagedQueryReq req, bool containsContent) - { + private async Task> PagedQueryMineAsync( + PagedQueryReq req + , bool containsContent + ) { var list = await QueryMineInternal(req) - .Page(req.Page, req.PageSize) - .Count(out var total) - .OrderByDescending(a => a.Max(a.Value.Item1.CreatedTime)) - .ToListAsync(a => new QuerySiteMsgRsp { - Id = a.Max(a.Value.Item1.Id) - , Title = a.Max(a.Value.Item1.Title) - , Summary = a.Max(a.Value.Item1.Summary) - , Content = containsContent ? a.Max(a.Value.Item1.Content) : null - , CreatedTime = a.Max(a.Value.Item1.CreatedTime) - , MyFlags - = new QuerySiteMsgFlagRsp { - UserSiteMsgStatus - = a.Max(a.Value.Item6.UserSiteMsgStatus) - } - , Sender = new QueryUserRsp { - UserName = a.Max(a.Value.Item2.UserName) - , Avatar = a.Max(a.Value.Item2.Avatar) - } - }) - .ConfigureAwait(false); - return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); + .Page(req.Page, req.PageSize) + .Count(out var total) + .OrderByDescending(a => a.Max(a.Value.Item1.CreatedTime)) + .ToListAsync(a => new QuerySiteMsgRsp + { + Id = a.Max(a.Value.Item1.Id) + , Title = a.Max(a.Value.Item1.Title) + , Summary = a.Max(a.Value.Item1.Summary) + , Content = containsContent ? a.Max(a.Value.Item1.Content) : null + , CreatedTime = a.Max(a.Value.Item1.CreatedTime) + , MyFlags = new QuerySiteMsgFlagRsp { UserSiteMsgStatus = a.Max(a.Value.Item6.UserSiteMsgStatus) } + , Sender = new QueryUserRsp { UserName = a.Max(a.Value.Item2.UserName), Avatar = a.Max(a.Value.Item2.Avatar) } + } + ) + .ConfigureAwait(false); + return new PagedQueryRsp( + req.Page, req.PageSize, total, list + .OrderBy(x => x.MyFlags.UserSiteMsgStatus switch + { + 0 or UserSiteMsgStatues.Unread => 0 + , UserSiteMsgStatues.Read => 1 + , _ => 2 + } + ) + .ThenByDescending(x => x.CreatedTime) + .Adapt>() + ); } - private ISelect QueryInternal(QueryReq req) - { - var ret = Rpo.Select.Include(a => a.Creator) - .WhereDynamicFilter(req.DynamicFilter) - .WhereDynamic(req.Filter) - .WhereIf( // - req.Keywords?.Length > 0 - , a => a.Id == req.Keywords.Int64Try(0) || a.Title.Contains(req.Keywords) || a.Summary.Contains(req.Keywords)); + private ISelect QueryInternal(QueryReq req) { + var ret = Rpo + .Select.Include(a => a.Creator) + .WhereDynamicFilter(req.DynamicFilter) + .WhereDynamic(req.Filter) + .WhereIf( + req.Keywords?.Length > 0, a => a.Id == req.Keywords.Int64Try(0) || a.Title.Contains(req.Keywords) || a.Summary.Contains(req.Keywords) + ); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault switch (req.Order) { @@ -292,23 +287,80 @@ public sealed class SiteMsgService(BasicRepository rpo, Conte return ret.AppendOtherFilters(req); } - private ISelectGrouping // - > QueryMineInternal( - QueryReq req) - { + private ISelectGrouping> + QueryMineInternal(QueryReq req) { var roleIds = contextUserInfo.Roles.Select(x => x.Id).ToList(); - return Rpo.Orm.Select() - .WithNoLockNoWait() - .LeftJoin((a, b, _, _, _, _) => a.CreatedUserId == b.Id) - .LeftJoin((a, _, c, _, _, _) => a.Id == c.SiteMsgId) - .LeftJoin((a, _, _, d, _, _) => a.Id == d.SiteMsgId) - .LeftJoin((a, _, _, _, e, _) => a.Id == e.SiteMsgId) - .LeftJoin((a, _, _, _, _, f) => a.Id == f.SiteMsgId && f.UserId == contextUserInfo.Id) - .WhereDynamicFilter(req.DynamicFilter) - .Where((a, _, c, d, e, f) => (SqlExt.EqualIsNull(f.UserSiteMsgStatus) || f.UserSiteMsgStatus != UserSiteMsgStatues.Deleted) && - (a.MsgType == SiteMsgTypes.Public || c.DeptId == contextUserInfo.DeptId || - roleIds.Contains(d.RoleId) || e.UserId == contextUserInfo.Id)) - .GroupBy((a, _, _, _, _, _) => a.Id); + return Rpo + .Orm.Select() + .WithNoLockNoWait() + .LeftJoin(( + a + , b + , _ + , _ + , _ + , _ + ) => a.CreatedUserId == b.Id + ) + .LeftJoin(( + a + , _ + , c + , _ + , _ + , _ + ) => a.Id == c.SiteMsgId + ) + .LeftJoin(( + a + , _ + , _ + , d + , _ + , _ + ) => a.Id == d.SiteMsgId + ) + .LeftJoin(( + a + , _ + , _ + , _ + , e + , _ + ) => a.Id == e.SiteMsgId + ) + .LeftJoin(( + a + , _ + , _ + , _ + , _ + , f + ) => a.Id == f.SiteMsgId && f.UserId == contextUserInfo.Id + ) + .WhereDynamicFilter(req.DynamicFilter) + .Where(( + a + , _ + , c + , d + , e + , f + ) => (SqlExt.EqualIsNull(f.UserSiteMsgStatus) || f.UserSiteMsgStatus != UserSiteMsgStatues.Deleted) + && (a.MsgType == SiteMsgTypes.Public + || c.DeptId == contextUserInfo.DeptId + || roleIds.Contains(d.RoleId) + || e.UserId == contextUserInfo.Id) + ) + .GroupBy(( + a + , _ + , _ + , _ + , _ + , _ + ) => a.Id + ); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgUserService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgUserService.cs index d5c1051f..86464d59 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgUserService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgUserService.cs @@ -6,12 +6,11 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class SiteMsgUserService(BasicRepository rpo) // +public sealed class SiteMsgUserService(BasicRepository rpo) : RepositoryService(rpo), ISiteMsgUserService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -24,95 +23,87 @@ public sealed class SiteMsgUserService(BasicRepository rp } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary( - y => y, y => typeof(Sys_SiteMsgUser).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_SiteMsgUser).GetProperty(y)!.GetValue(x.Key)?.ToString()) + , x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateSiteMsgUserReq req) - { + public async Task CreateAsync(CreateSiteMsgUserReq req) { req.ThrowIfInvalid(); var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); return Rpo.DeleteAsync(a => a.Id == req.Id); } /// - public Task EditAsync(EditSiteMsgUserReq req) - { + public Task EditAsync(EditSiteMsgUserReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public async Task GetAsync(QuerySiteMsgUserReq req) - { + public async Task GetAsync(QuerySiteMsgUserReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(req) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private ISelect QueryInternal(QueryReq req) - { + private ISelect QueryInternal(QueryReq req) { var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/ToolsService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/ToolsService.cs index 9e3b29d5..b212d4bc 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/ToolsService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/ToolsService.cs @@ -6,50 +6,48 @@ namespace NetAdmin.SysComponent.Application.Services.Sys; public sealed class ToolsService : ServiceBase, IToolsService { /// - public string AesDecode(AesDecodeReq req) - { + public string AesDecode(AesDecodeReq req) { req.ThrowIfInvalid(); return req.CipherText.AesDe(GlobalStatic.SecretKey[..32]); } /// - public async Task ExecuteSqlAsync(ExecuteSqlReq req) - { + public async Task ExecuteSqlAsync(ExecuteSqlReq req) { req.ThrowIfInvalid(); var cmd = S().Ado.CommandFluent(req.Sql).CommandTimeout(req.TimeoutSecs).ExecuteArrayAsync(); return req.WaitResult ? await cmd.ConfigureAwait(false) : null; } /// - public async Task GetChangeLogAsync() - { - await using var stream = Assembly.GetEntryAssembly()!.GetManifestResourceStream("CHANGELOG.md"); - using var streamReader = new StreamReader(stream!); + public async Task GetChangeLogAsync() { + await using var stream = Assembly.GetEntryAssembly()!.GetManifestResourceStream("CHANGELOG.md"); + using var streamReader = new StreamReader(stream!); return await streamReader.ReadToEndAsync().ConfigureAwait(false); } /// - public Task> GetModulesAsync() - { - return Task.FromResult>( // - AppDomain.CurrentDomain.GetAssemblies() - .Where(a => a.FullName?.Contains('#') != true && a.FullName?.Contains("DynamicMethods") != true) - .Select(x => { - var asm = x.GetName(); - return new GetModulesRsp { Name = asm.Name, Version = asm.Version?.ToString() }; - }) - .OrderBy(x => x.Name)); + public Task> GetModulesAsync() { + return Task.FromResult>( + AppDomain + .CurrentDomain.GetAssemblies() + .Where(a => a.FullName?.Contains('#') != true && a.FullName?.Contains("DynamicMethods") != true) + .Select(x => + { + var asm = x.GetName(); + return new GetModulesRsp { Name = asm.Name, Version = asm.Version?.ToString() }; + } + ) + .OrderBy(x => x.Name) + ); } /// - public Task GetServerUtcTimeAsync() - { + public Task GetServerUtcTimeAsync() { return Task.FromResult(DateTime.Now); } /// - public Task GetVersionAsync() - { + public Task GetVersionAsync() { return Task.FromResult(GlobalStatic.ProductVersion); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserInviteService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserInviteService.cs index 0a93d59e..ba714dba 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserInviteService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserInviteService.cs @@ -12,12 +12,34 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class UserInviteService(BasicRepository rpo) // +public sealed class UserInviteService(BasicRepository rpo) : RepositoryService(rpo), IUserInviteService { - /// - public async Task BulkDeleteAsync(BulkReq req) + private readonly Expression> _toListExp = a => new Sys_UserInvite { + Id = a.Id + , CreatedTime = a.CreatedTime + , ModifiedTime = a.ModifiedTime + , Version = a.Version + , User = new Sys_User + { + Id = a.User.Id + , UserName = a.User.UserName + , Avatar = a.User.Avatar + , Roles = a.User.Roles + , Enabled = a.User.Enabled + } + , Owner = new Sys_User { Id = a.Owner.Invite.Owner.Id, UserName = a.Owner.Invite.Owner.UserName, Avatar = a.Owner.Invite.Owner.Avatar } + , Channel = new Sys_User + { + Id = a.Owner.Invite.Channel.Id, UserName = a.Owner.Invite.Channel.UserName, Avatar = a.Owner.Invite.Channel.Avatar + } + , SelfDepositAllowed = a.SelfDepositAllowed + , CommissionRatio = a.CommissionRatio + }; + + /// + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -30,59 +52,55 @@ public sealed class UserInviteService(BasicRepository rpo) } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary( - y => y, y => typeof(Sys_UserInvite).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value)) - .Where(x => x.Key.Any(y => !y.Value.NullOrEmpty())) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_UserInvite).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value + ) + ) + .Where(x => x.Key.Any(y => !y.Value.NullOrEmpty())) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateUserInviteReq req) - { + public async Task CreateAsync(CreateUserInviteReq req) { req.ThrowIfInvalid(); var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } /// - public async Task CreateFansAccountAsync(CreateFansAccountReq req) - { + public async Task CreateFansAccountAsync(CreateFansAccountReq req) { req.ThrowIfInvalid(); var rolesAllowApply = (await QueryRolesAllowApplyAsync().ConfigureAwait(false)).Select(x => x.Value); return !req.RoleIds.All(x => rolesAllowApply.Contains(x.ToInvString())) ? throw new NetAdminInvalidOperationException(Ln.此操作不被允许) : await S() - .CreateAsync(req with { Invite = new CreateUserInviteReq { OwnerId = UserToken.Id, OwnerDeptId = UserToken.DeptId } }) - .ConfigureAwait(false); + .CreateAsync(req with { Invite = new CreateUserInviteReq { OwnerId = UserToken.Id, OwnerDeptId = UserToken.DeptId } }) + .ConfigureAwait(false); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); return Rpo.DeleteAsync(a => a.Id == req.Id); } /// - public async Task EditAsync(EditUserInviteReq req) - { + public async Task EditAsync(EditUserInviteReq req) { req.ThrowIfInvalid(); #if DBTYPE_SQLSERVER return (await UpdateReturnListAsync(req).ConfigureAwait(false)).FirstOrDefault()?.Adapt(); @@ -92,65 +110,72 @@ public sealed class UserInviteService(BasicRepository rpo) } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); return ExportAsync(QueryInternal, req, Ln.用户邀请导出); } /// - public Task> GetAssociatedUserIdAsync(long userId, bool up = true) - { - return Rpo.Orm.Select() - .DisableGlobalFilter(Chars.FLG_FREE_SQL_GLOBAL_FILTER_SELF, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT - , Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_CHILDREN, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_SON) - .Where(a => a.Id == userId) - .AsTreeCte( // - up: up - , disableGlobalFilters: [ - Chars.FLG_FREE_SQL_GLOBAL_FILTER_SELF, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT - , Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_CHILDREN - , Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_SON - ]) - .ToListAsync(a => a.Id); + public Task> GetAssociatedUserIdAsync( + long userId + , bool up = true + ) { + return Rpo + .Orm.Select() + .DisableGlobalFilter( + Chars.FLG_FREE_SQL_GLOBAL_FILTER_SELF, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_CHILDREN + , Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_SON + ) + .Where(a => a.Id == userId) + .AsTreeCte( + up: up + , disableGlobalFilters: + [ + Chars.FLG_FREE_SQL_GLOBAL_FILTER_SELF, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_CHILDREN + , Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_SON + ] + ) + .ToListAsync(a => a.Id); } /// - public async Task GetAsync(QueryUserInviteReq req) - { + public async Task GetAsync(QueryUserInviteReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public Task GetSelfRechargeAllowedAsync() - { + public Task GetSelfDepositAllowedAsync() { return QueryInternal(new QueryReq { Filter = new QueryUserInviteReq { Id = UserToken.Id } }) - .DisableGlobalFilter(Chars.FLG_FREE_SQL_GLOBAL_FILTER_SELF, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT - , Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_CHILDREN, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_SON) - .ToOneAsync(a => a.SelfRechargeAllowed); + .DisableGlobalFilter( + Chars.FLG_FREE_SQL_GLOBAL_FILTER_SELF, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_CHILDREN + , Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_SON + ) + .ToOneAsync(a => a.SelfDepositAllowed); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(_toListExp) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); - var query = QueryInternal(req).Include(a => a.Owner).IncludeMany(a => a.User.Roles).WithNoLockNoWait(); + var query = QueryInternal(req) + .Include(a => a.Channel) + .Include(a => a.Owner) + .IncludeMany(a => a.User.Roles.Select(b => new Sys_Role { Id = b.Id, Name = b.Name })) + .WithNoLockNoWait(); var ret = req.Filter?.IsPlainQuery == true ? await query.ToListAsync().ConfigureAwait(false) : await query.ToTreeListAsync().ConfigureAwait(false); @@ -159,43 +184,50 @@ public sealed class UserInviteService(BasicRepository rpo) } /// - public async Task> QueryRolesAllowApplyAsync() - { + public async Task> QueryRolesAllowApplyAsync() { var dicService = S(); - var catalogIds = (await dicService.QueryCatalogAsync(new QueryReq { - DynamicFilter = new DynamicFilterInfo { - Field = nameof(QueryDicCatalogReq.Code) - , Operator = DynamicFilterOperators.Any - , Value = S() - .Roles - .Select(x => - $"{Chars.FLG_DIC_CATALOG_NEW_USER_ROLE_CONFIG}>{x.Id}") - } - }) - .ConfigureAwait(false)).Select(x => x.Id); + var catalogIds = (await dicService + .QueryCatalogAsync( + new QueryReq + { + DynamicFilter = new DynamicFilterInfo + { + Field = nameof(QueryDicCatalogReq.Code) + , Operator = DynamicFilterOperators.Any + , Value = S().Roles.Select(x => $"{Chars.FLG_DIC_CATALOG_NEW_USER_ROLE_CONFIG}>{x.Id}") + } + } + ) + .ConfigureAwait(false)).Select(x => x.Id); return !catalogIds.Any() ? null : await dicService - .QueryContentAsync(new QueryReq { - DynamicFilter = new DynamicFilterInfo { - Field = nameof(QueryDicContentReq.CatalogId) - , Operator = DynamicFilterOperators.Any - , Value = catalogIds - } - }) - .ConfigureAwait(false); + .QueryContentAsync( + new QueryReq + { + DynamicFilter = new DynamicFilterInfo + { + Field = nameof(QueryDicContentReq.CatalogId), Operator = DynamicFilterOperators.Any, Value = catalogIds + } + } + ) + .ConfigureAwait(false); } /// - public Task SetCommissionRatioAsync(SetCommissionRatioReq req) - { + public Task SetCommissionRatioAsync(SetCommissionRatioReq req) { req.ThrowIfInvalid(); return UpdateAsync(req with { CommissionRatio = req.CommissionRatio }, [nameof(req.CommissionRatio)], null, a => a.Id == req.Id, null, true); } /// - public async Task SetFansRoleAsync(SetFansRoleReq req) - { + public Task SetEnabledAsync(SetUserInviteEnabledReq req) { + req.ThrowIfInvalid(); + return S().SetEnabledAsync(new SetUserEnabledReq { Id = req.User.Id, Version = req.User.Version, Enabled = req.User.Enabled }); + } + + /// + public async Task SetFansRoleAsync(SetFansRoleReq req) { req.ThrowIfInvalid(); var rolesAllowApply = (await QueryRolesAllowApplyAsync().ConfigureAwait(false)).Select(x => x.Value).ToList(); @@ -210,13 +242,12 @@ public sealed class UserInviteService(BasicRepository rpo) } /// - public async Task SetInviterAsync(SetInviterReq req) - { + public async Task SetInviterAsync(SetInviterReq req) { req.ThrowIfInvalid(); var userService = S(); - var child = await userService.GetAsync(new QueryUserReq { Id = req.Id }).ConfigureAwait(false); - var parent = await userService.GetAsync(new QueryUserReq { Id = req.OwnerId!.Value }).ConfigureAwait(false); + var child = await userService.GetAsync(new QueryUserReq { Id = req.Id }).ConfigureAwait(false); + var parent = await userService.GetAsync(new QueryUserReq { Id = req.OwnerId!.Value }).ConfigureAwait(false); // 不能将上级设置为自己的下级避免死循环 if ((await GetAssociatedUserIdAsync(req.Id, false).ConfigureAwait(false)).Contains(req.OwnerId!.Value)) { @@ -229,31 +260,27 @@ public sealed class UserInviteService(BasicRepository rpo) _ = await S().EditAsync(dept.Adapt() with { ParentId = parent.DeptId }).ConfigureAwait(false); } - return await UpdateAsync( // + return await UpdateAsync( new Sys_UserInvite { Id = req.Id, Version = req.Version, OwnerId = req.OwnerId!.Value, OwnerDeptId = parent.DeptId } - , [nameof(req.OwnerDeptId), nameof(req.OwnerId)]) + , [nameof(req.OwnerDeptId), nameof(req.OwnerId)] + ) .ConfigureAwait(false); } /// - public Task SetSelfRechargeAllowedAsync(SetSelfRechargeAllowedReq req) - { + public Task SetSelfDepositAllowedAsync(SetSelfDepositAllowedReq req) { req.ThrowIfInvalid(); - return UpdateAsync(req, [nameof(req.SelfRechargeAllowed)]); + return UpdateAsync(req, [nameof(req.SelfDepositAllowed)]); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private ISelect QueryInternal(QueryReq req) - { - var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter) - .WhereIf( // - req.Filter?.Id > 0, a => a.Id == req.Filter.Id); + private ISelect QueryInternal(QueryReq req) { + var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereIf(req.Filter?.Id > 0, a => a.Id == req.Filter.Id); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault switch (req.Order) { diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserProfileService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserProfileService.cs index 1bc654b5..2e35d0ff 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserProfileService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserProfileService.cs @@ -8,20 +8,17 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class UserProfileService(BasicRepository rpo) // +public sealed class UserProfileService(BasicRepository rpo) : RepositoryService(rpo), IUserProfileService { /// /// 构建应用配置 /// - public static string BuildAppConfig(Dictionary roles) - { + public static string BuildAppConfig(Dictionary roles) { try { - return new string[][] { [ - Chars.FLG_FRONT_APP_SET_HOME_GRID - , new { content = roles.MaxBy(x => x.Key).Value.ToObject(), datetime = 0 }.ToJson() - ] - }.ToJson(); + return new string[][] + { [Chars.FLG_FRONT_APP_SET_HOME_GRID, new { content = roles.MaxBy(x => x.Key).Value.ToObject(), datetime = 0 }.ToJson()] + }.ToJson(); } catch { return "[]"; @@ -29,8 +26,7 @@ public sealed class UserProfileService(BasicRepository rp } /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -43,46 +39,44 @@ public sealed class UserProfileService(BasicRepository rp } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternalComplex(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary( - y => y, y => typeof(Sys_UserProfile).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_UserProfile).GetProperty(y)!.GetValue(x.Key)?.ToString()) + , x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateUserProfileReq req) - { + public async Task CreateAsync(CreateUserProfileReq req) { req.ThrowIfInvalid(); var entity = req.Adapt(); - var ret = await Rpo.InsertAsync(entity).ConfigureAwait(false); + var ret = await Rpo.InsertAsync(entity).ConfigureAwait(false); return ret.Adapt(); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); return Rpo.DeleteAsync(a => a.Id == req.Id); } /// - public async Task EditAsync(EditUserProfileReq req) - { + public async Task EditAsync(EditUserProfileReq req) { req.ThrowIfInvalid(); return @@ -96,82 +90,97 @@ public sealed class UserProfileService(BasicRepository rp } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public async Task GetAsync(QueryUserProfileReq req) - { + public async Task GetAsync(QueryUserProfileReq req) { req.ThrowIfInvalid(); var ret = await QueryInternalComplex(new QueryReq { Filter = req, Order = Orders.None }) - .ToOneAsync() - .ConfigureAwait(false); + .ToOneAsync() + .ConfigureAwait(false); return ret.Adapt(); } /// - public async Task GetSessionUserAppConfigAsync() - { + public async Task GetSessionUserAppConfigAsync() { var ret = await Rpo.Select.Where(a => a.Id == UserToken.Id).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternalComplex(req) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync((a, b, c, d, e) => new { - a - , b = new { b.Key, b.Value } - , c = new { c.Key, c.Value } - , d = new { d.Key, d.Value } - , e = new { e.Key, e.Value } - }) - .ConfigureAwait(false); + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(( + a + , b + , c + , d + , e + ) => new + { + a + , b = new { b.Key, b.Value } + , c = new { c.Key, c.Value } + , d = new { d.Key, d.Value } + , e = new { e.Key, e.Value } + } + ) + .ConfigureAwait(false); - return new PagedQueryRsp(req.Page, req.PageSize, total - , list.ConvertAll(x => x.a.Adapt() with { - NationArea = x.b.Adapt() - , CompanyArea = x.c.Adapt() - , HomeArea = x.d.Adapt() - , EmergencyContactArea = x.e.Adapt() - })); + return new PagedQueryRsp( + req.Page, req.PageSize, total + , list.ConvertAll(x => x.a.Adapt() with + { + NationArea = x.b.Adapt() + , CompanyArea = x.c.Adapt() + , HomeArea = x.d.Adapt() + , EmergencyContactArea = x.e.Adapt() + } + ) + ); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternalComplex(req) - .WithNoLockNoWait() - .Take(req.Count) - .ToListAsync((a, b, c, d, e) => new { - a - , b = new { b.Key, b.Value } - , c = new { c.Key, c.Value } - , d = new { d.Key, d.Value } - , e = new { e.Key, e.Value } - }) - .ConfigureAwait(false); - return ret.ConvertAll(x => x.a.Adapt() with { - NationArea = x.b.Key == null ? null : x.b.Adapt() - , CompanyArea = x.c.Key == null ? null : x.c.Adapt() - , HomeArea = x.d.Key == null ? null : x.d.Adapt() - , EmergencyContactArea - = x.e.Key == null ? null : x.e.Adapt() - }); + .WithNoLockNoWait() + .Take(req.Count) + .ToListAsync(( + a + , b + , c + , d + , e + ) => new + { + a + , b = new { b.Key, b.Value } + , c = new { c.Key, c.Value } + , d = new { d.Key, d.Value } + , e = new { e.Key, e.Value } + } + ) + .ConfigureAwait(false); + return ret.ConvertAll(x => x.a.Adapt() with + { + NationArea = x.b.Key == null ? null : x.b.Adapt() + , CompanyArea = x.c.Key == null ? null : x.c.Adapt() + , HomeArea = x.d.Key == null ? null : x.d.Adapt() + , EmergencyContactArea = x.e.Key == null ? null : x.e.Adapt() + } + ); } /// - public Task SetSessionUserAppConfigAsync(SetSessionUserAppConfigReq req) - { + public Task SetSessionUserAppConfigAsync(SetSessionUserAppConfigReq req) { req.ThrowIfInvalid(); // 默认仪表版 @@ -183,14 +192,12 @@ public sealed class UserProfileService(BasicRepository rp } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private ISelect QueryInternal(QueryReq req) - { + private ISelect QueryInternal(QueryReq req) { var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault @@ -210,22 +217,60 @@ public sealed class UserProfileService(BasicRepository rp } private ISelect QueryInternalComplex( - QueryReq req) - { + QueryReq req + ) { #pragma warning disable CA1305 - var ret = Rpo.Orm.Select() - .LeftJoin((a, b, _, __, ___) => a.NationArea.ToString() == b.Value && b.CatalogId == Numbers.ID_DIC_CATALOG_GEO_AREA) - .LeftJoin((a, _, c, __, ___) => a.CompanyArea.ToString() == c.Value && c.CatalogId == Numbers.ID_DIC_CATALOG_GEO_AREA) - .LeftJoin((a, _, __, d, ___) => a.HomeArea.ToString() == d.Value && d.CatalogId == Numbers.ID_DIC_CATALOG_GEO_AREA) - .LeftJoin((a, _, __, ___, e) => a.EmergencyContactArea.ToString() == e.Value && e.CatalogId == Numbers.ID_DIC_CATALOG_GEO_AREA) - .WhereDynamicFilter(req.DynamicFilter); + var ret = Rpo + .Orm.Select() + .LeftJoin(( + a + , b + , _ + , __ + , ___ + ) => a.NationArea.ToString() == b.Value && b.CatalogId == Numbers.ID_DIC_CATALOG_GEO_AREA + ) + .LeftJoin(( + a + , _ + , c + , __ + , ___ + ) => a.CompanyArea.ToString() == c.Value && c.CatalogId == Numbers.ID_DIC_CATALOG_GEO_AREA + ) + .LeftJoin(( + a + , _ + , __ + , d + , ___ + ) => a.HomeArea.ToString() == d.Value && d.CatalogId == Numbers.ID_DIC_CATALOG_GEO_AREA + ) + .LeftJoin(( + a + , _ + , __ + , ___ + , e + ) => a.EmergencyContactArea.ToString() == e.Value && e.CatalogId == Numbers.ID_DIC_CATALOG_GEO_AREA + ) + .WhereDynamicFilter(req.DynamicFilter); - return req.Order switch { - Orders.None => ret - , Orders.Random => ret.OrderByRandom() - , _ => ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending) - .OrderByDescending((a, _, __, ___, ____) => a.Id) - }; + return req.Order switch + { + Orders.None => ret + , Orders.Random => ret.OrderByRandom() + , _ => ret + .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending) + .OrderByDescending(( + a + , _ + , __ + , ___ + , ____ + ) => a.Id + ) + }; #pragma warning restore CA1305 } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserRoleService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserRoleService.cs index 621a9fc3..f7d47f2d 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserRoleService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserRoleService.cs @@ -6,12 +6,11 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class UserRoleService(BasicRepository rpo) // +public sealed class UserRoleService(BasicRepository rpo) : RepositoryService(rpo), IUserRoleService { /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -24,101 +23,91 @@ public sealed class UserRoleService(BasicRepository rpo) // } /// - public Task BulkDeleteByUserIdAsync(long userId) - { + public Task BulkDeleteByUserIdAsync(long userId) { return Rpo.DeleteAsync(a => a.UserId == userId); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_UserRole).GetProperty(y)!.GetValue(x.Key)?.ToString()) - , x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_UserRole).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateUserRoleReq req) - { + public async Task CreateAsync(CreateUserRoleReq req) { req.ThrowIfInvalid(); var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); return Rpo.DeleteAsync(a => a.Id == req.Id); } /// - public Task EditAsync(EditUserRoleReq req) - { + public Task EditAsync(EditUserRoleReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public async Task GetAsync(QueryUserRoleReq req) - { + public async Task GetAsync(QueryUserRoleReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(req) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private ISelect QueryInternal(QueryReq req) - { + private ISelect QueryInternal(QueryReq req) { var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs index c9d852d5..efce896b 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs @@ -16,36 +16,38 @@ namespace NetAdmin.SysComponent.Application.Services.Sys; /// public sealed class UserService( - BasicRepository rpo // - , IUserProfileService userProfileService // - , IUserInviteService userInviteService // - , IUserWalletService userWalletService // - , IVerifyCodeService verifyCodeService // - , IEventPublisher eventPublisher) // - : RepositoryService(rpo), IUserService + BasicRepository rpo + , IUserProfileService userProfileService + , IUserInviteService userInviteService + , IUserWalletService userWalletService + , IVerifyCodeService verifyCodeService + , IEventPublisher eventPublisher) : RepositoryService(rpo), IUserService { - private readonly Expression> _listUserExp = a => // - new Sys_User { - Id = a.Id - , Avatar = a.Avatar - , Email = a.Email - , Mobile = a.Mobile - , Enabled = a.Enabled - , UserName = a.UserName - , Summary = a.Summary - , Version = a.Version - , CreatedTime = a.CreatedTime - , LastLoginTime = a.LastLoginTime - , Dept = new Sys_Dept { Id = a.Dept.Id, Name = a.Dept.Name } - , Roles = a.Roles - , CreatedUserId = a.CreatedUserId - , CreatedUserName = a.CreatedUserName - , Invite = new Sys_UserInvite { Owner = new Sys_User { Id = a.Invite.Owner.Id, UserName = a.Invite.Owner.UserName } } - }; + private readonly Expression> _listUserExp = a => new Sys_User + { + Id = a.Id + , Avatar = a.Avatar + , Email = a.Email + , Mobile = a.Mobile + , Enabled = a.Enabled + , UserName = a.UserName + , Summary = a.Summary + , Version = a.Version + , CreatedTime = a.CreatedTime + , LastLoginTime = a.LastLoginTime + , Dept = new Sys_Dept { Id = a.Dept.Id, Name = a.Dept.Name } + , Roles = a.Roles + , CreatedUserId = a.CreatedUserId + , CreatedUserName = a.CreatedUserName + , Invite = new Sys_UserInvite + { + Owner = new Sys_User { Id = a.Invite.Owner.Id, UserName = a.Invite.Owner.UserName } + , Channel = new Sys_User { Id = a.Invite.Channel.Id, UserName = a.Invite.Channel.UserName } + } + }; /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -58,29 +60,25 @@ public sealed class UserService( } /// - public Task CheckInviterAvailableAsync(CheckInviterAvailableReq req) - { + public Task CheckInviterAvailableAsync(CheckInviterAvailableReq req) { req.ThrowIfInvalid(); return Rpo.Select.Where(a => a.InviteCode == req.Code && a.Enabled).AnyAsync(); } /// - public async Task CheckMobileAvailableAsync(CheckMobileAvailableReq req) - { + public async Task CheckMobileAvailableAsync(CheckMobileAvailableReq req) { req.ThrowIfInvalid(); return !await Rpo.Select.Where(a => a.Mobile == req.Mobile && a.Id != req.Id).AnyAsync().ConfigureAwait(false); } /// - public async Task CheckUserNameAvailableAsync(CheckUserNameAvailableReq req) - { + public async Task CheckUserNameAvailableAsync(CheckUserNameAvailableReq req) { req.ThrowIfInvalid(); return !await Rpo.Select.Where(a => a.UserName == req.UserName && a.Id != req.Id).AnyAsync().ConfigureAwait(false); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); #pragma warning disable VSTHRD103 return QueryInternal(req).WithNoLockNoWait().CountAsync(); @@ -88,25 +86,25 @@ public sealed class UserService( } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); #pragma warning disable S6966 var ret = await QueryInternal(req with { Order = Orders.None }) - #pragma warning restore S6966 - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_User).GetProperty(y)!.GetValue(x.Key)?.ToString()) - , x.Value)) - .OrderByDescending(x => x.Value); + #pragma warning restore S6966 + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_User).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateUserReq req) - { + public async Task CreateAsync(CreateUserReq req) { req.ThrowIfInvalid(); var roles = await CreateEditCheckAsync(req).ConfigureAwait(false); @@ -122,16 +120,14 @@ public sealed class UserService( // 档案表 var appConfig = UserProfileService.BuildAppConfig(roles); - _ = await userProfileService.CreateAsync((req.Profile ?? new CreateUserProfileReq()) with // - { - Id = dbUser.Id // - , AppConfig = appConfig - }) - .ConfigureAwait(false); + _ = await userProfileService + .CreateAsync((req.Profile ?? new CreateUserProfileReq()) with { Id = dbUser.Id, AppConfig = appConfig }) + .ConfigureAwait(false); // 钱包表 - _ = await userWalletService.CreateAsync(new CreateUserWalletReq { Id = dbUser.Id, OwnerId = dbUser.Id, OwnerDeptId = dbUser.DeptId }) - .ConfigureAwait(false); + _ = await userWalletService + .CreateAsync(new CreateUserWalletReq { Id = dbUser.Id, OwnerId = dbUser.Id, OwnerDeptId = dbUser.DeptId }) + .ConfigureAwait(false); var userList = await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = dbUser.Id } }).ConfigureAwait(false); @@ -140,8 +136,8 @@ public sealed class UserService( // 创建一个用户自己的部门 _ = await S() - .CreateAsync(new CreateDeptReq { Id = userId, Name = $"{req.UserName}", ParentId = req.Invite?.OwnerDeptId ?? 0 }) - .ConfigureAwait(false); + .CreateAsync(new CreateDeptReq { Id = userId, Name = $"{req.UserName}", ParentId = req.Invite?.OwnerDeptId ?? 0 }) + .ConfigureAwait(false); // 发布用户创建事件 var ret = userList.First(); @@ -150,8 +146,7 @@ public sealed class UserService( } /// - public async Task DeleteAsync(DelReq req) - { + public async Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); // 删除主表 @@ -167,13 +162,12 @@ public sealed class UserService( } /// - public async Task EditAsync(EditUserReq req) - { + public async Task EditAsync(EditUserReq req) { req.ThrowIfInvalid(); _ = await CreateEditCheckAsync(req).ConfigureAwait(false); // 主表 - var entity = req.Adapt(); + var entity = req.Adapt(); var ignoreCols = new List { nameof(Sys_User.Id), nameof(Sys_User.Token) }; if (entity.Password == Guid.Empty) { ignoreCols.Add(nameof(Sys_User.Password)); @@ -197,39 +191,34 @@ public sealed class UserService( } /// - public async Task ExistAsync(QueryReq req) - { + public async Task ExistAsync(QueryReq req) { req.ThrowIfInvalid(); return await (await QueryInternalAsync(req).ConfigureAwait(false)).AnyAsync().ConfigureAwait(false); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); return ExportAsync(QueryInternal, req, Ln.用户导出); } /// - public async Task GetAsync(QueryUserReq req) - { + public async Task GetAsync(QueryUserReq req) { req.ThrowIfInvalid(); var ret = await (await QueryInternalAsync(new QueryReq { Filter = req, Order = Orders.None }).ConfigureAwait(false)) - .ToOneAsync() - .ConfigureAwait(false); + .ToOneAsync() + .ConfigureAwait(false); return ret.Adapt(); } /// - public Task GetSessionUserAppConfigAsync() - { + public Task GetSessionUserAppConfigAsync() { return userProfileService.GetSessionUserAppConfigAsync(); } /// /// 用户名或密码错误 - public async Task LoginByPwdAsync(LoginByPwdReq req) - { + public async Task LoginByPwdAsync(LoginByPwdReq req) { req.ThrowIfInvalid(); var pwd = req.Password.Pwd().Guid(); @@ -241,7 +230,7 @@ public sealed class UserService( } else { dbUser = new EmailAddressAttribute().IsValid(req.Account) - ? await Rpo.Where(a => a.Email == req.Account && a.Password == pwd).ToOneAsync().ConfigureAwait(false) + ? await Rpo.Where(a => a.Email == req.Account && a.Password == pwd).ToOneAsync().ConfigureAwait(false) : await Rpo.Where(a => a.UserName == req.Account && a.Password == pwd).ToOneAsync().ConfigureAwait(false); } @@ -251,8 +240,7 @@ public sealed class UserService( /// /// 验证码不正确 /// 用户不存在 - public async Task LoginBySmsAsync(LoginBySmsReq req) - { + public async Task LoginBySmsAsync(LoginBySmsReq req) { req.ThrowIfInvalid(); if (!await verifyCodeService.VerifyAsync(req.Adapt()).ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.验证码不正确); @@ -263,26 +251,25 @@ public sealed class UserService( } /// - public async Task LoginByUserIdAsync(long userId) - { - var dbUser = await Rpo.Where(a => a.Id == userId).ToOneAsync().ConfigureAwait(false); - - return await LoginInternalAsync(dbUser).ConfigureAwait(false); + public async Task LoginByUserIdAsync(LoginByUserIdReq req) { + var dbUser = await Rpo.Where(a => a.Id == req.UserId).ToOneAsync().ConfigureAwait(false); + return await LoginInternalAsync(dbUser, !req.NoTrace).ConfigureAwait(false); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); - var listUserExp = req.GetToListExp() ?? _listUserExp; + var listUserExp = req.GetToListExp() ?? _listUserExp; var includeRoles = listUserExp == _listUserExp; - var select = await QueryInternalAsync(req, includeRoles).ConfigureAwait(false); - IEnumerable list = await select.Include(a => a.Invite.Owner) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(listUserExp) - .ConfigureAwait(false); + var select = await QueryInternalAsync(req, includeRoles).ConfigureAwait(false); + IEnumerable list = await select + .Include(a => a.Invite.Owner) + .Include(a => a.Invite.Channel) + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(listUserExp) + .ConfigureAwait(false); if (includeRoles) { list = list.Select(x => x with { Roles = x.Roles.OrderBy(y => y.Sort).ThenBy(y => y.Id).ToList() }); } @@ -291,29 +278,25 @@ public sealed class UserService( } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); - var list = await (await QueryInternalAsync(req, false).ConfigureAwait(false)).WithNoLockNoWait() - .Take(req.Count) - .ToListAsync(a => new Sys_User { - Id = a.Id, UserName = a.UserName - }) - .ConfigureAwait(false); + var list = await (await QueryInternalAsync(req, false).ConfigureAwait(false)) + .WithNoLockNoWait() + .Take(req.Count) + .ToListAsync(a => new Sys_User { Id = a.Id, UserName = a.UserName }) + .ConfigureAwait(false); return list.Adapt>(); } /// - public Task> QueryProfileAsync(QueryReq req) - { + public Task> QueryProfileAsync(QueryReq req) { req.ThrowIfInvalid(); return userProfileService.QueryAsync(req); } /// /// 验证码不正确 - public async Task RegisterAsync(RegisterUserReq req) - { + public async Task RegisterAsync(RegisterUserReq req) { req.ThrowIfInvalid(); var config = await S().GetLatestConfigAsync().ConfigureAwait(false); @@ -321,7 +304,7 @@ public sealed class UserService( throw new NetAdminInvalidOperationException(Ln.验证码不正确); } - long? inviterId = null; + long? inviterId = null; long? inviterDeptId = null; if (!req.Inviter.NullOrEmpty() || config.RegisterInviteRequired) { if (req.Inviter.NullOrEmpty()) { @@ -333,14 +316,14 @@ public sealed class UserService( throw new NetAdminInvalidOperationException(Ln.邀请码不正确); } - inviterId = inviter.Id; + inviterId = inviter.Id; inviterDeptId = inviter.DeptId; } - var createReq = req.Adapt() with { - Profile = new CreateUserProfileReq() - , Invite = new CreateUserInviteReq { OwnerId = inviterId, OwnerDeptId = inviterDeptId } - }; + var createReq = req.Adapt() with + { + Profile = new CreateUserProfileReq(), Invite = new CreateUserInviteReq { OwnerId = inviterId, OwnerDeptId = inviterDeptId } + }; var ret = (await CreateAsync(createReq with { Mobile = config.RegisterMobileRequired ? createReq.Mobile : null }).ConfigureAwait(false)) .Adapt(); await eventPublisher.PublishAsync(new UserRegisteredEvent(ret)).ConfigureAwait(false); @@ -350,35 +333,37 @@ public sealed class UserService( /// /// 验证码不正确 /// 用户不存在 - public async Task ResetPasswordAsync(ResetPasswordReq req) - { + public async Task ResetPasswordAsync(ResetPasswordReq req) { req.ThrowIfInvalid(); if (!await verifyCodeService.VerifyAsync(req.VerifySmsCodeReq).ConfigureAwait(false)) { throw new NetAdminInvalidOperationException(Ln.验证码不正确); } var dto = (await Rpo.Where(a => a.Mobile == req.VerifySmsCodeReq.DestDevice).ToOneAsync(a => new { a.Version, a.Id }).ConfigureAwait(false)) - .Adapt() with { - Password = req.PasswordText.Pwd().Guid() - }; + .Adapt() with + { + Password = req.PasswordText.Pwd().Guid() + }; return await UpdateAsync(dto, [nameof(Sys_User.Password)]).ConfigureAwait(false); } /// - public async Task SetAvatarAsync(SetAvatarReq req) - { + public async Task SetAvatarAsync(SetAvatarReq req) { req.ThrowIfInvalid(); if (await UpdateAsync( - req with { - Id = UserToken.Id - , Version = await Rpo.Where(a => a.Id == UserToken.Id).ToOneAsync(a => a.Version).ConfigureAwait(false) - } - , [nameof(Sys_User.Avatar)]) - .ConfigureAwait(false) <= 0) { + req with + { + Id = UserToken.Id, Version = await Rpo.Where(a => a.Id == UserToken.Id).ToOneAsync(a => a.Version).ConfigureAwait(false) + } + , [nameof(Sys_User.Avatar)] + ) + .ConfigureAwait(false) + <= 0) { return null; } - var ret = (await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = UserToken.Id } }).ConfigureAwait(false)).First() + var ret = (await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = UserToken.Id } }).ConfigureAwait(false)) + .First() .Adapt(); // 发布用户更新事件 @@ -387,8 +372,7 @@ public sealed class UserService( } /// - public async Task SetEmailAsync(SetEmailReq req) - { + public async Task SetEmailAsync(SetEmailReq req) { req.ThrowIfInvalid(); var user = await Rpo.Where(a => a.Id == UserToken.Id).ToOneAsync(a => new { a.Mobile, a.Version, a.Email }).ConfigureAwait(false); @@ -403,13 +387,14 @@ public sealed class UserService( } } - if (await UpdateAsync( // - new Sys_User { Email = req.DestDevice, Id = UserToken.Id, Version = user.Version }, [nameof(Sys_User.Email)]) - .ConfigureAwait(false) <= 0) { + if (await UpdateAsync(new Sys_User { Email = req.DestDevice, Id = UserToken.Id, Version = user.Version }, [nameof(Sys_User.Email)]) + .ConfigureAwait(false) + <= 0) { return null; } - var ret = (await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = UserToken.Id } }).ConfigureAwait(false)).First() + var ret = (await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = UserToken.Id } }).ConfigureAwait(false)) + .First() .Adapt(); // 发布用户更新事件 @@ -418,15 +403,13 @@ public sealed class UserService( } /// - public Task SetEnabledAsync(SetUserEnabledReq req) - { + public Task SetEnabledAsync(SetUserEnabledReq req) { req.ThrowIfInvalid(); return UpdateAsync(req, [nameof(req.Enabled)]); } /// - public async Task SetMobileAsync(SetMobileReq req) - { + public async Task SetMobileAsync(SetMobileReq req) { req.ThrowIfInvalid(); var user = await Rpo.Where(a => a.Id == UserToken.Id).ToOneAsync(a => new { a.Version, a.Mobile }).ConfigureAwait(false); @@ -446,14 +429,16 @@ public sealed class UserService( throw new NetAdminInvalidOperationException($"{Ln.新手机号码验证码不正确}"); } - if (await UpdateAsync( // - new Sys_User { Version = user.Version, Id = UserToken.Id, Mobile = req.NewVerifySmsCodeReq.DestDevice } - , [nameof(Sys_User.Mobile)]) - .ConfigureAwait(false) <= 0) { + if (await UpdateAsync( + new Sys_User { Version = user.Version, Id = UserToken.Id, Mobile = req.NewVerifySmsCodeReq.DestDevice }, [nameof(Sys_User.Mobile)] + ) + .ConfigureAwait(false) + <= 0) { return null; } - var ret = (await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = UserToken.Id } }).ConfigureAwait(false)).First() + var ret = (await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = UserToken.Id } }).ConfigureAwait(false)) + .First() .Adapt(); // 发布用户更新事件 @@ -462,73 +447,81 @@ public sealed class UserService( } /// - public async Task SetPasswordAsync(SetPasswordReq req) - { + public async Task SetPasswordAsync(SetPasswordReq req) { req.ThrowIfInvalid(); - var version = await Rpo.Where(a => a.Id == UserToken.Id && a.Password == req.OldPassword.Pwd().Guid()) - .ToOneAsync(a => new long?(a.Version)) - .ConfigureAwait(false) ?? throw new NetAdminInvalidOperationException($"{Ln.旧密码不正确}"); + var version = await Rpo + .Where(a => a.Id == UserToken.Id && a.Password == req.OldPassword.Pwd().Guid()) + .ToOneAsync(a => new long?(a.Version)) + .ConfigureAwait(false) + ?? throw new NetAdminInvalidOperationException($"{Ln.旧密码不正确}"); - return await UpdateAsync( // - new Sys_User { Id = UserToken.Id, Password = req.NewPassword.Pwd().Guid(), Version = version }, [nameof(Sys_User.Password)]) + return await UpdateAsync( + new Sys_User { Id = UserToken.Id, Password = req.NewPassword.Pwd().Guid(), Version = version }, [nameof(Sys_User.Password)] + ) .ConfigureAwait(false); } /// - public Task SetSessionUserAppConfigAsync(SetSessionUserAppConfigReq req) - { + public Task SetSessionUserAppConfigAsync(SetSessionUserAppConfigReq req) { return userProfileService.SetSessionUserAppConfigAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } /// - public async Task UserInfoAsync() - { - var dbUser = await Rpo.Where(a => a.Token == UserToken.Token && a.Enabled) - .WithNoLockNoWait() - .Include(a => a.Dept) - .IncludeMany(a => a.Roles, OtherIncludes) - .ToOneAsync() - .ConfigureAwait(false); + public async Task UserInfoAsync() { + var dbUser = await Rpo + .Where(a => a.Token == UserToken.Token && a.Enabled) + .WithNoLockNoWait() + .Include(a => a.Dept) + .IncludeMany(a => a.Roles, OtherIncludes) + .ToOneAsync() + .ConfigureAwait(false); var deptIds = await S().GetChildDeptIdsAsync(dbUser.DeptId).ConfigureAwait(false); - return dbUser.Adapt() with { DeptIds = deptIds.ToList().ConvertAll(x => (long?)x) }; - - static void OtherIncludes(ISelect select) + return dbUser.Adapt() with { - _ = select.Where(a => a.Enabled) - .WithNoLockNoWait() - .IncludeMany(a => a.Menus, then => then.WithNoLockNoWait()) - .IncludeMany(a => a.Depts, then => then.WithNoLockNoWait()) - .IncludeMany(a => a.Apis, then => then.WithNoLockNoWait()); + AllDeptIds = deptIds.ConvertAll(x => (long?)x[0]) + , SonDeptIds = deptIds.Where(x => x[1] == deptIds[0][0]).Select(x => (long?)x[0]).Concat([deptIds[0][0]]).ToList() + }; + + static void OtherIncludes(ISelect select) { + _ = select + .Where(a => a.Enabled) + .WithNoLockNoWait() + .IncludeMany(a => a.Menus, then => then.WithNoLockNoWait()) + .IncludeMany(a => a.Depts, then => then.WithNoLockNoWait()) + .IncludeMany(a => a.Apis, then => then.WithNoLockNoWait()); } } - private async Task> CreateEditCheckAsync(CreateEditUserReq req) - { + private async Task> CreateEditCheckAsync(CreateEditUserReq req) { // 检查角色是否存在 - var roles = await Rpo.Orm.Select() - .WithNoLockNoWait() - .Where(a => req.RoleIds.Contains(a.Id)) - .ToDictionaryAsync(a => a.Id, a => a.DashboardLayout) - .ConfigureAwait(false); + var roles = await Rpo + .Orm.Select() + .WithNoLockNoWait() + .Where(a => req.RoleIds.Contains(a.Id)) + .ToDictionaryAsync(a => a.Id, a => a.DashboardLayout) + .ConfigureAwait(false); return roles.Count != req.RoleIds.Count ? throw new NetAdminInvalidOperationException(Ln.角色不存在) : roles; } - private async Task LoginInternalAsync(Sys_User dbUser) - { + private async Task LoginInternalAsync( + Sys_User dbUser + , bool trace = true + ) { if (!dbUser.Enabled) { throw new NetAdminInvalidOperationException(Ln.请联系管理员激活账号); } - _ = await UpdateAsync(dbUser with { LastLoginTime = DateTime.Now }, [nameof(Sys_User.LastLoginTime)], ignoreVersion: true) - .ConfigureAwait(false); + if (trace) { + _ = await UpdateAsync(dbUser with { LastLoginTime = DateTime.Now }, [nameof(Sys_User.LastLoginTime)], ignoreVersion: true) + .ConfigureAwait(false); + } var tokenPayload = new Dictionary { { nameof(ContextUserToken), dbUser.Adapt() } }; @@ -536,8 +529,11 @@ public sealed class UserService( return new LoginRsp { AccessToken = accessToken, RefreshToken = JWTEncryption.GenerateRefreshToken(accessToken) }; } - private ISelect QueryInternal(QueryReq req, IEnumerable deptIds, bool includeRoles = true) - { + private ISelect QueryInternal( + QueryReq req + , IEnumerable deptIds + , bool includeRoles = true + ) { var ret = Rpo.Select.Include(a => a.Dept); #pragma warning disable RCS1196 @@ -547,19 +543,20 @@ public sealed class UserService( ret = ret.IncludeMany(a => Enumerable.Select(a.Roles, b => new Sys_Role { Id = b.Id, Name = b.Name })); } - ret = ret.WhereDynamicFilter(req.DynamicFilter) - .WhereIf(deptIds != null, a => deptIds.Contains(a.DeptId)) - .WhereIf( // - req.Filter?.Id > 0, a => a.Id == req.Filter.Id) - .WhereIf( // - req.Filter?.InviteCode?.Length > 0, a => a.InviteCode == req.Filter.InviteCode) - .WhereIf( // - req.Filter?.RoleId > 0, a => Enumerable.Any(a.Roles, b => b.Id == req.Filter.RoleId)) - .WhereIf( // - req.Keywords?.Length > 0 - , a => a.Id == req.Keywords.Int64Try(0) || a.UserName.Contains(req.Keywords) || a.Mobile == req.Keywords || - a.Email == req.Keywords || - a.Summary.Contains(req.Keywords)); + ret = ret + .WhereDynamicFilter(req.DynamicFilter) + .WhereIf(deptIds != null, a => deptIds.Contains(a.DeptId)) + .WhereIf(req.Filter?.Id > 0, a => a.Id == req.Filter.Id) + .WhereIf(req.Filter?.InviteCode?.Length > 0, a => a.InviteCode == req.Filter.InviteCode) + .WhereIf(req.Filter?.RoleId > 0, a => Enumerable.Any(a.Roles, b => b.Id == req.Filter.RoleId)) + .WhereIf( + req.Keywords?.Length > 0 + , a => a.Id == req.Keywords.Int64Try(0) + || a.UserName.Contains(req.Keywords) + || a.Mobile == req.Keywords + || a.Email == req.Keywords + || a.Summary.Contains(req.Keywords) + ); // ReSharper restore InvokeAsExtensionMethod #pragma warning restore RCS1196 @@ -581,8 +578,7 @@ public sealed class UserService( return ret.AppendOtherFilters(req); } - private ISelect QueryInternal(QueryReq req) - { + private ISelect QueryInternal(QueryReq req) { IEnumerable deptIds = null; if (req.Filter?.DeptId > 0) { deptIds = Rpo.Orm.Select().Where(a => a.Id == req.Filter.DeptId).AsTreeCte().ToList(a => a.Id); @@ -591,8 +587,10 @@ public sealed class UserService( return QueryInternal(req, deptIds); } - private async Task> QueryInternalAsync(QueryReq req, bool includeRoles = true) - { + private async Task> QueryInternalAsync( + QueryReq req + , bool includeRoles = true + ) { IEnumerable deptIds = null; if (req.Filter?.DeptId > 0) { deptIds = await Rpo.Orm.Select().Where(a => a.Id == req.Filter.DeptId).AsTreeCte().ToListAsync(a => a.Id).ConfigureAwait(false); diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserWalletService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserWalletService.cs index 84d59cd2..4d5794fa 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserWalletService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/UserWalletService.cs @@ -1,3 +1,5 @@ +using System.Net.Http.Headers; +using Ganss.Excel; using NetAdmin.Application.Extensions; using NetAdmin.Domain.DbMaps.Sys; using NetAdmin.Domain.Dto.Sys.UserWallet; @@ -6,12 +8,42 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class UserWalletService(BasicRepository rpo) // +public sealed class UserWalletService(BasicRepository rpo) : RepositoryService(rpo), IUserWalletService { - /// - public async Task BulkDeleteAsync(BulkReq req) + private readonly Expression> _toListExp = a => new Sys_UserWallet { + Id = a.Id + , CreatedTime = a.CreatedTime + , ModifiedTime = a.ModifiedTime + , Version = a.Version + , Owner = new Sys_User + { + Id = a.Owner.Id + , UserName = a.Owner.UserName + , Avatar = a.Owner.Avatar + , Roles = a.Owner.Roles + , Invite = new Sys_UserInvite + { + Owner = new Sys_User + { + Id = a.Owner.Invite.Owner.Id, UserName = a.Owner.Invite.Owner.UserName, Avatar = a.Owner.Invite.Owner.Avatar + } + , Channel + = new Sys_User + { + Id = a.Owner.Invite.Channel.Id, UserName = a.Owner.Invite.Channel.UserName, Avatar = a.Owner.Invite.Channel.Avatar + } + } + } + , AvailableBalance = a.AvailableBalance + , FrozenBalance = a.FrozenBalance + , TotalExpenditure = a.TotalExpenditure + , TotalIncome = a.TotalIncome + }; + + /// + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -24,49 +56,47 @@ public sealed class UserWalletService(BasicRepository rpo) } /// - public Task CountAsync(QueryReq req) - { + public async Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); - return QueryInternal(req).WithNoLockNoWait().CountAsync(); + return await (await QueryInternalComplexAsync(req).ConfigureAwait(false)).WithNoLockNoWait().CountAsync().ConfigureAwait(false); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); - var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary( - y => y, y => typeof(Sys_UserWallet).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value)) - .Where(x => x.Key.Any(y => !y.Value.NullOrEmpty())) - .OrderByDescending(x => x.Value); + var ret = await (await QueryInternalComplexAsync(req with { Order = Orders.None }).ConfigureAwait(false)) + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_UserWallet).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value + ) + ) + .Where(x => x.Key.Any(y => !y.Value.NullOrEmpty())) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateUserWalletReq req) - { + public async Task CreateAsync(CreateUserWalletReq req) { req.ThrowIfInvalid(); var ret = await Rpo.InsertAsync(req).ConfigureAwait(false); return ret.Adapt(); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); return Rpo.DeleteAsync(a => a.Id == req.Id); } /// - public async Task EditAsync(EditUserWalletReq req) - { + public async Task EditAsync(EditUserWalletReq req) { req.ThrowIfInvalid(); #if DBTYPE_SQLSERVER - return (await UpdateReturnListAsync(req, [nameof(req.FrozenBalance), nameof(req.AvailableBalance)]).ConfigureAwait(false)).FirstOrDefault() + return (await UpdateReturnListAsync(req, [nameof(req.FrozenBalance), nameof(req.AvailableBalance)]).ConfigureAwait(false)) + .FirstOrDefault() ?.Adapt(); #else return await UpdateAsync(req).ConfigureAwait(false) > 0 ? await GetAsync(new QueryUserWalletReq { Id = req.Id }).ConfigureAwait(false) : null; @@ -74,71 +104,104 @@ public sealed class UserWalletService(BasicRepository rpo) } /// - public Task ExportAsync(QueryReq req) - { + public async Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); - return ExportAsync(QueryInternal, req, Ln.用户钱包导出); + var list = await QueryInternal(req, null) + .Include(a => a.Owner.Invite.Owner) + .Include(a => a.Owner.Invite.Channel) + .IncludeMany(a => a.Owner.Roles.Select(b => new Sys_Role { Id = b.Id, Name = b.Name })) + .WithNoLockNoWait() + .Take(Numbers.MAX_LIMIT_EXPORT) + .ToListAsync(_toListExp) + .ConfigureAwait(false); + + var stream = new MemoryStream(); + await new ExcelMapper() + .SaveAsync( + stream + , list.ConvertAll(x => new ExportUserWalletRsp + { + 冻结余额 = (x.FrozenBalance / 100m).Round(2) + , 归属角色 = x.Owner.Roles.Select(y => y.Name).Join(",") + , 归属用户 = x.Owner.UserName + , 可用余额 = (x.AvailableBalance / 100m).Round(2) + , 钱包编号 = x.Id.ToInvString() + , 上级 = x.Owner.Invite.Owner?.UserName + , 渠道 = x.Owner.Invite.Channel?.UserName + , 总收入 = (x.TotalIncome / 100m).Round(2) + , 总支出 = (x.TotalExpenditure / 100m).Round(2) + , 最后交易时间 = x.ModifiedTime?.yyyy_MM_dd_HH_mm_ss() + } + ) + ) + .ConfigureAwait(false); + _ = stream.Seek(0, SeekOrigin.Begin); + App.HttpContext.Response.Headers.ContentDisposition = new ContentDispositionHeaderValue(Chars.FLG_HTTP_HEADER_VALUE_ATTACHMENT) + { + FileNameStar = $"钱包{list.Count}个-{list.Min(x => x.CreatedTime):MMddHHmm}-{list.Max(x => x. + CreatedTime):MMddHHmm}.xlsx" + }.ToString(); + return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM); } /// - public async Task GetAsync(QueryUserWalletReq req) - { + public async Task GetAsync(QueryUserWalletReq req) { req.ThrowIfInvalid(); - var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }) - .Include(a => a.Owner) - .ToOneAsync() - .ConfigureAwait(false); + var ret + = await (await QueryInternalComplexAsync(new QueryReq { Filter = req, Order = Orders.None }).ConfigureAwait(false)) + .IncludeMany(a => a.Owner.Roles.Select(b => new Sys_Role { Id = b.Id, Name = b.Name })) + .Include(a => a.Owner.Invite.Owner) + .Include(a => a.Owner.Invite.Channel) + .ToOneAsync(_toListExp) + .ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); - var list = await QueryInternal(req) - .IncludeMany(a => a.Owner.Roles) - .Include(a => a.Owner.Invite.Owner) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + var list = await (await QueryInternalComplexAsync(req).ConfigureAwait(false)) + .IncludeMany(a => a.Owner.Roles.Select(b => new Sys_Role { Id = b.Id, Name = b.Name })) + .Include(a => a.Owner.Invite.Owner) + .Include(a => a.Owner.Invite.Channel) + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(_toListExp) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); - var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); + var ret = await (await QueryInternalComplexAsync(req).ConfigureAwait(false)) + .WithNoLockNoWait() + .Take(req.Count) + .ToListAsync(req) + .ConfigureAwait(false); return ret.Adapt>(); } /// - public Task SumAsync(QueryReq req) - { + public async Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); - return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); + return await (await QueryInternalComplexAsync(req with { Order = Orders.None }).ConfigureAwait(false)) + .WithNoLockNoWait() + .SumAsync(req.GetSumExp()) + .ConfigureAwait(false); } - private ISelect QueryInternal(QueryReq req) - { - IEnumerable deptIds = null; - if (req.Filter?.DeptId > 0) { - deptIds = Rpo.Orm.Select().Where(a => a.Id == req.Filter.DeptId).AsTreeCte().ToList(a => a.Id); - } - - return QueryInternal(req, deptIds); - } - - private ISelect QueryInternal(QueryReq req, IEnumerable deptIds) - { - var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter) - .WhereIf(req.Filter?.Id > 0, a => a.Id == req.Filter.Id) - .WhereIf(deptIds != null, a => deptIds.Contains(a.Owner.DeptId)) - .WhereIf( // - req.Filter?.RoleId > 0, a => a.Owner.Roles.Any(b => b.Id == req.Filter.RoleId)); + private ISelect QueryInternal( + QueryReq req + , IEnumerable deptIds + ) { + var ret = Rpo + .Select.WhereDynamicFilter(req.DynamicFilter) + .WhereIf(req.Filter?.Id > 0, a => a.Id == req.Filter.Id) + .WhereIf(deptIds != null, a => deptIds.Contains(a.Owner.DeptId)) + .WhereIf(req.Filter?.RoleId > 0, a => a.Owner.Roles.Any(b => b.Id == req.Filter.RoleId)); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault switch (req.Order) { @@ -155,4 +218,13 @@ public sealed class UserWalletService(BasicRepository rpo) return ret.AppendOtherFilters(req); } + + private async Task> QueryInternalComplexAsync(QueryReq req) { + IEnumerable deptIds = null; + if (req.Filter?.DeptId > 0) { + deptIds = await Rpo.Orm.Select().Where(a => a.Id == req.Filter.DeptId).AsTreeCte().ToListAsync(a => a.Id).ConfigureAwait(false); + } + + return QueryInternal(req, deptIds); + } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/VerifyCodeService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/VerifyCodeService.cs index 36d60b04..0d47d0f5 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/VerifyCodeService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/VerifyCodeService.cs @@ -8,14 +8,13 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class VerifyCodeService(BasicRepository rpo, IEventPublisher eventPublisher) // +public sealed class VerifyCodeService(BasicRepository rpo, IEventPublisher eventPublisher) : RepositoryService(rpo), IVerifyCodeService { private static readonly int[] _randRange = [0, 10000]; /// - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -28,30 +27,29 @@ public sealed class VerifyCodeService(BasicRepository rpo, } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary( - y => y, y => typeof(Sys_VerifyCode).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_VerifyCode).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateVerifyCodeReq req) - { + public async Task CreateAsync(CreateVerifyCodeReq req) { req.ThrowIfInvalid(); var entity = await Rpo.InsertAsync(req).ConfigureAwait(false); @@ -64,76 +62,70 @@ public sealed class VerifyCodeService(BasicRepository rpo, } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); return Rpo.DeleteAsync(a => a.Id == req.Id); } /// - public Task EditAsync(EditVerifyCodeReq req) - { + public Task EditAsync(EditVerifyCodeReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); throw new NotImplementedException(); } /// - public async Task GetAsync(QueryVerifyCodeReq req) - { + public async Task GetAsync(QueryVerifyCodeReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(req) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public async Task SendVerifyCodeAsync(SendVerifyCodeReq req) - { + public async Task SendVerifyCodeAsync(SendVerifyCodeReq req) { req.ThrowIfInvalid(); var lastSent = await GetLastSentAsync(req.DestDevice).ConfigureAwait(false); QueryVerifyCodeRsp ret; #if !DEBUG - // 有发送记录,且小于1分钟,不允许 if (lastSent != null && (DateTime.Now - lastSent.CreatedTime).TotalMinutes < 1) { throw new NetAdminInvalidOperationException(Ln._1分钟内只能发送1次); } #endif - if (lastSent != null && lastSent.Status != VerifyCodeStatues.Verified) { // 上次发送未验证,生成相同code + if (lastSent != null && lastSent.Status != VerifyCodeStatues.Verified) { + // 上次发送未验证,生成相同code ret = await CreateAsync(req.Adapt() with { Code = lastSent.Code }).ConfigureAwait(false); } - else { // 生成新的code + else { + // 生成新的code var code = _randRange.Rand().ToString(CultureInfo.InvariantCulture).PadLeft(4, '0'); ret = await CreateAsync(req.Adapt() with { Code = code }).ConfigureAwait(false); } @@ -142,22 +134,19 @@ public sealed class VerifyCodeService(BasicRepository rpo, } /// - public Task SetVerifyCodeStatusAsync(SetVerifyCodeStatusReq req) - { + public Task SetVerifyCodeStatusAsync(SetVerifyCodeStatusReq req) { req.ThrowIfInvalid(); return UpdateAsync(req, [nameof(req.Status)]); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } /// - public async Task VerifyAsync(VerifyCodeReq req) - { + public async Task VerifyAsync(VerifyCodeReq req) { req.ThrowIfInvalid(); #if DEBUG if (req.Code == "8888") { @@ -170,8 +159,9 @@ public sealed class VerifyCodeService(BasicRepository rpo, var lastSent = await GetLastSentAsync(req.DestDevice).ConfigureAwait(false); - if (lastSent is not { Status: VerifyCodeStatues.Sent } || req.Code != lastSent.Code || - (DateTime.Now - lastSent.CreatedTime).TotalMinutes > 10) { + if (lastSent is not { Status: VerifyCodeStatues.Sent } + || req.Code != lastSent.Code + || (DateTime.Now - lastSent.CreatedTime).TotalMinutes > 10) { return false; } @@ -180,21 +170,21 @@ public sealed class VerifyCodeService(BasicRepository rpo, return true; } - private Task GetLastSentAsync(string destDevice) - { - return QueryInternal(new QueryReq { - DynamicFilter = new DynamicFilterInfo { - Field = nameof(Sys_VerifyCode.DestDevice) - , Operator = DynamicFilterOperators.Eq - , Value = destDevice - } - }) - .WithNoLockNoWait() - .ToOneAsync(); + private Task GetLastSentAsync(string destDevice) { + return QueryInternal( + new QueryReq + { + DynamicFilter = new DynamicFilterInfo + { + Field = nameof(Sys_VerifyCode.DestDevice), Operator = DynamicFilterOperators.Eq, Value = destDevice + } + } + ) + .WithNoLockNoWait() + .ToOneAsync(); } - private ISelect QueryInternal(QueryReq req) - { + private ISelect QueryInternal(QueryReq req) { var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/WalletFrozenService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/WalletFrozenService.cs index b051e476..4194df5a 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/WalletFrozenService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/WalletFrozenService.cs @@ -9,12 +9,44 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class WalletFrozenService(BasicRepository rpo) // +public sealed class WalletFrozenService(BasicRepository rpo) : RepositoryService(rpo), IWalletFrozenService { - /// - public async Task BulkDeleteAsync(BulkReq req) + private readonly Expression> _toListExp = a => new Sys_WalletFrozen { + Id = a.Id + , CreatedTime = a.CreatedTime + , ModifiedTime = a.ModifiedTime + , Version = a.Version + , Owner = new Sys_User + { + Id = a.Owner.Id + , UserName = a.Owner.UserName + , Avatar = a.Owner.Avatar + , Invite = new Sys_UserInvite + { + Owner = new Sys_User + { + Id = a.Owner.Invite.Owner.Id, UserName = a.Owner.Invite.Owner.UserName, Avatar = a.Owner.Invite.Owner.Avatar + } + , Channel + = new Sys_User + { + Id = a.Owner.Invite.Channel.Id + , UserName = a.Owner.Invite.Channel.UserName + , Avatar = a.Owner.Invite.Channel.Avatar + } + } + } + , Amount = a.Amount + , FrozenBalanceBefore = a.FrozenBalanceBefore + , Reason = a.Reason + , Status = a.Status + , Summary = a.Summary + }; + + /// + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -27,37 +59,38 @@ public sealed class WalletFrozenService(BasicRepository } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary( - y => y - , y => y.Contains('.') - ? typeof(Sys_WalletFrozen).GetRecursiveProperty(y)!.GetValue( - x.Key.GetType().GetRecursiveProperty(y[..y.LastIndexOf('.')]).GetValue(x.Key)) - ?.ToString() - : typeof(Sys_WalletFrozen).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value)) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary( + y => y + , y => y.Contains('.') + ? typeof(Sys_WalletFrozen).GetRecursiveProperty(y)! + .GetValue(x.Key.GetType().GetRecursiveProperty(y[..y.LastIndexOf('.')]).GetValue(x.Key)) + ?.ToString() + : typeof(Sys_WalletFrozen).GetProperty(y)!.GetValue(x.Key)?.ToString() + ), x.Value + ) + ) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateWalletFrozenReq req) - { + public async Task CreateAsync(CreateWalletFrozenReq req) { req.ThrowIfInvalid(); - var userId = UserToken.Id; + var userId = UserToken.Id; var userDeptId = UserToken.DeptId; if (req.OwnerId != null) { userId = req.OwnerId.Value; @@ -72,11 +105,14 @@ public sealed class WalletFrozenService(BasicRepository var frozenBalanceBefore = wallet.FrozenBalance; if (await S() - .EditAsync(wallet.Adapt() with { - AvailableBalance = wallet.AvailableBalance - req.Amount - , FrozenBalance = wallet.FrozenBalance + req.Amount - }) - .ConfigureAwait(false) == null) { + .EditAsync( + wallet.Adapt() with + { + AvailableBalance = wallet.AvailableBalance - req.Amount, FrozenBalance = wallet.FrozenBalance + req.Amount + } + ) + .ConfigureAwait(false) + == null) { throw new NetAdminUnexpectedException(Ln.结果非预期); } @@ -85,15 +121,13 @@ public sealed class WalletFrozenService(BasicRepository } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); return Rpo.DeleteAsync(a => a.Id == req.Id); } /// - public async Task EditAsync(EditWalletFrozenReq req) - { + public async Task EditAsync(EditWalletFrozenReq req) { req.ThrowIfInvalid(); #if DBTYPE_SQLSERVER return (await UpdateReturnListAsync(req).ConfigureAwait(false)).FirstOrDefault()?.Adapt(); @@ -105,46 +139,46 @@ public sealed class WalletFrozenService(BasicRepository } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); return ExportAsync(QueryInternal, req, Ln.钱包冻结导出); } /// - public async Task GetAsync(QueryWalletFrozenReq req) - { + public async Task GetAsync(QueryWalletFrozenReq req) { req.ThrowIfInvalid(); - var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); + var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }) + .Include(a => a.Owner.Invite.Owner) + .Include(a => a.Owner.Invite.Channel) + .ToOneAsync(_toListExp) + .ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Include(a => a.Owner) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Include(a => a.Owner.Invite.Owner) + .Include(a => a.Owner.Invite.Channel) + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(_toListExp) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public async Task SetStatusToThawedAsync(SetStatusToThawedReq req) - { + public async Task SetStatusToThawedAsync(SetStatusToThawedReq req) { req.ThrowIfInvalid(); var frozen = await GetAsync(new QueryWalletFrozenReq { Id = req.Id }).ConfigureAwait(false); @@ -152,37 +186,40 @@ public sealed class WalletFrozenService(BasicRepository throw new NetAdminInvalidOperationException(Ln.冻结状态不正确); } - var updateCnt = await UpdateAsync(new Sys_WalletFrozen { Status = WalletFrozenStatues.Thawed }, [nameof(req.Status)], null - , a => a.Status == WalletFrozenStatues.Frozen && a.Id == req.Id) + var updateCnt = await UpdateAsync( + new Sys_WalletFrozen { Status = WalletFrozenStatues.Thawed }, [nameof(req.Status)], null + , a => a.Status == WalletFrozenStatues.Frozen && a.Id == req.Id + ) .ConfigureAwait(false); if (updateCnt != 1) { throw new NetAdminUnexpectedException(Ln.结果非预期); } var userWalletService = S(); - var wallet = await userWalletService.GetAsync(new QueryUserWalletReq { Id = frozen.OwnerId!.Value }).ConfigureAwait(false); + var wallet = await userWalletService.GetAsync(new QueryUserWalletReq { Id = frozen.Owner.Id }).ConfigureAwait(false); if (wallet.FrozenBalance < req.Amount) { throw new NetAdminUnexpectedException(Ln.结果非预期); } _ = await userWalletService - .EditAsync(wallet.Adapt() with { - AvailableBalance = wallet.AvailableBalance + frozen.Amount - , FrozenBalance = wallet.FrozenBalance - frozen.Amount - }) - .ConfigureAwait(false) ?? throw new NetAdminUnexpectedException(Ln.结果非预期); + .EditAsync( + wallet.Adapt() with + { + AvailableBalance = wallet.AvailableBalance + frozen.Amount, FrozenBalance = wallet.FrozenBalance - frozen.Amount + } + ) + .ConfigureAwait(false) + ?? throw new NetAdminUnexpectedException(Ln.结果非预期); return 1; } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req with { Order = Orders.None }).WithNoLockNoWait().SumAsync(req.GetSumExp()); } - private ISelect QueryInternal(QueryReq req) - { + private ISelect QueryInternal(QueryReq req) { var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/WalletTradeService.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/WalletTradeService.cs index d3cbb28c..5c4c82bb 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/WalletTradeService.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Application/Services/Sys/WalletTradeService.cs @@ -1,3 +1,5 @@ +using System.Net.Http.Headers; +using Ganss.Excel; using NetAdmin.Application.Extensions; using NetAdmin.Domain.DbMaps.Sys; using NetAdmin.Domain.Dto.Sys.User; @@ -9,12 +11,45 @@ using NetAdmin.Domain.Extensions; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class WalletTradeService(BasicRepository rpo) // +public sealed class WalletTradeService(BasicRepository rpo) : RepositoryService(rpo), IWalletTradeService { - /// - public async Task BulkDeleteAsync(BulkReq req) + private readonly Expression> _toListExp = a => new Sys_WalletTrade { + Id = a.Id + , CreatedTime = a.CreatedTime + , Owner = new Sys_User + { + Id = a.Owner.Id + , UserName = a.Owner.UserName + , Avatar = a.Owner.Avatar + , Invite = new Sys_UserInvite + { + Owner = new Sys_User + { + Id = a.Owner.Invite.Owner.Id, UserName = a.Owner.Invite.Owner.UserName, Avatar = a.Owner.Invite.Owner.Avatar + } + , Channel + = new Sys_User + { + Id = a.Owner.Invite.Channel.Id + , UserName = a.Owner.Invite.Channel.UserName + , Avatar = a.Owner.Invite.Channel.Avatar + } + } + } + , Summary = a.Summary + , TradeDirection = a.TradeDirection + , TradeType = a.TradeType + , BusinessOrderNumber = a.BusinessOrderNumber + , Amount = a.Amount + , BalanceBefore = a.BalanceBefore + , CreatedUserId = a.CreatedUserId + , CreatedUserName = a.CreatedUserName + }; + + /// + public async Task BulkDeleteAsync(BulkReq req) { req.ThrowIfInvalid(); var ret = 0; @@ -27,54 +62,56 @@ public sealed class WalletTradeService(BasicRepository rp } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { req.ThrowIfInvalid(); return QueryInternal(req).WithNoLockNoWait().CountAsync(); } /// - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .GroupBy(req.GetToListExp()) - .ToDictionaryAsync(a => a.Count()) - .ConfigureAwait(false); - return ret.Select(x => new KeyValuePair, int>( - req.RequiredFields.ToImmutableDictionary( - y => y, y => typeof(Sys_WalletTrade).GetProperty(y)!.GetValue(x.Key)?.ToString()), x.Value)) - .Where(x => x.Key.Any(y => !y.Value.NullOrEmpty())) - .OrderByDescending(x => x.Value); + .WithNoLockNoWait() + .GroupBy(req.GetToListExp()) + .ToDictionaryAsync(a => a.Count()) + .ConfigureAwait(false); + return ret + .Select(x => new KeyValuePair, int>( + req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Sys_WalletTrade).GetProperty(y)!.GetValue(x.Key)?.ToString()) + , x.Value + ) + ) + .Where(x => x.Key.Any(y => !y.Value.NullOrEmpty())) + .OrderByDescending(x => x.Value); } /// - public async Task CreateAsync(CreateWalletTradeReq req) - { + public async Task CreateAsync(CreateWalletTradeReq req) { req.ThrowIfInvalid(); var userWalletService = S(); - var wallet = await userWalletService.GetAsync(new QueryUserWalletReq { Id = req.OwnerId!.Value }).ConfigureAwait(false); + var wallet = await userWalletService.GetAsync(new QueryUserWalletReq { Id = req.OwnerId!.Value }).ConfigureAwait(false); if (wallet.AvailableBalance + req.Amount < 0) { throw new NetAdminInvalidOperationException(Ln.钱包可用余额不足); } - _ = await userWalletService.EditAsync(wallet.Adapt() with { AvailableBalance = wallet.AvailableBalance + req.Amount }) - .ConfigureAwait(false) ?? throw new NetAdminUnexpectedException(Ln.交易失败); - var ret = await Rpo.InsertAsync(req with { BalanceBefore = wallet.AvailableBalance, OwnerDeptId = wallet.OwnerDeptId }).ConfigureAwait(false); + _ = await userWalletService + .EditAsync(wallet.Adapt() with { AvailableBalance = wallet.AvailableBalance + req.Amount }) + .ConfigureAwait(false) + ?? throw new NetAdminUnexpectedException(Ln.交易失败); + var ret = await Rpo + .InsertAsync(req with { BalanceBefore = wallet.AvailableBalance + wallet.FrozenBalance, OwnerDeptId = wallet.OwnerDeptId }) + .ConfigureAwait(false); return ret.Adapt(); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); return Rpo.DeleteAsync(a => a.Id == req.Id); } /// - public async Task EditAsync(EditWalletTradeReq req) - { + public async Task EditAsync(EditWalletTradeReq req) { req.ThrowIfInvalid(); #if DBTYPE_SQLSERVER return (await UpdateReturnListAsync(req).ConfigureAwait(false)).FirstOrDefault()?.Adapt(); @@ -86,61 +123,93 @@ public sealed class WalletTradeService(BasicRepository rp } /// - public Task ExportAsync(QueryReq req) - { + public async Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); - return ExportAsync(QueryInternal, req, Ln.钱包交易导出); + var list = await QueryInternal(req) + .Include(a => a.Owner.Invite.Owner) + .Include(a => a.Owner.Invite.Channel) + .WithNoLockNoWait() + .Take(Numbers.MAX_LIMIT_EXPORT) + .ToListAsync(_toListExp) + .ConfigureAwait(false); + + var stream = new MemoryStream(); + var exportRsp = list.ConvertAll(x => new ExportWalletTradeRsp + { + 备注 = x.Summary + , 操作人 = x.CreatedUserName + , 归属用户 = x.Owner.UserName + , 交易编号 = x.Id.ToInvString() + , 交易方向 = x.TradeDirection.ResDesc() + , 交易后余额 = ((x.BalanceBefore + x.Amount) / 100m).Round(2) + , 交易金额 = (x.Amount / 100m).Round(2) + , 交易类型 = x.TradeType.ResDesc() + , 交易前余额 = (x.BalanceBefore / 100m).Round(2) + , 上级 = x.Owner.Invite.Owner?.UserName + , 渠道 = x.Owner.Invite.Channel?.UserName + , 业务订单号 = x.BusinessOrderNumber?.ToInvString() + } + ); + + await new ExcelMapper().SaveAsync(stream, exportRsp).ConfigureAwait(false); + + _ = stream.Seek(0, SeekOrigin.Begin); + App.HttpContext.Response.Headers.ContentDisposition = new ContentDispositionHeaderValue(Chars.FLG_HTTP_HEADER_VALUE_ATTACHMENT) + { + FileNameStar = $"交易流水{list.Count}个-{list.Min(x => x.CreatedTime):MMddHHmm}-{list.Max(x => x.CreatedTime):MMddHHmm}.xlsx" + }.ToString(); + return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM); } /// - public async Task GetAsync(QueryWalletTradeReq req) - { + public async Task GetAsync(QueryWalletTradeReq req) { req.ThrowIfInvalid(); - var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false); + var ret = await QueryInternal(new QueryReq { Filter = req, Order = Orders.None }) + .Include(a => a.Owner.Invite.Owner) + .Include(a => a.Owner.Invite.Channel) + .ToOneAsync() + .ConfigureAwait(false); return ret.Adapt(); } /// - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { req.ThrowIfInvalid(); var list = await QueryInternal(req) - .Include(a => a.Owner.Invite.Owner) - .Page(req.Page, req.PageSize) - .WithNoLockNoWait() - .Count(out var total) - .ToListAsync(req) - .ConfigureAwait(false); + .Include(a => a.Owner.Invite.Owner) + .Include(a => a.Owner.Invite.Channel) + .Page(req.Page, req.PageSize) + .WithNoLockNoWait() + .Count(out var total) + .ToListAsync(_toListExp) + .ConfigureAwait(false); return new PagedQueryRsp(req.Page, req.PageSize, total, list.Adapt>()); } /// - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { req.ThrowIfInvalid(); var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); return ret.Adapt>(); } /// - public async Task SumAsync(QueryReq req) - { + public async Task SumAsync(QueryReq req) { req.ThrowIfInvalid(); return req.RequiredFields[0].Equals(nameof(QueryWalletTradeReq.Amount), StringComparison.OrdinalIgnoreCase) ? await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .SumAsync(a => SqlExt.Case().When(a.Amount < 0, -a.Amount).Else(a.Amount).End()) - .ConfigureAwait(false) + .WithNoLockNoWait() + .SumAsync(a => SqlExt.Case().When(a.Amount < 0, -a.Amount).Else(a.Amount).End()) + .ConfigureAwait(false) : await QueryInternal(req with { Order = Orders.None }) - .WithNoLockNoWait() - .SumAsync(req.GetSumExp()) - .ConfigureAwait(false); + .WithNoLockNoWait() + .SumAsync(req.GetSumExp()) + .ConfigureAwait(false); } /// - public async Task TransferFromAnotherAccountAsync(TransferReq req) - { + public async Task TransferFromAnotherAccountAsync(TransferReq req) { // 检查源账户是不是自己的下级 var fromAccount = await S().GetAsync(new QueryUserInviteReq { Id = req.OwnerId!.Value }).ConfigureAwait(false); if (fromAccount == null || fromAccount.OwnerId != UserToken.Id) { @@ -155,32 +224,37 @@ public sealed class WalletTradeService(BasicRepository rp var fromUser = await S().GetAsync(new QueryUserReq { Id = fromAccount.Id }).ConfigureAwait(false); // 源账户扣钱 - _ = await CreateAsync(new CreateWalletTradeReq { - OwnerDeptId = fromUser.DeptId - , Amount = -req.Amount - , OwnerId = fromUser.Id - , Summary = req.Summary - , TradeDirection = TradeDirections.Expense - , TradeType = TradeTypes.TransferExpense - }) + _ = await CreateAsync( + new CreateWalletTradeReq + { + OwnerDeptId = fromUser.DeptId + , Amount = -req.Amount + , OwnerId = fromUser.Id + , Summary = req.Summary + , TradeDirection = TradeDirections.Expense + , TradeType = TradeTypes.TransferExpense + } + ) .ConfigureAwait(false); // 自己账户加钱 - _ = await CreateAsync(new CreateWalletTradeReq { - Amount = req.Amount - , Summary = req.Summary - , TradeDirection = TradeDirections.Income - , TradeType = TradeTypes.TransferIncome - , OwnerId = UserToken.Id - , OwnerDeptId = UserToken.DeptId - }) + _ = await CreateAsync( + new CreateWalletTradeReq + { + Amount = req.Amount + , Summary = req.Summary + , TradeDirection = TradeDirections.Income + , TradeType = TradeTypes.TransferIncome + , OwnerId = UserToken.Id + , OwnerDeptId = UserToken.DeptId + } + ) .ConfigureAwait(false); return 1; } /// - public async Task TransferToAnotherAccountAsync(TransferReq req) - { + public async Task TransferToAnotherAccountAsync(TransferReq req) { var toUser = await S().GetAsync(new QueryUserReq { Id = req.OwnerId!.Value }).ConfigureAwait(false); // 不允许自己对自己转账 @@ -189,39 +263,37 @@ public sealed class WalletTradeService(BasicRepository rp } // 自己账户扣钱 - _ = await CreateAsync(new CreateWalletTradeReq { - Amount = -req.Amount - , Summary = req.Summary - , TradeDirection = TradeDirections.Expense - , TradeType = TradeTypes.TransferExpense - , OwnerId = UserToken.Id - , OwnerDeptId = UserToken.DeptId - }) + _ = await CreateAsync( + new CreateWalletTradeReq + { + Amount = -req.Amount + , Summary = req.Summary + , TradeDirection = TradeDirections.Expense + , TradeType = TradeTypes.TransferExpense + , OwnerId = UserToken.Id + , OwnerDeptId = UserToken.DeptId + } + ) .ConfigureAwait(false); // 他人账户加钱 - _ = await CreateAsync(new CreateWalletTradeReq { - OwnerDeptId = toUser.DeptId - , Amount = req.Amount - , OwnerId = toUser.Id - , Summary = req.Summary - , TradeDirection = TradeDirections.Income - , TradeType = TradeTypes.TransferIncome - }) + _ = await CreateAsync( + new CreateWalletTradeReq + { + OwnerDeptId = toUser.DeptId + , Amount = req.Amount + , OwnerId = toUser.Id + , Summary = req.Summary + , TradeDirection = TradeDirections.Income + , TradeType = TradeTypes.TransferIncome + } + ) .ConfigureAwait(false); return 1; } - private ISelect QueryInternal(QueryReq req) - { - return QueryInternal(req, null); - } - - private ISelect QueryInternal(QueryReq req, List userIds) - { - var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter) - .WhereIf(req.Filter?.Id > 0, a => a.Id == req.Filter.Id) - .WhereIf(userIds?.Count > 0, a => userIds.Contains(a.OwnerId.Value)); + private ISelect QueryInternal(QueryReq req) { + var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereIf(req.Filter?.Id > 0, a => a.Id == req.Filter.Id); // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault switch (req.Order) { diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/ApiCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/ApiCache.cs index f0aa3d2e..44979195 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/ApiCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/ApiCache.cs @@ -3,84 +3,70 @@ using NetAdmin.Domain.Dto.Sys.Api; namespace NetAdmin.SysComponent.Cache.Sys; /// -public sealed class ApiCache(IDistributedCache cache, IApiService service) // - : DistributedCache(cache, service), IScoped, IApiCache +public sealed class ApiCache(IDistributedCache cache, IApiService service) : DistributedCache(cache, service), IScoped, IApiCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateApiReq req) - { + public Task CreateAsync(CreateApiReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditApiReq req) - { + public Task EditAsync(EditApiReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryApiReq req) - { + public Task GetAsync(QueryApiReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> PlainQueryAsync(QueryReq req) - { + public Task> PlainQueryAsync(QueryReq req) { return Service.PlainQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } /// - public Task SyncAsync() - { + public Task SyncAsync() { return Service.SyncAsync(); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/CacheCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/CacheCache.cs index c0855e1d..09fb04e2 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/CacheCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/CacheCache.cs @@ -3,41 +3,34 @@ using NetAdmin.Domain.Dto.Sys.Cache; namespace NetAdmin.SysComponent.Cache.Sys; /// -public sealed class CacheCache(IDistributedCache cache, ICacheService service) // - : DistributedCache(cache, service), IScoped, ICacheCache +public sealed class CacheCache(IDistributedCache cache, ICacheService service) : DistributedCache(cache, service), IScoped, ICacheCache { /// - public Task BulkDeleteEntryAsync(BulkReq req) - { + public Task BulkDeleteEntryAsync(BulkReq req) { return Service.BulkDeleteEntryAsync(req); } /// - public Task CacheStatisticsAsync() - { + public Task CacheStatisticsAsync() { #if !DEBUG - return GetOrCreateAsync( // - GetCacheKey(string.Empty), Service.CacheStatisticsAsync, TimeSpan.FromSeconds(Numbers.SECS_CACHE_DEFAULT)); + return GetOrCreateAsync( GetCacheKey(string.Empty), Service.CacheStatisticsAsync, TimeSpan.FromSeconds(Numbers.SECS_CACHE_DEFAULT)); #else return Service.CacheStatisticsAsync(); #endif } /// - public Task DeleteEntryAsync(DelEntryReq req) - { + public Task DeleteEntryAsync(DelEntryReq req) { return Service.DeleteEntryAsync(req); } /// - public Task> GetAllEntriesAsync(GetAllEntriesReq req) - { + public Task> GetAllEntriesAsync(GetAllEntriesReq req) { return Service.GetAllEntriesAsync(req); } /// - public Task GetEntryAsync(GetEntriesReq req) - { + public Task GetEntryAsync(GetEntriesReq req) { return Service.GetEntryAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/CaptchaCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/CaptchaCache.cs index fba6c76f..afd95ba2 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/CaptchaCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/CaptchaCache.cs @@ -3,12 +3,11 @@ using NetAdmin.Domain.Dto.Sys.Captcha; namespace NetAdmin.SysComponent.Cache.Sys; /// -public sealed class CaptchaCache(IDistributedCache cache, ICaptchaService service) // +public sealed class CaptchaCache(IDistributedCache cache, ICaptchaService service) : DistributedCache(cache, service), IScoped, ICaptchaCache { /// - public async Task GetCaptchaImageAsync() - { + public async Task GetCaptchaImageAsync() { var captchaRsp = await Service.GetCaptchaImageAsync().ConfigureAwait(false); await CreateAsync(GetCacheKey(captchaRsp.Id, nameof(CaptchaCache)), captchaRsp.SawOffsetX, TimeSpan.FromSeconds(Numbers.SECS_CACHE_DEFAULT)) .ConfigureAwait(false); @@ -17,8 +16,7 @@ public sealed class CaptchaCache(IDistributedCache cache, ICaptchaService servic /// /// 人机验证未通过 - public async Task VerifyCaptchaAndRemoveAsync(VerifyCaptchaReq req) - { + public async Task VerifyCaptchaAndRemoveAsync(VerifyCaptchaReq req) { var ret = await VerifyCaptchaAsync(req).ConfigureAwait(false); if (ret) { // 人机验证通过,删除人机验证缓存 @@ -30,8 +28,7 @@ public sealed class CaptchaCache(IDistributedCache cache, ICaptchaService servic } /// - public async Task VerifyCaptchaAsync(VerifyCaptchaReq req) - { + public async Task VerifyCaptchaAsync(VerifyCaptchaReq req) { var val = await GetAsync(GetCacheKey(req.Id, nameof(CaptchaCache))).ConfigureAwait(false); return await Service.VerifyCaptchaAsync(req with { SawOffsetX = val }).ConfigureAwait(false); } diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/CodeTemplateCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/CodeTemplateCache.cs index 132b798b..0a4b4b30 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/CodeTemplateCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/CodeTemplateCache.cs @@ -7,68 +7,57 @@ public sealed class CodeTemplateCache(IDistributedCache cache, ICodeTemplateServ : DistributedCache(cache, service), IScoped, ICodeTemplateCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateCodeTemplateReq req) - { + public Task CreateAsync(CreateCodeTemplateReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditCodeTemplateReq req) - { + public Task EditAsync(EditCodeTemplateReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryCodeTemplateReq req) - { + public Task GetAsync(QueryCodeTemplateReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/ConfigCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/ConfigCache.cs index 11b32698..730f09bb 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/ConfigCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/ConfigCache.cs @@ -3,90 +3,76 @@ using NetAdmin.Domain.Dto.Sys.Config; namespace NetAdmin.SysComponent.Cache.Sys; /// -public sealed class ConfigCache(IDistributedCache cache, IConfigService service) // +public sealed class ConfigCache(IDistributedCache cache, IConfigService service) : DistributedCache(cache, service), IScoped, IConfigCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateConfigReq req) - { + public Task CreateAsync(CreateConfigReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditConfigReq req) - { + public Task EditAsync(EditConfigReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryConfigReq req) - { + public Task GetAsync(QueryConfigReq req) { return Service.GetAsync(req); } /// - public Task GetLatestConfigAsync() - { + public Task GetLatestConfigAsync() { return Service.GetLatestConfigAsync(); } /// - public Task GetRegisterConfigAsync() - { + public Task GetRegisterConfigAsync() { return Service.GetRegisterConfigAsync(); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SetEnabledAsync(SetConfigEnabledReq req) - { + public Task SetEnabledAsync(SetConfigEnabledReq req) { return Service.SetEnabledAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/ConstantCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/ConstantCache.cs index 9235771e..27e3221c 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/ConstantCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/ConstantCache.cs @@ -1,30 +1,26 @@ namespace NetAdmin.SysComponent.Cache.Sys; /// -public sealed class ConstantCache(IDistributedCache cache, IConstantService service) // +public sealed class ConstantCache(IDistributedCache cache, IConstantService service) : DistributedCache(cache, service), IScoped, IConstantCache { /// - public IDictionary GetCharsDic() - { + public IDictionary GetCharsDic() { return Service.GetCharsDic(); } /// - public IDictionary> GetEnums() - { + public IDictionary> GetEnums() { return Service.GetEnums(); } /// - public IDictionary GetLocalizedStrings() - { + public IDictionary GetLocalizedStrings() { return Service.GetLocalizedStrings(); } /// - public IDictionary GetNumbersDic() - { + public IDictionary GetNumbersDic() { return Service.GetNumbersDic(); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/Dependency/IUserCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/Dependency/IUserCache.cs index 3657e651..cdb9353e 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/Dependency/IUserCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/Dependency/IUserCache.cs @@ -1,5 +1,3 @@ -using NetAdmin.Domain.Dto.Sys.User; - namespace NetAdmin.SysComponent.Cache.Sys.Dependency; /// @@ -7,11 +5,6 @@ namespace NetAdmin.SysComponent.Cache.Sys.Dependency; /// public interface IUserCache : ICache, IUserModule { - /// - /// 用户编号登录 - /// - Task LoginByUserIdAsync(long userId); - /// /// 删除缓存 UserInfoAsync /// diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DepositOrderCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DepositOrderCache.cs index 3b758d2e..4f462eef 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DepositOrderCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DepositOrderCache.cs @@ -7,86 +7,72 @@ public sealed class DepositOrderCache(IDistributedCache cache, IDepositOrderServ : DistributedCache(cache, service), IScoped, IDepositOrderCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateDepositOrderReq req) - { + public Task CreateAsync(CreateDepositOrderReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditDepositOrderReq req) - { + public Task EditAsync(EditDepositOrderReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryDepositOrderReq req) - { + public Task GetAsync(QueryDepositOrderReq req) { return Service.GetAsync(req); } /// - public Task GetDepositConfigAsync() - { + public Task GetDepositConfigAsync() { return Service.GetDepositConfigAsync(); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task PayConfirmAsync(PayConfirmReq req) - { + public Task PayConfirmAsync(PayConfirmReq req) { return Service.PayConfirmAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task ReceivedConfirmationAsync(JobReq req) - { + public Task ReceivedConfirmationAsync(JobReq req) { return Service.ReceivedConfirmationAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DeptCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DeptCache.cs index 4aca80d4..17ab3c26 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DeptCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DeptCache.cs @@ -3,78 +3,65 @@ using NetAdmin.Domain.Dto.Sys.Dept; namespace NetAdmin.SysComponent.Cache.Sys; /// -public sealed class DeptCache(IDistributedCache cache, IDeptService service) // - : DistributedCache(cache, service), IScoped, IDeptCache +public sealed class DeptCache(IDistributedCache cache, IDeptService service) : DistributedCache(cache, service), IScoped, IDeptCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateDeptReq req) - { + public Task CreateAsync(CreateDeptReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditDeptReq req) - { + public Task EditAsync(EditDeptReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryDeptReq req) - { + public Task GetAsync(QueryDeptReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SetEnabledAsync(SetDeptEnabledReq req) - { + public Task SetEnabledAsync(SetDeptEnabledReq req) { return Service.SetEnabledAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DevCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DevCache.cs index 4cfe0090..762a29d9 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DevCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DevCache.cs @@ -3,48 +3,40 @@ using NetAdmin.Domain.Dto.Sys.Dev; namespace NetAdmin.SysComponent.Cache.Sys; /// -public sealed class DevCache(IDistributedCache cache, IDevService service) // - : DistributedCache(cache, service), IScoped, IDevCache +public sealed class DevCache(IDistributedCache cache, IDevService service) : DistributedCache(cache, service), IScoped, IDevCache { /// - public Task GenerateCsCodeAsync(GenerateCsCodeReq req) - { + public Task GenerateCsCodeAsync(GenerateCsCodeReq req) { return Service.GenerateCsCodeAsync(req); } /// - public Task GenerateIconCodeAsync(GenerateIconCodeReq req) - { + public Task GenerateIconCodeAsync(GenerateIconCodeReq req) { return Service.GenerateIconCodeAsync(req); } /// - public Task GenerateJsCodeAsync() - { + public Task GenerateJsCodeAsync() { return Service.GenerateJsCodeAsync(); } /// - public Task>> GetDomainProjectsAsync() - { + public Task>> GetDomainProjectsAsync() { return Service.GetDomainProjectsAsync(); } /// - public IEnumerable GetDotnetDataTypes(GetDotnetDataTypesReq req) - { + public IEnumerable GetDotnetDataTypes(GetDotnetDataTypesReq req) { return Service.GetDotnetDataTypes(req); } /// - public IEnumerable> GetEntityBaseClasses() - { + public IEnumerable> GetEntityBaseClasses() { return Service.GetEntityBaseClasses(); } /// - public IEnumerable> GetFieldInterfaces() - { + public IEnumerable> GetFieldInterfaces() { return Service.GetFieldInterfaces(); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DicCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DicCache.cs index 0e2fae1a..6b83bdb0 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DicCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DicCache.cs @@ -4,120 +4,99 @@ using NetAdmin.Domain.Dto.Sys.Dic.Content; namespace NetAdmin.SysComponent.Cache.Sys; /// -public sealed class DicCache(IDistributedCache cache, IDicService service) // - : DistributedCache(cache, service), IScoped, IDicCache +public sealed class DicCache(IDistributedCache cache, IDicService service) : DistributedCache(cache, service), IScoped, IDicCache { /// - public Task BulkDeleteCatalogAsync(BulkReq req) - { + public Task BulkDeleteCatalogAsync(BulkReq req) { return Service.BulkDeleteCatalogAsync(req); } /// - public Task BulkDeleteContentAsync(BulkReq req) - { + public Task BulkDeleteContentAsync(BulkReq req) { return Service.BulkDeleteContentAsync(req); } /// - public Task, int>>> ContentCountByAsync(QueryReq req) - { + public Task, int>>> ContentCountByAsync(QueryReq req) { return Service.ContentCountByAsync(req); } /// - public Task CreateCatalogAsync(CreateDicCatalogReq req) - { + public Task CreateCatalogAsync(CreateDicCatalogReq req) { return Service.CreateCatalogAsync(req); } /// - public Task CreateContentAsync(CreateDicContentReq req) - { + public Task CreateContentAsync(CreateDicContentReq req) { return Service.CreateContentAsync(req); } /// - public Task DeleteCatalogAsync(DelReq req) - { + public Task DeleteCatalogAsync(DelReq req) { return Service.DeleteCatalogAsync(req); } /// - public Task DeleteContentAsync(DelReq req) - { + public Task DeleteContentAsync(DelReq req) { return Service.DeleteContentAsync(req); } /// - public Task EditCatalogAsync(EditDicCatalogReq req) - { + public Task EditCatalogAsync(EditDicCatalogReq req) { return Service.EditCatalogAsync(req); } /// - public Task EditContentAsync(EditDicContentReq req) - { + public Task EditContentAsync(EditDicContentReq req) { return Service.EditContentAsync(req); } /// - public Task ExportContentAsync(QueryReq req) - { + public Task ExportContentAsync(QueryReq req) { return Service.ExportContentAsync(req); } /// - public Task GetCatalogAsync(QueryDicCatalogReq req) - { + public Task GetCatalogAsync(QueryDicCatalogReq req) { return Service.GetCatalogAsync(req); } /// - public Task GetContentAsync(QueryDicContentReq req) - { + public Task GetContentAsync(QueryDicContentReq req) { return Service.GetContentAsync(req); } /// - public Task GetDicValueAsync(GetDicValueReq req) - { + public Task GetDicValueAsync(GetDicValueReq req) { #if !DEBUG - return GetOrCreateAsync( // - GetCacheKey(req.Json().Crc32().ToString(CultureInfo.InvariantCulture)) // - , () => Service.GetDicValueAsync(req), TimeSpan.FromSeconds(Numbers.SECS_CACHE_DEFAULT)); + return GetOrCreateAsync( GetCacheKey(req.Json().Crc32().ToString(CultureInfo.InvariantCulture)) , () => Service.GetDicValueAsync(req), TimeSpan.FromSeconds(Numbers.SECS_CACHE_DEFAULT)); #else return Service.GetDicValueAsync(req); #endif } /// - public Task> PagedQueryCatalogAsync(PagedQueryReq req) - { + public Task> PagedQueryCatalogAsync(PagedQueryReq req) { return Service.PagedQueryCatalogAsync(req); } /// - public Task> PagedQueryContentAsync(PagedQueryReq req) - { + public Task> PagedQueryContentAsync(PagedQueryReq req) { return Service.PagedQueryContentAsync(req); } /// - public Task> QueryCatalogAsync(QueryReq req) - { + public Task> QueryCatalogAsync(QueryReq req) { return Service.QueryCatalogAsync(req); } /// - public Task> QueryContentAsync(QueryReq req) - { + public Task> QueryContentAsync(QueryReq req) { return Service.QueryContentAsync(req); } /// - public Task SetEnabledAsync(SetDicContentEnabledReq req) - { + public Task SetEnabledAsync(SetDicContentEnabledReq req) { return Service.SetEnabledAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DicCatalogCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DicCatalogCache.cs index 90d220be..ec779fff 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DicCatalogCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DicCatalogCache.cs @@ -3,72 +3,61 @@ using NetAdmin.Domain.Dto.Sys.Dic.Catalog; namespace NetAdmin.SysComponent.Cache.Sys; /// -public sealed class DicCatalogCache(IDistributedCache cache, IDicCatalogService service) // +public sealed class DicCatalogCache(IDistributedCache cache, IDicCatalogService service) : DistributedCache(cache, service), IScoped, IDicCatalogCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateDicCatalogReq req) - { + public Task CreateAsync(CreateDicCatalogReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditDicCatalogReq req) - { + public Task EditAsync(EditDicCatalogReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryDicCatalogReq req) - { + public Task GetAsync(QueryDicCatalogReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DicContentCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DicContentCache.cs index 7aabd911..4ff3d56d 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DicContentCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DicContentCache.cs @@ -3,89 +3,75 @@ using NetAdmin.Domain.Dto.Sys.Dic.Content; namespace NetAdmin.SysComponent.Cache.Sys; /// -public sealed class DicContentCache(IDistributedCache cache, IDicContentService service) // +public sealed class DicContentCache(IDistributedCache cache, IDicContentService service) : DistributedCache(cache, service), IScoped, IDicContentCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateDicContentReq req) - { + public Task CreateAsync(CreateDicContentReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditDicContentReq req) - { + public Task EditAsync(EditDicContentReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryDicContentReq req) - { + public Task GetAsync(QueryDicContentReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task> QueryByCatalogCodeAsync(string catalogCode) - { + public Task> QueryByCatalogCodeAsync(string catalogCode) { #if !DEBUG - return GetOrCreateAsync( // - GetCacheKey(catalogCode), () => Service.QueryByCatalogCodeAsync(catalogCode), TimeSpan.FromSeconds(Numbers.SECS_CACHE_DIC_CATALOG_CODE)); + return GetOrCreateAsync( GetCacheKey(catalogCode), () => Service.QueryByCatalogCodeAsync(catalogCode), TimeSpan.FromSeconds(Numbers.SECS_CACHE_DIC_CATALOG_CODE)); #else return Service.QueryByCatalogCodeAsync(catalogCode); #endif } /// - public Task SetEnabledAsync(SetDicContentEnabledReq req) - { + public Task SetEnabledAsync(SetDicContentEnabledReq req) { return Service.SetEnabledAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DocCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DocCache.cs index b1c3631d..388bbc8f 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DocCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DocCache.cs @@ -4,114 +4,95 @@ using NetAdmin.Domain.Dto.Sys.Doc.Content; namespace NetAdmin.SysComponent.Cache.Sys; /// -public sealed class DocCache(IDistributedCache cache, IDocService service) // - : DistributedCache(cache, service), IScoped, IDocCache +public sealed class DocCache(IDistributedCache cache, IDocService service) : DistributedCache(cache, service), IScoped, IDocCache { /// - public Task BulkDeleteCatalogAsync(BulkReq req) - { + public Task BulkDeleteCatalogAsync(BulkReq req) { return Service.BulkDeleteCatalogAsync(req); } /// - public Task BulkDeleteContentAsync(BulkReq req) - { + public Task BulkDeleteContentAsync(BulkReq req) { return Service.BulkDeleteContentAsync(req); } /// - public Task, int>>> ContentCountByAsync(QueryReq req) - { + public Task, int>>> ContentCountByAsync(QueryReq req) { return Service.ContentCountByAsync(req); } /// - public Task CreateCatalogAsync(CreateDocCatalogReq req) - { + public Task CreateCatalogAsync(CreateDocCatalogReq req) { return Service.CreateCatalogAsync(req); } /// - public Task CreateContentAsync(CreateDocContentReq req) - { + public Task CreateContentAsync(CreateDocContentReq req) { return Service.CreateContentAsync(req); } /// - public Task DeleteCatalogAsync(DelReq req) - { + public Task DeleteCatalogAsync(DelReq req) { return Service.DeleteCatalogAsync(req); } /// - public Task DeleteContentAsync(DelReq req) - { + public Task DeleteContentAsync(DelReq req) { return Service.DeleteContentAsync(req); } /// - public Task EditCatalogAsync(EditDocCatalogReq req) - { + public Task EditCatalogAsync(EditDocCatalogReq req) { return Service.EditCatalogAsync(req); } /// - public Task EditContentAsync(EditDocContentReq req) - { + public Task EditContentAsync(EditDocContentReq req) { return Service.EditContentAsync(req); } /// - public Task ExportContentAsync(QueryReq req) - { + public Task ExportContentAsync(QueryReq req) { return Service.ExportContentAsync(req); } /// - public Task GetCatalogAsync(QueryDocCatalogReq req) - { + public Task GetCatalogAsync(QueryDocCatalogReq req) { return Service.GetCatalogAsync(req); } /// - public Task GetContentAsync(QueryDocContentReq req) - { + public Task GetContentAsync(QueryDocContentReq req) { return Service.GetContentAsync(req); } /// - public Task> PagedQueryCatalogAsync(PagedQueryReq req) - { + public Task> PagedQueryCatalogAsync(PagedQueryReq req) { return Service.PagedQueryCatalogAsync(req); } /// - public Task> PagedQueryContentAsync(PagedQueryReq req) - { + public Task> PagedQueryContentAsync(PagedQueryReq req) { return Service.PagedQueryContentAsync(req); } /// - public Task> QueryCatalogAsync(QueryReq req) - { + public Task> QueryCatalogAsync(QueryReq req) { return Service.QueryCatalogAsync(req); } /// - public Task> QueryContentAsync(QueryReq req) - { + public Task> QueryContentAsync(QueryReq req) { return Service.QueryContentAsync(req); } /// - public Task SetEnabledAsync(SetDocContentEnabledReq req) - { + public Task SetEnabledAsync(SetDocContentEnabledReq req) { return Service.SetEnabledAsync(req); } /// - public Task ViewContentAsync(QueryDocContentReq req) - { + public Task ViewContentAsync(QueryDocContentReq req) { return Service.ViewContentAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DocCatalogCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DocCatalogCache.cs index 9cc5e148..ce20cd1f 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DocCatalogCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DocCatalogCache.cs @@ -7,68 +7,57 @@ public sealed class DocCatalogCache(IDistributedCache cache, IDocCatalogService : DistributedCache(cache, service), IScoped, IDocCatalogCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateDocCatalogReq req) - { + public Task CreateAsync(CreateDocCatalogReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditDocCatalogReq req) - { + public Task EditAsync(EditDocCatalogReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryDocCatalogReq req) - { + public Task GetAsync(QueryDocCatalogReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DocContentCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DocContentCache.cs index b9ec787d..082f2a28 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DocContentCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/DocContentCache.cs @@ -7,74 +7,62 @@ public sealed class DocContentCache(IDistributedCache cache, IDocContentService : DistributedCache(cache, service), IScoped, IDocContentCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateDocContentReq req) - { + public Task CreateAsync(CreateDocContentReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditDocContentReq req) - { + public Task EditAsync(EditDocContentReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryDocContentReq req) - { + public Task GetAsync(QueryDocContentReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SetEnabledAsync(SetDocContentEnabledReq req) - { + public Task SetEnabledAsync(SetDocContentEnabledReq req) { return Service.SetEnabledAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/FileCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/FileCache.cs index 83965cdd..26253854 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/FileCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/FileCache.cs @@ -3,12 +3,10 @@ using NetAdmin.Domain.Dto.Sys.File; namespace NetAdmin.SysComponent.Cache.Sys; /// -public sealed class FileCache(IDistributedCache cache, IFileService service) // - : DistributedCache(cache, service), IScoped, IFileCache +public sealed class FileCache(IDistributedCache cache, IFileService service) : DistributedCache(cache, service), IScoped, IFileCache { /// - public Task UploadAsync(IFormFile file) - { + public Task UploadAsync(IFormFile file) { return Service.UploadAsync(file); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/JobCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/JobCache.cs index 9dd5ab59..703fbf9e 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/JobCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/JobCache.cs @@ -8,146 +8,128 @@ namespace NetAdmin.SysComponent.Cache.Sys; public sealed class JobCache(IDistributedCache cache, IJobService service) : DistributedCache(cache, service), IScoped, IJobCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CountRecordAsync(QueryReq req) - { + public Task CountRecordAsync(QueryReq req) { return Service.CountRecordAsync(req); } /// - public Task CreateAsync(CreateJobReq req) - { + public Task CreateAsync(CreateJobReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditJobReq req) - { + public Task EditAsync(EditJobReq req) { return Service.EditAsync(req); } /// - public Task ExecuteAsync(QueryJobReq req) - { + public Task ExecuteAsync(QueryJobReq req) { return Service.ExecuteAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task ExportRecordAsync(QueryReq req) - { + public Task ExportRecordAsync(QueryReq req) { return Service.ExportRecordAsync(req); } /// - public Task GetAsync(QueryJobReq req) - { + public Task GetAsync(QueryJobReq req) { return Service.GetAsync(req); } /// - public Task GetRecordAsync(QueryJobRecordReq req) - { + public Task GetRecordAsync(QueryJobRecordReq req) { return Service.GetRecordAsync(req); } /// - public Task> GetRecordBarChartAsync(QueryReq req) - { + public Task> GetRecordBarChartAsync(QueryReq req) { #if !DEBUG - return GetOrCreateAsync( // - GetCacheKey(req.Json().Crc32().ToString(CultureInfo.InvariantCulture)) // - , () => Service.GetRecordBarChartAsync(req), TimeSpan.FromSeconds(Numbers.SECS_CACHE_CHART)); + return GetOrCreateAsync( + GetCacheKey(req.Json().Crc32().ToString(CultureInfo.InvariantCulture)), () => Service.GetRecordBarChartAsync(req) + , TimeSpan.FromSeconds(Numbers.SECS_CACHE_CHART) + ); #else return Service.GetRecordBarChartAsync(req); #endif } /// - public Task> GetRecordPieChartByHttpStatusCodeAsync(QueryReq req) - { + public Task> GetRecordPieChartByHttpStatusCodeAsync(QueryReq req) { #if !DEBUG - return GetOrCreateAsync( // - GetCacheKey(req.Json().Crc32().ToString(CultureInfo.InvariantCulture)) // - , () => Service.GetRecordPieChartByHttpStatusCodeAsync(req), TimeSpan.FromSeconds(Numbers.SECS_CACHE_DEFAULT)); + return GetOrCreateAsync( + GetCacheKey(req.Json().Crc32().ToString(CultureInfo.InvariantCulture)), () => Service.GetRecordPieChartByHttpStatusCodeAsync(req) + , TimeSpan.FromSeconds(Numbers.SECS_CACHE_DEFAULT) + ); #else return Service.GetRecordPieChartByHttpStatusCodeAsync(req); #endif } /// - public Task> GetRecordPieChartByNameAsync(QueryReq req) - { + public Task> GetRecordPieChartByNameAsync(QueryReq req) { #if !DEBUG - return GetOrCreateAsync( // - GetCacheKey(req.Json().Crc32().ToString(CultureInfo.InvariantCulture)) // - , () => Service.GetRecordPieChartByNameAsync(req), TimeSpan.FromSeconds(Numbers.SECS_CACHE_CHART)); + return GetOrCreateAsync( + GetCacheKey(req.Json().Crc32().ToString(CultureInfo.InvariantCulture)), () => Service.GetRecordPieChartByNameAsync(req) + , TimeSpan.FromSeconds(Numbers.SECS_CACHE_CHART) + ); #else return Service.GetRecordPieChartByNameAsync(req); #endif } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> PagedQueryRecordAsync(PagedQueryReq req) - { + public Task> PagedQueryRecordAsync(PagedQueryReq req) { return Service.PagedQueryRecordAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task, int>>> RecordCountByAsync(QueryReq req) - { + public Task, int>>> RecordCountByAsync(QueryReq req) { return Service.RecordCountByAsync(req); } /// - public Task SetEnabledAsync(SetJobEnabledReq req) - { + public Task SetEnabledAsync(SetJobEnabledReq req) { return Service.SetEnabledAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/JobRecordCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/JobRecordCache.cs index ec23e089..a8156ee9 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/JobRecordCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/JobRecordCache.cs @@ -7,68 +7,57 @@ public sealed class JobRecordCache(IDistributedCache cache, IJobRecordService se : DistributedCache(cache, service), IScoped, IJobRecordCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateJobRecordReq req) - { + public Task CreateAsync(CreateJobRecordReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditJobRecordReq req) - { + public Task EditAsync(EditJobRecordReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryJobRecordReq req) - { + public Task GetAsync(QueryJobRecordReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/LoginLogCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/LoginLogCache.cs index d43641c0..9a1ade48 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/LoginLogCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/LoginLogCache.cs @@ -7,68 +7,57 @@ public sealed class LoginLogCache(IDistributedCache cache, ILoginLogService serv : DistributedCache(cache, service), IScoped, ILoginLogCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateLoginLogReq req) - { + public Task CreateAsync(CreateLoginLogReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditLoginLogReq req) - { + public Task EditAsync(EditLoginLogReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryLoginLogReq req) - { + public Task GetAsync(QueryLoginLogReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/MenuCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/MenuCache.cs index 80f52e26..19606753 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/MenuCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/MenuCache.cs @@ -3,78 +3,65 @@ using NetAdmin.Domain.Dto.Sys.Menu; namespace NetAdmin.SysComponent.Cache.Sys; /// -public sealed class MenuCache(IDistributedCache cache, IMenuService service) // - : DistributedCache(cache, service), IScoped, IMenuCache +public sealed class MenuCache(IDistributedCache cache, IMenuService service) : DistributedCache(cache, service), IScoped, IMenuCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateMenuReq req) - { + public Task CreateAsync(CreateMenuReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditMenuReq req) - { + public Task EditAsync(EditMenuReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryMenuReq req) - { + public Task GetAsync(QueryMenuReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } /// - public Task> UserMenusAsync() - { + public Task> UserMenusAsync() { return Service.UserMenusAsync(); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/RequestLogCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/RequestLogCache.cs index dfab3918..2fdcfdc7 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/RequestLogCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/RequestLogCache.cs @@ -4,12 +4,11 @@ using NetAdmin.Domain.Dto.Sys.RequestLog; namespace NetAdmin.SysComponent.Cache.Sys; /// -public sealed class RequestLogCache(IDistributedCache cache, IRequestLogService service) // +public sealed class RequestLogCache(IDistributedCache cache, IRequestLogService service) : DistributedCache(cache, service), IScoped, IRequestLogCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } @@ -21,9 +20,10 @@ public sealed class RequestLogCache(IDistributedCache cache, IRequestLogService #endif { #if !DEBUG - var ret = await GetOrCreateAsync( // - GetCacheKey(req.Json().Crc32().ToString(CultureInfo.InvariantCulture)) // - , async () => (long?)await Service.CountAsync(req).ConfigureAwait(false), TimeSpan.FromSeconds(Numbers.SECS_CACHE_DEFAULT)) + var ret = await GetOrCreateAsync( + GetCacheKey(req.Json().Crc32().ToString(CultureInfo.InvariantCulture)) + , async () => (long?)await Service.CountAsync(req).ConfigureAwait(false), TimeSpan.FromSeconds(Numbers.SECS_CACHE_DEFAULT) + ) .ConfigureAwait(false); return ret ?? 0; #else @@ -32,92 +32,83 @@ public sealed class RequestLogCache(IDistributedCache cache, IRequestLogService } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateRequestLogReq req) - { + public Task CreateAsync(CreateRequestLogReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditRequestLogReq req) - { + public Task EditAsync(EditRequestLogReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryRequestLogReq req) - { + public Task GetAsync(QueryRequestLogReq req) { return Service.GetAsync(req); } /// - public Task> GetBarChartAsync(QueryReq req) - { + public Task> GetBarChartAsync(QueryReq req) { #if !DEBUG - return GetOrCreateAsync( // - GetCacheKey(req.Json().Crc32().ToString(CultureInfo.InvariantCulture)) // - , () => Service.GetBarChartAsync(req), TimeSpan.FromSeconds(Numbers.SECS_CACHE_CHART)); + return GetOrCreateAsync( + GetCacheKey(req.Json().Crc32().ToString(CultureInfo.InvariantCulture)), () => Service.GetBarChartAsync(req) + , TimeSpan.FromSeconds(Numbers.SECS_CACHE_CHART) + ); #else return Service.GetBarChartAsync(req); #endif } /// - public Task> GetPieChartByApiSummaryAsync(QueryReq req) - { + public Task> GetPieChartByApiSummaryAsync(QueryReq req) { #if !DEBUG - return GetOrCreateAsync( // - GetCacheKey(req.Json().Crc32().ToString(CultureInfo.InvariantCulture)) // - , () => Service.GetPieChartByApiSummaryAsync(req), TimeSpan.FromSeconds(Numbers.SECS_CACHE_CHART)); + return GetOrCreateAsync( + GetCacheKey(req.Json().Crc32().ToString(CultureInfo.InvariantCulture)), () => Service.GetPieChartByApiSummaryAsync(req) + , TimeSpan.FromSeconds(Numbers.SECS_CACHE_CHART) + ); #else return Service.GetPieChartByApiSummaryAsync(req); #endif } /// - public Task> GetPieChartByHttpStatusCodeAsync(QueryReq req) - { + public Task> GetPieChartByHttpStatusCodeAsync(QueryReq req) { #if !DEBUG - return GetOrCreateAsync( // - GetCacheKey(req.Json().Crc32().ToString(CultureInfo.InvariantCulture)) // - , () => Service.GetPieChartByHttpStatusCodeAsync(req), TimeSpan.FromSeconds(Numbers.SECS_CACHE_CHART)); + return GetOrCreateAsync( + GetCacheKey(req.Json().Crc32().ToString(CultureInfo.InvariantCulture)), () => Service.GetPieChartByHttpStatusCodeAsync(req) + , TimeSpan.FromSeconds(Numbers.SECS_CACHE_CHART) + ); #else return Service.GetPieChartByHttpStatusCodeAsync(req); #endif } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/RequestLogDetailCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/RequestLogDetailCache.cs index cb43c5a7..10cb70b1 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/RequestLogDetailCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/RequestLogDetailCache.cs @@ -7,68 +7,57 @@ public sealed class RequestLogDetailCache(IDistributedCache cache, IRequestLogDe : DistributedCache(cache, service), IScoped, IRequestLogDetailCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateRequestLogDetailReq req) - { + public Task CreateAsync(CreateRequestLogDetailReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditRequestLogDetailReq req) - { + public Task EditAsync(EditRequestLogDetailReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryRequestLogDetailReq req) - { + public Task GetAsync(QueryRequestLogDetailReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/RoleCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/RoleCache.cs index 6ad6a268..810fd1e9 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/RoleCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/RoleCache.cs @@ -4,96 +4,80 @@ using NetAdmin.Domain.Dto.Sys.UserRole; namespace NetAdmin.SysComponent.Cache.Sys; /// -public sealed class RoleCache(IDistributedCache cache, IRoleService service) // - : DistributedCache(cache, service), IScoped, IRoleCache +public sealed class RoleCache(IDistributedCache cache, IRoleService service) : DistributedCache(cache, service), IScoped, IRoleCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateRoleReq req) - { + public Task CreateAsync(CreateRoleReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditRoleReq req) - { + public Task EditAsync(EditRoleReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryRoleReq req) - { + public Task GetAsync(QueryRoleReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SetDisplayDashboardAsync(SetDisplayDashboardReq req) - { + public Task SetDisplayDashboardAsync(SetDisplayDashboardReq req) { return Service.SetDisplayDashboardAsync(req); } /// - public Task SetEnabledAsync(SetRoleEnabledReq req) - { + public Task SetEnabledAsync(SetRoleEnabledReq req) { return Service.SetEnabledAsync(req); } /// - public Task SetIgnorePermissionControlAsync(SetIgnorePermissionControlReq req) - { + public Task SetIgnorePermissionControlAsync(SetIgnorePermissionControlReq req) { return Service.SetIgnorePermissionControlAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } /// - public Task, int>>> UserCountByAsync(QueryReq req) - { + public Task, int>>> UserCountByAsync(QueryReq req) { return Service.UserCountByAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgCache.cs index 94f50456..47d6a2b9 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgCache.cs @@ -8,92 +8,77 @@ public sealed class SiteMsgCache(IDistributedCache cache, ISiteMsgService servic : DistributedCache(cache, service), IScoped, ISiteMsgCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateSiteMsgReq req) - { + public Task CreateAsync(CreateSiteMsgReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditSiteMsgReq req) - { + public Task EditAsync(EditSiteMsgReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QuerySiteMsgReq req) - { + public Task GetAsync(QuerySiteMsgReq req) { return Service.GetAsync(req); } /// - public Task GetMineAsync(QuerySiteMsgReq req) - { + public Task GetMineAsync(QuerySiteMsgReq req) { return Service.GetMineAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> PagedQueryMineAsync(PagedQueryReq req) - { + public Task> PagedQueryMineAsync(PagedQueryReq req) { return Service.PagedQueryMineAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SetSiteMsgStatusAsync(SetUserSiteMsgStatusReq req) - { + public Task SetSiteMsgStatusAsync(SetUserSiteMsgStatusReq req) { return Service.SetSiteMsgStatusAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } /// - public Task UnreadCountAsync() - { + public Task UnreadCountAsync() { return Service.UnreadCountAsync(); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgDeptCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgDeptCache.cs index fedceab9..0ca64284 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgDeptCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgDeptCache.cs @@ -7,68 +7,57 @@ public sealed class SiteMsgDeptCache(IDistributedCache cache, ISiteMsgDeptServic : DistributedCache(cache, service), IScoped, ISiteMsgDeptCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateSiteMsgDeptReq req) - { + public Task CreateAsync(CreateSiteMsgDeptReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditSiteMsgDeptReq req) - { + public Task EditAsync(EditSiteMsgDeptReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QuerySiteMsgDeptReq req) - { + public Task GetAsync(QuerySiteMsgDeptReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgFlagCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgFlagCache.cs index 5330bf75..2a82793c 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgFlagCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgFlagCache.cs @@ -7,68 +7,57 @@ public sealed class SiteMsgFlagCache(IDistributedCache cache, ISiteMsgFlagServic : DistributedCache(cache, service), IScoped, ISiteMsgFlagCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateSiteMsgFlagReq req) - { + public Task CreateAsync(CreateSiteMsgFlagReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditSiteMsgFlagReq req) - { + public Task EditAsync(EditSiteMsgFlagReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QuerySiteMsgFlagReq req) - { + public Task GetAsync(QuerySiteMsgFlagReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgRoleCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgRoleCache.cs index 00ff36eb..bc041bfe 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgRoleCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgRoleCache.cs @@ -7,68 +7,57 @@ public sealed class SiteMsgRoleCache(IDistributedCache cache, ISiteMsgRoleServic : DistributedCache(cache, service), IScoped, ISiteMsgRoleCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateSiteMsgRoleReq req) - { + public Task CreateAsync(CreateSiteMsgRoleReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditSiteMsgRoleReq req) - { + public Task EditAsync(EditSiteMsgRoleReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QuerySiteMsgRoleReq req) - { + public Task GetAsync(QuerySiteMsgRoleReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgUserCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgUserCache.cs index efd2555e..96e98884 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgUserCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/SiteMsgUserCache.cs @@ -7,68 +7,57 @@ public sealed class SiteMsgUserCache(IDistributedCache cache, ISiteMsgUserServic : DistributedCache(cache, service), IScoped, ISiteMsgUserCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateSiteMsgUserReq req) - { + public Task CreateAsync(CreateSiteMsgUserReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditSiteMsgUserReq req) - { + public Task EditAsync(EditSiteMsgUserReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QuerySiteMsgUserReq req) - { + public Task GetAsync(QuerySiteMsgUserReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/ToolsCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/ToolsCache.cs index ba9fa959..f30daf97 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/ToolsCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/ToolsCache.cs @@ -3,42 +3,35 @@ using NetAdmin.Domain.Dto.Sys.Tool; namespace NetAdmin.SysComponent.Cache.Sys; /// -public sealed class ToolsCache(IDistributedCache cache, IToolsService service) // - : DistributedCache(cache, service), IScoped, IToolsCache +public sealed class ToolsCache(IDistributedCache cache, IToolsService service) : DistributedCache(cache, service), IScoped, IToolsCache { /// - public string AesDecode(AesDecodeReq req) - { + public string AesDecode(AesDecodeReq req) { return Service.AesDecode(req); } /// - public Task ExecuteSqlAsync(ExecuteSqlReq req) - { + public Task ExecuteSqlAsync(ExecuteSqlReq req) { return Service.ExecuteSqlAsync(req); } /// - public Task GetChangeLogAsync() - { + public Task GetChangeLogAsync() { return Service.GetChangeLogAsync(); } /// - public Task> GetModulesAsync() - { + public Task> GetModulesAsync() { return Service.GetModulesAsync(); } /// - public Task GetServerUtcTimeAsync() - { + public Task GetServerUtcTimeAsync() { return Service.GetServerUtcTimeAsync(); } /// - public Task GetVersionAsync() - { + public Task GetVersionAsync() { return Service.GetVersionAsync(); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/UserCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/UserCache.cs index 4287c0b8..f190b898 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/UserCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/UserCache.cs @@ -4,199 +4,171 @@ using NetAdmin.Domain.Dto.Sys.UserProfile; namespace NetAdmin.SysComponent.Cache.Sys; /// -public sealed class UserCache(IDistributedCache cache, IUserService service, IVerifyCodeCache verifyCodeCache) // +public sealed class UserCache(IDistributedCache cache, IUserService service, IVerifyCodeCache verifyCodeCache) : DistributedCache(cache, service), IScoped, IUserCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CheckInviterAvailableAsync(CheckInviterAvailableReq req) - { + public Task CheckInviterAvailableAsync(CheckInviterAvailableReq req) { return Service.CheckInviterAvailableAsync(req); } /// - public Task CheckMobileAvailableAsync(CheckMobileAvailableReq req) - { + public Task CheckMobileAvailableAsync(CheckMobileAvailableReq req) { return Service.CheckMobileAvailableAsync(req); } /// - public Task CheckUserNameAvailableAsync(CheckUserNameAvailableReq req) - { + public Task CheckUserNameAvailableAsync(CheckUserNameAvailableReq req) { return Service.CheckUserNameAvailableAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateUserReq req) - { + public Task CreateAsync(CreateUserReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditUserReq req) - { + public Task EditAsync(EditUserReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryUserReq req) - { + public Task GetAsync(QueryUserReq req) { return Service.GetAsync(req); } /// - public Task GetSessionUserAppConfigAsync() - { + public Task GetSessionUserAppConfigAsync() { return Service.GetSessionUserAppConfigAsync(); } /// - public Task LoginByPwdAsync(LoginByPwdReq req) - { + public Task LoginByPwdAsync(LoginByPwdReq req) { return Service.LoginByPwdAsync(req); } /// - public Task LoginBySmsAsync(LoginBySmsReq req) - { + public Task LoginBySmsAsync(LoginBySmsReq req) { return Service.LoginBySmsAsync(req); } /// - public Task LoginByUserIdAsync(long userId) - { + public Task LoginByUserIdAsync(LoginByUserIdReq req) { #if !DEBUG - return GetOrCreateAsync( // - GetCacheKey(userId.ToInvString()) // - , () => Service.LoginByUserIdAsync(userId), TimeSpan.FromSeconds(Numbers.SECS_CACHE_LOGIN_BY_USER_ID)); + return GetOrCreateAsync( + GetCacheKey(req.UserId.ToInvString()), () => Service.LoginByUserIdAsync(req), TimeSpan.FromSeconds(Numbers.SECS_CACHE_LOGIN_BY_USER_ID) + ); #else - return Service.LoginByUserIdAsync(userId); + return Service.LoginByUserIdAsync(req); #endif } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { #if !DEBUG - return GetOrCreateAsync( // - GetCacheKey(req.Json().Crc32().ToString(CultureInfo.InvariantCulture)) // - , () => Service.QueryAsync(req), TimeSpan.FromSeconds(Numbers.SECS_CACHE_DEFAULT)); + return GetOrCreateAsync( + GetCacheKey(req.Json().Crc32().ToString(CultureInfo.InvariantCulture)), () => Service.QueryAsync(req) + , TimeSpan.FromSeconds(Numbers.SECS_CACHE_DEFAULT) + ); #else return Service.QueryAsync(req); #endif } /// - public Task> QueryProfileAsync(QueryReq req) - { + public Task> QueryProfileAsync(QueryReq req) { return Service.QueryProfileAsync(req); } /// - public Task RegisterAsync(RegisterUserReq req) - { + public Task RegisterAsync(RegisterUserReq req) { return Service.RegisterAsync(req); } /// - public Task RemoveUserInfoAsync() - { - return RemoveAsync(GetCacheKey( // - Service.UserToken.Id.ToString(CultureInfo.InvariantCulture), nameof(UserInfoAsync))); + public Task RemoveUserInfoAsync() { + return RemoveAsync(GetCacheKey(Service.UserToken.Id.ToString(CultureInfo.InvariantCulture), nameof(UserInfoAsync))); } /// - public Task ResetPasswordAsync(ResetPasswordReq req) - { + public Task ResetPasswordAsync(ResetPasswordReq req) { return Service.ResetPasswordAsync(req); } /// - public Task SetAvatarAsync(SetAvatarReq req) - { + public Task SetAvatarAsync(SetAvatarReq req) { return Service.SetAvatarAsync(req); } /// - public async Task SetEmailAsync(SetEmailReq req) - { + public async Task SetEmailAsync(SetEmailReq req) { return !await verifyCodeCache.VerifyAsync(req).ConfigureAwait(false) ? throw new NetAdminInvalidOperationException(Ln.邮箱验证码不正确) : await Service.SetEmailAsync(req).ConfigureAwait(false); } /// - public Task SetEnabledAsync(SetUserEnabledReq req) - { + public Task SetEnabledAsync(SetUserEnabledReq req) { return Service.SetEnabledAsync(req); } /// - public Task SetMobileAsync(SetMobileReq req) - { + public Task SetMobileAsync(SetMobileReq req) { return Service.SetMobileAsync(req); } /// - public Task SetPasswordAsync(SetPasswordReq req) - { + public Task SetPasswordAsync(SetPasswordReq req) { return Service.SetPasswordAsync(req); } /// - public Task SetSessionUserAppConfigAsync(SetSessionUserAppConfigReq req) - { + public Task SetSessionUserAppConfigAsync(SetSessionUserAppConfigReq req) { return Service.SetSessionUserAppConfigAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } /// - public Task UserInfoAsync() - { + public Task UserInfoAsync() { #if !DEBUG - return GetOrCreateAsync( // + return GetOrCreateAsync( GetCacheKey(Service.UserToken.Id.ToString(CultureInfo.InvariantCulture)), Service.UserInfoAsync -, TimeSpan.FromSeconds(Numbers.SECS_CACHE_DEFAULT)); + , TimeSpan.FromSeconds(Numbers.SECS_CACHE_DEFAULT) + ); #else return Service.UserInfoAsync(); #endif diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/UserInviteCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/UserInviteCache.cs index 2a0cd241..49443293 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/UserInviteCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/UserInviteCache.cs @@ -9,110 +9,97 @@ public sealed class UserInviteCache(IDistributedCache cache, IUserInviteService : DistributedCache(cache, service), IScoped, IUserInviteCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateUserInviteReq req) - { + public Task CreateAsync(CreateUserInviteReq req) { return Service.CreateAsync(req); } /// - public Task CreateFansAccountAsync(CreateFansAccountReq req) - { + public Task CreateFansAccountAsync(CreateFansAccountReq req) { return Service.CreateFansAccountAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditUserInviteReq req) - { + public Task EditAsync(EditUserInviteReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryUserInviteReq req) - { + public Task GetAsync(QueryUserInviteReq req) { return Service.GetAsync(req); } /// - public Task GetSelfRechargeAllowedAsync() - { - return Service.GetSelfRechargeAllowedAsync(); + public Task GetSelfDepositAllowedAsync() { + return Service.GetSelfDepositAllowedAsync(); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task> QueryRolesAllowApplyAsync() - { + public Task> QueryRolesAllowApplyAsync() { return Service.QueryRolesAllowApplyAsync(); } /// - public Task SetCommissionRatioAsync(SetCommissionRatioReq req) - { + public Task SetCommissionRatioAsync(SetCommissionRatioReq req) { return Service.SetCommissionRatioAsync(req); } /// - public Task SetFansRoleAsync(SetFansRoleReq req) - { + public Task SetEnabledAsync(SetUserInviteEnabledReq req) { + return Service.SetEnabledAsync(req); + } + + /// + public Task SetFansRoleAsync(SetFansRoleReq req) { return Service.SetFansRoleAsync(req); } /// - public Task SetInviterAsync(SetInviterReq req) - { + public Task SetInviterAsync(SetInviterReq req) { return Service.SetInviterAsync(req); } /// - public Task SetSelfRechargeAllowedAsync(SetSelfRechargeAllowedReq req) - { - return Service.SetSelfRechargeAllowedAsync(req); + public Task SetSelfDepositAllowedAsync(SetSelfDepositAllowedReq req) { + return Service.SetSelfDepositAllowedAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/UserProfileCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/UserProfileCache.cs index d37a60ff..467adbed 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/UserProfileCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/UserProfileCache.cs @@ -3,72 +3,61 @@ using NetAdmin.Domain.Dto.Sys.UserProfile; namespace NetAdmin.SysComponent.Cache.Sys; /// -public sealed class UserProfileCache(IDistributedCache cache, IUserProfileService service) // +public sealed class UserProfileCache(IDistributedCache cache, IUserProfileService service) : DistributedCache(cache, service), IScoped, IUserProfileCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateUserProfileReq req) - { + public Task CreateAsync(CreateUserProfileReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditUserProfileReq req) - { + public Task EditAsync(EditUserProfileReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryUserProfileReq req) - { + public Task GetAsync(QueryUserProfileReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/UserWalletCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/UserWalletCache.cs index 3ae8e4d5..c9a2375e 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/UserWalletCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/UserWalletCache.cs @@ -7,68 +7,57 @@ public sealed class UserWalletCache(IDistributedCache cache, IUserWalletService : DistributedCache(cache, service), IScoped, IUserWalletCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateUserWalletReq req) - { + public Task CreateAsync(CreateUserWalletReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditUserWalletReq req) - { + public Task EditAsync(EditUserWalletReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryUserWalletReq req) - { + public Task GetAsync(QueryUserWalletReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/VerifyCodeCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/VerifyCodeCache.cs index ef6477df..c53b7bea 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/VerifyCodeCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/VerifyCodeCache.cs @@ -3,84 +3,71 @@ using NetAdmin.Domain.Dto.Sys.VerifyCode; namespace NetAdmin.SysComponent.Cache.Sys; /// -public sealed class VerifyCodeCache(IDistributedCache cache, IVerifyCodeService service) // +public sealed class VerifyCodeCache(IDistributedCache cache, IVerifyCodeService service) : DistributedCache(cache, service), IScoped, IVerifyCodeCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateVerifyCodeReq req) - { + public Task CreateAsync(CreateVerifyCodeReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditVerifyCodeReq req) - { + public Task EditAsync(EditVerifyCodeReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryVerifyCodeReq req) - { + public Task GetAsync(QueryVerifyCodeReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SendVerifyCodeAsync(SendVerifyCodeReq req) - { + public Task SendVerifyCodeAsync(SendVerifyCodeReq req) { return Service.SendVerifyCodeAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } /// - public Task VerifyAsync(VerifyCodeReq req) - { + public Task VerifyAsync(VerifyCodeReq req) { return Service.VerifyAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/WalletFrozenCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/WalletFrozenCache.cs index ab97182f..b07b69de 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/WalletFrozenCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/WalletFrozenCache.cs @@ -7,74 +7,62 @@ public sealed class WalletFrozenCache(IDistributedCache cache, IWalletFrozenServ : DistributedCache(cache, service), IScoped, IWalletFrozenCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateWalletFrozenReq req) - { + public Task CreateAsync(CreateWalletFrozenReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditWalletFrozenReq req) - { + public Task EditAsync(EditWalletFrozenReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryWalletFrozenReq req) - { + public Task GetAsync(QueryWalletFrozenReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SetStatusToThawedAsync(SetStatusToThawedReq req) - { + public Task SetStatusToThawedAsync(SetStatusToThawedReq req) { return Service.SetStatusToThawedAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/WalletTradeCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/WalletTradeCache.cs index 004a29c6..68d56e05 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/WalletTradeCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/WalletTradeCache.cs @@ -7,80 +7,67 @@ public sealed class WalletTradeCache(IDistributedCache cache, IWalletTradeServic : DistributedCache(cache, service), IScoped, IWalletTradeCache { /// - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Service.BulkDeleteAsync(req); } /// - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Service.CountAsync(req); } /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Service.CountByAsync(req); } /// - public Task CreateAsync(CreateWalletTradeReq req) - { + public Task CreateAsync(CreateWalletTradeReq req) { return Service.CreateAsync(req); } /// - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Service.DeleteAsync(req); } /// - public Task EditAsync(EditWalletTradeReq req) - { + public Task EditAsync(EditWalletTradeReq req) { return Service.EditAsync(req); } /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Service.ExportAsync(req); } /// - public Task GetAsync(QueryWalletTradeReq req) - { + public Task GetAsync(QueryWalletTradeReq req) { return Service.GetAsync(req); } /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Service.PagedQueryAsync(req); } /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Service.QueryAsync(req); } /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Service.SumAsync(req); } /// - public Task TransferFromAnotherAccountAsync(TransferReq req) - { + public Task TransferFromAnotherAccountAsync(TransferReq req) { return Service.TransferFromAnotherAccountAsync(req); } /// - public Task TransferToAnotherAccountAsync(TransferReq req) - { + public Task TransferToAnotherAccountAsync(TransferReq req) { return Service.TransferToAnotherAccountAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/ApiController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/ApiController.cs index 6de28f76..77043389 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/ApiController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/ApiController.cs @@ -14,8 +14,7 @@ public sealed class ApiController(IApiCache cache) : ControllerBase [NonAction] [Transaction] - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Cache.BulkDeleteAsync(req); } @@ -23,8 +22,7 @@ public sealed class ApiController(IApiCache cache) : ControllerBase [NonAction] - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Cache.CountAsync(req); } @@ -32,8 +30,7 @@ public sealed class ApiController(IApiCache cache) : ControllerBase [NonAction] - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Cache.CountByAsync(req); } @@ -42,8 +39,7 @@ public sealed class ApiController(IApiCache cache) : ControllerBase [NonAction] [Transaction] - public Task CreateAsync(CreateApiReq req) - { + public Task CreateAsync(CreateApiReq req) { return Cache.CreateAsync(req); } @@ -52,8 +48,7 @@ public sealed class ApiController(IApiCache cache) : ControllerBase [NonAction] [Transaction] - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Cache.DeleteAsync(req); } @@ -62,16 +57,14 @@ public sealed class ApiController(IApiCache cache) : ControllerBase [NonAction] [Transaction] - public Task EditAsync(EditApiReq req) - { + public Task EditAsync(EditApiReq req) { return Cache.EditAsync(req); } /// /// 导出接口 /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Cache.ExportAsync(req); } @@ -79,8 +72,7 @@ public sealed class ApiController(IApiCache cache) : ControllerBase [NonAction] - public Task GetAsync(QueryApiReq req) - { + public Task GetAsync(QueryApiReq req) { return Cache.GetAsync(req); } @@ -88,24 +80,21 @@ public sealed class ApiController(IApiCache cache) : ControllerBase [NonAction] - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Cache.PagedQueryAsync(req); } /// /// 平面查询接口 /// - public Task> PlainQueryAsync(QueryReq req) - { + public Task> PlainQueryAsync(QueryReq req) { return Cache.PlainQueryAsync(req); } /// /// 查询接口 /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Cache.QueryAsync(req); } @@ -113,8 +102,7 @@ public sealed class ApiController(IApiCache cache) : ControllerBase [NonAction] - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Cache.SumAsync(req); } @@ -122,8 +110,7 @@ public sealed class ApiController(IApiCache cache) : ControllerBase [Transaction] - public Task SyncAsync() - { + public Task SyncAsync() { return Cache.SyncAsync(); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/CacheController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/CacheController.cs index 4290b975..df467648 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/CacheController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/CacheController.cs @@ -12,40 +12,35 @@ public sealed class CacheController(ICacheCache cache) : ControllerBase /// 批量删除缓存项 /// - public Task BulkDeleteEntryAsync(BulkReq req) - { + public Task BulkDeleteEntryAsync(BulkReq req) { return Cache.BulkDeleteEntryAsync(req); } /// /// 缓存统计 /// - public Task CacheStatisticsAsync() - { + public Task CacheStatisticsAsync() { return Cache.CacheStatisticsAsync(); } /// /// 删除缓存项 /// - public Task DeleteEntryAsync(DelEntryReq req) - { + public Task DeleteEntryAsync(DelEntryReq req) { return Cache.DeleteEntryAsync(req); } /// /// 获取所有缓存项 /// - public Task> GetAllEntriesAsync(GetAllEntriesReq req) - { + public Task> GetAllEntriesAsync(GetAllEntriesReq req) { return Cache.GetAllEntriesAsync(req); } /// /// 获取缓存项 /// - public Task GetEntryAsync(GetEntriesReq req) - { + public Task GetEntryAsync(GetEntriesReq req) { return Cache.GetEntryAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/CaptchaController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/CaptchaController.cs index 6692fd95..8abeef14 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/CaptchaController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/CaptchaController.cs @@ -13,8 +13,7 @@ public sealed class CaptchaController(ICaptchaCache cache) : ControllerBase [AllowAnonymous] - public Task GetCaptchaImageAsync() - { + public Task GetCaptchaImageAsync() { return Cache.GetCaptchaImageAsync(); } @@ -22,8 +21,7 @@ public sealed class CaptchaController(ICaptchaCache cache) : ControllerBase [AllowAnonymous] - public Task VerifyCaptchaAsync(VerifyCaptchaReq req) - { + public Task VerifyCaptchaAsync(VerifyCaptchaReq req) { return Cache.VerifyCaptchaAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/CodeTemplateController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/CodeTemplateController.cs index d2f4aff4..174afc5c 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/CodeTemplateController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/CodeTemplateController.cs @@ -14,8 +14,7 @@ public sealed class CodeTemplateController(ICodeTemplateCache cache) /// 批量删除代码模板 /// [Transaction] - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Cache.BulkDeleteAsync(req); } @@ -23,16 +22,14 @@ public sealed class CodeTemplateController(ICodeTemplateCache cache) /// 代码模板计数 /// [NonAction] - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Cache.CountAsync(req); } /// /// 代码模板分组计数 /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Cache.CountByAsync(req); } @@ -40,8 +37,7 @@ public sealed class CodeTemplateController(ICodeTemplateCache cache) /// 创建代码模板 /// [Transaction] - public Task CreateAsync(CreateCodeTemplateReq req) - { + public Task CreateAsync(CreateCodeTemplateReq req) { return Cache.CreateAsync(req); } @@ -49,8 +45,7 @@ public sealed class CodeTemplateController(ICodeTemplateCache cache) /// 删除代码模板 /// [Transaction] - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Cache.DeleteAsync(req); } @@ -58,8 +53,7 @@ public sealed class CodeTemplateController(ICodeTemplateCache cache) /// 编辑代码模板 /// [Transaction] - public Task EditAsync(EditCodeTemplateReq req) - { + public Task EditAsync(EditCodeTemplateReq req) { return Cache.EditAsync(req); } @@ -67,24 +61,21 @@ public sealed class CodeTemplateController(ICodeTemplateCache cache) /// 导出代码模板 /// [NonAction] - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Cache.ExportAsync(req); } /// /// 获取单个代码模板 /// - public Task GetAsync(QueryCodeTemplateReq req) - { + public Task GetAsync(QueryCodeTemplateReq req) { return Cache.GetAsync(req); } /// /// 分页查询代码模板 /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Cache.PagedQueryAsync(req); } @@ -92,8 +83,7 @@ public sealed class CodeTemplateController(ICodeTemplateCache cache) /// 查询代码模板 /// [NonAction] - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Cache.QueryAsync(req); } @@ -101,8 +91,7 @@ public sealed class CodeTemplateController(ICodeTemplateCache cache) /// 代码模板求和 /// [NonAction] - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Cache.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/ConfigController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/ConfigController.cs index 6a6cb8de..1acf6b5d 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/ConfigController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/ConfigController.cs @@ -13,8 +13,7 @@ public sealed class ConfigController(IConfigCache cache) : ControllerBase [Transaction] - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Cache.BulkDeleteAsync(req); } @@ -22,16 +21,14 @@ public sealed class ConfigController(IConfigCache cache) : ControllerBase [NonAction] - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Cache.CountAsync(req); } /// /// 配置分组计数 /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Cache.CountByAsync(req); } @@ -39,8 +36,7 @@ public sealed class ConfigController(IConfigCache cache) : ControllerBase [Transaction] - public Task CreateAsync(CreateConfigReq req) - { + public Task CreateAsync(CreateConfigReq req) { return Cache.CreateAsync(req); } @@ -48,8 +44,7 @@ public sealed class ConfigController(IConfigCache cache) : ControllerBase [Transaction] - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Cache.DeleteAsync(req); } @@ -57,32 +52,28 @@ public sealed class ConfigController(IConfigCache cache) : ControllerBase [Transaction] - public Task EditAsync(EditConfigReq req) - { + public Task EditAsync(EditConfigReq req) { return Cache.EditAsync(req); } /// /// 导出配置 /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Cache.ExportAsync(req); } /// /// 获取单个配置 /// - public Task GetAsync(QueryConfigReq req) - { + public Task GetAsync(QueryConfigReq req) { return Cache.GetAsync(req); } /// /// 获取最新有效配置 /// - public Task GetLatestConfigAsync() - { + public Task GetLatestConfigAsync() { return Cache.GetLatestConfigAsync(); } @@ -90,32 +81,28 @@ public sealed class ConfigController(IConfigCache cache) : ControllerBase [AllowAnonymous] - public Task GetRegisterConfigAsync() - { + public Task GetRegisterConfigAsync() { return Cache.GetRegisterConfigAsync(); } /// /// 分页查询配置 /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Cache.PagedQueryAsync(req); } /// /// 查询配置 /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Cache.QueryAsync(req); } /// /// 设置配置启用状态 /// - public Task SetEnabledAsync(SetConfigEnabledReq req) - { + public Task SetEnabledAsync(SetConfigEnabledReq req) { return Cache.SetEnabledAsync(req); } @@ -123,8 +110,7 @@ public sealed class ConfigController(IConfigCache cache) : ControllerBase [NonAction] - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Cache.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/ConstantController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/ConstantController.cs index 3f270787..5c96631e 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/ConstantController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/ConstantController.cs @@ -15,8 +15,7 @@ public sealed class ConstantController(IConstantCache cache, IOptions [NonUnify] - public IActionResult GetChars() - { + public IActionResult GetChars() { var ret = GetCharsDic(); return OriginNamingResult(ret); } @@ -25,24 +24,21 @@ public sealed class ConstantController(IConstantCache cache, IOptions [NonAction] - public IDictionary GetCharsDic() - { + public IDictionary GetCharsDic() { return Cache.GetCharsDic(); } /// /// 获得公共枚举值 /// - public IDictionary> GetEnums() - { + public IDictionary> GetEnums() { return Cache.GetEnums(); } /// /// 获得本地化字符串 /// - public IDictionary GetLocalizedStrings() - { + public IDictionary GetLocalizedStrings() { return Cache.GetLocalizedStrings(); } @@ -50,8 +46,7 @@ public sealed class ConstantController(IConstantCache cache, IOptions [NonUnify] - public IActionResult GetNumbers() - { + public IActionResult GetNumbers() { var ret = GetNumbersDic(); return OriginNamingResult(ret); } @@ -60,15 +55,14 @@ public sealed class ConstantController(IConstantCache cache, IOptions [NonAction] - public IDictionary GetNumbersDic() - { + public IDictionary GetNumbersDic() { return Cache.GetNumbersDic(); } - private JsonResult OriginNamingResult(T data) - { - return new JsonResult( // - new RestfulInfo { Code = 0, Data = data } - , new JsonSerializerOptions(jsonOptions.Value.JsonSerializerOptions) { DictionaryKeyPolicy = null }); + private JsonResult OriginNamingResult(T data) { + return new JsonResult( + new RestfulInfo { Code = 0, Data = data } + , new JsonSerializerOptions(jsonOptions.Value.JsonSerializerOptions) { DictionaryKeyPolicy = null } + ); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DepositOrderController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DepositOrderController.cs index 3679a34f..8e42a568 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DepositOrderController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DepositOrderController.cs @@ -14,8 +14,7 @@ public sealed class DepositOrderController(IDepositOrderCache cache) /// 批量删除充值订单 /// [Transaction] - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Cache.BulkDeleteAsync(req); } @@ -23,16 +22,14 @@ public sealed class DepositOrderController(IDepositOrderCache cache) /// 充值订单计数 /// [NonAction] - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Cache.CountAsync(req); } /// /// 充值订单分组计数 /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Cache.CountByAsync(req); } @@ -40,8 +37,7 @@ public sealed class DepositOrderController(IDepositOrderCache cache) /// 创建充值订单 /// [Transaction] - public Task CreateAsync(CreateDepositOrderReq req) - { + public Task CreateAsync(CreateDepositOrderReq req) { return Cache.CreateAsync(req); } @@ -49,8 +45,7 @@ public sealed class DepositOrderController(IDepositOrderCache cache) /// 删除充值订单 /// [Transaction] - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Cache.DeleteAsync(req); } @@ -58,49 +53,42 @@ public sealed class DepositOrderController(IDepositOrderCache cache) /// 编辑充值订单 /// [Transaction] - public Task EditAsync(EditDepositOrderReq req) - { + public Task EditAsync(EditDepositOrderReq req) { return Cache.EditAsync(req); } /// /// 导出充值订单 /// - [NonAction] - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Cache.ExportAsync(req); } /// /// 获取单个充值订单 /// - public Task GetAsync(QueryDepositOrderReq req) - { + public Task GetAsync(QueryDepositOrderReq req) { return Cache.GetAsync(req); } /// /// 获取充值配置 /// - public Task GetDepositConfigAsync() - { + public Task GetDepositConfigAsync() { return Cache.GetDepositConfigAsync(); } /// /// 分页查询充值订单 /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Cache.PagedQueryAsync(req); } /// /// 支付确认 /// - public Task PayConfirmAsync(PayConfirmReq req) - { + public Task PayConfirmAsync(PayConfirmReq req) { return Cache.PayConfirmAsync(req); } @@ -108,25 +96,21 @@ public sealed class DepositOrderController(IDepositOrderCache cache) /// 查询充值订单 /// [NonAction] - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Cache.QueryAsync(req); } /// /// 到账确认 /// - public Task ReceivedConfirmationAsync(JobReq req) - { + public Task ReceivedConfirmationAsync(JobReq req) { return Cache.ReceivedConfirmationAsync(req); } /// /// 充值订单求和 /// - [NonAction] - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Cache.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DeptController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DeptController.cs index 294e6f8b..a3fa1120 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DeptController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DeptController.cs @@ -13,8 +13,7 @@ public sealed class DeptController(IDeptCache cache) : ControllerBase [Transaction] - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Cache.BulkDeleteAsync(req); } @@ -22,16 +21,14 @@ public sealed class DeptController(IDeptCache cache) : ControllerBase [NonAction] - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Cache.CountAsync(req); } /// /// 部门分组计数 /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Cache.CountByAsync(req); } @@ -39,8 +36,7 @@ public sealed class DeptController(IDeptCache cache) : ControllerBase [Transaction] - public Task CreateAsync(CreateDeptReq req) - { + public Task CreateAsync(CreateDeptReq req) { return Cache.CreateAsync(req); } @@ -48,8 +44,7 @@ public sealed class DeptController(IDeptCache cache) : ControllerBase [Transaction] - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Cache.DeleteAsync(req); } @@ -57,24 +52,21 @@ public sealed class DeptController(IDeptCache cache) : ControllerBase [Transaction] - public Task EditAsync(EditDeptReq req) - { + public Task EditAsync(EditDeptReq req) { return Cache.EditAsync(req); } /// /// 导出部门 /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Cache.ExportAsync(req); } /// /// 获取单个部门 /// - public Task GetAsync(QueryDeptReq req) - { + public Task GetAsync(QueryDeptReq req) { return Cache.GetAsync(req); } @@ -82,24 +74,21 @@ public sealed class DeptController(IDeptCache cache) : ControllerBase [NonAction] - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Cache.PagedQueryAsync(req); } /// /// 查询部门 /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Cache.QueryAsync(req); } /// /// 启用/禁用部门 /// - public Task SetEnabledAsync(SetDeptEnabledReq req) - { + public Task SetEnabledAsync(SetDeptEnabledReq req) { return Cache.SetEnabledAsync(req); } @@ -107,8 +96,7 @@ public sealed class DeptController(IDeptCache cache) : ControllerBase [NonAction] - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Cache.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DevController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DevController.cs index fb330a0e..2aaaa106 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DevController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DevController.cs @@ -12,56 +12,49 @@ public sealed class DevController(IDevCache cache) : ControllerBase /// 生成后端代码 /// - public Task GenerateCsCodeAsync(GenerateCsCodeReq req) - { + public Task GenerateCsCodeAsync(GenerateCsCodeReq req) { return Cache.GenerateCsCodeAsync(req); } /// /// 生成图标代码 /// - public Task GenerateIconCodeAsync(GenerateIconCodeReq req) - { + public Task GenerateIconCodeAsync(GenerateIconCodeReq req) { return Cache.GenerateIconCodeAsync(req); } /// /// 生成接口代码 /// - public Task GenerateJsCodeAsync() - { + public Task GenerateJsCodeAsync() { return Cache.GenerateJsCodeAsync(); } /// /// 获取实体项目列表 /// - public Task>> GetDomainProjectsAsync() - { + public Task>> GetDomainProjectsAsync() { return Cache.GetDomainProjectsAsync(); } /// /// 获取所有数据类型 /// - public IEnumerable GetDotnetDataTypes(GetDotnetDataTypesReq req) - { + public IEnumerable GetDotnetDataTypes(GetDotnetDataTypesReq req) { return Cache.GetDotnetDataTypes(req); } /// /// 获取实体基类列表 /// - public IEnumerable> GetEntityBaseClasses() - { + public IEnumerable> GetEntityBaseClasses() { return Cache.GetEntityBaseClasses(); } /// /// 获取字段接口列表 /// - public IEnumerable> GetFieldInterfaces() - { + public IEnumerable> GetFieldInterfaces() { return Cache.GetFieldInterfaces(); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DicController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DicController.cs index 82117f98..49e82470 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DicController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DicController.cs @@ -14,8 +14,7 @@ public sealed class DicController(IDicCache cache) : ControllerBase [Transaction] - public Task BulkDeleteCatalogAsync(BulkReq req) - { + public Task BulkDeleteCatalogAsync(BulkReq req) { return Cache.BulkDeleteCatalogAsync(req); } @@ -23,16 +22,14 @@ public sealed class DicController(IDicCache cache) : ControllerBase [Transaction] - public Task BulkDeleteContentAsync(BulkReq req) - { + public Task BulkDeleteContentAsync(BulkReq req) { return Cache.BulkDeleteContentAsync(req); } /// /// 字典内容分组计数 /// - public Task, int>>> ContentCountByAsync(QueryReq req) - { + public Task, int>>> ContentCountByAsync(QueryReq req) { return Cache.ContentCountByAsync(req); } @@ -40,8 +37,7 @@ public sealed class DicController(IDicCache cache) : ControllerBase [Transaction] - public Task CreateCatalogAsync(CreateDicCatalogReq req) - { + public Task CreateCatalogAsync(CreateDicCatalogReq req) { return Cache.CreateCatalogAsync(req); } @@ -49,8 +45,7 @@ public sealed class DicController(IDicCache cache) : ControllerBase [Transaction] - public Task CreateContentAsync(CreateDicContentReq req) - { + public Task CreateContentAsync(CreateDicContentReq req) { return Cache.CreateContentAsync(req); } @@ -58,8 +53,7 @@ public sealed class DicController(IDicCache cache) : ControllerBase [Transaction] - public Task DeleteCatalogAsync(DelReq req) - { + public Task DeleteCatalogAsync(DelReq req) { return Cache.DeleteCatalogAsync(req); } @@ -67,8 +61,7 @@ public sealed class DicController(IDicCache cache) : ControllerBase [Transaction] - public Task DeleteContentAsync(DelReq req) - { + public Task DeleteContentAsync(DelReq req) { return Cache.DeleteContentAsync(req); } @@ -76,8 +69,7 @@ public sealed class DicController(IDicCache cache) : ControllerBase [Transaction] - public Task EditCatalogAsync(EditDicCatalogReq req) - { + public Task EditCatalogAsync(EditDicCatalogReq req) { return Cache.EditCatalogAsync(req); } @@ -85,80 +77,70 @@ public sealed class DicController(IDicCache cache) : ControllerBase [Transaction] - public Task EditContentAsync(EditDicContentReq req) - { + public Task EditContentAsync(EditDicContentReq req) { return Cache.EditContentAsync(req); } /// /// 导出字典内容 /// - public Task ExportContentAsync(QueryReq req) - { + public Task ExportContentAsync(QueryReq req) { return Cache.ExportContentAsync(req); } /// /// 获取单个字典目录 /// - public Task GetCatalogAsync(QueryDicCatalogReq req) - { + public Task GetCatalogAsync(QueryDicCatalogReq req) { return Cache.GetCatalogAsync(req); } /// /// 获取单个字典内容 /// - public Task GetContentAsync(QueryDicContentReq req) - { + public Task GetContentAsync(QueryDicContentReq req) { return Cache.GetContentAsync(req); } /// /// 获取字典值 /// - public Task GetDicValueAsync(GetDicValueReq req) - { + public Task GetDicValueAsync(GetDicValueReq req) { return Cache.GetDicValueAsync(req); } /// /// 分页查询字典目录 /// - public Task> PagedQueryCatalogAsync(PagedQueryReq req) - { + public Task> PagedQueryCatalogAsync(PagedQueryReq req) { return Cache.PagedQueryCatalogAsync(req); } /// /// 分页查询字典内容 /// - public Task> PagedQueryContentAsync(PagedQueryReq req) - { + public Task> PagedQueryContentAsync(PagedQueryReq req) { return Cache.PagedQueryContentAsync(req); } /// /// 查询字典目录 /// - public Task> QueryCatalogAsync(QueryReq req) - { + public Task> QueryCatalogAsync(QueryReq req) { return Cache.QueryCatalogAsync(req); } /// /// 查询字典内容 /// - public Task> QueryContentAsync(QueryReq req) - { + public Task> QueryContentAsync(QueryReq req) { return Cache.QueryContentAsync(req); } /// /// 启用/禁用字典内容 /// - public Task SetEnabledAsync(SetDicContentEnabledReq req) - { + public Task SetEnabledAsync(SetDicContentEnabledReq req) { return Cache.SetEnabledAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DocController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DocController.cs index dfba293f..c2d12513 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DocController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/DocController.cs @@ -14,8 +14,7 @@ public sealed class DocController(IDocCache cache) : ControllerBase [Transaction] - public Task BulkDeleteCatalogAsync(BulkReq req) - { + public Task BulkDeleteCatalogAsync(BulkReq req) { return Cache.BulkDeleteCatalogAsync(req); } @@ -23,16 +22,14 @@ public sealed class DocController(IDocCache cache) : ControllerBase [Transaction] - public Task BulkDeleteContentAsync(BulkReq req) - { + public Task BulkDeleteContentAsync(BulkReq req) { return Cache.BulkDeleteContentAsync(req); } /// /// 文档内容分组计数 /// - public Task, int>>> ContentCountByAsync(QueryReq req) - { + public Task, int>>> ContentCountByAsync(QueryReq req) { return Cache.ContentCountByAsync(req); } @@ -40,8 +37,7 @@ public sealed class DocController(IDocCache cache) : ControllerBase [Transaction] - public Task CreateCatalogAsync(CreateDocCatalogReq req) - { + public Task CreateCatalogAsync(CreateDocCatalogReq req) { return Cache.CreateCatalogAsync(req); } @@ -49,8 +45,7 @@ public sealed class DocController(IDocCache cache) : ControllerBase [Transaction] - public Task CreateContentAsync(CreateDocContentReq req) - { + public Task CreateContentAsync(CreateDocContentReq req) { return Cache.CreateContentAsync(req); } @@ -58,8 +53,7 @@ public sealed class DocController(IDocCache cache) : ControllerBase [Transaction] - public Task DeleteCatalogAsync(DelReq req) - { + public Task DeleteCatalogAsync(DelReq req) { return Cache.DeleteCatalogAsync(req); } @@ -67,8 +61,7 @@ public sealed class DocController(IDocCache cache) : ControllerBase [Transaction] - public Task DeleteContentAsync(DelReq req) - { + public Task DeleteContentAsync(DelReq req) { return Cache.DeleteContentAsync(req); } @@ -76,8 +69,7 @@ public sealed class DocController(IDocCache cache) : ControllerBase [Transaction] - public Task EditCatalogAsync(EditDocCatalogReq req) - { + public Task EditCatalogAsync(EditDocCatalogReq req) { return Cache.EditCatalogAsync(req); } @@ -85,72 +77,63 @@ public sealed class DocController(IDocCache cache) : ControllerBase [Transaction] - public Task EditContentAsync(EditDocContentReq req) - { + public Task EditContentAsync(EditDocContentReq req) { return Cache.EditContentAsync(req); } /// /// 导出文档内容 /// - public Task ExportContentAsync(QueryReq req) - { + public Task ExportContentAsync(QueryReq req) { return Cache.ExportContentAsync(req); } /// /// 获取单个文档分类 /// - public Task GetCatalogAsync(QueryDocCatalogReq req) - { + public Task GetCatalogAsync(QueryDocCatalogReq req) { return Cache.GetCatalogAsync(req); } /// /// 获取单个文档内容 /// - public Task GetContentAsync(QueryDocContentReq req) - { + public Task GetContentAsync(QueryDocContentReq req) { return Cache.GetContentAsync(req); } /// /// 分页查询文档分类 /// - public Task> PagedQueryCatalogAsync(PagedQueryReq req) - { + public Task> PagedQueryCatalogAsync(PagedQueryReq req) { return Cache.PagedQueryCatalogAsync(req); } /// /// 分页查询文档内容 /// - public Task> PagedQueryContentAsync(PagedQueryReq req) - { + public Task> PagedQueryContentAsync(PagedQueryReq req) { return Cache.PagedQueryContentAsync(req); } /// /// 查询文档分类 /// - public Task> QueryCatalogAsync(QueryReq req) - { + public Task> QueryCatalogAsync(QueryReq req) { return Cache.QueryCatalogAsync(req); } /// /// 查询文档内容 /// - public Task> QueryContentAsync(QueryReq req) - { + public Task> QueryContentAsync(QueryReq req) { return Cache.QueryContentAsync(req); } /// /// 启用/禁用文档内容 /// - public Task SetEnabledAsync(SetDocContentEnabledReq req) - { + public Task SetEnabledAsync(SetDocContentEnabledReq req) { return Cache.SetEnabledAsync(req); } @@ -158,8 +141,7 @@ public sealed class DocController(IDocCache cache) : ControllerBase [AllowAnonymous] - public Task ViewContentAsync(QueryDocContentReq req) - { + public Task ViewContentAsync(QueryDocContentReq req) { return Cache.ViewContentAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/FileController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/FileController.cs index 14c6b18e..16f68825 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/FileController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/FileController.cs @@ -12,8 +12,7 @@ public sealed class FileController(IFileCache cache) : ControllerBase /// 文件上传 /// - public Task UploadAsync(IFormFile file) - { + public Task UploadAsync(IFormFile file) { return Cache.UploadAsync(file); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/JobController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/JobController.cs index 3693091d..c79022c0 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/JobController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/JobController.cs @@ -15,8 +15,7 @@ public sealed class JobController(IJobCache cache) : ControllerBase [Transaction] - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Cache.BulkDeleteAsync(req); } @@ -24,24 +23,21 @@ public sealed class JobController(IJobCache cache) : ControllerBase [NonAction] - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Cache.CountAsync(req); } /// /// 计划作业分组计数 /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Cache.CountByAsync(req); } /// /// 作业记录计数 /// - public Task CountRecordAsync(QueryReq req) - { + public Task CountRecordAsync(QueryReq req) { return Cache.CountRecordAsync(req); } @@ -49,8 +45,7 @@ public sealed class JobController(IJobCache cache) : ControllerBase [Transaction] - public Task CreateAsync(CreateJobReq req) - { + public Task CreateAsync(CreateJobReq req) { return Cache.CreateAsync(req); } @@ -58,8 +53,7 @@ public sealed class JobController(IJobCache cache) : ControllerBase [Transaction] - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Cache.DeleteAsync(req); } @@ -67,112 +61,98 @@ public sealed class JobController(IJobCache cache) : ControllerBase [Transaction] - public Task EditAsync(EditJobReq req) - { + public Task EditAsync(EditJobReq req) { return Cache.EditAsync(req); } /// /// 执行作业 /// - public Task ExecuteAsync(QueryJobReq req) - { + public Task ExecuteAsync(QueryJobReq req) { return Cache.ExecuteAsync(req); } /// /// 导出计划作业 /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Cache.ExportAsync(req); } /// /// 导出作业记录 /// - public Task ExportRecordAsync(QueryReq req) - { + public Task ExportRecordAsync(QueryReq req) { return Cache.ExportRecordAsync(req); } /// /// 获取单个计划作业 /// - public Task GetAsync(QueryJobReq req) - { + public Task GetAsync(QueryJobReq req) { return Cache.GetAsync(req); } /// /// 获取单个作业记录 /// - public Task GetRecordAsync(QueryJobRecordReq req) - { + public Task GetRecordAsync(QueryJobRecordReq req) { return Cache.GetRecordAsync(req); } /// /// 获取作业记录条形图数据 /// - public Task> GetRecordBarChartAsync(QueryReq req) - { + public Task> GetRecordBarChartAsync(QueryReq req) { return Cache.GetRecordBarChartAsync(req); } /// /// 状态码分组作业记录饼图数据 /// - public Task> GetRecordPieChartByHttpStatusCodeAsync(QueryReq req) - { + public Task> GetRecordPieChartByHttpStatusCodeAsync(QueryReq req) { return Cache.GetRecordPieChartByHttpStatusCodeAsync(req); } /// /// 名称分组作业记录饼图数据 /// - public Task> GetRecordPieChartByNameAsync(QueryReq req) - { + public Task> GetRecordPieChartByNameAsync(QueryReq req) { return Cache.GetRecordPieChartByNameAsync(req); } /// /// 分页查询计划作业 /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Cache.PagedQueryAsync(req); } /// /// 分页查询作业记录 /// - public Task> PagedQueryRecordAsync(PagedQueryReq req) - { + public Task> PagedQueryRecordAsync(PagedQueryReq req) { return Cache.PagedQueryRecordAsync(req); } /// /// 查询计划作业 /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Cache.QueryAsync(req); } /// /// 作业记录分组计数 /// - public Task, int>>> RecordCountByAsync(QueryReq req) - { + public Task, int>>> RecordCountByAsync(QueryReq req) { return Cache.RecordCountByAsync(req); } /// /// 启用/禁用作业 /// - public Task SetEnabledAsync(SetJobEnabledReq req) - { + public Task SetEnabledAsync(SetJobEnabledReq req) { return Cache.SetEnabledAsync(req); } @@ -180,8 +160,7 @@ public sealed class JobController(IJobCache cache) : ControllerBase [NonAction] - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Cache.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/LoginLogController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/LoginLogController.cs index 9c6e1765..eca2d7b9 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/LoginLogController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/LoginLogController.cs @@ -13,8 +13,7 @@ public sealed class LoginLogController(ILoginLogCache cache) : ControllerBase [Transaction] - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Cache.BulkDeleteAsync(req); } @@ -22,16 +21,14 @@ public sealed class LoginLogController(ILoginLogCache cache) : ControllerBase [NonAction] - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Cache.CountAsync(req); } /// /// 登录日志分组计数 /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Cache.CountByAsync(req); } @@ -39,8 +36,7 @@ public sealed class LoginLogController(ILoginLogCache cache) : ControllerBase [Transaction] - public Task CreateAsync(CreateLoginLogReq req) - { + public Task CreateAsync(CreateLoginLogReq req) { return Cache.CreateAsync(req); } @@ -48,8 +44,7 @@ public sealed class LoginLogController(ILoginLogCache cache) : ControllerBase [Transaction] - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Cache.DeleteAsync(req); } @@ -58,40 +53,35 @@ public sealed class LoginLogController(ILoginLogCache cache) : ControllerBase [NonAction] [Transaction] - public Task EditAsync(EditLoginLogReq req) - { + public Task EditAsync(EditLoginLogReq req) { return Cache.EditAsync(req); } /// /// 导出登录日志 /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Cache.ExportAsync(req); } /// /// 获取单个登录日志 /// - public Task GetAsync(QueryLoginLogReq req) - { + public Task GetAsync(QueryLoginLogReq req) { return Cache.GetAsync(req); } /// /// 分页查询登录日志 /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Cache.PagedQueryAsync(req); } /// /// 查询登录日志 /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Cache.QueryAsync(req); } @@ -99,8 +89,7 @@ public sealed class LoginLogController(ILoginLogCache cache) : ControllerBase [NonAction] - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Cache.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/MenuController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/MenuController.cs index 0a39a89f..497c5904 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/MenuController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/MenuController.cs @@ -13,8 +13,7 @@ public sealed class MenuController(IMenuCache cache) : ControllerBase [Transaction] - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Cache.BulkDeleteAsync(req); } @@ -22,8 +21,7 @@ public sealed class MenuController(IMenuCache cache) : ControllerBase [NonAction] - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Cache.CountAsync(req); } @@ -31,8 +29,7 @@ public sealed class MenuController(IMenuCache cache) : ControllerBase [NonAction] - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Cache.CountByAsync(req); } @@ -40,8 +37,7 @@ public sealed class MenuController(IMenuCache cache) : ControllerBase [Transaction] - public Task CreateAsync(CreateMenuReq req) - { + public Task CreateAsync(CreateMenuReq req) { return Cache.CreateAsync(req); } @@ -49,8 +45,7 @@ public sealed class MenuController(IMenuCache cache) : ControllerBase [Transaction] - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Cache.DeleteAsync(req); } @@ -58,8 +53,7 @@ public sealed class MenuController(IMenuCache cache) : ControllerBase [Transaction] - public Task EditAsync(EditMenuReq req) - { + public Task EditAsync(EditMenuReq req) { return Cache.EditAsync(req); } @@ -67,16 +61,14 @@ public sealed class MenuController(IMenuCache cache) : ControllerBase [NonAction] - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Cache.ExportAsync(req); } /// /// 获取单个菜单 /// - public Task GetAsync(QueryMenuReq req) - { + public Task GetAsync(QueryMenuReq req) { return Cache.GetAsync(req); } @@ -84,16 +76,14 @@ public sealed class MenuController(IMenuCache cache) : ControllerBase [NonAction] - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Cache.PagedQueryAsync(req); } /// /// 查询菜单 /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Cache.QueryAsync(req); } @@ -101,16 +91,14 @@ public sealed class MenuController(IMenuCache cache) : ControllerBase [NonAction] - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Cache.SumAsync(req); } /// /// 当前用户菜单 /// - public Task> UserMenusAsync() - { + public Task> UserMenusAsync() { return Cache.UserMenusAsync(); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/RequestLogController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/RequestLogController.cs index 4360586e..a44cc39e 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/RequestLogController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/RequestLogController.cs @@ -15,8 +15,7 @@ public sealed class RequestLogController(IRequestLogCache cache) : ControllerBas /// [NonAction] [Transaction] - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Cache.BulkDeleteAsync(req); } @@ -24,16 +23,14 @@ public sealed class RequestLogController(IRequestLogCache cache) : ControllerBas /// 请求日志计数 /// [NonAction] - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Cache.CountAsync(req); } /// /// 请求日志分组计数 /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Cache.CountByAsync(req); } @@ -42,8 +39,7 @@ public sealed class RequestLogController(IRequestLogCache cache) : ControllerBas /// [NonAction] [Transaction] - public Task CreateAsync(CreateRequestLogReq req) - { + public Task CreateAsync(CreateRequestLogReq req) { return Cache.CreateAsync(req); } @@ -52,8 +48,7 @@ public sealed class RequestLogController(IRequestLogCache cache) : ControllerBas /// [NonAction] [Transaction] - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Cache.DeleteAsync(req); } @@ -62,64 +57,56 @@ public sealed class RequestLogController(IRequestLogCache cache) : ControllerBas /// [NonAction] [Transaction] - public Task EditAsync(EditRequestLogReq req) - { + public Task EditAsync(EditRequestLogReq req) { return Cache.EditAsync(req); } /// /// 导出请求日志 /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Cache.ExportAsync(req); } /// /// 获取单个请求日志 /// - public Task GetAsync(QueryRequestLogReq req) - { + public Task GetAsync(QueryRequestLogReq req) { return Cache.GetAsync(req); } /// /// 获取条形图数据 /// - public Task> GetBarChartAsync(QueryReq req) - { + public Task> GetBarChartAsync(QueryReq req) { return Cache.GetBarChartAsync(req); } /// /// 描述分组饼图数据 /// - public Task> GetPieChartByApiSummaryAsync(QueryReq req) - { + public Task> GetPieChartByApiSummaryAsync(QueryReq req) { return Cache.GetPieChartByApiSummaryAsync(req); } /// /// 状态码分组饼图数据 /// - public Task> GetPieChartByHttpStatusCodeAsync(QueryReq req) - { + public Task> GetPieChartByHttpStatusCodeAsync(QueryReq req) { return Cache.GetPieChartByHttpStatusCodeAsync(req); } /// /// 分页查询请求日志 /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Cache.PagedQueryAsync(req); } /// /// 查询请求日志 /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Cache.QueryAsync(req); } @@ -127,8 +114,7 @@ public sealed class RequestLogController(IRequestLogCache cache) : ControllerBas /// 请求日志求和 /// [NonAction] - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Cache.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/RoleController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/RoleController.cs index 0b0b99f1..affc4ad3 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/RoleController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/RoleController.cs @@ -14,8 +14,7 @@ public sealed class RoleController(IRoleCache cache) : ControllerBase [Transaction] - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Cache.BulkDeleteAsync(req); } @@ -23,16 +22,14 @@ public sealed class RoleController(IRoleCache cache) : ControllerBase [NonAction] - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Cache.CountAsync(req); } /// /// 角色分组计数 /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Cache.CountByAsync(req); } @@ -40,8 +37,7 @@ public sealed class RoleController(IRoleCache cache) : ControllerBase [Transaction] - public Task CreateAsync(CreateRoleReq req) - { + public Task CreateAsync(CreateRoleReq req) { return Cache.CreateAsync(req); } @@ -49,8 +45,7 @@ public sealed class RoleController(IRoleCache cache) : ControllerBase [Transaction] - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Cache.DeleteAsync(req); } @@ -58,64 +53,56 @@ public sealed class RoleController(IRoleCache cache) : ControllerBase [Transaction] - public Task EditAsync(EditRoleReq req) - { + public Task EditAsync(EditRoleReq req) { return Cache.EditAsync(req); } /// /// 导出角色 /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Cache.ExportAsync(req); } /// /// 获取单个角色 /// - public Task GetAsync(QueryRoleReq req) - { + public Task GetAsync(QueryRoleReq req) { return Cache.GetAsync(req); } /// /// 分页查询角色 /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Cache.PagedQueryAsync(req); } /// /// 查询角色 /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Cache.QueryAsync(req); } /// /// 设置是否显示仪表板 /// - public Task SetDisplayDashboardAsync(SetDisplayDashboardReq req) - { + public Task SetDisplayDashboardAsync(SetDisplayDashboardReq req) { return Cache.SetDisplayDashboardAsync(req); } /// /// 启用/禁用角色 /// - public Task SetEnabledAsync(SetRoleEnabledReq req) - { + public Task SetEnabledAsync(SetRoleEnabledReq req) { return Cache.SetEnabledAsync(req); } /// /// 设置是否忽略权限控制 /// - public Task SetIgnorePermissionControlAsync(SetIgnorePermissionControlReq req) - { + public Task SetIgnorePermissionControlAsync(SetIgnorePermissionControlReq req) { return Cache.SetIgnorePermissionControlAsync(req); } @@ -123,16 +110,14 @@ public sealed class RoleController(IRoleCache cache) : ControllerBase [NonAction] - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Cache.SumAsync(req); } /// /// 角色用户映射分组计数 /// - public Task, int>>> UserCountByAsync(QueryReq req) - { + public Task, int>>> UserCountByAsync(QueryReq req) { return Cache.UserCountByAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/SiteMsgController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/SiteMsgController.cs index faaea965..b8f2b0ea 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/SiteMsgController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/SiteMsgController.cs @@ -14,8 +14,7 @@ public sealed class SiteMsgController(ISiteMsgCache cache) : ControllerBase [Transaction] - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Cache.BulkDeleteAsync(req); } @@ -23,16 +22,14 @@ public sealed class SiteMsgController(ISiteMsgCache cache) : ControllerBase [NonAction] - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Cache.CountAsync(req); } /// /// 站内信分组计数 /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Cache.CountByAsync(req); } @@ -40,8 +37,7 @@ public sealed class SiteMsgController(ISiteMsgCache cache) : ControllerBase [Transaction] - public Task CreateAsync(CreateSiteMsgReq req) - { + public Task CreateAsync(CreateSiteMsgReq req) { return Cache.CreateAsync(req); } @@ -49,8 +45,7 @@ public sealed class SiteMsgController(ISiteMsgCache cache) : ControllerBase [Transaction] - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Cache.DeleteAsync(req); } @@ -58,64 +53,56 @@ public sealed class SiteMsgController(ISiteMsgCache cache) : ControllerBase [Transaction] - public Task EditAsync(EditSiteMsgReq req) - { + public Task EditAsync(EditSiteMsgReq req) { return Cache.EditAsync(req); } /// /// 导出站内信 /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Cache.ExportAsync(req); } /// /// 获取单个站内信 /// - public Task GetAsync(QuerySiteMsgReq req) - { + public Task GetAsync(QuerySiteMsgReq req) { return Cache.GetAsync(req); } /// /// 获取单个我的站内信 /// - public Task GetMineAsync(QuerySiteMsgReq req) - { + public Task GetMineAsync(QuerySiteMsgReq req) { return Cache.GetMineAsync(req); } /// /// 分页查询站内信 /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Cache.PagedQueryAsync(req); } /// /// 分页查询我的站内信 /// - public Task> PagedQueryMineAsync(PagedQueryReq req) - { + public Task> PagedQueryMineAsync(PagedQueryReq req) { return Cache.PagedQueryMineAsync(req); } /// /// 查询站内信 /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Cache.QueryAsync(req); } /// /// 设置站内信状态 /// - public Task SetSiteMsgStatusAsync(SetUserSiteMsgStatusReq req) - { + public Task SetSiteMsgStatusAsync(SetUserSiteMsgStatusReq req) { return Cache.SetSiteMsgStatusAsync(req); } @@ -123,16 +110,14 @@ public sealed class SiteMsgController(ISiteMsgCache cache) : ControllerBase [NonAction] - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Cache.SumAsync(req); } /// /// 未读数量 /// - public Task UnreadCountAsync() - { + public Task UnreadCountAsync() { return Cache.UnreadCountAsync(); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/ToolsController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/ToolsController.cs index 36e300da..166ff0f0 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/ToolsController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/ToolsController.cs @@ -12,16 +12,14 @@ public sealed class ToolsController(IToolsCache cache) : ControllerBase /// Aes解密 /// - public string AesDecode(AesDecodeReq req) - { + public string AesDecode(AesDecodeReq req) { return Cache.AesDecode(req); } /// /// 执行SQL语句 /// - public Task ExecuteSqlAsync(ExecuteSqlReq req) - { + public Task ExecuteSqlAsync(ExecuteSqlReq req) { return Cache.ExecuteSqlAsync(req); } @@ -29,8 +27,7 @@ public sealed class ToolsController(IToolsCache cache) : ControllerBase [AllowAnonymous] - public Task GetChangeLogAsync() - { + public Task GetChangeLogAsync() { return Cache.GetChangeLogAsync(); } @@ -38,8 +35,7 @@ public sealed class ToolsController(IToolsCache cache) : ControllerBase [AllowAnonymous] - public Task> GetModulesAsync() - { + public Task> GetModulesAsync() { return Cache.GetModulesAsync(); } @@ -47,8 +43,7 @@ public sealed class ToolsController(IToolsCache cache) : ControllerBase [AllowAnonymous] - public Task GetServerUtcTimeAsync() - { + public Task GetServerUtcTimeAsync() { return Cache.GetServerUtcTimeAsync(); } @@ -56,8 +51,7 @@ public sealed class ToolsController(IToolsCache cache) : ControllerBase [AllowAnonymous] - public Task GetVersionAsync() - { + public Task GetVersionAsync() { return Cache.GetVersionAsync(); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/UserController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/UserController.cs index 5390f1fb..9705085d 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/UserController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/UserController.cs @@ -15,8 +15,7 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache) : /// [NonAction] [Transaction] - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Cache.BulkDeleteAsync(req); } @@ -24,8 +23,7 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache) : /// 检查邀请码是否正确 /// [AllowAnonymous] - public Task CheckInviterAvailableAsync(CheckInviterAvailableReq req) - { + public Task CheckInviterAvailableAsync(CheckInviterAvailableReq req) { return Cache.CheckInviterAvailableAsync(req); } @@ -33,8 +31,7 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache) : /// 检查手机号码是否可用 /// [AllowAnonymous] - public Task CheckMobileAvailableAsync(CheckMobileAvailableReq req) - { + public Task CheckMobileAvailableAsync(CheckMobileAvailableReq req) { return Cache.CheckMobileAvailableAsync(req); } @@ -42,8 +39,7 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache) : /// 检查用户名是否可用 /// [AllowAnonymous] - public Task CheckUserNameAvailableAsync(CheckUserNameAvailableReq req) - { + public Task CheckUserNameAvailableAsync(CheckUserNameAvailableReq req) { return Cache.CheckUserNameAvailableAsync(req); } @@ -51,16 +47,14 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache) : /// 用户计数 /// [NonAction] - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Cache.CountAsync(req); } /// /// 用户分组计数 /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Cache.CountByAsync(req); } @@ -68,8 +62,7 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache) : /// 创建用户 /// [Transaction] - public Task CreateAsync(CreateUserReq req) - { + public Task CreateAsync(CreateUserReq req) { return Cache.CreateAsync(req); } @@ -77,8 +70,7 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache) : /// 删除用户 /// [Transaction] - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Cache.DeleteAsync(req); } @@ -86,32 +78,28 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache) : /// 编辑用户 /// [Transaction] - public Task EditAsync(EditUserReq req) - { + public Task EditAsync(EditUserReq req) { return Cache.EditAsync(req); } /// /// 导出用户 /// - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Cache.ExportAsync(req); } /// /// 获取单个用户 /// - public Task GetAsync(QueryUserReq req) - { + public Task GetAsync(QueryUserReq req) { return Cache.GetAsync(req); } /// /// 获取当前用户应用配置 /// - public Task GetSessionUserAppConfigAsync() - { + public Task GetSessionUserAppConfigAsync() { return Cache.GetSessionUserAppConfigAsync(); } @@ -120,8 +108,7 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache) : /// [AllowAnonymous] [Transaction] - public async Task LoginByPwdAsync(LoginByPwdReq req) - { + public async Task LoginByPwdAsync(LoginByPwdReq req) { var ret = await Cache.LoginByPwdAsync(req).ConfigureAwait(false); ret.SetToRspHeader(); return ret; @@ -132,34 +119,37 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache) : /// [AllowAnonymous] [Transaction] - public async Task LoginBySmsAsync(LoginBySmsReq req) - { + public async Task LoginBySmsAsync(LoginBySmsReq req) { var ret = await Cache.LoginBySmsAsync(req).ConfigureAwait(false); ret.SetToRspHeader(); return ret; } + /// + /// 用户编号登录 + /// + public Task LoginByUserIdAsync(LoginByUserIdReq req) { + return Cache.LoginByUserIdAsync(req); + } + /// /// 分页查询用户 /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Cache.PagedQueryAsync(req); } /// /// 查询用户 /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Cache.QueryAsync(req); } /// /// 查询用户档案 /// - public Task> QueryProfileAsync(QueryReq req) - { + public Task> QueryProfileAsync(QueryReq req) { return Cache.QueryProfileAsync(req); } @@ -168,18 +158,21 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache) : /// [AllowAnonymous] [Transaction] - public async Task RegisterAsync(RegisterUserReq req) - { + public async Task RegisterAsync(RegisterUserReq req) { var config = await configCache.GetLatestConfigAsync().ConfigureAwait(false); - return await Cache.RegisterAsync(req with { - DeptId = config.UserRegisterDeptId - , RoleIds = [config.UserRegisterRoleId] - , Profile = new CreateUserProfileReq() - , Enabled = !config.UserRegisterConfirm - , Mobile = req.VerifySmsCodeReq.DestDevice - }) - .ConfigureAwait(false); + return await Cache + .RegisterAsync( + req with + { + DeptId = config.UserRegisterDeptId + , RoleIds = [config.UserRegisterRoleId] + , Profile = new CreateUserProfileReq() + , Enabled = !config.UserRegisterConfirm + , Mobile = req.VerifySmsCodeReq.DestDevice + } + ) + .ConfigureAwait(false); } /// @@ -187,8 +180,7 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache) : /// [AllowAnonymous] [Transaction] - public Task ResetPasswordAsync(ResetPasswordReq req) - { + public Task ResetPasswordAsync(ResetPasswordReq req) { return Cache.ResetPasswordAsync(req); } @@ -196,8 +188,7 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache) : /// 设置用户头像 /// [Transaction] - public Task SetAvatarAsync(SetAvatarReq req) - { + public Task SetAvatarAsync(SetAvatarReq req) { return Cache.SetAvatarAsync(req); } @@ -205,8 +196,7 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache) : /// 设置邮箱 /// [Transaction] - public Task SetEmailAsync(SetEmailReq req) - { + public Task SetEmailAsync(SetEmailReq req) { return Cache.SetEmailAsync(req); } @@ -214,8 +204,7 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache) : /// 启用/禁用用户 /// [Transaction] - public Task SetEnabledAsync(SetUserEnabledReq req) - { + public Task SetEnabledAsync(SetUserEnabledReq req) { return Cache.SetEnabledAsync(req); } @@ -223,8 +212,7 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache) : /// 设置手机号码 /// [Transaction] - public Task SetMobileAsync(SetMobileReq req) - { + public Task SetMobileAsync(SetMobileReq req) { return Cache.SetMobileAsync(req); } @@ -232,16 +220,14 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache) : /// 设置密码 /// [Transaction] - public Task SetPasswordAsync(SetPasswordReq req) - { + public Task SetPasswordAsync(SetPasswordReq req) { return Cache.SetPasswordAsync(req); } /// /// 设置当前用户应用配置 /// - public Task SetSessionUserAppConfigAsync(SetSessionUserAppConfigReq req) - { + public Task SetSessionUserAppConfigAsync(SetSessionUserAppConfigReq req) { return Cache.SetSessionUserAppConfigAsync(req); } @@ -249,16 +235,14 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache) : /// 用户求和 /// [NonAction] - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Cache.SumAsync(req); } /// /// 当前用户信息 /// - public Task UserInfoAsync() - { + public Task UserInfoAsync() { return Cache.UserInfoAsync(); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/UserInviteController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/UserInviteController.cs index 51c21f93..f113eff3 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/UserInviteController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/UserInviteController.cs @@ -15,8 +15,7 @@ public sealed class UserInviteController(IUserInviteCache cache) : ControllerBas /// 批量删除用户邀请 /// [Transaction] - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Cache.BulkDeleteAsync(req); } @@ -24,16 +23,14 @@ public sealed class UserInviteController(IUserInviteCache cache) : ControllerBas /// 用户邀请计数 /// [NonAction] - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Cache.CountAsync(req); } /// /// 用户邀请分组计数 /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Cache.CountByAsync(req); } @@ -41,16 +38,14 @@ public sealed class UserInviteController(IUserInviteCache cache) : ControllerBas /// 创建用户邀请 /// [Transaction] - public Task CreateAsync(CreateUserInviteReq req) - { + public Task CreateAsync(CreateUserInviteReq req) { return Cache.CreateAsync(req); } /// /// 创建粉丝账号 /// - public Task CreateFansAccountAsync(CreateFansAccountReq req) - { + public Task CreateFansAccountAsync(CreateFansAccountReq req) { return Cache.CreateFansAccountAsync(req); } @@ -58,8 +53,7 @@ public sealed class UserInviteController(IUserInviteCache cache) : ControllerBas /// 删除用户邀请 /// [Transaction] - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Cache.DeleteAsync(req); } @@ -67,8 +61,7 @@ public sealed class UserInviteController(IUserInviteCache cache) : ControllerBas /// 编辑用户邀请 /// [Transaction] - public Task EditAsync(EditUserInviteReq req) - { + public Task EditAsync(EditUserInviteReq req) { return Cache.EditAsync(req); } @@ -76,65 +69,64 @@ public sealed class UserInviteController(IUserInviteCache cache) : ControllerBas /// 导出用户邀请 /// [NonAction] - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Cache.ExportAsync(req); } /// /// 获取单个用户邀请 /// - public Task GetAsync(QueryUserInviteReq req) - { + public Task GetAsync(QueryUserInviteReq req) { return Cache.GetAsync(req); } /// /// 获取自己是否允许自助充值 /// - public Task GetSelfRechargeAllowedAsync() - { - return Cache.GetSelfRechargeAllowedAsync(); + public Task GetSelfDepositAllowedAsync() { + return Cache.GetSelfDepositAllowedAsync(); } /// /// 分页查询用户邀请 /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Cache.PagedQueryAsync(req); } /// /// 查询用户邀请 /// - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Cache.QueryAsync(req); } /// /// 查询可分配的角色 /// - public Task> QueryRolesAllowApplyAsync() - { + public Task> QueryRolesAllowApplyAsync() { return Cache.QueryRolesAllowApplyAsync(); } /// /// 设置返佣比率 /// - public Task SetCommissionRatioAsync(SetCommissionRatioReq req) - { + public Task SetCommissionRatioAsync(SetCommissionRatioReq req) { return Cache.SetCommissionRatioAsync(req); } + /// + /// 设置粉丝是否启用 + /// + public Task SetEnabledAsync(SetUserInviteEnabledReq req) { + return Cache.SetEnabledAsync(req); + } + /// /// 修改粉丝角色 /// [Transaction] - public Task SetFansRoleAsync(SetFansRoleReq req) - { + public Task SetFansRoleAsync(SetFansRoleReq req) { return Cache.SetFansRoleAsync(req); } @@ -142,25 +134,22 @@ public sealed class UserInviteController(IUserInviteCache cache) : ControllerBas /// 设置上级 /// [Transaction] - public Task SetInviterAsync(SetInviterReq req) - { + public Task SetInviterAsync(SetInviterReq req) { return Cache.SetInviterAsync(req); } /// /// 设置允许自助充值 /// - public Task SetSelfRechargeAllowedAsync(SetSelfRechargeAllowedReq req) - { - return Cache.SetSelfRechargeAllowedAsync(req); + public Task SetSelfDepositAllowedAsync(SetSelfDepositAllowedReq req) { + return Cache.SetSelfDepositAllowedAsync(req); } /// /// 用户邀请求和 /// [NonAction] - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Cache.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/UserWalletController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/UserWalletController.cs index b06240c0..02f54af8 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/UserWalletController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/UserWalletController.cs @@ -13,8 +13,7 @@ public sealed class UserWalletController(IUserWalletCache cache) : ControllerBas /// 批量删除用户钱包 /// [Transaction] - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Cache.BulkDeleteAsync(req); } @@ -22,16 +21,14 @@ public sealed class UserWalletController(IUserWalletCache cache) : ControllerBas /// 用户钱包计数 /// [NonAction] - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Cache.CountAsync(req); } /// /// 用户钱包分组计数 /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Cache.CountByAsync(req); } @@ -39,8 +36,7 @@ public sealed class UserWalletController(IUserWalletCache cache) : ControllerBas /// 创建用户钱包 /// [Transaction] - public Task CreateAsync(CreateUserWalletReq req) - { + public Task CreateAsync(CreateUserWalletReq req) { return Cache.CreateAsync(req); } @@ -48,8 +44,7 @@ public sealed class UserWalletController(IUserWalletCache cache) : ControllerBas /// 删除用户钱包 /// [Transaction] - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Cache.DeleteAsync(req); } @@ -57,33 +52,28 @@ public sealed class UserWalletController(IUserWalletCache cache) : ControllerBas /// 编辑用户钱包 /// [Transaction] - public Task EditAsync(EditUserWalletReq req) - { + public Task EditAsync(EditUserWalletReq req) { return Cache.EditAsync(req); } /// /// 导出用户钱包 /// - [NonAction] - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Cache.ExportAsync(req); } /// /// 获取单个用户钱包 /// - public Task GetAsync(QueryUserWalletReq req) - { + public Task GetAsync(QueryUserWalletReq req) { return Cache.GetAsync(req); } /// /// 分页查询用户钱包 /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Cache.PagedQueryAsync(req); } @@ -91,16 +81,14 @@ public sealed class UserWalletController(IUserWalletCache cache) : ControllerBas /// 查询用户钱包 /// [NonAction] - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Cache.QueryAsync(req); } /// /// 用户钱包求和 /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Cache.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/VerifyCodeController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/VerifyCodeController.cs index 378d68ee..7770ad46 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/VerifyCodeController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/VerifyCodeController.cs @@ -14,8 +14,7 @@ public sealed class VerifyCodeController(IVerifyCodeCache cache, ICaptchaCache c /// 批量删除验证码 /// [NonAction] - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Cache.BulkDeleteAsync(req); } @@ -23,8 +22,7 @@ public sealed class VerifyCodeController(IVerifyCodeCache cache, ICaptchaCache c /// 验证码计数 /// [NonAction] - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Cache.CountAsync(req); } @@ -32,8 +30,7 @@ public sealed class VerifyCodeController(IVerifyCodeCache cache, ICaptchaCache c /// 验证码分组计数 /// [NonAction] - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Cache.CountByAsync(req); } @@ -41,8 +38,7 @@ public sealed class VerifyCodeController(IVerifyCodeCache cache, ICaptchaCache c /// 创建验证码 /// [NonAction] - public Task CreateAsync(CreateVerifyCodeReq req) - { + public Task CreateAsync(CreateVerifyCodeReq req) { return Cache.CreateAsync(req); } @@ -50,8 +46,7 @@ public sealed class VerifyCodeController(IVerifyCodeCache cache, ICaptchaCache c /// 删除验证码 /// [NonAction] - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Cache.DeleteAsync(req); } @@ -60,8 +55,7 @@ public sealed class VerifyCodeController(IVerifyCodeCache cache, ICaptchaCache c /// [NonAction] [Transaction] - public Task EditAsync(EditVerifyCodeReq req) - { + public Task EditAsync(EditVerifyCodeReq req) { return Cache.EditAsync(req); } @@ -69,8 +63,7 @@ public sealed class VerifyCodeController(IVerifyCodeCache cache, ICaptchaCache c /// 导出验证码 /// [NonAction] - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Cache.ExportAsync(req); } @@ -78,8 +71,7 @@ public sealed class VerifyCodeController(IVerifyCodeCache cache, ICaptchaCache c /// 获取单个验证码 /// [NonAction] - public Task GetAsync(QueryVerifyCodeReq req) - { + public Task GetAsync(QueryVerifyCodeReq req) { return Cache.GetAsync(req); } @@ -87,8 +79,7 @@ public sealed class VerifyCodeController(IVerifyCodeCache cache, ICaptchaCache c /// 分页查询验证码 /// [NonAction] - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Cache.PagedQueryAsync(req); } @@ -96,8 +87,7 @@ public sealed class VerifyCodeController(IVerifyCodeCache cache, ICaptchaCache c /// 查询验证码 /// [NonAction] - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Cache.QueryAsync(req); } @@ -106,8 +96,7 @@ public sealed class VerifyCodeController(IVerifyCodeCache cache, ICaptchaCache c /// [AllowAnonymous] [Transaction] - public async Task SendVerifyCodeAsync(SendVerifyCodeReq req) - { + public async Task SendVerifyCodeAsync(SendVerifyCodeReq req) { await captchaCache.VerifyCaptchaAndRemoveAsync(req.VerifyCaptchaReq).ConfigureAwait(false); return await Cache.SendVerifyCodeAsync(req).ConfigureAwait(false); } @@ -116,8 +105,7 @@ public sealed class VerifyCodeController(IVerifyCodeCache cache, ICaptchaCache c /// 验证码求和 /// [NonAction] - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Cache.SumAsync(req); } @@ -126,8 +114,7 @@ public sealed class VerifyCodeController(IVerifyCodeCache cache, ICaptchaCache c /// [AllowAnonymous] [Transaction] - public Task VerifyAsync(VerifyCodeReq req) - { + public Task VerifyAsync(VerifyCodeReq req) { return Cache.VerifyAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/WalletFrozenController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/WalletFrozenController.cs index ae642e47..a978bde1 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/WalletFrozenController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/WalletFrozenController.cs @@ -14,8 +14,7 @@ public sealed class WalletFrozenController(IWalletFrozenCache cache) /// 批量删除钱包冻结 /// [Transaction] - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Cache.BulkDeleteAsync(req); } @@ -23,16 +22,14 @@ public sealed class WalletFrozenController(IWalletFrozenCache cache) /// 钱包冻结计数 /// [NonAction] - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Cache.CountAsync(req); } /// /// 钱包冻结分组计数 /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Cache.CountByAsync(req); } @@ -40,8 +37,7 @@ public sealed class WalletFrozenController(IWalletFrozenCache cache) /// 创建钱包冻结 /// [Transaction] - public Task CreateAsync(CreateWalletFrozenReq req) - { + public Task CreateAsync(CreateWalletFrozenReq req) { return Cache.CreateAsync(req); } @@ -49,8 +45,7 @@ public sealed class WalletFrozenController(IWalletFrozenCache cache) /// 删除钱包冻结 /// [Transaction] - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Cache.DeleteAsync(req); } @@ -58,8 +53,7 @@ public sealed class WalletFrozenController(IWalletFrozenCache cache) /// 编辑钱包冻结 /// [Transaction] - public Task EditAsync(EditWalletFrozenReq req) - { + public Task EditAsync(EditWalletFrozenReq req) { return Cache.EditAsync(req); } @@ -67,24 +61,21 @@ public sealed class WalletFrozenController(IWalletFrozenCache cache) /// 导出钱包冻结 /// [NonAction] - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Cache.ExportAsync(req); } /// /// 获取单个钱包冻结 /// - public Task GetAsync(QueryWalletFrozenReq req) - { + public Task GetAsync(QueryWalletFrozenReq req) { return Cache.GetAsync(req); } /// /// 分页查询钱包冻结 /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Cache.PagedQueryAsync(req); } @@ -92,8 +83,7 @@ public sealed class WalletFrozenController(IWalletFrozenCache cache) /// 查询钱包冻结 /// [NonAction] - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Cache.QueryAsync(req); } @@ -101,17 +91,14 @@ public sealed class WalletFrozenController(IWalletFrozenCache cache) /// 将状态设置为解冻 /// [Transaction] - public Task SetStatusToThawedAsync(SetStatusToThawedReq req) - { + public Task SetStatusToThawedAsync(SetStatusToThawedReq req) { return Cache.SetStatusToThawedAsync(req); } /// /// 钱包冻结求和 /// - [NonAction] - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Cache.SumAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/WalletTradeController.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/WalletTradeController.cs index c9db34d3..d100eeed 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/WalletTradeController.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Controllers/Sys/WalletTradeController.cs @@ -13,8 +13,7 @@ public sealed class WalletTradeController(IWalletTradeCache cache) : ControllerB /// 批量删除钱包交易 /// [Transaction] - public Task BulkDeleteAsync(BulkReq req) - { + public Task BulkDeleteAsync(BulkReq req) { return Cache.BulkDeleteAsync(req); } @@ -22,16 +21,14 @@ public sealed class WalletTradeController(IWalletTradeCache cache) : ControllerB /// 钱包交易计数 /// [NonAction] - public Task CountAsync(QueryReq req) - { + public Task CountAsync(QueryReq req) { return Cache.CountAsync(req); } /// /// 钱包交易分组计数 /// - public Task, int>>> CountByAsync(QueryReq req) - { + public Task, int>>> CountByAsync(QueryReq req) { return Cache.CountByAsync(req); } @@ -39,8 +36,7 @@ public sealed class WalletTradeController(IWalletTradeCache cache) : ControllerB /// 创建钱包交易 /// [Transaction] - public Task CreateAsync(CreateWalletTradeReq req) - { + public Task CreateAsync(CreateWalletTradeReq req) { return Cache.CreateAsync(req); } @@ -48,8 +44,7 @@ public sealed class WalletTradeController(IWalletTradeCache cache) : ControllerB /// 删除钱包交易 /// [Transaction] - public Task DeleteAsync(DelReq req) - { + public Task DeleteAsync(DelReq req) { return Cache.DeleteAsync(req); } @@ -57,33 +52,28 @@ public sealed class WalletTradeController(IWalletTradeCache cache) : ControllerB /// 编辑钱包交易 /// [Transaction] - public Task EditAsync(EditWalletTradeReq req) - { + public Task EditAsync(EditWalletTradeReq req) { return Cache.EditAsync(req); } /// /// 导出钱包交易 /// - [NonAction] - public Task ExportAsync(QueryReq req) - { + public Task ExportAsync(QueryReq req) { return Cache.ExportAsync(req); } /// /// 获取单个钱包交易 /// - public Task GetAsync(QueryWalletTradeReq req) - { + public Task GetAsync(QueryWalletTradeReq req) { return Cache.GetAsync(req); } /// /// 分页查询钱包交易 /// - public Task> PagedQueryAsync(PagedQueryReq req) - { + public Task> PagedQueryAsync(PagedQueryReq req) { return Cache.PagedQueryAsync(req); } @@ -91,16 +81,14 @@ public sealed class WalletTradeController(IWalletTradeCache cache) : ControllerB /// 查询钱包交易 /// [NonAction] - public Task> QueryAsync(QueryReq req) - { + public Task> QueryAsync(QueryReq req) { return Cache.QueryAsync(req); } /// /// 钱包交易求和 /// - public Task SumAsync(QueryReq req) - { + public Task SumAsync(QueryReq req) { return Cache.SumAsync(req); } @@ -108,8 +96,7 @@ public sealed class WalletTradeController(IWalletTradeCache cache) : ControllerB /// 从他人账户转账给自己 /// [Transaction] - public Task TransferFromAnotherAccountAsync(TransferReq req) - { + public Task TransferFromAnotherAccountAsync(TransferReq req) { return Cache.TransferFromAnotherAccountAsync(req); } @@ -117,8 +104,7 @@ public sealed class WalletTradeController(IWalletTradeCache cache) : ControllerB /// 转账到他人账户 /// [Transaction] - public Task TransferToAnotherAccountAsync(TransferReq req) - { + public Task TransferToAnotherAccountAsync(TransferReq req) { return Cache.TransferToAnotherAccountAsync(req); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Extensions/ServiceCollectionExtensions.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Extensions/ServiceCollectionExtensions.cs index 080ef727..7a656975 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Extensions/ServiceCollectionExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Extensions/ServiceCollectionExtensions.cs @@ -19,22 +19,23 @@ public static class ServiceCollectionExtensions /// /// 添加上下文用户信息 /// - public static IServiceCollection AddContextUserInfo(this IServiceCollection me) - { + public static IServiceCollection AddContextUserInfo(this IServiceCollection me) { return me.AddScoped(typeof(ContextUserInfo), _ => ContextUserInfo.Create()); } /// /// 添加 freeSql orm工具 /// - public static IServiceCollection AddFreeSql( // - this IServiceCollection me, FreeSqlInitMethods initMethods = FreeSqlInitMethods.None, Action freeSqlConfig = null) - { + public static IServiceCollection AddFreeSql( + this IServiceCollection me + , FreeSqlInitMethods initMethods = FreeSqlInitMethods.None + , Action freeSqlConfig = null + ) { // // 非调试模式下禁止同步数据库 // #if !DEBUG // initOptions = FreeSqlInitOptions.None; // #endif - var dbOptions = App.GetOptions(); + var dbOptions = App.GetOptions(); var eventPublisher = App.GetService(); var fSql = new FreeSqlBuilder(dbOptions).Build(initMethods, count => eventPublisher.PublishAsync(new SeedDataInsertedEvent(count))); @@ -45,36 +46,50 @@ public static class ServiceCollectionExtensions #pragma warning disable VSTHRD110 // AOP事件发布(异步) - fSql.Aop.CommandBefore += (_, e) => eventPublisher.PublishAsync(new SqlCommandBeforeEvent(e)); // 增删查改,执行命令之前触发 - fSql.Aop.CommandAfter += (_, e) => eventPublisher.PublishAsync(new SqlCommandAfterEvent(e)); // 增删查改,执行命令完成后触发 + fSql.Aop.CommandBefore += ( + _ + , e + ) => eventPublisher.PublishAsync(new SqlCommandBeforeEvent(e)); // 增删查改,执行命令之前触发 + fSql.Aop.CommandAfter += ( + _ + , e + ) => eventPublisher.PublishAsync(new SqlCommandAfterEvent(e)); // 增删查改,执行命令完成后触发 - fSql.Aop.SyncStructureBefore += (_, e) => eventPublisher.PublishAsync(new SyncStructureBeforeEvent(e)); // CodeFirst迁移,执行之前触发 + fSql.Aop.SyncStructureBefore += ( + _ + , e + ) => eventPublisher.PublishAsync(new SyncStructureBeforeEvent(e)); // CodeFirst迁移,执行之前触发 - fSql.Aop.SyncStructureAfter += (_, e) => eventPublisher.PublishAsync(new SyncStructureAfterEvent(e)); // CodeFirst迁移,执行完成触发 + fSql.Aop.SyncStructureAfter += ( + _ + , e + ) => eventPublisher.PublishAsync(new SyncStructureAfterEvent(e)); // CodeFirst迁移,执行完成触发 #pragma warning restore VSTHRD110 // 全局过滤器设置 freeSqlConfig?.Invoke(fSql); - return me.AddScoped() // 注入工作单元管理器 - .AddFreeRepository(null, App.Assemblies.ToArray()) // 批量注入 Repository - .AddMvcFilter(); // 注入事务拦截器 + return me + .AddScoped() // 注入工作单元管理器 + .AddFreeRepository(null, App.Assemblies.ToArray()) // 批量注入 Repository + .AddMvcFilter(); // 注入事务拦截器 } /// /// 添加定时任务 /// - public static IServiceCollection AddSchedules(this IServiceCollection me, bool force = false) - { + public static IServiceCollection AddSchedules( + this IServiceCollection me + , bool force = false + ) { if (!App.WebHostEnvironment.IsProduction() && !force) { return me; } - var jobTypes = App.EffectiveTypes - .Where(x => typeof(IJob).IsAssignableFrom(x) && x.IsClass && !x.IsAbstract && x.IsDefined(typeof(JobConfigAttribute))) - .ToDictionary(x => x, x => x.GetCustomAttribute()); - var runOnStartJobTypes = jobTypes.Where(x => // - x.Value.RunOnStart); + var jobTypes = App + .EffectiveTypes.Where(x => typeof(IJob).IsAssignableFrom(x) && x.IsClass && !x.IsAbstract && x.IsDefined(typeof(JobConfigAttribute))) + .ToDictionary(x => x, x => x.GetCustomAttribute()); + var runOnStartJobTypes = jobTypes.Where(x => x.Value.RunOnStart); RunJob(runOnStartJobTypes); _ = Task.Run(LoopTaskAsync); return me; @@ -93,12 +108,13 @@ public static class ServiceCollectionExtensions } } - bool Filter(KeyValuePair x) - { - return !x.Value.TriggerCron.NullOrEmpty() && - CronExpression.Parse(x.Value.TriggerCron, CronFormat.IncludeSeconds) - .GetNextOccurrence(x.Value.LastExecutionTime ?? DateTime.UtcNow.AddDays(-1), TimeZoneInfo.Local) - ?.ToLocalTime() <= DateTime.Now; + bool Filter(KeyValuePair x) { + return !x.Value.TriggerCron.NullOrEmpty() + && CronExpression + .Parse(x.Value.TriggerCron, CronFormat.IncludeSeconds) + .GetNextOccurrence(x.Value.LastExecutionTime ?? DateTime.UtcNow.AddDays(-1), TimeZoneInfo.Local) + ?.ToLocalTime() + <= DateTime.Now; } // ReSharper disable once FunctionNeverReturns @@ -108,21 +124,21 @@ public static class ServiceCollectionExtensions /// /// 添加 TronScan 客户端 /// - public static IServiceCollection AddTronScanClient(this IServiceCollection me) - { + public static IServiceCollection AddTronScanClient(this IServiceCollection me) { _ = me.AddHttpClient(nameof(TronScanOptions), ConfigClient); return me; } private static void ConfigClient(HttpClient client) - where T : ApiClientOptions, new() - { + where T : ApiClientOptions, new() { ConfigClient(client, Numbers.SECS_TIMEOUT_HTTP_CLIENT); } - private static void ConfigClient(HttpClient client, int timeoutSecs) - where T : ApiClientOptions, new() - { + private static void ConfigClient( + HttpClient client + , int timeoutSecs + ) + where T : ApiClientOptions, new() { var options = App.GetOptions(); client.Timeout = TimeSpan.FromSeconds(options.TimeoutSecs > 0 ? options.TimeoutSecs : timeoutSecs); @@ -130,12 +146,10 @@ public static class ServiceCollectionExtensions client.BaseAddress = new Uri($"{options.Gateway}/"); } - private static void RunJob(IEnumerable> jobTypes) - { + private static void RunJob(IEnumerable> jobTypes) { foreach (var job in jobTypes) { try { - _ = typeof(IJob).GetMethod(nameof(IJob.ExecuteAsync))!.Invoke( // - Activator.CreateInstance(job.Key), [CancellationToken.None]); + _ = typeof(IJob).GetMethod(nameof(IJob.ExecuteAsync))!.Invoke(Activator.CreateInstance(job.Key), [CancellationToken.None]); job.Value.LastExecutionTime = DateTime.UtcNow; } catch (Exception ex) { diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Jobs/FreeScheduledJob.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Jobs/FreeScheduledJob.cs index 02aef981..5c697fd0 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Jobs/FreeScheduledJob.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Jobs/FreeScheduledJob.cs @@ -14,8 +14,7 @@ public sealed class FreeScheduledJob : WorkBase, IJob /// /// Initializes a new instance of the class. /// - public FreeScheduledJob() - { + public FreeScheduledJob() { _jobService = ServiceProvider.GetService(); } @@ -24,8 +23,7 @@ public sealed class FreeScheduledJob : WorkBase, IJob /// /// 取消任务 Token /// 加锁失败异常 - public async Task ExecuteAsync(CancellationToken cancelToken) - { + public async Task ExecuteAsync(CancellationToken cancelToken) { await WorkflowAsync(true, cancelToken).ConfigureAwait(false); } @@ -34,8 +32,7 @@ public sealed class FreeScheduledJob : WorkBase, IJob /// /// NotImplementedException /// ArgumentOutOfRangeException - protected override async ValueTask WorkflowAsync(CancellationToken cancelToken) - { + protected override async ValueTask WorkflowAsync(CancellationToken cancelToken) { _ = await _jobService.ReleaseStuckTaskAsync().ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Jobs/ScheduledJob.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Jobs/ScheduledJob.cs index 18b97af5..a0ef7564 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Jobs/ScheduledJob.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Jobs/ScheduledJob.cs @@ -4,6 +4,7 @@ using Gurion.RemoteRequest.Extensions; using NetAdmin.Application.Extensions; using NetAdmin.Domain.Dto.Sys.Job; using NetAdmin.Domain.Dto.Sys.JobRecord; +using NetAdmin.Domain.Dto.Sys.User; using NetAdmin.Host.BackgroundRunning; using NetAdmin.Infrastructure.Schedule; @@ -15,15 +16,14 @@ namespace NetAdmin.SysComponent.Host.Jobs; [JobConfig(TriggerCron = "* * * * * *")] public sealed class ScheduledJob : WorkBase, IJob { - private static string _accessToken; - private static string _refreshToken; + private static string _accessToken; + private static string _refreshToken; private readonly ILogger _logger; /// /// Initializes a new instance of the class. /// - public ScheduledJob() - { + public ScheduledJob() { _logger = ServiceProvider.GetService>(); } @@ -32,10 +32,13 @@ public sealed class ScheduledJob : WorkBase, IJob /// /// 取消任务 Token /// 加锁失败异常 - public Task ExecuteAsync(CancellationToken cancelToken) - { - return Parallel.ForAsync(0, Numbers.SCHEDULED_JOB_PARALLEL_NUM, cancelToken - , async (_, _) => await WorkflowAsync(cancelToken).ConfigureAwait(false)); + public Task ExecuteAsync(CancellationToken cancelToken) { + return Parallel.ForAsync( + 0, Numbers.SCHEDULED_JOB_PARALLEL_NUM, cancelToken, async ( + _ + , _ + ) => await WorkflowAsync(cancelToken).ConfigureAwait(false) + ); } /// @@ -43,14 +46,13 @@ public sealed class ScheduledJob : WorkBase, IJob /// /// NotImplementedException /// ArgumentOutOfRangeException - protected override async ValueTask WorkflowAsync(CancellationToken cancelToken) - { - QueryJobRsp job = null; - await using var scope = ServiceProvider.CreateAsyncScope(); - var jobService = scope.ServiceProvider.GetService(); - var jobRecordService = scope.ServiceProvider.GetService(); - var userService = scope.ServiceProvider.GetService(); - var unitOfWorkManager = scope.ServiceProvider.GetService(); + protected override async ValueTask WorkflowAsync(CancellationToken cancelToken) { + QueryJobRsp job = null; + await using var scope = ServiceProvider.CreateAsyncScope(); + var jobService = scope.ServiceProvider.GetService(); + var jobRecordService = scope.ServiceProvider.GetService(); + var userService = scope.ServiceProvider.GetService(); + var unitOfWorkManager = scope.ServiceProvider.GetService(); try { job = await jobService.GetNextJobAsync().ConfigureAwait(false); @@ -80,57 +82,54 @@ public sealed class ScheduledJob : WorkBase, IJob sw.Start(); var rsp = await request.SendAsync(CancellationToken.None).ConfigureAwait(false); if (rsp.StatusCode is HttpStatusCode.Unauthorized or HttpStatusCode.Forbidden) { - var loginRsp = await userService.LoginByUserIdAsync(job.UserId).ConfigureAwait(false); + var loginRsp = await userService.LoginByUserIdAsync(new LoginByUserIdReq { UserId = job.UserId }).ConfigureAwait(false); #pragma warning disable S2696 - _accessToken = loginRsp.AccessToken; + _accessToken = loginRsp.AccessToken; _refreshToken = loginRsp.RefreshToken; #pragma warning restore S2696 request = BuildRequest(job); - rsp = await request.SendAsync(CancellationToken.None).ConfigureAwait(false); + rsp = await request.SendAsync(CancellationToken.None).ConfigureAwait(false); } sw.Stop(); - await unitOfWorkManager.AtomicOperateAsync(async () => { - var rspBody = await rsp.Content.ReadAsStringAsync(CancellationToken.None).ConfigureAwait(false); - var jobRecord = new CreateJobRecordReq // - { - Duration = sw.ElapsedMilliseconds - , HttpMethod = job.HttpMethod - , HttpStatusCode = (int)rsp.StatusCode - , JobId = job.Id - , RequestBody = job.RequestBody - , RequestHeader = rsp!.RequestMessage!.Headers.Json() - , RequestUrl = job.RequestUrl - , ResponseBody = rspBody - , ResponseHeader = rsp.Headers.Json() - , TimeId = job.NextTimeId!.Value - }; + await unitOfWorkManager + .AtomicOperateAsync(async () => + { + var rspBody = await rsp.Content.ReadAsStringAsync(CancellationToken.None).ConfigureAwait(false); + var jobRecord = new CreateJobRecordReq + { + Duration = sw.ElapsedMilliseconds + , HttpMethod = job.HttpMethod + , HttpStatusCode = (int)rsp.StatusCode + , JobId = job.Id + , RequestBody = job.RequestBody + , RequestHeader = rsp!.RequestMessage!.Headers.Json() + , RequestUrl = job.RequestUrl + , ResponseBody = rspBody + , ResponseHeader = rsp.Headers.Json() + , TimeId = job.NextTimeId!.Value + }; - _ = await jobRecordService.CreateAsync(jobRecord).ConfigureAwait(false); - await jobService.FinishJobAsync(job.Adapt() with // - { - LastStatusCode = (int?)rsp.StatusCode // - , LastDuration = jobRecord.Duration - }) - .ConfigureAwait(false); - }) - .ConfigureAwait(false); + _ = await jobRecordService.CreateAsync(jobRecord).ConfigureAwait(false); + await jobService + .FinishJobAsync(job.Adapt() with { LastStatusCode = (int?)rsp.StatusCode, LastDuration = jobRecord.Duration }) + .ConfigureAwait(false); + } + ) + .ConfigureAwait(false); } - private HttpRequestPart BuildRequest(QueryJobRsp job) - { - var ret = job.RequestUrl.SetHttpMethod(new HttpMethod(job.HttpMethod.ToString())); + private HttpRequestPart BuildRequest(QueryJobRsp job) { + var ret = job.RequestUrl.SetHttpMethod(new HttpMethod(job.HttpMethod.ToString())); var headers = new Dictionary(); if (!_accessToken.NullOrEmpty()) { - headers.Add( // - Chars.FLG_HTTP_HEADER_KEY_AUTHORIZATION, $"{Chars.FLG_HTTP_HEADER_VALUE_AUTH_SCHEMA} {_accessToken}"); + headers.Add(Chars.FLG_HTTP_HEADER_KEY_AUTHORIZATION, $"{Chars.FLG_HTTP_HEADER_VALUE_AUTH_SCHEMA} {_accessToken}"); } if (!_refreshToken.NullOrEmpty()) { - headers.Add( // - Chars.FLG_HTTP_HEADER_KEY_X_ACCESS_TOKEN_HEADER_KEY, $"{Chars.FLG_HTTP_HEADER_VALUE_AUTH_SCHEMA} {_refreshToken}"); + headers.Add(Chars.FLG_HTTP_HEADER_KEY_X_ACCESS_TOKEN_HEADER_KEY, $"{Chars.FLG_HTTP_HEADER_VALUE_AUTH_SCHEMA} {_refreshToken}"); } if (!job.RequestHeader.NullOrEmpty()) { diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Middlewares/RequestAuditMiddleware.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Middlewares/RequestAuditMiddleware.cs index 41569800..33f06293 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Middlewares/RequestAuditMiddleware.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Middlewares/RequestAuditMiddleware.cs @@ -6,9 +6,9 @@ namespace NetAdmin.SysComponent.Host.Middlewares; /// 请求审计中间件 /// public sealed class RequestAuditMiddleware( - RequestDelegate next - , IOptions dynamicApiControllerSettingsOptions - , RequestLogger requestLogger) + RequestDelegate next + , IOptions dynamicApiControllerSettingsOptions + , RequestLogger requestLogger) { private readonly PathString _defaultRoutePrefix = new($"/{dynamicApiControllerSettingsOptions.Value.DefaultRoutePrefix}"); @@ -17,12 +17,11 @@ public sealed class RequestAuditMiddleware( /// /// 主函数 /// - public async Task InvokeAsync(HttpContext context) - { + public async Task InvokeAsync(HttpContext context) { // 跳过处理的情况: - if (!context.Request.Path.StartsWithSegments(_defaultRoutePrefix) // 非api请求 - || context.Request.Path.StartsWithSegments(_healthCheckRoutePrefix) // 健康检查 - || context.Request.Method == Chars.FLG_HTTP_METHOD_OPTIONS // is options 请求 + if (!context.Request.Path.StartsWithSegments(_defaultRoutePrefix) // 非api请求 + || context.Request.Path.StartsWithSegments(_healthCheckRoutePrefix) // 健康检查 + || context.Request.Method == Chars.FLG_HTTP_METHOD_OPTIONS // is options 请求 || (context.Request.ContentType?.StartsWith("multipart/form-data", true, CultureInfo.InvariantCulture) ?? false) // 文件上传 #pragma warning disable SA1009 ) { @@ -33,8 +32,8 @@ public sealed class RequestAuditMiddleware( } // Response.Body流默认是不可读的,将Response.Body流替换成MemoryStream 使其可读 - await using var ms = new MemoryStream(); - var stream = context.Response.Body; + await using var ms = new MemoryStream(); + var stream = context.Response.Body; context.Response.Body = ms; // 在控制台上输出分割线,区分不同请求 @@ -45,16 +44,14 @@ public sealed class RequestAuditMiddleware( sw.Stop(); _ = ms.Seek(0, SeekOrigin.Begin); - using var sr = new StreamReader(ms); - var responseBody = await sr.ReadToEndAsync().ConfigureAwait(false); + using var sr = new StreamReader(ms); + var responseBody = await sr.ReadToEndAsync().ConfigureAwait(false); _ = ms.Seek(0, SeekOrigin.Begin); await ms.CopyToAsync(stream).ConfigureAwait(false); context.Response.Body = stream; var exception = context.Features.Get(); - var errorCode = context.Response.Headers[nameof(ErrorCodes)] // - .FirstOrDefault() - ?.Enum() ?? 0; + var errorCode = context.Response.Headers[nameof(ErrorCodes)].FirstOrDefault()?.Enum() ?? 0; _ = await requestLogger.LogAsync(context, (long)sw.Elapsed.TotalMilliseconds, responseBody, errorCode, exception).ConfigureAwait(false); } diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Middlewares/VersionCheckerMiddleware.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Middlewares/VersionCheckerMiddleware.cs index a499b739..018c39ee 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Middlewares/VersionCheckerMiddleware.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Middlewares/VersionCheckerMiddleware.cs @@ -10,8 +10,7 @@ public sealed class VersionCheckerMiddleware(RequestDelegate next) /// /// 主函数 /// - public async Task InvokeAsync(HttpContext context) - { + public async Task InvokeAsync(HttpContext context) { if (context.Request.Path == "/ws/version") { if (context.WebSockets.IsWebSocketRequest) { var webSocket = await context.WebSockets.AcceptWebSocketAsync().ConfigureAwait(false); @@ -26,8 +25,7 @@ public sealed class VersionCheckerMiddleware(RequestDelegate next) } } - private static async Task ConnectionAsync(WebSocket webSocket) - { + private static async Task ConnectionAsync(WebSocket webSocket) { var buffer = new byte[1024]; while (webSocket.State == WebSocketState.Open) { var receiveResult = await webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None).ConfigureAwait(false); @@ -36,8 +34,9 @@ public sealed class VersionCheckerMiddleware(RequestDelegate next) } var ver = await App.GetService().GetVersionAsync().ConfigureAwait(false); - await webSocket.SendAsync(new ArraySegment(Encoding.UTF8.GetBytes(ver)), WebSocketMessageType.Text, true, CancellationToken.None) - .ConfigureAwait(false); + await webSocket + .SendAsync(new ArraySegment(Encoding.UTF8.GetBytes(ver)), WebSocketMessageType.Text, true, CancellationToken.None) + .ConfigureAwait(false); } await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None).ConfigureAwait(false); diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Subscribers/ApiSynchronizer.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Subscribers/ApiSynchronizer.cs index 43123381..cbf9448c 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Subscribers/ApiSynchronizer.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Subscribers/ApiSynchronizer.cs @@ -11,8 +11,7 @@ public sealed class ApiSynchronizer(ILogger logger) : IEventSub /// 同步Api接口 /// [EventSubscribe] - public async Task SyncApiAsync(SyncStructureAfterEvent _) - { + public async Task SyncApiAsync(SyncStructureAfterEvent _) { var logService = App.GetService(); await logService.SyncAsync().ConfigureAwait(false); logger.Info($"{nameof(IApiService)}.{nameof(IApiService.SyncAsync)} {Ln.已处理完毕}"); diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Subscribers/EmailCodeSender.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Subscribers/EmailCodeSender.cs index c942ad1b..f957cf5f 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Subscribers/EmailCodeSender.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Subscribers/EmailCodeSender.cs @@ -13,16 +13,16 @@ public sealed class EmailCodeSender(ILogger logger) : IEventSub /// 发送邮件 /// [EventSubscribe] - public async Task SendEmailAsync(VerifyCodeCreatedEvent @event) - { + public async Task SendEmailAsync(VerifyCodeCreatedEvent @event) { if (@event.PayLoad.DeviceType != VerifyCodeDeviceTypes.Email) { return; } // 发送... var verifyCodeService = App.GetService(); - _ = await verifyCodeService.SetVerifyCodeStatusAsync(@event.PayLoad.Adapt() with { Status = VerifyCodeStatues.Sent }) - .ConfigureAwait(false); + _ = await verifyCodeService + .SetVerifyCodeStatusAsync(@event.PayLoad.Adapt() with { Status = VerifyCodeStatues.Sent }) + .ConfigureAwait(false); logger.Info($"{nameof(IVerifyCodeService)}.{nameof(IVerifyCodeService.SetVerifyCodeStatusAsync)} {Ln.已处理完毕}"); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Subscribers/SmsCodeSender.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Subscribers/SmsCodeSender.cs index 5b29744a..04ecf7a4 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Subscribers/SmsCodeSender.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Subscribers/SmsCodeSender.cs @@ -13,16 +13,16 @@ public sealed class SmsCodeSender(ILogger logger) : IEventSubscri /// 发送短信 /// [EventSubscribe] - public async Task SendSmsAsync(VerifyCodeCreatedEvent @event) - { + public async Task SendSmsAsync(VerifyCodeCreatedEvent @event) { if (@event.PayLoad.DeviceType != VerifyCodeDeviceTypes.Mobile) { return; } // 发送... var verifyCodeService = App.GetService(); - _ = await verifyCodeService.SetVerifyCodeStatusAsync(@event.PayLoad.Adapt() with { Status = VerifyCodeStatues.Sent }) - .ConfigureAwait(false); + _ = await verifyCodeService + .SetVerifyCodeStatusAsync(@event.PayLoad.Adapt() with { Status = VerifyCodeStatues.Sent }) + .ConfigureAwait(false); logger.Info($"{nameof(IVerifyCodeService)}.{nameof(IVerifyCodeService.SetVerifyCodeStatusAsync)} {Ln.已处理完毕}"); } } \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Utils/RequestLogger.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Utils/RequestLogger.cs index 71e0409b..61055b37 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Utils/RequestLogger.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Utils/RequestLogger.cs @@ -20,46 +20,49 @@ public sealed class RequestLogger(ILogger logger, IEventPublisher /// /// 生成审计数据 /// - public async Task LogAsync(HttpContext context, long duration, string responseBody, ErrorCodes errorCode - , IExceptionHandlerFeature exception) - { + public async Task LogAsync( + HttpContext context + , long duration + , string responseBody + , ErrorCodes errorCode + , IExceptionHandlerFeature exception + ) { // 从请求头中读取用户信息 var associatedUser = GetAssociatedUser(context); - var id = YitIdHelper.NextId(); - var requestBody = Array.Exists( // - _textContentTypes, x => context.Request.ContentType?.Contains(x, StringComparison.OrdinalIgnoreCase) ?? false) + var id = YitIdHelper.NextId(); + var requestBody = Array.Exists(_textContentTypes, x => context.Request.ContentType?.Contains(x, StringComparison.OrdinalIgnoreCase) ?? false) ? await context.ReadBodyContentAsync().ConfigureAwait(false) : string.Empty; var apiId = context.Request.Path.Value!.TrimStart('/'); - var auditData = new CreateRequestLogReq // - { - Detail = new CreateRequestLogDetailReq // - { - Id = id - , CreatedUserAgent = context.Request.Headers.UserAgent.ToString() - , ErrorCode = errorCode - , Exception = exception?.Error.ToString() - , RequestBody = requestBody - , RequestContentType = context.Request.ContentType - , RequestHeaders = context.Request.Headers.Json() - , RequestUrl = context.Request.GetRequestUrlAddress() - , ResponseBody = responseBody - , ResponseContentType = context.Response.ContentType - , ResponseHeaders = context.Response.Headers.Json() - , ServerIp = context.GetLocalIpAddressToIPv4()?.IpV4ToInt32() - , CreatedTime = DateTime.Now - } - , Duration = (int)duration - , HttpMethod = Enum.Parse(context.Request.Method, true) - , ApiPathCrc32 = apiId.Crc32() - , HttpStatusCode = context.Response.StatusCode - , CreatedClientIp = context.GetRealIpAddress()?.MapToIPv4().ToString().IpV4ToInt32() - , OwnerId = associatedUser?.UserId - , OwnerDeptId = associatedUser?.DeptId - , Id = id - , TraceId = context.GetTraceId() - , CreatedTime = DateTime.Now - }; + var auditData = new CreateRequestLogReq + { + Detail = new CreateRequestLogDetailReq + { + Id = id + , CreatedUserAgent = context.Request.Headers.UserAgent.ToString() + , ErrorCode = errorCode + , Exception = exception?.Error.ToString() + , RequestBody = requestBody + , RequestContentType = context.Request.ContentType + , RequestHeaders = context.Request.Headers.Json() + , RequestUrl = context.Request.GetRequestUrlAddress() + , ResponseBody = responseBody + , ResponseContentType = context.Response.ContentType + , ResponseHeaders = context.Response.Headers.Json() + , ServerIp = context.GetLocalIpAddressToIPv4()?.IpV4ToInt32() + , CreatedTime = DateTime.Now + } + , Duration = (int)duration + , HttpMethod = Enum.Parse(context.Request.Method, true) + , ApiPathCrc32 = apiId.Crc32() + , HttpStatusCode = context.Response.StatusCode + , CreatedClientIp = context.GetRealIpAddress()?.MapToIPv4().ToString().IpV4ToInt32() + , OwnerId = associatedUser?.UserId + , OwnerDeptId = associatedUser?.DeptId + , Id = id + , TraceId = context.GetTraceId() + , CreatedTime = DateTime.Now + }; // ReSharper disable once InvertIf if (!_loggerIgnoreApiIds.Contains(apiId)) { @@ -73,8 +76,7 @@ public sealed class RequestLogger(ILogger logger, IEventPublisher return auditData; } - private (long UserId, long DeptId, string UserName)? GetAssociatedUser(HttpContext context) - { + private (long UserId, long DeptId, string UserName)? GetAssociatedUser(HttpContext context) { var token = context.Request.Headers.Authorization.FirstOrDefault(); if (token == null) { return null; diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Utils/SqlAuditor.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Utils/SqlAuditor.cs index b3f650cd..c7bdbc6b 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Utils/SqlAuditor.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Host/Utils/SqlAuditor.cs @@ -22,8 +22,7 @@ public sealed class SqlAuditor : ISingleton /// /// Initializes a new instance of the class. /// - public SqlAuditor(ILogger logger) - { + public SqlAuditor(ILogger logger) { // 设置服务器时间偏差 _timeOffset = DateTime.Now.Subtract(App.GetService().Ado.QuerySingle(() => DateTime.Now)); @@ -34,8 +33,10 @@ public sealed class SqlAuditor : ISingleton /// 对Insert/Update的数据加工 /// /// e - public static void DataAuditHandler(object sender, AuditValueEventArgs e) - { + public static void DataAuditHandler( + object sender + , AuditValueEventArgs e + ) { // SetServerTime(e); SetSnowflake(e); @@ -56,36 +57,37 @@ public sealed class SqlAuditor : ISingleton } } - private static void SetCreatedClientIp(AuditValueEventArgs e) - { + private static void SetCreatedClientIp(AuditValueEventArgs e) { if (e.Value is null or 0) { e.Value = App.HttpContext?.GetRealIpAddress()?.MapToIPv4().ToString().IpV4ToInt32(); } } - private static void SetCreatedTime(AuditValueEventArgs e) - { + private static void SetCreatedTime(AuditValueEventArgs e) { if (e.Value == null || (e.Value is DateTime val && val == default)) { e.Value = DateTime.Now; } } - private static void SetCreatedUserAgent(AuditValueEventArgs e) - { + private static void SetCreatedUserAgent(AuditValueEventArgs e) { if (e.Value is null or "") { e.Value = App.HttpContext?.Request.Headers[Chars.FLG_HTTP_HEADER_KEY_USER_AGENT].ToString(); } } - private static void SetCreatedUserId(AuditValueEventArgs e, ContextUserInfo userInfo) - { + private static void SetCreatedUserId( + AuditValueEventArgs e + , ContextUserInfo userInfo + ) { if (userInfo != null && e.Value is null or (long and 0)) { e.Value = userInfo.Id; } } - private static void SetCreatedUserName(AuditValueEventArgs e, ContextUserInfo userInfo) - { + private static void SetCreatedUserName( + AuditValueEventArgs e + , ContextUserInfo userInfo + ) { if (userInfo != null && e.Value is null or "") { e.Value = userInfo.UserName; } @@ -94,8 +96,10 @@ public sealed class SqlAuditor : ISingleton /// /// 设置创建者 /// - private static void SetCreator(AuditValueEventArgs e, ContextUserInfo userInfo) - { + private static void SetCreator( + AuditValueEventArgs e + , ContextUserInfo userInfo + ) { switch (e.Property.Name) { case nameof(IFieldCreatedTime.CreatedTime): SetCreatedTime(e); @@ -120,8 +124,10 @@ public sealed class SqlAuditor : ISingleton /// /// 设置更新人 /// - private static void SetModificator(AuditValueEventArgs e, ContextUserInfo userInfo) - { + private static void SetModificator( + AuditValueEventArgs e + , ContextUserInfo userInfo + ) { switch (e.Property.Name) { // case nameof(IFieldModifiedTime.ModifiedTime): // e.Value = DateTime.Now; @@ -151,8 +157,10 @@ public sealed class SqlAuditor : ISingleton /// /// 设置归属 /// - private static void SetOwner(AuditValueEventArgs e, ContextUserInfo userInfo) - { + private static void SetOwner( + AuditValueEventArgs e + , ContextUserInfo userInfo + ) { switch (e.Property.Name) { case nameof(IFieldOwner.OwnerId): if (userInfo != null && e.Value is null or (long and 0)) { @@ -174,11 +182,10 @@ public sealed class SqlAuditor : ISingleton /// /// 设置雪花编号字段 /// - private static void SetSnowflake(AuditValueEventArgs e) - { + private static void SetSnowflake(AuditValueEventArgs e) { var isSnowflake = e.Property.GetCustomAttribute(false) != null; - var isLongType = e.Column.CsType == typeof(long); - var isNoValue = e.Value is null or (long and 0); + var isLongType = e.Column.CsType == typeof(long); + var isNoValue = e.Value is null or (long and 0); if (isSnowflake && isLongType && isNoValue) { e.Value = YitIdHelper.NextId(); } diff --git a/src/backend/NetAdmin/NetAdmin.Tests/NetAdmin.Tests.csproj b/src/backend/NetAdmin/NetAdmin.Tests/NetAdmin.Tests.csproj index 8b4d3c86..06e17130 100644 --- a/src/backend/NetAdmin/NetAdmin.Tests/NetAdmin.Tests.csproj +++ b/src/backend/NetAdmin/NetAdmin.Tests/NetAdmin.Tests.csproj @@ -3,9 +3,9 @@ - + - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/src/backend/NetAdmin/NetAdmin.Tests/PriorityOrderer.cs b/src/backend/NetAdmin/NetAdmin.Tests/PriorityOrderer.cs index 14ecca1f..c192f5d9 100644 --- a/src/backend/NetAdmin/NetAdmin.Tests/PriorityOrderer.cs +++ b/src/backend/NetAdmin/NetAdmin.Tests/PriorityOrderer.cs @@ -13,8 +13,7 @@ public class PriorityOrderer : ITestCaseOrderer /// 排序测试用例 /// public IEnumerable OrderTestCases(IEnumerable testCases) - where TTestCase : ITestCase - { + where TTestCase : ITestCase { var sortedMethods = new SortedDictionary>(); foreach (var testCase in testCases) { @@ -28,21 +27,27 @@ public class PriorityOrderer : ITestCaseOrderer } foreach (var list in sortedMethods.Keys.Select(priority => sortedMethods[priority])) { - list.Sort((x, y) => StringComparer.OrdinalIgnoreCase.Compare(x.TestMethod.Method.Name, y.TestMethod.Method.Name)); + list.Sort(( + x + , y + ) => StringComparer.OrdinalIgnoreCase.Compare(x.TestMethod.Method.Name, y.TestMethod.Method.Name) + ); foreach (var testCase in list) { yield return testCase; } } } - private static TValue GetOrCreate(SortedDictionary dictionary, TKey key) - where TValue : new() - { + private static TValue GetOrCreate( + SortedDictionary dictionary + , TKey key + ) + where TValue : new() { if (dictionary.TryGetValue(key, out var result)) { return result; } - result = new TValue(); + result = new TValue(); dictionary[key] = result; return result; diff --git a/src/backend/UnitTests/Sys/ApiTests.cs b/src/backend/UnitTests/Sys/ApiTests.cs index c852d015..3d9edfb2 100644 --- a/src/backend/UnitTests/Sys/ApiTests.cs +++ b/src/backend/UnitTests/Sys/ApiTests.cs @@ -13,8 +13,7 @@ public class ApiTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { var rsp = await PostJsonAsync(typeof(ApiController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -23,8 +22,7 @@ public class ApiTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task CountAsync(QueryReq req) - { + public async Task CountAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(ApiController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -33,8 +31,7 @@ public class ApiTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(ApiController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -43,8 +40,7 @@ public class ApiTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task CreateAsync(CreateApiReq req) - { + public async Task CreateAsync(CreateApiReq req) { var rsp = await PostJsonAsync(typeof(ApiController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -53,8 +49,7 @@ public class ApiTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task DeleteAsync(DelReq req) - { + public async Task DeleteAsync(DelReq req) { var rsp = await PostJsonAsync(typeof(ApiController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -63,8 +58,7 @@ public class ApiTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task EditAsync(EditApiReq req) - { + public async Task EditAsync(EditApiReq req) { var rsp = await PostJsonAsync(typeof(ApiController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -73,8 +67,7 @@ public class ApiTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task ExportAsync(QueryReq req) - { + public async Task ExportAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(ApiController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -83,8 +76,7 @@ public class ApiTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task GetAsync(QueryApiReq req) - { + public async Task GetAsync(QueryApiReq req) { var rsp = await PostJsonAsync(typeof(ApiController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -93,8 +85,7 @@ public class ApiTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { var rsp = await PostJsonAsync(typeof(ApiController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -103,8 +94,7 @@ public class ApiTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task> PlainQueryAsync(QueryReq req) - { + public async Task> PlainQueryAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(ApiController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -113,8 +103,7 @@ public class ApiTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(ApiController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -123,8 +112,7 @@ public class ApiTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task SumAsync(QueryReq req) - { + public async Task SumAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(ApiController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -132,8 +120,7 @@ public class ApiTests(WebTestApplicationFactory factory, ITestOutputHel /// [Fact] - public async Task SyncAsync() - { + public async Task SyncAsync() { var rsp = await PostJsonAsync(typeof(ApiController)); Assert.True(rsp.IsSuccessStatusCode); } diff --git a/src/backend/UnitTests/Sys/CacheTests.cs b/src/backend/UnitTests/Sys/CacheTests.cs index 43ee3e08..cc9264df 100644 --- a/src/backend/UnitTests/Sys/CacheTests.cs +++ b/src/backend/UnitTests/Sys/CacheTests.cs @@ -13,8 +13,7 @@ public class CacheTests(WebTestApplicationFactory factory, ITestOutputH /// [InlineData(null)] [Theory] - public async Task BulkDeleteEntryAsync(BulkReq req) - { + public async Task BulkDeleteEntryAsync(BulkReq req) { var rsp = await PostJsonAsync(typeof(CacheController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -22,8 +21,7 @@ public class CacheTests(WebTestApplicationFactory factory, ITestOutputH /// [Fact] - public async Task CacheStatisticsAsync() - { + public async Task CacheStatisticsAsync() { var rsp = await PostJsonAsync(typeof(CacheController)); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -32,8 +30,7 @@ public class CacheTests(WebTestApplicationFactory factory, ITestOutputH /// [InlineData(null)] [Theory] - public async Task DeleteEntryAsync(DelEntryReq req) - { + public async Task DeleteEntryAsync(DelEntryReq req) { var rsp = await PostJsonAsync(typeof(CacheController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -42,8 +39,7 @@ public class CacheTests(WebTestApplicationFactory factory, ITestOutputH /// [InlineData(null)] [Theory] - public async Task> GetAllEntriesAsync(GetAllEntriesReq req) - { + public async Task> GetAllEntriesAsync(GetAllEntriesReq req) { var rsp = await PostJsonAsync(typeof(CacheController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -52,8 +48,7 @@ public class CacheTests(WebTestApplicationFactory factory, ITestOutputH /// [InlineData(null)] [Theory] - public async Task GetEntryAsync(GetEntriesReq req) - { + public async Task GetEntryAsync(GetEntriesReq req) { var rsp = await PostJsonAsync(typeof(CacheController), req); Assert.True(rsp.IsSuccessStatusCode); return null; diff --git a/src/backend/UnitTests/Sys/CaptchaTests.cs b/src/backend/UnitTests/Sys/CaptchaTests.cs index 611dc056..9aab5bf5 100644 --- a/src/backend/UnitTests/Sys/CaptchaTests.cs +++ b/src/backend/UnitTests/Sys/CaptchaTests.cs @@ -12,8 +12,7 @@ public class CaptchaTests(WebTestApplicationFactory factory, ITestOutpu { /// [Fact] - public async Task GetCaptchaImageAsync() - { + public async Task GetCaptchaImageAsync() { var rsp = await PostJsonAsync(typeof(CaptchaController)); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -22,8 +21,7 @@ public class CaptchaTests(WebTestApplicationFactory factory, ITestOutpu /// [InlineData(null)] [Theory] - public async Task VerifyCaptchaAsync(VerifyCaptchaReq req) - { + public async Task VerifyCaptchaAsync(VerifyCaptchaReq req) { var rsp = await PostJsonAsync(typeof(CaptchaController), req); Assert.True(rsp.IsSuccessStatusCode); return false; diff --git a/src/backend/UnitTests/Sys/ConfigTests.cs b/src/backend/UnitTests/Sys/ConfigTests.cs index 367fc43b..22608f9b 100644 --- a/src/backend/UnitTests/Sys/ConfigTests.cs +++ b/src/backend/UnitTests/Sys/ConfigTests.cs @@ -13,8 +13,7 @@ public class ConfigTests(WebTestApplicationFactory factory, ITestOutput /// [InlineData(null)] [Theory] - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { var rsp = await PostJsonAsync(typeof(ConfigController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -23,8 +22,7 @@ public class ConfigTests(WebTestApplicationFactory factory, ITestOutput /// [InlineData(null)] [Theory] - public async Task CountAsync(QueryReq req) - { + public async Task CountAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(ConfigController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -33,8 +31,7 @@ public class ConfigTests(WebTestApplicationFactory factory, ITestOutput /// [InlineData(null)] [Theory] - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(ConfigController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -43,8 +40,7 @@ public class ConfigTests(WebTestApplicationFactory factory, ITestOutput /// [InlineData(null)] [Theory] - public async Task CreateAsync(CreateConfigReq req) - { + public async Task CreateAsync(CreateConfigReq req) { var rsp = await PostJsonAsync(typeof(ConfigController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -53,8 +49,7 @@ public class ConfigTests(WebTestApplicationFactory factory, ITestOutput /// [InlineData(null)] [Theory] - public async Task DeleteAsync(DelReq req) - { + public async Task DeleteAsync(DelReq req) { var rsp = await PostJsonAsync(typeof(ConfigController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -63,8 +58,7 @@ public class ConfigTests(WebTestApplicationFactory factory, ITestOutput /// [InlineData(null)] [Theory] - public async Task EditAsync(EditConfigReq req) - { + public async Task EditAsync(EditConfigReq req) { var rsp = await PostJsonAsync(typeof(ConfigController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -73,8 +67,7 @@ public class ConfigTests(WebTestApplicationFactory factory, ITestOutput /// [InlineData(null)] [Theory] - public async Task ExportAsync(QueryReq req) - { + public async Task ExportAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(ConfigController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -83,8 +76,7 @@ public class ConfigTests(WebTestApplicationFactory factory, ITestOutput /// [InlineData(null)] [Theory] - public async Task GetAsync(QueryConfigReq req) - { + public async Task GetAsync(QueryConfigReq req) { var rsp = await PostJsonAsync(typeof(ConfigController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -92,16 +84,14 @@ public class ConfigTests(WebTestApplicationFactory factory, ITestOutput /// [Fact] - public async Task GetLatestConfigAsync() - { + public async Task GetLatestConfigAsync() { var rsp = await PostJsonAsync(typeof(ConfigController)); Assert.True(rsp.IsSuccessStatusCode); return null; } /// - public async Task GetRegisterConfigAsync() - { + public async Task GetRegisterConfigAsync() { var rsp = await PostJsonAsync(typeof(ConfigController)); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -110,8 +100,7 @@ public class ConfigTests(WebTestApplicationFactory factory, ITestOutput /// [InlineData(null)] [Theory] - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { var rsp = await PostJsonAsync(typeof(ConfigController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -120,8 +109,7 @@ public class ConfigTests(WebTestApplicationFactory factory, ITestOutput /// [InlineData(null)] [Theory] - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(ConfigController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -130,8 +118,7 @@ public class ConfigTests(WebTestApplicationFactory factory, ITestOutput /// [InlineData(null)] [Theory] - public async Task SetEnabledAsync(SetConfigEnabledReq req) - { + public async Task SetEnabledAsync(SetConfigEnabledReq req) { var rsp = await PostJsonAsync(typeof(ConfigController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -140,8 +127,7 @@ public class ConfigTests(WebTestApplicationFactory factory, ITestOutput /// [InlineData(null)] [Theory] - public async Task SumAsync(QueryReq req) - { + public async Task SumAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(ConfigController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; diff --git a/src/backend/UnitTests/Sys/ConstantTests.cs b/src/backend/UnitTests/Sys/ConstantTests.cs index cdfefb03..5a14dc64 100644 --- a/src/backend/UnitTests/Sys/ConstantTests.cs +++ b/src/backend/UnitTests/Sys/ConstantTests.cs @@ -11,8 +11,7 @@ public class ConstantTests(WebTestApplicationFactory factory, ITestOutp { /// [Fact] - public IDictionary GetCharsDic() - { + public IDictionary GetCharsDic() { var rsp = PostJsonAsync(typeof(ConstantController)).GetAwaiter().GetResult(); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -20,8 +19,7 @@ public class ConstantTests(WebTestApplicationFactory factory, ITestOutp /// [Fact] - public IDictionary> GetEnums() - { + public IDictionary> GetEnums() { var rsp = PostJsonAsync(typeof(ConstantController)).GetAwaiter().GetResult(); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -29,8 +27,7 @@ public class ConstantTests(WebTestApplicationFactory factory, ITestOutp /// [Fact] - public IDictionary GetLocalizedStrings() - { + public IDictionary GetLocalizedStrings() { var rsp = PostJsonAsync(typeof(ConstantController)).GetAwaiter().GetResult(); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -38,8 +35,7 @@ public class ConstantTests(WebTestApplicationFactory factory, ITestOutp /// [Fact] - public IDictionary GetNumbersDic() - { + public IDictionary GetNumbersDic() { var rsp = PostJsonAsync(typeof(ConstantController)).GetAwaiter().GetResult(); Assert.True(rsp.IsSuccessStatusCode); return null; diff --git a/src/backend/UnitTests/Sys/DeptTests.cs b/src/backend/UnitTests/Sys/DeptTests.cs index 0c9e31d3..9b8e9b69 100644 --- a/src/backend/UnitTests/Sys/DeptTests.cs +++ b/src/backend/UnitTests/Sys/DeptTests.cs @@ -13,8 +13,7 @@ public class DeptTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { var rsp = await PostJsonAsync(typeof(DeptController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -23,8 +22,7 @@ public class DeptTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task CountAsync(QueryReq req) - { + public async Task CountAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(DeptController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -33,8 +31,7 @@ public class DeptTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(DeptController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -43,8 +40,7 @@ public class DeptTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task CreateAsync(CreateDeptReq req) - { + public async Task CreateAsync(CreateDeptReq req) { var rsp = await PostJsonAsync(typeof(DeptController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -53,8 +49,7 @@ public class DeptTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task DeleteAsync(DelReq req) - { + public async Task DeleteAsync(DelReq req) { var rsp = await PostJsonAsync(typeof(DeptController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -63,8 +58,7 @@ public class DeptTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task EditAsync(EditDeptReq req) - { + public async Task EditAsync(EditDeptReq req) { var rsp = await PostJsonAsync(typeof(DeptController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -73,8 +67,7 @@ public class DeptTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task ExportAsync(QueryReq req) - { + public async Task ExportAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(DeptController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -83,8 +76,7 @@ public class DeptTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task GetAsync(QueryDeptReq req) - { + public async Task GetAsync(QueryDeptReq req) { var rsp = await PostJsonAsync(typeof(DeptController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -93,8 +85,7 @@ public class DeptTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { var rsp = await PostJsonAsync(typeof(DeptController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -103,8 +94,7 @@ public class DeptTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(DeptController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -113,8 +103,7 @@ public class DeptTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task SetEnabledAsync(SetDeptEnabledReq req) - { + public async Task SetEnabledAsync(SetDeptEnabledReq req) { var rsp = await PostJsonAsync(typeof(DeptController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -123,8 +112,7 @@ public class DeptTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task SumAsync(QueryReq req) - { + public async Task SumAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(DeptController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; diff --git a/src/backend/UnitTests/Sys/DevTests.cs b/src/backend/UnitTests/Sys/DevTests.cs index 0bb2a02c..115f69ce 100644 --- a/src/backend/UnitTests/Sys/DevTests.cs +++ b/src/backend/UnitTests/Sys/DevTests.cs @@ -13,8 +13,7 @@ public class DevTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task GenerateCsCodeAsync(GenerateCsCodeReq req) - { + public async Task GenerateCsCodeAsync(GenerateCsCodeReq req) { var rsp = await PostJsonAsync(typeof(DevController), req); Assert.True(rsp.IsSuccessStatusCode); } @@ -22,32 +21,28 @@ public class DevTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task GenerateIconCodeAsync(GenerateIconCodeReq req) - { + public async Task GenerateIconCodeAsync(GenerateIconCodeReq req) { var rsp = await PostJsonAsync(typeof(DevController), req); Assert.True(rsp.IsSuccessStatusCode); } /// [Fact] - public async Task GenerateJsCodeAsync() - { + public async Task GenerateJsCodeAsync() { var rsp = await PostJsonAsync(typeof(DevController)); Assert.True(rsp.IsSuccessStatusCode); } /// [Fact] - public async Task>> GetDomainProjectsAsync() - { + public async Task>> GetDomainProjectsAsync() { var rsp = await PostJsonAsync(typeof(DevController)); Assert.True(rsp.IsSuccessStatusCode); return null; } /// - public IEnumerable GetDotnetDataTypes(GetDotnetDataTypesReq req) - { + public IEnumerable GetDotnetDataTypes(GetDotnetDataTypesReq req) { #pragma warning disable xUnit1031 var rsp = PostJsonAsync(typeof(DevController)).GetAwaiter().GetResult(); #pragma warning restore xUnit1031 @@ -57,8 +52,7 @@ public class DevTests(WebTestApplicationFactory factory, ITestOutputHel /// [Fact] - public IEnumerable> GetEntityBaseClasses() - { + public IEnumerable> GetEntityBaseClasses() { #pragma warning disable xUnit1031 var rsp = PostJsonAsync(typeof(DevController)).GetAwaiter().GetResult(); #pragma warning restore xUnit1031 @@ -68,8 +62,7 @@ public class DevTests(WebTestApplicationFactory factory, ITestOutputHel /// [Fact] - public IEnumerable> GetFieldInterfaces() - { + public IEnumerable> GetFieldInterfaces() { #pragma warning disable xUnit1031 var rsp = PostJsonAsync(typeof(DevController)).GetAwaiter().GetResult(); #pragma warning restore xUnit1031 diff --git a/src/backend/UnitTests/Sys/DicTests.cs b/src/backend/UnitTests/Sys/DicTests.cs index b3c48f12..d21c0c49 100644 --- a/src/backend/UnitTests/Sys/DicTests.cs +++ b/src/backend/UnitTests/Sys/DicTests.cs @@ -14,8 +14,7 @@ public class DicTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task BulkDeleteCatalogAsync(BulkReq req) - { + public async Task BulkDeleteCatalogAsync(BulkReq req) { var rsp = await PostJsonAsync(typeof(DicController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -24,8 +23,7 @@ public class DicTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task BulkDeleteContentAsync(BulkReq req) - { + public async Task BulkDeleteContentAsync(BulkReq req) { var rsp = await PostJsonAsync(typeof(DicController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -35,8 +33,8 @@ public class DicTests(WebTestApplicationFactory factory, ITestOutputHel [InlineData(null)] [Theory] public async Task, int>>> ContentCountByAsync( - QueryReq req) - { + QueryReq req + ) { var rsp = await PostJsonAsync(typeof(DicController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -45,8 +43,7 @@ public class DicTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task CreateCatalogAsync(CreateDicCatalogReq req) - { + public async Task CreateCatalogAsync(CreateDicCatalogReq req) { var rsp = await PostJsonAsync(typeof(DicController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -55,8 +52,7 @@ public class DicTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task CreateContentAsync(CreateDicContentReq req) - { + public async Task CreateContentAsync(CreateDicContentReq req) { var rsp = await PostJsonAsync(typeof(DicController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -65,8 +61,7 @@ public class DicTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task DeleteCatalogAsync(DelReq req) - { + public async Task DeleteCatalogAsync(DelReq req) { var rsp = await PostJsonAsync(typeof(DicController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -75,8 +70,7 @@ public class DicTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task DeleteContentAsync(DelReq req) - { + public async Task DeleteContentAsync(DelReq req) { var rsp = await PostJsonAsync(typeof(DicController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -85,8 +79,7 @@ public class DicTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task EditCatalogAsync(EditDicCatalogReq req) - { + public async Task EditCatalogAsync(EditDicCatalogReq req) { var rsp = await PostJsonAsync(typeof(DicController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -95,8 +88,7 @@ public class DicTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task EditContentAsync(EditDicContentReq req) - { + public async Task EditContentAsync(EditDicContentReq req) { var rsp = await PostJsonAsync(typeof(DicController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -105,8 +97,7 @@ public class DicTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task ExportContentAsync(QueryReq req) - { + public async Task ExportContentAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(DicController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -115,8 +106,7 @@ public class DicTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task GetCatalogAsync(QueryDicCatalogReq req) - { + public async Task GetCatalogAsync(QueryDicCatalogReq req) { var rsp = await PostJsonAsync(typeof(DicController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -125,8 +115,7 @@ public class DicTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task GetContentAsync(QueryDicContentReq req) - { + public async Task GetContentAsync(QueryDicContentReq req) { var rsp = await PostJsonAsync(typeof(DicController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -135,8 +124,7 @@ public class DicTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task GetDicValueAsync(GetDicValueReq req) - { + public async Task GetDicValueAsync(GetDicValueReq req) { var rsp = await PostJsonAsync(typeof(DicController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -145,8 +133,7 @@ public class DicTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task> PagedQueryCatalogAsync(PagedQueryReq req) - { + public async Task> PagedQueryCatalogAsync(PagedQueryReq req) { var rsp = await PostJsonAsync(typeof(DicController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -155,8 +142,7 @@ public class DicTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task> PagedQueryContentAsync(PagedQueryReq req) - { + public async Task> PagedQueryContentAsync(PagedQueryReq req) { var rsp = await PostJsonAsync(typeof(DicController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -165,8 +151,7 @@ public class DicTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task> QueryCatalogAsync(QueryReq req) - { + public async Task> QueryCatalogAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(DicController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -175,8 +160,7 @@ public class DicTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task> QueryContentAsync(QueryReq req) - { + public async Task> QueryContentAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(DicController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -185,8 +169,7 @@ public class DicTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task SetEnabledAsync(SetDicContentEnabledReq req) - { + public async Task SetEnabledAsync(SetDicContentEnabledReq req) { var rsp = await PostJsonAsync(typeof(DicController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; diff --git a/src/backend/UnitTests/Sys/DocTests.cs b/src/backend/UnitTests/Sys/DocTests.cs index fe7e88d4..2ffbf36f 100644 --- a/src/backend/UnitTests/Sys/DocTests.cs +++ b/src/backend/UnitTests/Sys/DocTests.cs @@ -14,8 +14,7 @@ public class DocTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task BulkDeleteCatalogAsync(BulkReq req) - { + public async Task BulkDeleteCatalogAsync(BulkReq req) { var rsp = await PostJsonAsync(typeof(DocController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -24,8 +23,7 @@ public class DocTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task BulkDeleteContentAsync(BulkReq req) - { + public async Task BulkDeleteContentAsync(BulkReq req) { var rsp = await PostJsonAsync(typeof(DocController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -35,8 +33,8 @@ public class DocTests(WebTestApplicationFactory factory, ITestOutputHel [InlineData(null)] [Theory] public async Task, int>>> ContentCountByAsync( - QueryReq req) - { + QueryReq req + ) { var rsp = await PostJsonAsync(typeof(DocController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -45,8 +43,7 @@ public class DocTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task CreateCatalogAsync(CreateDocCatalogReq req) - { + public async Task CreateCatalogAsync(CreateDocCatalogReq req) { var rsp = await PostJsonAsync(typeof(DocController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -55,8 +52,7 @@ public class DocTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task CreateContentAsync(CreateDocContentReq req) - { + public async Task CreateContentAsync(CreateDocContentReq req) { var rsp = await PostJsonAsync(typeof(DocController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -65,8 +61,7 @@ public class DocTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task DeleteCatalogAsync(DelReq req) - { + public async Task DeleteCatalogAsync(DelReq req) { var rsp = await PostJsonAsync(typeof(DocController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -75,8 +70,7 @@ public class DocTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task DeleteContentAsync(DelReq req) - { + public async Task DeleteContentAsync(DelReq req) { var rsp = await PostJsonAsync(typeof(DocController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -85,8 +79,7 @@ public class DocTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task EditCatalogAsync(EditDocCatalogReq req) - { + public async Task EditCatalogAsync(EditDocCatalogReq req) { var rsp = await PostJsonAsync(typeof(DocController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -95,8 +88,7 @@ public class DocTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task EditContentAsync(EditDocContentReq req) - { + public async Task EditContentAsync(EditDocContentReq req) { var rsp = await PostJsonAsync(typeof(DocController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -105,8 +97,7 @@ public class DocTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task ExportContentAsync(QueryReq req) - { + public async Task ExportContentAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(DocController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -115,8 +106,7 @@ public class DocTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task GetCatalogAsync(QueryDocCatalogReq req) - { + public async Task GetCatalogAsync(QueryDocCatalogReq req) { var rsp = await PostJsonAsync(typeof(DocController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -125,8 +115,7 @@ public class DocTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task GetContentAsync(QueryDocContentReq req) - { + public async Task GetContentAsync(QueryDocContentReq req) { var rsp = await PostJsonAsync(typeof(DocController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -135,8 +124,7 @@ public class DocTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task> PagedQueryCatalogAsync(PagedQueryReq req) - { + public async Task> PagedQueryCatalogAsync(PagedQueryReq req) { var rsp = await PostJsonAsync(typeof(DocController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -145,8 +133,7 @@ public class DocTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task> PagedQueryContentAsync(PagedQueryReq req) - { + public async Task> PagedQueryContentAsync(PagedQueryReq req) { var rsp = await PostJsonAsync(typeof(DocController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -155,8 +142,7 @@ public class DocTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task> QueryCatalogAsync(QueryReq req) - { + public async Task> QueryCatalogAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(DocController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -165,8 +151,7 @@ public class DocTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task> QueryContentAsync(QueryReq req) - { + public async Task> QueryContentAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(DocController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -175,8 +160,7 @@ public class DocTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task SetEnabledAsync(SetDocContentEnabledReq req) - { + public async Task SetEnabledAsync(SetDocContentEnabledReq req) { var rsp = await PostJsonAsync(typeof(DocController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -185,8 +169,7 @@ public class DocTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task ViewContentAsync(QueryDocContentReq req) - { + public async Task ViewContentAsync(QueryDocContentReq req) { var rsp = await PostJsonAsync(typeof(DocController), req); Assert.True(rsp.IsSuccessStatusCode); return null; diff --git a/src/backend/UnitTests/Sys/FileTests.cs b/src/backend/UnitTests/Sys/FileTests.cs index e8a51972..3d00aa91 100644 --- a/src/backend/UnitTests/Sys/FileTests.cs +++ b/src/backend/UnitTests/Sys/FileTests.cs @@ -13,8 +13,7 @@ public class FileTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task UploadAsync(IFormFile file) - { + public async Task UploadAsync(IFormFile file) { var rsp = await PostJsonAsync(typeof(FileController), file); Assert.True(rsp.IsSuccessStatusCode); return null; diff --git a/src/backend/UnitTests/Sys/JobTests.cs b/src/backend/UnitTests/Sys/JobTests.cs index 64cd1a2b..432df6a7 100644 --- a/src/backend/UnitTests/Sys/JobTests.cs +++ b/src/backend/UnitTests/Sys/JobTests.cs @@ -15,8 +15,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -25,8 +24,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task CountAsync(QueryReq req) - { + public async Task CountAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -35,8 +33,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -45,8 +42,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task CountRecordAsync(QueryReq req) - { + public async Task CountRecordAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -55,8 +51,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task CreateAsync(CreateJobReq req) - { + public async Task CreateAsync(CreateJobReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -65,8 +60,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task DeleteAsync(DelReq req) - { + public async Task DeleteAsync(DelReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -75,8 +69,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task EditAsync(EditJobReq req) - { + public async Task EditAsync(EditJobReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -85,8 +78,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task ExecuteAsync(QueryJobReq req) - { + public async Task ExecuteAsync(QueryJobReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); } @@ -94,8 +86,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task ExportAsync(QueryReq req) - { + public async Task ExportAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -104,8 +95,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task ExportRecordAsync(QueryReq req) - { + public async Task ExportRecordAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -114,8 +104,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task GetAsync(QueryJobReq req) - { + public async Task GetAsync(QueryJobReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -124,8 +113,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task GetRecordAsync(QueryJobRecordReq req) - { + public async Task GetRecordAsync(QueryJobRecordReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -134,8 +122,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task> GetRecordBarChartAsync(QueryReq req) - { + public async Task> GetRecordBarChartAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -144,8 +131,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task> GetRecordPieChartByHttpStatusCodeAsync(QueryReq req) - { + public async Task> GetRecordPieChartByHttpStatusCodeAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -154,8 +140,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task> GetRecordPieChartByNameAsync(QueryReq req) - { + public async Task> GetRecordPieChartByNameAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -164,8 +149,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -174,8 +158,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task> PagedQueryRecordAsync(PagedQueryReq req) - { + public async Task> PagedQueryRecordAsync(PagedQueryReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -184,8 +167,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -194,8 +176,8 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task, int>>> RecordCountByAsync(QueryReq req) - { + public async Task, int>>> + RecordCountByAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -204,8 +186,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task SetEnabledAsync(SetJobEnabledReq req) - { + public async Task SetEnabledAsync(SetJobEnabledReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -214,8 +195,7 @@ public class JobTests(WebTestApplicationFactory factory, ITestOutputHel /// [InlineData(null)] [Theory] - public async Task SumAsync(QueryReq req) - { + public async Task SumAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(JobController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; diff --git a/src/backend/UnitTests/Sys/LoginLogTests.cs b/src/backend/UnitTests/Sys/LoginLogTests.cs index 9b4aec80..432b4072 100644 --- a/src/backend/UnitTests/Sys/LoginLogTests.cs +++ b/src/backend/UnitTests/Sys/LoginLogTests.cs @@ -13,8 +13,7 @@ public class LoginLogTests(WebTestApplicationFactory factory, ITestOutp /// [InlineData(null)] [Theory] - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { var rsp = await PostJsonAsync(typeof(LoginLogController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -23,8 +22,7 @@ public class LoginLogTests(WebTestApplicationFactory factory, ITestOutp /// [InlineData(null)] [Theory] - public async Task CountAsync(QueryReq req) - { + public async Task CountAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(LoginLogController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -33,8 +31,7 @@ public class LoginLogTests(WebTestApplicationFactory factory, ITestOutp /// [InlineData(null)] [Theory] - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(LoginLogController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -43,8 +40,7 @@ public class LoginLogTests(WebTestApplicationFactory factory, ITestOutp /// [InlineData(null)] [Theory] - public async Task CreateAsync(CreateLoginLogReq req) - { + public async Task CreateAsync(CreateLoginLogReq req) { var rsp = await PostJsonAsync(typeof(LoginLogController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -53,8 +49,7 @@ public class LoginLogTests(WebTestApplicationFactory factory, ITestOutp /// [InlineData(null)] [Theory] - public async Task DeleteAsync(DelReq req) - { + public async Task DeleteAsync(DelReq req) { var rsp = await PostJsonAsync(typeof(LoginLogController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -63,8 +58,7 @@ public class LoginLogTests(WebTestApplicationFactory factory, ITestOutp /// [InlineData(null)] [Theory] - public async Task EditAsync(EditLoginLogReq req) - { + public async Task EditAsync(EditLoginLogReq req) { var rsp = await PostJsonAsync(typeof(LoginLogController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -73,8 +67,7 @@ public class LoginLogTests(WebTestApplicationFactory factory, ITestOutp /// [InlineData(null)] [Theory] - public async Task ExportAsync(QueryReq req) - { + public async Task ExportAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(LoginLogController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -83,8 +76,7 @@ public class LoginLogTests(WebTestApplicationFactory factory, ITestOutp /// [InlineData(null)] [Theory] - public async Task GetAsync(QueryLoginLogReq req) - { + public async Task GetAsync(QueryLoginLogReq req) { var rsp = await PostJsonAsync(typeof(LoginLogController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -93,8 +85,7 @@ public class LoginLogTests(WebTestApplicationFactory factory, ITestOutp /// [InlineData(null)] [Theory] - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { var rsp = await PostJsonAsync(typeof(LoginLogController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -103,8 +94,7 @@ public class LoginLogTests(WebTestApplicationFactory factory, ITestOutp /// [InlineData(null)] [Theory] - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(LoginLogController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -113,8 +103,7 @@ public class LoginLogTests(WebTestApplicationFactory factory, ITestOutp /// [InlineData(null)] [Theory] - public async Task SumAsync(QueryReq req) - { + public async Task SumAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(LoginLogController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; diff --git a/src/backend/UnitTests/Sys/MenuTests.cs b/src/backend/UnitTests/Sys/MenuTests.cs index af6e0622..61ff4e30 100644 --- a/src/backend/UnitTests/Sys/MenuTests.cs +++ b/src/backend/UnitTests/Sys/MenuTests.cs @@ -13,8 +13,7 @@ public class MenuTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { var rsp = await PostJsonAsync(typeof(MenuTests), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -23,8 +22,7 @@ public class MenuTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task CountAsync(QueryReq req) - { + public async Task CountAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(MenuTests), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -33,8 +31,7 @@ public class MenuTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(MenuTests), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -43,8 +40,7 @@ public class MenuTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task CreateAsync(CreateMenuReq req) - { + public async Task CreateAsync(CreateMenuReq req) { var rsp = await PostJsonAsync(typeof(MenuTests), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -53,8 +49,7 @@ public class MenuTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task DeleteAsync(DelReq req) - { + public async Task DeleteAsync(DelReq req) { var rsp = await PostJsonAsync(typeof(MenuTests), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -63,8 +58,7 @@ public class MenuTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task EditAsync(EditMenuReq req) - { + public async Task EditAsync(EditMenuReq req) { var rsp = await PostJsonAsync(typeof(MenuTests), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -73,8 +67,7 @@ public class MenuTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task ExportAsync(QueryReq req) - { + public async Task ExportAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(MenuTests), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -83,8 +76,7 @@ public class MenuTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task GetAsync(QueryMenuReq req) - { + public async Task GetAsync(QueryMenuReq req) { var rsp = await PostJsonAsync(typeof(MenuTests), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -93,8 +85,7 @@ public class MenuTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { var rsp = await PostJsonAsync(typeof(MenuTests), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -103,8 +94,7 @@ public class MenuTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(MenuTests), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -113,8 +103,7 @@ public class MenuTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task SumAsync(QueryReq req) - { + public async Task SumAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(MenuController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -122,8 +111,7 @@ public class MenuTests(WebTestApplicationFactory factory, ITestOutputHe /// [Fact] - public async Task> UserMenusAsync() - { + public async Task> UserMenusAsync() { var rsp = await PostJsonAsync(typeof(MenuTests)); Assert.True(rsp.IsSuccessStatusCode); return null; diff --git a/src/backend/UnitTests/Sys/RequestLogTests.cs b/src/backend/UnitTests/Sys/RequestLogTests.cs index 74352fa6..46117b69 100644 --- a/src/backend/UnitTests/Sys/RequestLogTests.cs +++ b/src/backend/UnitTests/Sys/RequestLogTests.cs @@ -14,8 +14,7 @@ public class RequestLogTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { var rsp = await PostJsonAsync(typeof(RequestLogController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -24,8 +23,7 @@ public class RequestLogTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task CountAsync(QueryReq req) - { + public async Task CountAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(RequestLogController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -34,8 +32,7 @@ public class RequestLogTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(RequestLogController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -44,8 +41,7 @@ public class RequestLogTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task CreateAsync(CreateRequestLogReq req) - { + public async Task CreateAsync(CreateRequestLogReq req) { var rsp = await PostJsonAsync(typeof(RequestLogController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -54,8 +50,7 @@ public class RequestLogTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task DeleteAsync(DelReq req) - { + public async Task DeleteAsync(DelReq req) { var rsp = await PostJsonAsync(typeof(RequestLogController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -64,8 +59,7 @@ public class RequestLogTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task EditAsync(EditRequestLogReq req) - { + public async Task EditAsync(EditRequestLogReq req) { var rsp = await PostJsonAsync(typeof(RequestLogController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -74,8 +68,7 @@ public class RequestLogTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task ExportAsync(QueryReq req) - { + public async Task ExportAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(RequestLogController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -84,8 +77,7 @@ public class RequestLogTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task GetAsync(QueryRequestLogReq req) - { + public async Task GetAsync(QueryRequestLogReq req) { var rsp = await PostJsonAsync(typeof(RequestLogController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -94,8 +86,7 @@ public class RequestLogTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task> GetBarChartAsync(QueryReq req) - { + public async Task> GetBarChartAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(RequestLogController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -104,8 +95,7 @@ public class RequestLogTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task> GetPieChartByApiSummaryAsync(QueryReq req) - { + public async Task> GetPieChartByApiSummaryAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(RequestLogController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -114,8 +104,7 @@ public class RequestLogTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task> GetPieChartByHttpStatusCodeAsync(QueryReq req) - { + public async Task> GetPieChartByHttpStatusCodeAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(RequestLogController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -124,8 +113,7 @@ public class RequestLogTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { var rsp = await PostJsonAsync(typeof(RequestLogController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -134,8 +122,7 @@ public class RequestLogTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(RequestLogController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -144,8 +131,7 @@ public class RequestLogTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task SumAsync(QueryReq req) - { + public async Task SumAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(RequestLogController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; diff --git a/src/backend/UnitTests/Sys/RoleTests.cs b/src/backend/UnitTests/Sys/RoleTests.cs index f8946b23..beac7898 100644 --- a/src/backend/UnitTests/Sys/RoleTests.cs +++ b/src/backend/UnitTests/Sys/RoleTests.cs @@ -14,8 +14,7 @@ public class RoleTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { var rsp = await PostJsonAsync(typeof(RoleController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -24,8 +23,7 @@ public class RoleTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task CountAsync(QueryReq req) - { + public async Task CountAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(RoleController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -34,8 +32,7 @@ public class RoleTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(RoleController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -44,8 +41,7 @@ public class RoleTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task CreateAsync(CreateRoleReq req) - { + public async Task CreateAsync(CreateRoleReq req) { var rsp = await PostJsonAsync(typeof(RoleController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -54,8 +50,7 @@ public class RoleTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task DeleteAsync(DelReq req) - { + public async Task DeleteAsync(DelReq req) { var rsp = await PostJsonAsync(typeof(RoleController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -64,8 +59,7 @@ public class RoleTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task EditAsync(EditRoleReq req) - { + public async Task EditAsync(EditRoleReq req) { var rsp = await PostJsonAsync(typeof(RoleController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -74,8 +68,7 @@ public class RoleTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task ExportAsync(QueryReq req) - { + public async Task ExportAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(RoleController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -84,8 +77,7 @@ public class RoleTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task GetAsync(QueryRoleReq req) - { + public async Task GetAsync(QueryRoleReq req) { var rsp = await PostJsonAsync(typeof(RoleController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -94,8 +86,7 @@ public class RoleTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { var rsp = await PostJsonAsync(typeof(RoleController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -104,8 +95,7 @@ public class RoleTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(RoleController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -114,8 +104,7 @@ public class RoleTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task SetDisplayDashboardAsync(SetDisplayDashboardReq req) - { + public async Task SetDisplayDashboardAsync(SetDisplayDashboardReq req) { var rsp = await PostJsonAsync(typeof(RoleController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -124,8 +113,7 @@ public class RoleTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task SetEnabledAsync(SetRoleEnabledReq req) - { + public async Task SetEnabledAsync(SetRoleEnabledReq req) { var rsp = await PostJsonAsync(typeof(RoleController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -134,8 +122,7 @@ public class RoleTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task SetIgnorePermissionControlAsync(SetIgnorePermissionControlReq req) - { + public async Task SetIgnorePermissionControlAsync(SetIgnorePermissionControlReq req) { var rsp = await PostJsonAsync(typeof(RoleController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -144,8 +131,7 @@ public class RoleTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task SumAsync(QueryReq req) - { + public async Task SumAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(RoleController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -154,8 +140,7 @@ public class RoleTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task, int>>> UserCountByAsync(QueryReq req) - { + public async Task, int>>> UserCountByAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(RoleController), req); Assert.True(rsp.IsSuccessStatusCode); return null; diff --git a/src/backend/UnitTests/Sys/SiteMsgTests.cs b/src/backend/UnitTests/Sys/SiteMsgTests.cs index 31ae3327..c4245b6f 100644 --- a/src/backend/UnitTests/Sys/SiteMsgTests.cs +++ b/src/backend/UnitTests/Sys/SiteMsgTests.cs @@ -14,8 +14,7 @@ public class SiteMsgTests(WebTestApplicationFactory factory, ITestOutpu /// [InlineData(null)] [Theory] - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { var rsp = await PostJsonAsync(typeof(SiteMsgController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -24,8 +23,7 @@ public class SiteMsgTests(WebTestApplicationFactory factory, ITestOutpu /// [InlineData(null)] [Theory] - public async Task CountAsync(QueryReq req) - { + public async Task CountAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(SiteMsgController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -34,8 +32,7 @@ public class SiteMsgTests(WebTestApplicationFactory factory, ITestOutpu /// [InlineData(null)] [Theory] - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(SiteMsgController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -44,8 +41,7 @@ public class SiteMsgTests(WebTestApplicationFactory factory, ITestOutpu /// [InlineData(null)] [Theory] - public async Task CreateAsync(CreateSiteMsgReq req) - { + public async Task CreateAsync(CreateSiteMsgReq req) { var rsp = await PostJsonAsync(typeof(SiteMsgController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -54,8 +50,7 @@ public class SiteMsgTests(WebTestApplicationFactory factory, ITestOutpu /// [InlineData(null)] [Theory] - public async Task DeleteAsync(DelReq req) - { + public async Task DeleteAsync(DelReq req) { var rsp = await PostJsonAsync(typeof(SiteMsgController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -64,8 +59,7 @@ public class SiteMsgTests(WebTestApplicationFactory factory, ITestOutpu /// [InlineData(null)] [Theory] - public async Task EditAsync(EditSiteMsgReq req) - { + public async Task EditAsync(EditSiteMsgReq req) { var rsp = await PostJsonAsync(typeof(SiteMsgController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -74,8 +68,7 @@ public class SiteMsgTests(WebTestApplicationFactory factory, ITestOutpu /// [InlineData(null)] [Theory] - public async Task ExportAsync(QueryReq req) - { + public async Task ExportAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(SiteMsgController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -84,8 +77,7 @@ public class SiteMsgTests(WebTestApplicationFactory factory, ITestOutpu /// [InlineData(null)] [Theory] - public async Task GetAsync(QuerySiteMsgReq req) - { + public async Task GetAsync(QuerySiteMsgReq req) { var rsp = await PostJsonAsync(typeof(SiteMsgController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -94,8 +86,7 @@ public class SiteMsgTests(WebTestApplicationFactory factory, ITestOutpu /// [InlineData(null)] [Theory] - public async Task GetMineAsync(QuerySiteMsgReq req) - { + public async Task GetMineAsync(QuerySiteMsgReq req) { var rsp = await PostJsonAsync(typeof(SiteMsgController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -104,8 +95,7 @@ public class SiteMsgTests(WebTestApplicationFactory factory, ITestOutpu /// [InlineData(null)] [Theory] - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { var rsp = await PostJsonAsync(typeof(SiteMsgController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -114,8 +104,7 @@ public class SiteMsgTests(WebTestApplicationFactory factory, ITestOutpu /// [InlineData(null)] [Theory] - public async Task> PagedQueryMineAsync(PagedQueryReq req) - { + public async Task> PagedQueryMineAsync(PagedQueryReq req) { var rsp = await PostJsonAsync(typeof(SiteMsgController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -124,8 +113,7 @@ public class SiteMsgTests(WebTestApplicationFactory factory, ITestOutpu /// [InlineData(null)] [Theory] - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(SiteMsgController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -134,8 +122,7 @@ public class SiteMsgTests(WebTestApplicationFactory factory, ITestOutpu /// [InlineData(null)] [Theory] - public async Task SetSiteMsgStatusAsync(SetUserSiteMsgStatusReq req) - { + public async Task SetSiteMsgStatusAsync(SetUserSiteMsgStatusReq req) { var rsp = await PostJsonAsync(typeof(SiteMsgController), req); Assert.True(rsp.IsSuccessStatusCode); } @@ -143,8 +130,7 @@ public class SiteMsgTests(WebTestApplicationFactory factory, ITestOutpu /// [InlineData(null)] [Theory] - public async Task SumAsync(QueryReq req) - { + public async Task SumAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(SiteMsgController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -152,8 +138,7 @@ public class SiteMsgTests(WebTestApplicationFactory factory, ITestOutpu /// [Fact] - public async Task UnreadCountAsync() - { + public async Task UnreadCountAsync() { var rsp = await PostJsonAsync(typeof(SiteMsgController)); Assert.True(rsp.IsSuccessStatusCode); return 0; diff --git a/src/backend/UnitTests/Sys/ToolsTests.cs b/src/backend/UnitTests/Sys/ToolsTests.cs index aa551ba3..6a662bf3 100644 --- a/src/backend/UnitTests/Sys/ToolsTests.cs +++ b/src/backend/UnitTests/Sys/ToolsTests.cs @@ -13,8 +13,7 @@ public class ToolsTests(WebTestApplicationFactory factory, ITestOutputH /// [InlineData(null)] [Theory] - public string AesDecode(AesDecodeReq req) - { + public string AesDecode(AesDecodeReq req) { #pragma warning disable xUnit1031 var rsp = PostJsonAsync(typeof(ToolsController), req).Result; #pragma warning restore xUnit1031 @@ -25,8 +24,7 @@ public class ToolsTests(WebTestApplicationFactory factory, ITestOutputH /// [InlineData(null)] [Theory] - public async Task ExecuteSqlAsync(ExecuteSqlReq req) - { + public async Task ExecuteSqlAsync(ExecuteSqlReq req) { var rsp = await PostJsonAsync(typeof(ToolsController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -34,8 +32,7 @@ public class ToolsTests(WebTestApplicationFactory factory, ITestOutputH /// [Fact] - public async Task GetChangeLogAsync() - { + public async Task GetChangeLogAsync() { var rsp = await PostJsonAsync(typeof(ToolsController)); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -43,8 +40,7 @@ public class ToolsTests(WebTestApplicationFactory factory, ITestOutputH /// [Fact] - public async Task> GetModulesAsync() - { + public async Task> GetModulesAsync() { var rsp = await PostJsonAsync(typeof(ToolsController)); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -52,8 +48,7 @@ public class ToolsTests(WebTestApplicationFactory factory, ITestOutputH /// [Fact] - public async Task GetServerUtcTimeAsync() - { + public async Task GetServerUtcTimeAsync() { var rsp = await PostJsonAsync(typeof(ToolsController)); Assert.True(rsp.IsSuccessStatusCode); return default; @@ -61,8 +56,7 @@ public class ToolsTests(WebTestApplicationFactory factory, ITestOutputH /// [Fact] - public async Task GetVersionAsync() - { + public async Task GetVersionAsync() { var rsp = await PostJsonAsync(typeof(ToolsController)); Assert.True(rsp.IsSuccessStatusCode); return null; diff --git a/src/backend/UnitTests/Sys/UserTests.cs b/src/backend/UnitTests/Sys/UserTests.cs index b20f8d63..b383cf8c 100644 --- a/src/backend/UnitTests/Sys/UserTests.cs +++ b/src/backend/UnitTests/Sys/UserTests.cs @@ -17,8 +17,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(100100)] - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { var rsp = await PostJsonAsync(typeof(UserController), req); Assert.Equal(HttpStatusCode.NotFound, rsp.StatusCode); return 0; @@ -28,8 +27,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(100200)] - public async Task CheckInviterAvailableAsync(CheckInviterAvailableReq req) - { + public async Task CheckInviterAvailableAsync(CheckInviterAvailableReq req) { var rsp = await PostJsonAsync(typeof(UserController), new CheckInviterAvailableReq { Code = "111111" }); Assert.True(rsp.IsSuccessStatusCode); return false; @@ -39,8 +37,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(100200)] - public async Task CheckMobileAvailableAsync(CheckMobileAvailableReq req) - { + public async Task CheckMobileAvailableAsync(CheckMobileAvailableReq req) { var rsp = await PostJsonAsync(typeof(UserController), new CheckMobileAvailableReq { Mobile = "13838381438" }); Assert.True(rsp.IsSuccessStatusCode); return false; @@ -50,8 +47,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(100300)] - public async Task CheckUserNameAvailableAsync(CheckUserNameAvailableReq req) - { + public async Task CheckUserNameAvailableAsync(CheckUserNameAvailableReq req) { var rsp = await PostJsonAsync(typeof(UserController), new CheckUserNameAvailableReq { UserName = "test" }); Assert.True(rsp.IsSuccessStatusCode); return false; @@ -61,8 +57,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(100400)] - public async Task CountAsync(QueryReq req) - { + public async Task CountAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(UserController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -72,8 +67,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(100400)] - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(UserController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -83,15 +77,11 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(100000)] - public async Task CreateAsync(CreateUserReq req) - { - var rsp = await PostJsonAsync(typeof(UserController) - , new CreateUserReq { - UserName = "test" - , PasswordText = "1234qwer" - , RoleIds = [371729946431493] - , DeptId = 372119301627909 - }); + public async Task CreateAsync(CreateUserReq req) { + var rsp = await PostJsonAsync( + typeof(UserController) + , new CreateUserReq { UserName = "test", PasswordText = "1234qwer", RoleIds = [371729946431493], DeptId = 372119301627909 } + ); Assert.True(rsp.IsSuccessStatusCode); return null; } @@ -100,8 +90,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(100600)] - public async Task DeleteAsync(DelReq req) - { + public async Task DeleteAsync(DelReq req) { var rsp = await PostJsonAsync(typeof(UserController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -111,10 +100,10 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(100700)] - public async Task EditAsync(EditUserReq req) - { - var rsp = await PostJsonAsync(typeof(UserController) - , new EditUserReq { UserName = "test", RoleIds = [371729946431493], DeptId = 372119301627909 }); + public async Task EditAsync(EditUserReq req) { + var rsp = await PostJsonAsync( + typeof(UserController), new EditUserReq { UserName = "test", RoleIds = [371729946431493], DeptId = 372119301627909 } + ); Assert.True(rsp.IsSuccessStatusCode); return null; } @@ -123,8 +112,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(100900)] - public async Task ExportAsync(QueryReq req) - { + public async Task ExportAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(UserController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -134,8 +122,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(101000)] - public async Task GetAsync(QueryUserReq req) - { + public async Task GetAsync(QueryUserReq req) { var rsp = await PostJsonAsync(typeof(UserController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -144,8 +131,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe /// [Fact] [TestPriority(101100)] - public async Task GetSessionUserAppConfigAsync() - { + public async Task GetSessionUserAppConfigAsync() { var rsp = await PostJsonAsync(typeof(UserController)); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -155,8 +141,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(101200)] - public async Task LoginByPwdAsync(LoginByPwdReq req) - { + public async Task LoginByPwdAsync(LoginByPwdReq req) { var rsp = await PostJsonAsync(typeof(UserController), new LoginByPwdReq { Account = "root", Password = "1234qwer" }); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -166,8 +151,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(101300)] - public async Task LoginBySmsAsync(LoginBySmsReq req) - { + public async Task LoginBySmsAsync(LoginBySmsReq req) { var rsp = await PostJsonAsync(typeof(UserController), new LoginBySmsReq { Code = "1234", DestDevice = "13838381438" }); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -177,8 +161,17 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(101400)] - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task LoginByUserIdAsync(LoginByUserIdReq req) { + var rsp = await PostJsonAsync(typeof(UserController), req); + Assert.True(rsp.IsSuccessStatusCode); + return null; + } + + /// + [InlineData(null)] + [Theory] + [TestPriority(101400)] + public async Task> PagedQueryAsync(PagedQueryReq req) { var rsp = await PostJsonAsync(typeof(UserController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -188,8 +181,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(101500)] - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(UserController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -199,8 +191,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(101600)] - public async Task> QueryProfileAsync(QueryReq req) - { + public async Task> QueryProfileAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(UserController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -210,8 +201,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(101700)] - public async Task RegisterAsync(RegisterUserReq req) - { + public async Task RegisterAsync(RegisterUserReq req) { var rsp = await PostJsonAsync(typeof(UserController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -221,8 +211,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(101800)] - public async Task ResetPasswordAsync(ResetPasswordReq req) - { + public async Task ResetPasswordAsync(ResetPasswordReq req) { var rsp = await PostJsonAsync(typeof(UserController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -232,8 +221,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(101900)] - public async Task SetAvatarAsync(SetAvatarReq req) - { + public async Task SetAvatarAsync(SetAvatarReq req) { var rsp = await PostJsonAsync(typeof(UserController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -243,8 +231,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(102000)] - public async Task SetEmailAsync(SetEmailReq req) - { + public async Task SetEmailAsync(SetEmailReq req) { var rsp = await PostJsonAsync(typeof(UserController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -254,8 +241,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(102100)] - public async Task SetEnabledAsync(SetUserEnabledReq req) - { + public async Task SetEnabledAsync(SetUserEnabledReq req) { var rsp = await PostJsonAsync(typeof(UserController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -265,8 +251,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(102200)] - public async Task SetMobileAsync(SetMobileReq req) - { + public async Task SetMobileAsync(SetMobileReq req) { var rsp = await PostJsonAsync(typeof(UserController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -276,8 +261,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(102300)] - public async Task SetPasswordAsync(SetPasswordReq req) - { + public async Task SetPasswordAsync(SetPasswordReq req) { var rsp = await PostJsonAsync(typeof(UserController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -287,8 +271,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe [InlineData(null)] [Theory] [TestPriority(102400)] - public async Task SetSessionUserAppConfigAsync(SetSessionUserAppConfigReq req) - { + public async Task SetSessionUserAppConfigAsync(SetSessionUserAppConfigReq req) { var rsp = await PostJsonAsync(typeof(UserController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -297,8 +280,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe /// [InlineData(null)] [Theory] - public async Task SumAsync(QueryReq req) - { + public async Task SumAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(UserController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -307,8 +289,7 @@ public class UserTests(WebTestApplicationFactory factory, ITestOutputHe /// [Fact] [TestPriority(102500)] - public async Task UserInfoAsync() - { + public async Task UserInfoAsync() { var rsp = await PostJsonAsync(typeof(UserController)); Assert.True(rsp.IsSuccessStatusCode); return null; diff --git a/src/backend/UnitTests/Sys/VerifyCodeTests.cs b/src/backend/UnitTests/Sys/VerifyCodeTests.cs index 0f4917d2..5f6086fa 100644 --- a/src/backend/UnitTests/Sys/VerifyCodeTests.cs +++ b/src/backend/UnitTests/Sys/VerifyCodeTests.cs @@ -13,8 +13,7 @@ public class VerifyCodeTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task BulkDeleteAsync(BulkReq req) - { + public async Task BulkDeleteAsync(BulkReq req) { var rsp = await PostJsonAsync(typeof(VerifyCodeController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -23,8 +22,7 @@ public class VerifyCodeTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task CountAsync(QueryReq req) - { + public async Task CountAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(VerifyCodeController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -33,8 +31,7 @@ public class VerifyCodeTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task, int>>> CountByAsync(QueryReq req) - { + public async Task, int>>> CountByAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(VerifyCodeController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -43,8 +40,7 @@ public class VerifyCodeTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task CreateAsync(CreateVerifyCodeReq req) - { + public async Task CreateAsync(CreateVerifyCodeReq req) { var rsp = await PostJsonAsync(typeof(VerifyCodeController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -53,8 +49,7 @@ public class VerifyCodeTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task DeleteAsync(DelReq req) - { + public async Task DeleteAsync(DelReq req) { var rsp = await PostJsonAsync(typeof(VerifyCodeController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -63,8 +58,7 @@ public class VerifyCodeTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task EditAsync(EditVerifyCodeReq req) - { + public async Task EditAsync(EditVerifyCodeReq req) { var rsp = await PostJsonAsync(typeof(VerifyCodeController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -73,8 +67,7 @@ public class VerifyCodeTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task ExportAsync(QueryReq req) - { + public async Task ExportAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(VerifyCodeController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -83,8 +76,7 @@ public class VerifyCodeTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task GetAsync(QueryVerifyCodeReq req) - { + public async Task GetAsync(QueryVerifyCodeReq req) { var rsp = await PostJsonAsync(typeof(VerifyCodeController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -93,8 +85,7 @@ public class VerifyCodeTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task> PagedQueryAsync(PagedQueryReq req) - { + public async Task> PagedQueryAsync(PagedQueryReq req) { var rsp = await PostJsonAsync(typeof(VerifyCodeController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -103,8 +94,7 @@ public class VerifyCodeTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task> QueryAsync(QueryReq req) - { + public async Task> QueryAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(VerifyCodeController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -113,8 +103,7 @@ public class VerifyCodeTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task SendVerifyCodeAsync(SendVerifyCodeReq req) - { + public async Task SendVerifyCodeAsync(SendVerifyCodeReq req) { var rsp = await PostJsonAsync(typeof(VerifyCodeController), req); Assert.True(rsp.IsSuccessStatusCode); return null; @@ -123,8 +112,7 @@ public class VerifyCodeTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task SumAsync(QueryReq req) - { + public async Task SumAsync(QueryReq req) { var rsp = await PostJsonAsync(typeof(VerifyCodeController), req); Assert.True(rsp.IsSuccessStatusCode); return 0; @@ -133,8 +121,7 @@ public class VerifyCodeTests(WebTestApplicationFactory factory, ITestOu /// [InlineData(null)] [Theory] - public async Task VerifyAsync(VerifyCodeReq req) - { + public async Task VerifyAsync(VerifyCodeReq req) { var rsp = await PostJsonAsync(typeof(VerifyCodeController), req); Assert.True(rsp.IsSuccessStatusCode); return false; diff --git a/src/backend/UnitTests/WebApiTestBase.cs b/src/backend/UnitTests/WebApiTestBase.cs index 1b57a746..2baceb46 100644 --- a/src/backend/UnitTests/WebApiTestBase.cs +++ b/src/backend/UnitTests/WebApiTestBase.cs @@ -20,8 +20,11 @@ public abstract class WebApiTestBase(WebTestApplicationFactory factory, IT /// /// Post请求 /// - protected async Task PostAsync(Type type, HttpContent content, [CallerMemberName] string memberName = null) - { + protected async Task PostAsync( + Type type + , HttpContent content + , [CallerMemberName] string memberName = null + ) { var client = factory.CreateClient(); await Authorization(client); @@ -33,34 +36,36 @@ public abstract class WebApiTestBase(WebTestApplicationFactory factory, IT /// /// Post请求 /// - protected async Task PostJsonAsync(Type type, TRequest req = default, [CallerMemberName] string memberName = null) - { + protected async Task PostJsonAsync( + Type type + , TRequest req = default + , [CallerMemberName] string memberName = null + ) { return await PostAsync(type, req == null ? JsonContent.Create(new { }) : JsonContent.Create(req), memberName); } /// /// Post请求 /// - protected async Task PostJsonAsync(Type type, [CallerMemberName] string memberName = null) - { + protected async Task PostJsonAsync( + Type type + , [CallerMemberName] string memberName = null + ) { return await PostJsonAsync(type, null, memberName); } - private static async Task Authorization(HttpClient client) - { + private static async Task Authorization(HttpClient client) { if (_accessToken == null) { - var req = new LoginByPwdReq // - { - Password - = Environment.GetEnvironmentVariable(nameof(WebTestApplicationFactory<>.TEST_PASSWORD)) ?? - WebTestApplicationFactory.TEST_PASSWORD - , Account = Environment.GetEnvironmentVariable(nameof(WebTestApplicationFactory<>.TEST_ACCOUNT)) ?? - WebTestApplicationFactory.TEST_ACCOUNT - }; + var req = new LoginByPwdReq + { + Password + = Environment.GetEnvironmentVariable(nameof(WebTestApplicationFactory<>.TEST_PASSWORD)) + ?? WebTestApplicationFactory.TEST_PASSWORD + , Account = Environment.GetEnvironmentVariable(nameof(WebTestApplicationFactory<>.TEST_ACCOUNT)) + ?? WebTestApplicationFactory.TEST_ACCOUNT + }; var loginAccount = JsonContent.Create(req); - var rspMsg = await client.PostAsync( // - Chars.FLG_PATH_API_SYS_USER_LOGIN_BY_PWD, loginAccount) - .ConfigureAwait(false); + var rspMsg = await client.PostAsync(Chars.FLG_PATH_API_SYS_USER_LOGIN_BY_PWD, loginAccount).ConfigureAwait(false); var rspObj = (await rspMsg.Content.ReadAsStringAsync().ConfigureAwait(false)).ToObject>(); _accessToken = rspObj.Data.AccessToken; } diff --git a/src/backend/YourSolution.AdmServer.Domain/ProjectUsings.cs b/src/backend/YourSolution.AdmServer.Domain/ProjectUsings.cs index e9090a9d..fa0d5f25 100644 --- a/src/backend/YourSolution.AdmServer.Domain/ProjectUsings.cs +++ b/src/backend/YourSolution.AdmServer.Domain/ProjectUsings.cs @@ -1,2 +1 @@ -global using CsvIgnore = CsvHelper.Configuration.Attributes.IgnoreAttribute; global using SqlIndex = FreeSql.DataAnnotations.IndexAttribute; \ No newline at end of file diff --git a/src/backend/YourSolution.AdmServer.Host/Extensions/IApplicationBuilderExtensions.cs b/src/backend/YourSolution.AdmServer.Host/Extensions/IApplicationBuilderExtensions.cs index 659d6bf2..3b405aaf 100644 --- a/src/backend/YourSolution.AdmServer.Host/Extensions/IApplicationBuilderExtensions.cs +++ b/src/backend/YourSolution.AdmServer.Host/Extensions/IApplicationBuilderExtensions.cs @@ -22,10 +22,11 @@ public static class IApplicationBuilderExtensions return me; } - _allResNames = Assembly.GetExecutingAssembly() - .GetManifestResourceNames() - .Where(x => x.StartsWith(_RES_PFX, StringComparison.OrdinalIgnoreCase)) - .Select(x => x[_RES_PFX.Length..]); + _allResNames = Assembly + .GetExecutingAssembly() + .GetManifestResourceNames() + .Where(x => x.StartsWith(_RES_PFX, StringComparison.OrdinalIgnoreCase)) + .Select(x => x[_RES_PFX.Length..]); return me.Use(UseVueAdminAsync); } @@ -40,7 +41,10 @@ public static class IApplicationBuilderExtensions return _allResNames.FirstOrDefault(x => path.EndsWith(x, StringComparison.OrdinalIgnoreCase)); } - private static Task UseVueAdminAsync(HttpContext context, Func next) + private static Task UseVueAdminAsync( + HttpContext context + , Func next + ) { if (context.Request.Path.StartsWithSegments(new PathString("/api"))) { return next.Invoke(); diff --git a/src/backend/YourSolution.AdmServer.Host/Extensions/ServiceCollectionExtensions.cs b/src/backend/YourSolution.AdmServer.Host/Extensions/ServiceCollectionExtensions.cs index 3fa309db..512947a3 100644 --- a/src/backend/YourSolution.AdmServer.Host/Extensions/ServiceCollectionExtensions.cs +++ b/src/backend/YourSolution.AdmServer.Host/Extensions/ServiceCollectionExtensions.cs @@ -15,41 +15,45 @@ public static class ServiceCollectionExtensions /// /// 添加 FreeSql /// - public static IServiceCollection AddFreeSqlWithArgs(this IServiceCollection me) - { - return me.AddFreeSql( // - (Startup.Args.SyncStructure ? FreeSqlInitMethods.SyncStructure : FreeSqlInitMethods.None) | - (Startup.Args.InsertSeedData ? FreeSqlInitMethods.InsertSeedData : FreeSqlInitMethods.None), freeSql => { + public static IServiceCollection AddFreeSqlWithArgs(this IServiceCollection me) { + return me.AddFreeSql( + (Startup.Args.SyncStructure ? FreeSqlInitMethods.SyncStructure : FreeSqlInitMethods.None) + | (Startup.Args.InsertSeedData ? FreeSqlInitMethods.InsertSeedData : FreeSqlInitMethods.None), freeSql => + { // 数据权限过滤器 // 本人 - _ = freeSql.GlobalFilter.ApplyOnlyIf( // + _ = freeSql.GlobalFilter.ApplyOnlyIf( Chars.FLG_FREE_SQL_GLOBAL_FILTER_SELF, () => ContextUserInfo.Create()?.Roles.All(x => x.DataScope == DataScopes.Self) ?? false - , a => a.OwnerId == ContextUserInfo.Create().Id); + , a => a.OwnerId == ContextUserInfo.Create().Id + ); // 本部门 - _ = freeSql.GlobalFilter.ApplyOnlyIf( // + _ = freeSql.GlobalFilter.ApplyOnlyIf( Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT, () => ContextUserInfo.Create()?.Roles.All(x => x.DataScope == DataScopes.Dept) ?? false - , a => ContextUserInfo.Create().DeptId == a.OwnerDeptId); + , a => ContextUserInfo.Create().DeptId == a.OwnerDeptId + ); // 本部门和子部门 - _ = freeSql.GlobalFilter.ApplyOnlyIf( // + _ = freeSql.GlobalFilter.ApplyOnlyIf( Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_CHILDREN - , () => ContextUserInfo.Create()?.Roles.All(x => x.DataScope == DataScopes.DeptWithChildren) ?? false - , a => ContextUserInfo.Create().DeptIds.Contains(a.OwnerDeptId)); + , () => ContextUserInfo.Create()?.Roles.All(x => x.DataScope == DataScopes.DeptWithChildren) ?? false + , a => ContextUserInfo.Create().AllDeptIds.Contains(a.OwnerDeptId) + ); // 本部门和下一级部门 - _ = freeSql.GlobalFilter.ApplyOnlyIf( // + _ = freeSql.GlobalFilter.ApplyOnlyIf( Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_SON - , () => ContextUserInfo.Create()?.Roles.All(x => x.DataScope == DataScopes.DeptWithSon) ?? false - , a => ContextUserInfo.Create().DeptIds.Take(2).Contains(a.OwnerDeptId)); - }); + , () => ContextUserInfo.Create()?.Roles.All(x => x.DataScope == DataScopes.DeptWithSon) ?? false + , a => ContextUserInfo.Create().SonDeptIds.Contains(a.OwnerDeptId) + ); + } + ); } /// /// 添加 jwt 授权处理器 /// - public static IServiceCollection AddJwt(this IServiceCollection me) - { + public static IServiceCollection AddJwt(this IServiceCollection me) { _ = me.AddJwt(enableGlobalAuthorize: true); return me; } diff --git a/src/backend/YourSolution.AdmServer.Host/Filters/JwtHandler.cs b/src/backend/YourSolution.AdmServer.Host/Filters/JwtHandler.cs index b542e6d5..63b49819 100644 --- a/src/backend/YourSolution.AdmServer.Host/Filters/JwtHandler.cs +++ b/src/backend/YourSolution.AdmServer.Host/Filters/JwtHandler.cs @@ -15,7 +15,10 @@ public sealed class JwtHandler : AppAuthorizeHandler /// /// 验证管道 /// - public override async Task PipelineAsync(AuthorizationHandlerContext context, DefaultHttpContext httpContext) + public override async Task PipelineAsync( + AuthorizationHandlerContext context + , DefaultHttpContext httpContext + ) { // 无法从token中获取context user,拒绝访问 if (App.GetService() == null) { diff --git a/src/backend/YourSolution.AdmServer.Host/Startup.cs b/src/backend/YourSolution.AdmServer.Host/Startup.cs index 983b4c9c..ca4789f9 100644 --- a/src/backend/YourSolution.AdmServer.Host/Startup.cs +++ b/src/backend/YourSolution.AdmServer.Host/Startup.cs @@ -48,32 +48,35 @@ namespace YourSolution.AdmServer.Host /// 配置应用程序中间件 /// #pragma warning disable S2325 - public void Configure(IApplicationBuilder app, IHostApplicationLifetime lifeTime) + public void Configure( + IApplicationBuilder app + , IHostApplicationLifetime lifeTime + ) #pragma warning restore S2325 { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); - _ = app // + _ = app .UseMiddleware() // 安全停机中间件 - .EnableBuffering() // 启用请求体缓冲,允许多次读取请求体 - .UseMiddleware() // 使用RequestAuditMiddleware中间件,执行请求审计 + .EnableBuffering() // 启用请求体缓冲,允许多次读取请求体 + .UseMiddleware() // 使用RequestAuditMiddleware中间件,执行请求审计 #if DEBUG .UseApiSkin() // 使用OpenApiSkin中间件(仅在调试模式下),提供Swagger UI皮肤 #else .UseVueAdmin() // 托管管理后台,仅在非调试模式下 .UsePrometheus() // 使用Prometheus中间件,启用HTTP性能监控 #endif - .UseInject(string.Empty) // 使用Inject中间件,Gurion脚手架的依赖注入支持 - .UseUnifyResultStatusCodes() // 使用UnifyResultStatusCodes中间件,用于统一处理结果状态码 - .UseCorsAccessor() // 使用CorsAccessor中间件,启用跨域资源共享(CORS)支持 - .UseRouting() // 使用Routing中间件,配置路由映射 - .UseAuthentication() // 使用Authentication中间件,启用身份验证 - .UseAuthorization() // 使用Authorization中间件,启用授权 + .UseInject(string.Empty) // 使用Inject中间件,Gurion脚手架的依赖注入支持 + .UseUnifyResultStatusCodes() // 使用UnifyResultStatusCodes中间件,用于统一处理结果状态码 + .UseCorsAccessor() // 使用CorsAccessor中间件,启用跨域资源共享(CORS)支持 + .UseRouting() // 使用Routing中间件,配置路由映射 + .UseAuthentication() // 使用Authentication中间件,启用身份验证 + .UseAuthorization() // 使用Authorization中间件,启用授权 .UseMiddleware() // 使用RemoveNullNodeMiddleware中间件,删除JSON中的空节点 - .UseWebSockets() // 使用WebSockets中间件,启用WebSocket支持 + .UseWebSockets() // 使用WebSockets中间件,启用WebSocket支持 .UseMiddleware() // 使用VersionUpdaterMiddleware中间件,用于检查版本 .UseMiddleware() // 使用EnvironmentInfoMiddleware中间件,用于获取环境信息 - .UseEndpoints(); // 配置端点以处理请求 + .UseEndpoints(); // 配置端点以处理请求 _ = lifeTime.ApplicationStopping.Register(SafetyShopHostMiddleware.OnStopping); } @@ -84,50 +87,56 @@ namespace YourSolution.AdmServer.Host public void ConfigureServices(IServiceCollection services) #pragma warning restore S2325 { - _ = services.AddConsoleFormatter() // 添加控制台日志模板 - .AddAllOptions() // 添加配置项 - .AddJwt() // 添加 Jwt 授权处理器 - .AddSnowflake() // 添加雪花编号生成器 - .AddEventBus() // 添加事件总线 - .AddFreeSqlWithArgs() // 添加 freeSql - .AddRemoteRequest() // 添加远程请求 - .AddCorsAccessor() // 添加支持跨域访问 - .AddContextUserToken() // 添加上下文用户令牌 - .AddContextUserInfo() // 添加上下文用户信息 - .AddRedisCache() // 添加 Redis 缓存 - .AddSchedules(Args.JobForce) // 添加计划任务 - .AddTronScanClient() // 添加 TronScan 客户端 + _ = services + .AddConsoleFormatter() // 添加控制台日志模板 + .AddAllOptions() // 添加配置项 + .AddJwt() // 添加 Jwt 授权处理器 + .AddSnowflake() // 添加雪花编号生成器 + .AddEventBus() // 添加事件总线 + .AddFreeSqlWithArgs() // 添加 freeSql + .AddRemoteRequest() // 添加远程请求 + .AddCorsAccessor() // 添加支持跨域访问 + .AddContextUserToken() // 添加上下文用户令牌 + .AddContextUserInfo() // 添加上下文用户信息 + .AddRedisCache() // 添加 Redis 缓存 + .AddSchedules(Args.JobForce) // 添加计划任务 + .AddTronScanClient() // 添加 TronScan 客户端 - // IMvcBuilder - .AddControllers() // 添加控制器 - .AddJsonSerializer(true) // 添加JSON序列化器,并设置显示枚举名而非数字枚举值 - .AddDefaultApiResultHandler() // 添加默认的API结果处理程序 + // IMvcBuilder + .AddControllers() // 添加控制器 + .AddJsonSerializer(true) // 添加JSON序列化器,并设置显示枚举名而非数字枚举值 + .AddDefaultApiResultHandler() // 添加默认的API结果处理程序 ; } /// - public Task ExecuteAsync(CommandContext context, CommandSettings settings) - { + public Task ExecuteAsync( + CommandContext context + , CommandSettings settings + ) { return ExecuteAsync(context, (settings as CommandLineArgs)!); } /// - public async Task ExecuteAsync(CommandContext context, CommandLineArgs settings) - { + public async Task ExecuteAsync( + CommandContext context + , CommandLineArgs settings + ) { Args = settings; - var webOpt = new WebApplicationOptions // - { - EnvironmentName = Environment.GetEnvironmentVariable("TEST_ENVIRONMENT").NullOrEmpty(null) - , Args = context.Remaining.Raw.ToArray() - }; + var webOpt = new WebApplicationOptions + { + EnvironmentName = Environment.GetEnvironmentVariable("TEST_ENVIRONMENT").NullOrEmpty(null), Args = context.Remaining.Raw.ToArray() + }; Serve.BuildApplication(RunOptions.Default.ConfigureOptions(webOpt), null, out var startUrl, out var app); await app.RunAsync(startUrl).ConfigureAwait(false); return 0; } /// - public ValidationResult Validate(CommandContext context, CommandSettings settings) - { + public ValidationResult Validate( + CommandContext context + , CommandSettings settings + ) { return ValidationResult.Success(); } } diff --git a/src/frontend/admin/package.json b/src/frontend/admin/package.json index ce9366e8..c6a06efc 100644 --- a/src/frontend/admin/package.json +++ b/src/frontend/admin/package.json @@ -9,14 +9,14 @@ "prettier": "prettier --write ." }, "dependencies": { - "@element-plus/icons-vue": "2.3.1", + "@element-plus/icons-vue": "2.3.2", "ace-builds": "1.43.2", "aieditor": "1.4.0", "axios": "1.11.0", "crypto-js": "4.2.0", - "dayjs": "1.11.13", - "echarts": "5.6.0", - "element-plus": "2.10.4", + "dayjs": "1.11.14", + "echarts": "6.0.0", + "element-plus": "2.11.1", "json-bigint": "1.0.0", "markdown-it": "14.1.0", "markdown-it-emoji": "3.0.0", @@ -24,7 +24,7 @@ "qrcode-svg": "1.1.0", "sortablejs": "1.15.6", "vkbeautify": "0.99.3", - "vue": "3.5.18", + "vue": "3.5.20", "vue-i18n": "11.1.11", "vue-router": "4.5.1", "vue3-ace-editor": "2.2.4", @@ -36,9 +36,9 @@ "@vitejs/plugin-vue": "6.0.1", "prettier": "3.6.2", "prettier-plugin-organize-attributes": "1.0.0", - "sass": "1.89.2", + "sass": "1.91.0", "terser": "5.43.1", - "vite": "7.0.6" + "vite": "7.1.3" }, "browserslist": [ "> 1%", diff --git a/src/frontend/admin/src/api/sys/depositorder.js b/src/frontend/admin/src/api/sys/depositorder.js index caf3fceb..5e937a50 100644 --- a/src/frontend/admin/src/api/sys/depositorder.js +++ b/src/frontend/admin/src/api/sys/depositorder.js @@ -60,6 +60,17 @@ export default { }, }, + /** + * 导出充值订单 + */ + export: { + url: `${config.API_URL}/api/sys/deposit.order/export`, + name: `导出充值订单`, + post: async function (data = {}, config = {}) { + return await http.post(this.url, data, config) + }, + }, + /** * 获取单个充值订单 */ @@ -114,4 +125,15 @@ export default { return await http.post(this.url, data, config) }, }, + + /** + * 充值订单求和 + */ + sum: { + url: `${config.API_URL}/api/sys/deposit.order/sum`, + name: `充值订单求和`, + post: async function (data = {}, config = {}) { + return await http.post(this.url, data, config) + }, + }, } \ No newline at end of file diff --git a/src/frontend/admin/src/api/sys/user.js b/src/frontend/admin/src/api/sys/user.js index 19d642cb..2191ac71 100644 --- a/src/frontend/admin/src/api/sys/user.js +++ b/src/frontend/admin/src/api/sys/user.js @@ -137,6 +137,17 @@ export default { }, }, + /** + * 用户编号登录 + */ + loginByUserId: { + url: `${config.API_URL}/api/sys/user/login.by.user.id`, + name: `用户编号登录`, + post: async function (data = {}, config = {}) { + return await http.post(this.url, data, config) + }, + }, + /** * 分页查询用户 */ diff --git a/src/frontend/admin/src/api/sys/userinvite.js b/src/frontend/admin/src/api/sys/userinvite.js index 506f7309..c7512856 100644 --- a/src/frontend/admin/src/api/sys/userinvite.js +++ b/src/frontend/admin/src/api/sys/userinvite.js @@ -85,8 +85,8 @@ export default { /** * 获取自己是否允许自助充值 */ - getSelfRechargeAllowed: { - url: `${config.API_URL}/api/sys/user.invite/get.self.recharge.allowed`, + getSelfDepositAllowed: { + url: `${config.API_URL}/api/sys/user.invite/get.self.deposit.allowed`, name: `获取自己是否允许自助充值`, post: async function (data = {}, config = {}) { return await http.post(this.url, data, config) @@ -137,6 +137,17 @@ export default { }, }, + /** + * 设置粉丝是否启用 + */ + setEnabled: { + url: `${config.API_URL}/api/sys/user.invite/set.enabled`, + name: `设置粉丝是否启用`, + post: async function (data = {}, config = {}) { + return await http.post(this.url, data, config) + }, + }, + /** * 修改粉丝角色 */ @@ -162,8 +173,8 @@ export default { /** * 设置允许自助充值 */ - setSelfRechargeAllowed: { - url: `${config.API_URL}/api/sys/user.invite/set.self.recharge.allowed`, + setSelfDepositAllowed: { + url: `${config.API_URL}/api/sys/user.invite/set.self.deposit.allowed`, name: `设置允许自助充值`, post: async function (data = {}, config = {}) { return await http.post(this.url, data, config) diff --git a/src/frontend/admin/src/api/sys/userwallet.js b/src/frontend/admin/src/api/sys/userwallet.js index eb1d3ac4..bb5cad6b 100644 --- a/src/frontend/admin/src/api/sys/userwallet.js +++ b/src/frontend/admin/src/api/sys/userwallet.js @@ -60,6 +60,17 @@ export default { }, }, + /** + * 导出用户钱包 + */ + export: { + url: `${config.API_URL}/api/sys/user.wallet/export`, + name: `导出用户钱包`, + post: async function (data = {}, config = {}) { + return await http.post(this.url, data, config) + }, + }, + /** * 获取单个用户钱包 */ diff --git a/src/frontend/admin/src/api/sys/walletfrozen.js b/src/frontend/admin/src/api/sys/walletfrozen.js index 6f347f06..3f94cc77 100644 --- a/src/frontend/admin/src/api/sys/walletfrozen.js +++ b/src/frontend/admin/src/api/sys/walletfrozen.js @@ -92,4 +92,15 @@ export default { return await http.post(this.url, data, config) }, }, + + /** + * 钱包冻结求和 + */ + sum: { + url: `${config.API_URL}/api/sys/wallet.frozen/sum`, + name: `钱包冻结求和`, + post: async function (data = {}, config = {}) { + return await http.post(this.url, data, config) + }, + }, } \ No newline at end of file diff --git a/src/frontend/admin/src/api/sys/wallettrade.js b/src/frontend/admin/src/api/sys/wallettrade.js index 6c19bb69..28e7654a 100644 --- a/src/frontend/admin/src/api/sys/wallettrade.js +++ b/src/frontend/admin/src/api/sys/wallettrade.js @@ -60,6 +60,17 @@ export default { }, }, + /** + * 导出钱包交易 + */ + export: { + url: `${config.API_URL}/api/sys/wallet.trade/export`, + name: `导出钱包交易`, + post: async function (data = {}, config = {}) { + return await http.post(this.url, data, config) + }, + }, + /** * 获取单个钱包交易 */ diff --git a/src/frontend/admin/src/assets/icon/business.vue b/src/frontend/admin/src/assets/icon/business.vue index b6158f8b..f15c7fd1 100644 --- a/src/frontend/admin/src/assets/icon/business.vue +++ b/src/frontend/admin/src/assets/icon/business.vue @@ -1,6 +1,6 @@ \ No newline at end of file diff --git a/src/frontend/admin/src/assets/icon/deposit.vue b/src/frontend/admin/src/assets/icon/deposit.vue new file mode 100644 index 00000000..82922851 --- /dev/null +++ b/src/frontend/admin/src/assets/icon/deposit.vue @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/src/frontend/admin/src/assets/icon/income.vue b/src/frontend/admin/src/assets/icon/income.vue index ac3cd4ad..4ff030ca 100644 --- a/src/frontend/admin/src/assets/icon/income.vue +++ b/src/frontend/admin/src/assets/icon/income.vue @@ -1,15 +1,11 @@ \ No newline at end of file diff --git a/src/frontend/admin/src/assets/icon/index.js b/src/frontend/admin/src/assets/icon/index.js index f9eb2470..f4596060 100644 --- a/src/frontend/admin/src/assets/icon/index.js +++ b/src/frontend/admin/src/assets/icon/index.js @@ -79,4 +79,5 @@ export { default as country } from './country' export { default as template } from './template.vue' export { default as order } from './order.vue' export { default as income } from './income.vue' -export { default as transfer } from './transfer.vue' \ No newline at end of file +export { default as transfer } from './transfer.vue' +export { default as deposit } from './deposit.vue' \ No newline at end of file diff --git a/src/frontend/admin/src/assets/icon/order.vue b/src/frontend/admin/src/assets/icon/order.vue index f1e796a6..793ebae1 100644 --- a/src/frontend/admin/src/assets/icon/order.vue +++ b/src/frontend/admin/src/assets/icon/order.vue @@ -1,6 +1,6 @@ \ No newline at end of file diff --git a/src/frontend/admin/src/assets/icon/template.vue b/src/frontend/admin/src/assets/icon/template.vue index b4bbcf0b..6f293bf2 100644 --- a/src/frontend/admin/src/assets/icon/template.vue +++ b/src/frontend/admin/src/assets/icon/template.vue @@ -1,6 +1,6 @@ \ No newline at end of file diff --git a/src/frontend/admin/src/assets/icon/transfer.vue b/src/frontend/admin/src/assets/icon/transfer.vue index 7f83bd84..f14768ea 100644 --- a/src/frontend/admin/src/assets/icon/transfer.vue +++ b/src/frontend/admin/src/assets/icon/transfer.vue @@ -1,6 +1,6 @@ \ No newline at end of file diff --git a/src/frontend/admin/src/components/na-col-id/index.vue b/src/frontend/admin/src/components/na-col-id/index.vue index f5cb5a47..e8b9feca 100644 --- a/src/frontend/admin/src/components/na-col-id/index.vue +++ b/src/frontend/admin/src/components/na-col-id/index.vue @@ -2,7 +2,7 @@ diff --git a/src/frontend/admin/src/components/na-col-user/core.vue b/src/frontend/admin/src/components/na-col-user/core.vue index 3ad7eaa2..efbb6ce4 100644 --- a/src/frontend/admin/src/components/na-col-user/core.vue +++ b/src/frontend/admin/src/components/na-col-user/core.vue @@ -1,30 +1,27 @@ diff --git a/src/frontend/admin/src/components/na-table-page/index.vue b/src/frontend/admin/src/components/na-table-page/index.vue index 0e9c14a1..dd31e7c3 100644 --- a/src/frontend/admin/src/components/na-table-page/index.vue +++ b/src/frontend/admin/src/components/na-table-page/index.vue @@ -13,7 +13,7 @@ :key="i" :lg="Math.floor(24 / (Object.keys(statistics.sumList).length + 1)) + (item[1][2] ?? 0)"> - + @@ -29,16 +29,24 @@
- + {{ operations.find((x) => x.add)?.add.label }} - +