GS MES Service 是一套 MES(制造执行系统)后端接口,采用 ASP.NET Core 8.0 作为宿主框架。入口项目 Gs.HostIIS 负责注册控制器、加载配置和启用 Swagger,同时通过 builder.AddCustomInject() 自动发现并注册各模块中的业务服务。功能按领域拆分为 Gs.BaseInfo、Gs.Sales、Gs.Warehouse、Gs.Report 等项目,每个模块通过 Services/(控制器)和 Models/(领域模型)向外暴露 API。
Program.cs 建立 WebApplication,配置 JSON 序列化(全量 Unicode、Newtonsoft.Json)、全局授权过滤、CORS、Swagger 及静态文件目录,然后调用 app.AddCustomController() 与 builder.AddCustomInject() 扩展。Gs.Toolbox.ApiCore.Extensions.ApplicationBuilderExtension 会扫描入口程序集及其引用,识别实现了 ISingleton、IScope、ITransient 等标记接口或标注了 ExposeAttribute 的类,并按约定注入容器。CustomControllerFeatureProvider 与 CustomApplicationModelConvention 结合 ApiGroup 特性,实现按模块分组的路由与 Swagger 文档划分。ApiAuthorizeAttribute 拦截所有未标记 [AllowAnonymous] 的请求,检查请求头 token 是否包含形如 token <guid> 的值(长度至少 5)。DownPath 与 UploadPath 映射 /down、/upload 静态目录,用于文件下载与上传。GsMesSolution.sln:解决方案根入口。Gs.HostIIS/:主机项目,包含配置文件、Swagger 设置、自定义授权属性。Gs.<Module>/:领域模块,示例:Gs.BaseInfo:基础资料维护,MesItemsManager 等控制器继承 Repository<T> 并使用 SqlSugar 查询。Gs.Warehouse:仓储相关接口。Gs.Report:报表与导出功能。Gs.Entity/:集中存放 SqlSugar 实体、枚举、DTO。Gs.Toolbox/:通用工具,包括配置读取(AppSettingsHelper)、仓储基类(Repository<T>)、Excel 导出、日志、ApiCore 扩展等。TemplateEngineHost/:模版引擎集成(若需生成报表/文档)。.config/:部署阶段使用的环境配置转换文件。dotnet --version 验证)。ConnectionStrings 中的目标库一致;敏感字段通过 User Secrets 或环境变量注入。appsettings*.json 中设置)及跨域策略(AllowAnyOrigin)。dotnet restore GsMesSolution.sln # 安装所有 NuGet 依赖(SqlSugar、Swashbuckle 等)
dotnet build GsMesSolution.sln -c Release
dotnet run --project Gs.HostIIS/Gs.HostIIS.csproj
启动后访问 http://localhost:<端口>/swagger,可见按照 ApiGroupNames 分组的接口文档。调用需要授权的接口时,在请求头添加 token: token 3fa85f64-5717-4562-b3fc-2c963f66afa6(示例)。
?trace=true 等约定参数(若控制器支持)定位日志。Repository<T> 通过 Db.Aop.OnLogExecuting 输出格式化语句)。ApiAuthorizeAttribute 做条件短路或在控制器方法上加 [AllowAnonymous](上线前务必移除)。Gs.HostIIS/appsettings.json、appsettings.Development.json 存储路径、Swagger 分组 XML 路径等;ServicesPath 用于扫描生成的 XML 注释。dotnet user-secrets(开发环境)或系统环境变量注入 ConnectionStrings 等敏感字段,切勿提交到版本库。Gs.HostIIS/.config/*.json,通过发布流程或 CI/CD 在部署阶段覆盖。DownPath、UploadPath 对应的物理目录权限;服务启动会尝试自动创建缺失目录。Repository<T>,直接复用 SqlSugarScope(支持事务、通用分页 CommonPage)。ApiGroup(ApiGroupNames.XXX) 声明 Swagger 分组;使用 RequestMethod 特性指定 HTTP 方法(系统自带的 RequestMethods 枚举)。IHttpContextAccessor、仓储接口),并确保实现类实现对应生命周期接口以被自动注入。UtilityHelper.GetUserGuidAndOrgGuid() 从请求上下文提取用户标识,常用于数据隔离。ResponseResult、ReturnDto<T> 等统一返回对象中,保持前端体验一致。Repository<T> 默认连接 AppSettingsHelper.getValueByKey("ConnectionStrings"),支持 UseTransaction 包装事务块、CommonPage 快速分页。ExcelHelper 提供导出功能,通常在报表模块使用。InterfaceUtil、UtilityHelper 等封装跨系统调用、用户上下文解析。LogHelper 封装常规日志记录;需要时可扩展现有实现接入集中式日志平台。ApiAuthorizeAttribute 校验 token。生产环境应替换长度校验逻辑为真实身份认证(JWT、单点登录等)。/swagger,上线前需确认是否限制外网访问或启用认证。.config 目录仅存放模板/转换文件。_orgFids、_userGuid 等字段控制查询范围。Gs.BaseInfo.Tests),测试文件命名统一为 *Tests.cs。ISqlSugarClient 接口实现自定义 Fake。dotnet test(在解决方案根目录),并将结果写入 PR 描述。ServicesPath 指向的目录存在 XML 文件,可重新执行 dotnet build 生成注释文件。token: token <值>;如需调试,可在本地将最小长度改为 0。ExposeAttribute,且所在程序集已被 Gs.HostIIS 引用。PascalCase 类型、camelCase 变量、开启可空引用。.config 转换文件(如有配置变更)。dotnet build、dotnet test(若存在测试),并完成关键 API 的手工冒烟。BaseInfo: 调整物料分页查询)。