22 KiB
后端基础封装长期上下文
1. 先看哪里
阅读本仓库后端时,建议固定按下面顺序建立上下文:
Admin.NET/Admin.NET.Web.Core/Startup.csAdmin.NET/Admin.NET.Web.Core/ProjectOptions.csAdmin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.csAdmin.NET/Admin.NET.Core/Utils/AdminResultProvider.cs- 具体能力目录:
Service/*、Extension/*、Utils/*、Option/*
说明:
Admin.NET.Web.Entry基本只是宿主入口,核心装配在Admin.NET.Web.CoreAdmin.NET.Application当前更偏配置与示例开放接口,不是主要基础设施承载层Admin.NET.Core是后端公共封装与基础设施中心
2. 后端常见封装模式
本项目后端整体是 Furion + SqlSugar + 动态 API + 统一返回 + 多租户 + 缓存/事件/调度 的组合式封装,常见模式如下:
Option/*.cs + Configuration/*.json- 用于强类型配置绑定
- 统一由
ProjectOptions.AddProjectOptions()注册
*Setup.cs- 用于框架能力接入与初始化
- 常见如缓存、SqlSugar、OAuth、日志、SignalR
Service/**/*Service.cs + IDynamicApiController- 默认服务暴露方式
- 业务服务与基础设施服务都大量采用动态 API 控制器模式
Utils/*- 放通用工具、统一返回、通用请求封装、导入导出、加解密
Extension/*- 放高频扩展方法,特别是 SqlSugar 查询、仓储增强、请求上下文增强
SqlSugar/*- 放数据库层二次封装
- 包括切库、分页、过滤器、事务、初始化、缓存桥接
Plugins/*- 外部系统集成通常独立在插件中
- 常见模式是
Option + Proxy + Dto + ResultProvider
3. 全局核心封装
这些类/文件是后端全局理解的关键入口:
Admin.NET/Admin.NET.Web.Core/Startup.cs- 后端总装配入口
- 串起缓存、Jwt、Signature 鉴权、SqlSugar、EventBus、Schedule、SignalR、OSS、统一返回
Admin.NET/Admin.NET.Web.Core/ProjectOptions.cs- 配置选项统一注册入口
Admin.NET/Admin.NET.Core/Utils/AdminResultProvider.cs- 全局统一返回封装
- 将成功、异常、校验失败、401/403 等全部收敛为
AdminResult<T>
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs- SqlSugar 全局装配入口
- 包含 AOP、软删过滤、租户过滤、数据权限过滤、差异日志、建库建表、视图、种子初始化
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarRepository.cs- 默认仓储入口
- 自动处理主库、日志库、租户库切换
Admin.NET/Admin.NET.Core/Service/Cache/SysCacheService.cs- 系统缓存统一访问入口
- 也是分布式锁、缓存包装、Hash 操作入口
Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs- 多租户核心服务
- 租户初始化、租户缓存、租户库连接创建都集中在这里
Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs- 登录、Token、RefreshToken、验证码、单点登录、黑名单等核心鉴权逻辑入口
Admin.NET/Admin.NET.Web.Core/Handlers/JwtHandler.cs- JWT 自动续期与权限校验核心处理器
4. 高频工具类位置
4.1 Utils
Admin.NET/Admin.NET.Core/Utils/CommonUtil.cs- 综合工具类
- 包含固定哈希、服务地址、Excel 导入导出、设备/IP 信息等
Admin.NET/Admin.NET.Core/Utils/CryptogramUtil.cs- 统一加解密入口
- 支持 MD5/SM2/SM4,认证、租户连接串、开放接口都会依赖它
Admin.NET/Admin.NET.Core/Utils/DateTimeUtil.cs- 时间处理工具
Admin.NET/Admin.NET.Core/Utils/FileHelper.cs- 文件工具
Admin.NET/Admin.NET.Core/Utils/ExcelHelper.cs- Excel 输出辅助
Admin.NET/Admin.NET.Core/Utils/CodeGenUtil.cs- 代码生成辅助
Admin.NET/Admin.NET.Core/Utils/SSHHelper.cs- SSH/SFTP 工具
Admin.NET/Admin.NET.Core/Utils/AdminResultProvider.cs- 全局统一返回
4.2 通用请求/返回封装
Admin.NET/Admin.NET.Core/Utils/BaseFilter.cs- 关键字搜索、结构化过滤模型底座
Admin.NET/Admin.NET.Core/Utils/BasePageInput.cs- 全局分页入参底座
Admin.NET/Admin.NET.Core/Utils/BaseIdInput.cs- 通用主键入参
Admin.NET/Admin.NET.Core/Utils/BaseStatusInput.cs- 通用状态切换入参
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarPagedList.cs- 通用分页返回结构
4.3 Extensions
Admin.NET/Admin.NET.Core/Extension/RepositoryExtension.cs- 仓储增强最重要的扩展类
- 包含假删除、差异日志、排序、防注入排序、多库表名
AS、忽略过滤器、批量列表查询
Admin.NET/Admin.NET.Core/Extension/SqlSugarExtension.cs- 动态高级搜索/过滤扩展
- 直接承接
BaseFilter
Admin.NET/Admin.NET.Core/Extension/HttpContextExtension.cs- 设备、浏览器、操作系统、外部登录提供者等扩展
Admin.NET/Admin.NET.Core/Extension/RequestExtension.cs- 请求源地址扩展
5. 遇到数据访问时先查哪些类
如果要理解某个服务方法的数据访问,不建议一开始直接盯业务查询语句,建议按下面顺序查:
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarRepository.csAdmin.NET/Admin.NET.Core/Extension/RepositoryExtension.csAdmin.NET/Admin.NET.Core/Extension/SqlSugarExtension.csAdmin.NET/Admin.NET.Core/SqlSugar/SqlSugarPagedList.csAdmin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs
重点说明:
- 仓储默认不是简单单库访问,而是带租户自动切库能力
- 软删除、租户过滤、组织数据权限过滤,都是在
SqlSugarSetup.SetDbAop()和SqlSugarFilter中统一挂载 - 分页返回不是随意对象,而是统一使用
SqlSugarPagedList<T>
6. 遇到缓存时先查哪些类
缓存能力优先看下面几处:
Admin.NET/Admin.NET.Core/Cache/CacheSetup.csAdmin.NET/Admin.NET.Core/Service/Cache/SysCacheService.csAdmin.NET/Admin.NET.Core/Cache/SqlSugarCache.csAdmin.NET/Admin.NET.Core/Const/CacheConst.cs
说明:
CacheSetup负责接入 Redis 或内存兜底SysCacheService是项目内缓存统一门面,不要绕开它直接散写缓存逻辑SqlSugarCache是 SqlSugar 二级缓存到系统缓存的桥接层- 许多防重、黑名单、配置缓存、在线用户缓存都依赖
SysCacheService
7. 遇到多租户时先查哪些类
多租户相关优先看:
Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.csAdmin.NET/Admin.NET.Core/SqlSugar/SqlSugarRepository.csAdmin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.csAdmin.NET/Admin.NET.Core/SqlSugar/SqlSugarFilter.csAdmin.NET/Admin.NET.Core/Const/SqlSugarConst.csAdmin.NET/Admin.NET.Core/Const/ClaimConst.cs
关键点:
- 租户库连接是运行期动态创建的,不是固定写死
- 仓储会优先判断实体特性、请求头租户、当前登录租户,再决定切哪个库
- 数据权限与租户过滤是全局过滤器,不是每个服务手写
8. 遇到鉴权时先查哪些类
普通登录/JWT:
Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.csAdmin.NET/Admin.NET.Web.Core/Handlers/JwtHandler.csAdmin.NET/Admin.NET.Core/Const/ClaimConst.csAdmin.NET/Admin.NET.Core/Const/ConfigConst.cs
开放接口签名鉴权:
Admin.NET/Admin.NET.Core/SignatureAuth/SignatureAuthenticationHandler.csAdmin.NET/Admin.NET.Core/Service/OpenAccess/SysOpenAccessService.csAdmin.NET/Admin.NET.Core/SignatureAuth/SignatureAuthenticationOptions.csAdmin.NET/Admin.NET.Core/SignatureAuth/SignatureAuthenticationEvent.cs
第三方 OAuth:
Admin.NET/Admin.NET.Core/Service/OAuth/OAuthSetup.csAdmin.NET/Admin.NET.Core/Option/OAuthOptions.cs
9. Furion / SqlSugar 强相关封装
9.1 Furion 强相关
- 动态 API:大量服务直接实现
IDynamicApiController - 配置绑定:
ProjectOptions中使用AddConfigurableOptions<T>() - 统一返回:
AddInjectWithUnifyResult<AdminResultProvider>() - 工作单元:
SqlSugarUnitOfWork适配 Furion 的[UnitOfWork] - JWT:
AddJwt<JwtHandler>() - 签名鉴权:
AddSignatureAuthentication(...) - 事件总线:
AddEventBus(...) - 任务调度:
AddSchedule(...) - 声明式远程请求:
AddHttpRemote()
9.2 SqlSugar 强相关
SqlSugarSetupSqlSugarRepository<T>SqlSugarUnitOfWorkSqlSugarPagedListSqlSugarFilterSqlSugarCacheRepositoryExtensionSqlSugarExtension
这些共同构成了本项目的数据访问基础设施层。
10. 事件、调度、打印、远程请求入口
10.1 事件总线
Admin.NET/Admin.NET.Core/EventBus/AppEventSubscriber.csAdmin.NET/Admin.NET.Core/EventBus/RetryEventHandlerExecutor.csAdmin.NET/Admin.NET.Core/EventBus/RedisEventSourceStorer.csAdmin.NET/Admin.NET.Core/EventBus/EventConsumer.cs
说明:
- 当前事件总线不是裸 Furion 默认行为,做了 Redis 存储和失败重试增强
10.2 任务调度
Admin.NET/Admin.NET.Web.Core/Startup.csAdmin.NET/Admin.NET.Core/Job/DynamicJobCompiler.cs
说明:
SysScheduleService更偏业务日程管理- 框架级作业能力要看
AddSchedule和DynamicJobCompiler
10.3 打印
Admin.NET/Admin.NET.Core/Service/Print/SysPrintService.cs
10.4 远程请求与插件代理
Admin.NET/Admin.NET.Web.Core/Startup.cs中AddHttpRemote()Admin.NET/Plugins/Admin.NET.Plugin.WorkWeixin/Proxy/*Admin.NET/Plugins/Admin.NET.Plugin.WorkWeixin/Utils/BaseHttpOutput.csAdmin.NET/Plugins/Admin.NET.Plugin.GoView/Util/GoViewResultProvider.cs
说明:
- 本仓库插件侧远程调用以声明式 HTTP 接口代理为主
- 不建议新增散落式裸
HttpClient封装,优先复用既有声明式模式
11. 配置封装位置
核心配置类主要集中在:
Admin.NET/Admin.NET.Core/Option/*Admin.NET/Plugins/*/Option/*Admin.NET/Admin.NET.Application/Configuration/*.json
高频配置:
DbConnectionOptionsCacheOptionsEventBusOptionsOAuthOptionsUploadOptions- 插件侧如
WorkWeixinOptions、DingTalkOptions
12. 实际开发建议
- 扩展后端能力前,先确认是否已有
Utils、Extension、SqlSugar、Service中的公共封装可复用 - 不要绕开
SysCacheService、SqlSugarRepository<T>、AdminResultProvider另起一套公共实现 - 多租户、缓存键、鉴权 Claim、系统配置键都优先复用现有常量类,不要新增硬编码字符串
- 如果需要排查“为什么查询结果不对”,优先检查全局过滤器、租户切库、软删除、数据权限,而不是先怀疑业务查询本身
附录
A. 工具类清单:
Startup、ProjectOptions;文件:Startup.cs、ProjectOptions.cs;分类:Infrastructure;主要用途:全局装配 Furion、Jwt、Signature、SqlSugar、Cache、EventBus、Schedule、SignalR、OSS、统一返回与 Options 绑定;复用:后端所有能力最终都从这里接入。 AdminResultProvider;文件:AdminResultProvider.cs;分类:Wrapper;主要用途:全局统一返回、异常返回、校验失败返回、401/403 状态码包装为 AdminResult;复用:在 Startup 中全局注入,ExcelHelper 也直接引用。 GoViewResultProvider;文件:GoViewResultProvider.cs;分类:Wrapper;主要用途:插件侧单独的统一返回模型;复用:GoView 插件接口。 BaseFilter、BasePageInput、BaseIdInput、BaseStatusInput;文件:BaseFilter.cs、BasePageInput.cs、BaseIdInput.cs、BaseStatusInput.cs;分类:Wrapper/Request;主要用途:统一关键字搜索、结构化过滤、分页、主键入参、状态切换入参;复用:BasePageInput 约被 28 个 DTO 复用,BaseIdInput 约被 30 个 DTO 复用。 SqlSugarPagedList、SqlSugarPagedExtensions;文件:SqlSugarPagedList.cs;分类:Wrapper;主要用途:统一分页结果结构与 ToPagedList* 扩展;复用:约 32 个服务/DTO 返回分页结果时复用。 CommonUtil;文件:CommonUtil.cs;分类:Util;主要用途:固定哈希、服务地址、Excel 导入导出、XML 序列化、设备/IP 信息等综合工具;复用:登录、日志、种子数据、导入导出等多个模块。 CryptogramUtil;文件:CryptogramUtil.cs;分类:Util;主要用途:统一密码/密钥加解密入口,兼容 MD5/SM2/SM4;复用:认证、LDAP、租户连接串、更新服务等约 10 个文件。 DateTimeUtil;文件:DateTimeUtil.cs;分类:Util;主要用途:时间格式转换、Unix 时间处理;复用:签名鉴权、服务器信息、测试。 FileHelper、ExcelHelper、CodeGenUtil、SSHHelper;文件:FileHelper.cs、ExcelHelper.cs、CodeGenUtil.cs、SSHHelper.cs;分类:Helper/Util;主要用途:文件处理、Excel 导出、代码生成、SSH/SFTP;复用:代码生成、语言包、更新、外部集成。 HttpContextExtension、RequestExtension;文件:HttpContextExtension.cs、RequestExtension.cs;分类:Extensions;主要用途:扩展外部登录提供者、设备/浏览器/OS、请求源地址获取;复用:登录链路、日志链路。 RepositoryExtension;文件:RepositoryExtension.cs;分类:Extensions;主要用途:SqlSugar 仓储增强,提供假删除、差异日志、排序、防注入排序、多库 AS、忽略租户过滤器、批量 in 查询等;复用:数据访问层核心增强。 SqlSugarExtension;文件:SqlSugarExtension.cs;分类:Extensions;主要用途:动态高级搜索、组合过滤、字段表达式解析;复用:承接 BaseFilter 查询模型。 CacheSetup、SqlSugarCache;文件:CacheSetup.cs、SqlSugarCache.cs;分类:Infrastructure;主要用途:统一缓存提供者接入,Redis 与内存兜底,SqlSugar 二级缓存桥接到系统缓存;复用:全局缓存与数据访问层。 SysCacheService;文件:SysCacheService.cs;分类:Infrastructure;主要用途:缓存 CRUD、前缀删除、分布式锁、Hash、Redis 类型读取、缓存穿透包装 AdGetAsync;复用:约 33 个文件,覆盖认证、幂等、在线用户、配置、SqlSugar 缓存等。 SqlSugarRepository;文件:SqlSugarRepository.cs;分类:Infrastructure;主要用途:按系统表/日志表/租户头/登录租户自动切库,封装分表操作;复用:约 61 个文件,是几乎所有服务的默认仓储入口。 SqlSugarSetup;文件:SqlSugarSetup.cs;分类:Infrastructure;主要用途:SqlSugar 全局初始化、AOP、审计字段、软删/租户/数据权限过滤、差异日志、建库建表、视图、种子、租户库初始化;复用:数据库层总装配。 SqlSugarUnitOfWork;文件:SqlSugarUnitOfWork.cs;分类:Infrastructure;主要用途:把 Furion UnitOfWork 对接到 ISqlSugarClient.AsTenant() 事务;复用:所有 [UnitOfWork] 服务方法。 SqlSugarFilter;文件:SqlSugarFilter.cs;分类:Infrastructure;主要用途:组织数据权限、自定义实体过滤器、过滤器缓存清理;复用:SqlSugarSetup 启动时挂载,组织/角色/用户服务会主动清理相关缓存。 SysTenantService;文件:SysTenantService.cs;分类:Infrastructure;主要用途:租户 CRUD、菜单初始化、Logo、默认角色、缓存租户、动态租户库连接;复用:认证、配置、在线用户、仓储切库。 SysAuthService、JwtHandler;文件:SysAuthService.cs、JwtHandler.cs;分类:Infrastructure;主要用途:登录、Token/RefreshToken、单点/黑名单、验证码、租户切换,外加 JWT 自动续期与按钮权限校验;复用:全局鉴权主链路。 SignatureAuthenticationHandler、SysOpenAccessService;文件:SignatureAuthenticationHandler.cs、SysOpenAccessService.cs;分类:Infrastructure;主要用途:开放接口签名鉴权、accessKey/accessSecret 校验、重放防护、绑定用户租户 Claim;复用:AddSignatureAuthentication 和开放接口控制器。 OAuthSetup;文件:OAuthSetup.cs;分类:Infrastructure;主要用途:微信/Gitee 第三方登录注册与 Cookie 策略;复用:认证入口。 LoggingSetup;文件:LoggingSetup.cs;分类:Infrastructure;主要用途:控制台、文件、数据库、ES 日志写入与 Furion Monitor Logging 配置;复用:全局日志体系。 AppEventSubscriber、EventConsumer、RetryEventHandlerExecutor;文件:AppEventSubscriber.cs、EventConsumer.cs、RetryEventHandlerExecutor.cs;分类:Infrastructure;主要用途:事件订阅、Redis 消费桥接、失败重试/熔断回调;复用:全局 EventBus 增强。 DynamicJobCompiler、SysScheduleService;文件:DynamicJobCompiler.cs、SysScheduleService.cs;分类:Infrastructure;主要用途:前者是框架级动态任务编译,后者是业务日程管理;复用:任务调度与日程能力。 SignalRSetup;文件:SignalRSetup.cs;分类:Infrastructure;主要用途:SignalR 序列化、Redis Backplane、DataProtection Key 持久化;复用:在线用户/即时通讯链路。 SysPrintService;文件:SysPrintService.cs;分类:Infrastructure;主要用途:打印模板分页、增删改查;复用:打印能力统一入口。 IOSSServiceManager、OSSServiceManager;文件:IOSSServiceManager.cs;分类:Infrastructure;主要用途:统一 OSS 服务实例缓存、动态 provider 配置转换;复用:文件存储、MultiOSSFileProvider、SysFileProviderService。 IWorkWeixinAuthHttp、IWorkWeixinAppChatHttp、IDepartmentHttp、ITagHttp、BaseWorkOutput;文件:IWorkWeixinAuthHttp.cs、IWorkWeixinAppChatHttp.cs、IDepartmentHttp.cs、ITagHttp.cs、BaseHttpOutput.cs;分类:Infrastructure/Remote;主要用途:通过声明式 HTTP 代理封装企业微信远程调用,统一返回基类;复用:插件远程集成入口。 DbConnectionOptions、CacheOptions、EventBusOptions、OAuthOptions、UploadOptions、WorkWeixinOptions、DingTalkOptions;文件:DbConnectionOptions.cs、CacheOptions.cs、EventBusOptions.cs、OAuthOptions.cs、UploadOptions.cs、WorkWeixinOptions.cs、DingTalkOptions.cs;分类:Options;主要用途:把 Configuration/*.json 与插件配置绑定到强类型 Options;复用:由 ProjectOptions 统一注册。 CacheConst、ClaimConst、ConfigConst、SqlSugarConst、ApplicationConst;文件:CacheConst.cs、ClaimConst.cs、ConfigConst.cs、SqlSugarConst.cs、ApplicationConst.cs;分类:Const;主要用途:统一缓存键、Claim 名、配置键、数据库配置 ID、应用分组名;复用:认证/缓存/多租户/配置/分页/日志全链路。
B. 高价值基础封装:
全局核心封装:Startup + ProjectOptions、AdminResultProvider、SqlSugarSetup、SqlSugarRepository、SysCacheService、SysTenantService、SysAuthService、JwtHandler。这几类基本决定了“配置如何绑定、接口如何暴露、数据如何访问、用户如何鉴权、租户如何切换、返回如何统一”。 与 Furion 强相关:IDynamicApiController 是服务层默认暴露方式;AddConfigurableOptions 负责 Options 绑定;AddInjectWithUnifyResult 负责统一返回;AddJwt、AddSignatureAuthentication、AddEventBus、AddSchedule、AddHttpRemote 都在 Startup 汇总;SqlSugarUnitOfWork 是 Furion [UnitOfWork] 到 SqlSugar 的适配层。 与 SqlSugar 强相关:SqlSugarSetup、SqlSugarRepository、SqlSugarPagedList、RepositoryExtension、SqlSugarExtension、SqlSugarFilter、SqlSugarCache、SqlSugarUnitOfWork 是完整的二次封装链,覆盖分页、过滤、分表、租户切库、软删、差异日志、种子、AOP 与缓存。 多租户相关:先看 SysTenantService,再看 SqlSugarRepository 的自动切库逻辑,最后看 SqlSugarSetup.SetDbAop 和 SqlSugarFilter 的租户/数据权限过滤。 缓存相关:先看 CacheSetup,日常调用和锁都收敛到 SysCacheService,数据库二级缓存走 SqlSugarCache,缓存键规范看 CacheConst。 鉴权相关:普通登录链路看 SysAuthService + JwtHandler,开放接口签名链路看 SignatureAuthenticationHandler + SysOpenAccessService,第三方登录看 OAuthSetup,Claim 规范看 ClaimConst。 事件/任务/远程/打印:事件总线看 AppEventSubscriber + RetryEventHandlerExecutor + RedisEventSourceStorer;任务调度看 Startup.AddSchedule 和 DynamicJobCompiler;远程请求看 Startup.AddHttpRemote 加插件 Proxy/*Http.cs;打印入口看 SysPrintService。
C. 建议写入 AGENTS.md 的内容草案
本项目后端公共封装高度集中在 Admin.NET.Core,Admin.NET.Application 目前更多承担配置与示例开放接口,Admin.NET.Web.Core 主要负责能力装配,Admin.NET.Web.Entry 只是最薄宿主入口。 常见封装模式是:Option/.cs + Configuration/.json 做配置绑定,Setup.cs 做框架接入,Service/**/Service.cs + IDynamicApiController 做动态 API,Utils/ 与 Extension/ 提供高频工具和查询增强,SqlSugar/* 承担数据库层二次封装。 阅读代码的优先顺序建议固定为:Admin.NET.Web.Core/Startup.cs -> Admin.NET.Web.Core/ProjectOptions.cs -> Admin.NET.Core/SqlSugar/SqlSugarSetup.cs -> Admin.NET.Core/Utils/AdminResultProvider.cs -> 具体能力服务目录。 高频工具类主要在 Admin.NET.Core/Utils 与 Admin.NET.Core/Extension。如果看到分页、筛选、关键字搜索,先查 BaseFilter、BasePageInput、SqlSugarExtension、SqlSugarPagedList;如果看到通用导出/文件/加密,先查 CommonUtil、ExcelHelper、FileHelper、CryptogramUtil。 遇到缓存问题时优先看 CacheSetup、SysCacheService、SqlSugarCache、CacheConst;遇到租户与数据权限时优先看 SysTenantService、SqlSugarRepository、SqlSugarFilter、SqlSugarSetup;遇到鉴权问题时优先看 SysAuthService、JwtHandler、SignatureAuthenticationHandler、SysOpenAccessService、OAuthSetup。 遇到数据访问问题,不要先从具体业务服务硬读 SQL,先看 SqlSugarRepository 的切库规则、RepositoryExtension 的差异日志/软删增强、SqlSugarExtension 的动态过滤,再回到业务查询。 遇到插件与外部系统集成,先看插件自己的 Option、Proxy、Utils/BaseHttpOutput 或自定义 ResultProvider,本仓库远程调用模式偏向“声明式 HTTP 接口 + 统一输入输出 DTO”,不是散落的裸 HttpClient。 当前代码基底明确是 Furion + SqlSugar + Furion EventBus/Schedule/RemoteRequest 组合,后续开发应优先复用这些既有封装,不要绕开它们直接造新的通用层。