| | |
| | | # 蓝宝MES系统代码结构详细说明 |
| | | # 蓝宝 MES 客户端帮助指南 (G-MES V2.0) |
| | | |
| | | ## 项目概述 |
| | | > **LanBMes MES Client** 是基于 .NET Framework 4.8 和 DevExpress WinForms 构建的企业级制造执行系统(MES)桌面应用程序,为制造车间提供全面的生产执行、仓储管理、质量控制和报表分析能力。 |
| | | |
| | | 蓝宝PC前端 (LanBao PC Frontend) 是一个基于 .NET Framework 4.8 的制造执行系统 (MES) 客户端应用程序,采用 Windows Forms 技术栈和 DevExpress UI 组件库,提供完整的制造业务管理功能。 |
| | | ## 目录 |
| | | |
| | | ## 技术栈 |
| | | - [1. 项目概览](#1-项目概览) |
| | | - [2. 解决方案结构](#2-解决方案结构) |
| | | - [3. 核心技术栈](#3-核心技术栈) |
| | | - [4. 开发环境配置](#4-开发环境配置) |
| | | - [5. 构建与运行](#5-构建与运行) |
| | | - [6. DevFrm 功能模块详解](#6-devfrm-功能模块详解) |
| | | - [7. 架构与设计模式](#7-架构与设计模式) |
| | | - [8. 工具类与公共组件](#8-工具类与公共组件) |
| | | - [9. 配置说明](#9-配置说明) |
| | | - [10. 部署指南](#10-部署指南) |
| | | - [11. 开发规范与最佳实践](#11-开发规范与最佳实践) |
| | | - [12. 常见问题与故障排查](#12-常见问题与故障排查) |
| | | |
| | | - **.NET Framework 4.8** - 核心应用框架 |
| | | - **DevExpress v22.2/v129.0** - 主要UI组件库 |
| | | - **C# Windows Forms** - 桌面应用程序框架,MDI接口设计 |
| | | - **Oracle Database** - 数据持久化 (Oracle.ManagedDataAccess 23.6.0) |
| | | - **CefSharp 109.1.110/129.0** - 嵌入式Web浏览器 |
| | | - **WebView2** - 现代Web视图集成 |
| | | - **Newtonsoft.Json 13.0.3** - JSON序列化 |
| | | - **AutoUpdater.NET** - 自动应用程序更新 |
| | | - **NModbus 3.0.81** - 工业通信协议 |
| | | - **FastReport** - 报表生成系统 |
| | | --- |
| | | |
| | | ## 项目架构结构 |
| | | ## 1. 项目概览 |
| | | |
| | | ### 顶级目录结构 |
| | | ### 1.1 基本信息 |
| | | |
| | | | 项目 | 说明 | |
| | | |------|------| |
| | | | **解决方案名称** | `GsDevSolution.sln` | |
| | | | **产品名称** | G-MES V2.0 | |
| | | | **主要用途** | 面向制造现场的 MES Windows 客户端 | |
| | | | **核心应用** | `Gs.DevApp` (主客户端) | |
| | | | **辅助应用** | `Gs.WeightIqc` (IQC称重), `Gs.WeightLine` (产线称重) | |
| | | | **开发环境** | Visual Studio 2022+ | |
| | | | **目标框架** | .NET Framework 4.8 | |
| | | | **构建平台** | Any CPU | |
| | | |
| | | ### 1.2 核心特性 |
| | | |
| | | - ✅ **现代化 UI**: 基于 DevExpress v22.2 的 FluentDesign 界面 |
| | | - ✅ **动态加载**: 通过反射机制实现菜单和窗体的动态加载 |
| | | - ✅ **权限控制**: 基于角色的菜单权限和操作权限管理 |
| | | - ✅ **可复用组件**: 150+ 业务控件,提高开发效率 |
| | | - ✅ **多数据库支持**: 兼容 Oracle 和 SQL Server |
| | | - ✅ **自动更新**: 集成 AutoUpdater.NET 实现自动升级 |
| | | - ✅ **嵌入式浏览器**: CefSharp 支持 H5 页面集成 |
| | | - ✅ **工业通信**: NModbus 支持 Modbus TCP/RTU 设备通信 |
| | | - ✅ **集中式日志**: 统一的日志记录和错误追踪机制 |
| | | |
| | | ### 1.3 业务覆盖范围 |
| | | |
| | | ``` |
| | | DevApp/ |
| | | ├── Gs.DevApp/ # 主应用程序项目 |
| | | │ ├── DevFrm/ # 业务功能模块窗体 |
| | | │ ├── Entity/ # 数据实体类 |
| | | │ ├── ToolBox/ # 工具类和辅助函数 |
| | | │ ├── UserControl/ # 自定义用户控件 |
| | | │ ├── Properties/ # 项目属性 |
| | | │ ├── Resources/ # 资源文件 |
| | | │ ├── bin/ # 编译输出目录 |
| | | │ └── obj/ # 编译临时文件 |
| | | ├── Gs.WeightIqc/ # IQC称重检测模块 |
| | | ├── Gs.WeightLine/ # 生产线称重模块 |
| | | ├── Gs.Setup/ # 安装程序项目 |
| | | └── packages/ # NuGet包管理目录 |
| | | 基础数据管理 → 生产计划 → 工单管理 → 生产执行 → 质量检验 → 仓储物流 → 报表分析 |
| | | ↓ ↓ ↓ ↓ ↓ ↓ ↓ |
| | | 客户/供应商 排产调整 任务下达 工序开工 多级质检 出入库管理 FastReport |
| | | 物料主数据 产线分配 流程卡 数据采集 缺陷追踪 库存调拨 统计分析 |
| | | 工装设备 资源协调 进度追踪 返工维修 AQL抽样 条码管理 自定义报表 |
| | | ``` |
| | | |
| | | ### 应用程序入口点 |
| | | --- |
| | | |
| | | - **Program.cs** - 应用程序主入口,单实例管理,CefSharp初始化 |
| | | - **DevFrm/FrmLogin.cs** - 登录窗体,自动更新器集成 |
| | | - **DevFrm/FrmMain.cs** - 主MDI窗体,DevExpress FluentDesign界面 |
| | | ## 2. 解决方案结构 |
| | | |
| | | ## 核心业务模块详解 (DevFrm/) |
| | | ### 2.1 项目组成 |
| | | |
| | | ### 1. 基础数据管理 (BasicData/) |
| | | **功能:** 系统基础主数据维护和管理 |
| | | ``` |
| | | GsDevSolution/ |
| | | ├── Gs.DevApp/ 【主客户端项目】 |
| | | │ ├── DevFrm/ - 18个业务领域模块 (150+ 窗体) |
| | | │ │ ├── BasicData/ - 基础数据 (客户/供应商/物料/产线) |
| | | │ │ ├── Work/ - 生产执行 (开工/数据采集/返工) |
| | | │ │ ├── WOM/ - 工单管理 (任务下达/排产) |
| | | │ │ ├── QC/ - 质量管理通用模块 |
| | | │ │ ├── IPQC/ - 制程检验 (首件/巡检) |
| | | │ │ ├── FQC/ - 成品终检 |
| | | │ │ ├── RkQC/ - 来料质检 |
| | | │ │ ├── Ck/ - 出库管理 (领料/补料/退货) |
| | | │ │ ├── Rk/ - 入库管理 (来料/退库/其他) |
| | | │ │ ├── Warehouse/ - 仓库操作 (调拨/盘点/条码) |
| | | │ │ ├── Sales/ - 销售订单与发货 |
| | | │ │ ├── WW/ - 委外管理 |
| | | │ │ ├── Rpt/ - 报表设计与执行 |
| | | │ │ ├── Sys/ - 系统设置 (菜单/组织/单号规则) |
| | | │ │ ├── User/ - 用户与权限管理 |
| | | │ │ ├── JJGZ/ - 夹具工装与设备台账 |
| | | │ │ ├── BarCode/ - 条码生成与打印 |
| | | │ │ └── PDA/ - 手持终端界面 |
| | | │ ├── Entity/ - 数据传输对象 (DTO) |
| | | │ ├── ToolBox/ - 公共工具类 |
| | | │ ├── UserControl/ - 可复用控件库 (150+) |
| | | │ ├── Resources/ - 资源文件 (图标/图片) |
| | | │ ├── App.config - 应用配置文件 |
| | | │ └── Program.cs - 应用程序入口 |
| | | ├── Gs.WeightIqc/ 【IQC 称重客户端】 |
| | | ├── Gs.WeightLine/ 【产线称重客户端】 |
| | | ├── Gs.Setup/ 【安装程序项目】(.vdproj) |
| | | └── packages/ 【NuGet 包目录】 |
| | | ``` |
| | | |
| | | **主要模块:** |
| | | - `Frm_Customer.cs` - 客户信息管理 |
| | | - `Frm_Supplier.cs` - 供应商信息管理 |
| | | - `Frm_SupplierSrm.cs` - SRM供应商关系管理 |
| | | - `Frm_MesItems.cs` - 物料主数据管理 |
| | | ### 2.2 核心目录详解 |
| | | |
| | | #### DevFrm/ - 业务窗体 |
| | | |
| | | 所有业务窗体按领域划分,每个子目录包含该领域的所有表单和对话框。 |
| | | |
| | | **命名规范**: `Frm_{业务名称}.cs` 或 `Frm_{业务名称}_{子类型}.cs` |
| | | |
| | | #### Entity/ - 数据模型 |
| | | |
| | | | 文件 | 说明 | |
| | | |------|------| |
| | | | `LoginInfoModel.cs` | 登录用户信息模型 | |
| | | | `PageQueryModel.cs` | 分页查询通用模型 | |
| | | | `ReturnModel.cs` | API 返回结果封装 | |
| | | |
| | | #### ToolBox/ - 工具类库 |
| | | |
| | | | 文件 | 说明 | |
| | | |------|------| |
| | | | `UtilityHelper.cs` | **核心工具类**: HTTP请求、JSON解析、Grid初始化等 | |
| | | | `LogHelper.cs` | 日志记录工具 (写入 `logs/{yyyy-MM-dd}.log`) | |
| | | | `MsgHelper.cs` | 统一消息提示封装 (基于 DevExpress) | |
| | | | `UpdateParentEventArgs.cs` | 窗体间事件通信机制 | |
| | | | `ModbusHelper.cs` | Modbus 设备通信封装 | |
| | | |
| | | #### UserControl/ - 可复用控件 |
| | | |
| | | | 控件类型 | 示例 | 说明 | |
| | | |----------|------|------| |
| | | | **工具栏** | `UcToolBarMenu.cs` | 标准CRUD操作栏 | |
| | | | **分页** | `UcPageBar.cs` | 分页控件 | |
| | | | **选择器** | `UcDictionarySelect.cs` | 数据字典下拉框 | |
| | | | **查找控件** | `UcLookCustomer.cs`<br>`UcLookItems.cs`<br>`UcLookWarehouse.cs` | 60+ 数据查找对话框<br>(客户/物料/仓库等) | |
| | | | **通知** | `Toast.cs` | 轻量级提示框 | |
| | | |
| | | --- |
| | | |
| | | ## 3. 核心技术栈 |
| | | |
| | | ### 3.1 主要依赖 |
| | | |
| | | | 技术/库 | 版本 | 用途 | |
| | | |---------|------|------| |
| | | | **.NET Framework** | 4.8 | 应用基础框架 | |
| | | | **DevExpress** | v22.2.3 | UI 组件库 (FluentDesign, XtraGrid, XtraTab, XtraBars) | |
| | | | **CefSharp** | 109.1.110 | 嵌入式 Chromium 浏览器 | |
| | | | **AutoUpdater.NET** | 1.9.2 | 自动软件更新 | |
| | | | **NModbus** | 3.0.81 | 工业设备通信 (Modbus TCP/RTU) | |
| | | | **Newtonsoft.Json** | 13.0.3 | JSON 序列化 | |
| | | | **System.Text.Json** | 8.0.4 | 现代 JSON 支持 | |
| | | | **Oracle.ManagedDataAccess** | 最新 | Oracle 数据库访问 | |
| | | | **System.Data.SqlClient** | 最新 | SQL Server 数据库访问 | |
| | | |
| | | ### 3.2 DevExpress 核心组件 |
| | | |
| | | ```csharp |
| | | // FluentDesign 主界面 |
| | | DevExpress.XtraBars.FluentDesignSystem.FluentDesignForm |
| | | |
| | | // 数据表格 |
| | | DevExpress.XtraGrid.GridControl |
| | | DevExpress.XtraGrid.Views.Grid.GridView |
| | | |
| | | // 标签页 |
| | | DevExpress.XtraTab.XtraTabControl |
| | | |
| | | // 导航菜单 |
| | | DevExpress.XtraNavBar.NavBarControl |
| | | |
| | | // 等待对话框 |
| | | DevExpress.XtraWaitForm.WaitDialogForm |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## 4. 开发环境配置 |
| | | |
| | | ### 4.1 前置要求 |
| | | |
| | | - ✅ Windows 10/11 或 Windows Server 2016+ |
| | | - ✅ Visual Studio 2022 (推荐) 或 Visual Studio 2019 |
| | | - ✅ .NET Framework 4.8 SDK |
| | | - ✅ DevExpress v22.2+ 许可证 (需配置 NuGet 源) |
| | | - ✅ Git (版本控制) |
| | | |
| | | ### 4.2 克隆与还原 |
| | | |
| | | ```bash |
| | | # 克隆代码库 |
| | | cd E:\LanBMes |
| | | git clone <repository_url> LB_MesClient |
| | | |
| | | # 进入解决方案目录 |
| | | cd LB_MesClient\DevApp |
| | | |
| | | # 还原 NuGet 包 |
| | | nuget restore GsDevSolution.sln |
| | | |
| | | # 或在 Visual Studio 中: |
| | | # 右键解决方案 → 还原 NuGet 程序包 |
| | | ``` |
| | | |
| | | ### 4.3 配置 DevExpress |
| | | |
| | | 确保已安装 DevExpress v22.2 并配置 NuGet 源: |
| | | |
| | | ``` |
| | | 工具 → NuGet 包管理器 → 程序包管理器设置 → 程序包源 |
| | | 添加源: https://nuget.devexpress.com/<your_feed_key>/api |
| | | ``` |
| | | |
| | | ### 4.4 配置后端 API |
| | | |
| | | 编辑 `Gs.DevApp\App.config`: |
| | | |
| | | ```xml |
| | | <add key="WebApiUrl" value="http://192.168.0.51:8081/" /> |
| | | ``` |
| | | |
| | | 修改为实际的后端 API 地址。 |
| | | |
| | | --- |
| | | |
| | | ## 5. 构建与运行 |
| | | |
| | | ### 5.1 命令行构建 |
| | | |
| | | ```bash |
| | | # Debug 构建 (推荐开发使用) |
| | | cd E:\LanBMes\LB_MesClient\DevApp |
| | | msbuild GsDevSolution.sln /p:Configuration=Debug /p:Platform="Any CPU" |
| | | |
| | | # Release 构建 (用于发布) |
| | | msbuild GsDevSolution.sln /p:Configuration=Release /p:Platform="Any CPU" |
| | | |
| | | # 仅构建主项目 |
| | | msbuild Gs.DevApp\Gs.DevApp.csproj /t:Rebuild /p:Configuration=Debug |
| | | ``` |
| | | |
| | | ### 5.2 Visual Studio 运行 |
| | | |
| | | 1. **打开解决方案**: 双击 `GsDevSolution.sln` |
| | | 2. **设置启动项目**: 右键 `Gs.DevApp` → 设为启动项目 |
| | | 3. **运行**: 按 `F5` 或点击 "开始调试" |
| | | |
| | | ### 5.3 直接运行 |
| | | |
| | | ```bash |
| | | # Debug 版本 |
| | | Gs.DevApp\bin\Debug\Gs.DevApp.exe |
| | | |
| | | # Release 版本 |
| | | Gs.DevApp\bin\Release\Gs.DevApp.exe |
| | | ``` |
| | | |
| | | ### 5.4 调试技巧 |
| | | |
| | | **禁用单实例限制** (允许同时运行多个实例用于测试): |
| | | |
| | | 在 `Program.cs` 中注释以下代码: |
| | | |
| | | ```csharp |
| | | // Process[] MyProcesses = Process.GetProcessesByName("Gs.DevApp"); |
| | | // if (MyProcesses.Length > 1) |
| | | // { |
| | | // MyProcesses[0].Kill(); |
| | | // } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## 6. DevFrm 功能模块详解 |
| | | |
| | | ### 6.1 登录与主框架 |
| | | |
| | | #### Program.cs - 应用程序入口 |
| | | |
| | | ```csharp |
| | | [STAThread] |
| | | static void Main() |
| | | { |
| | | // 1. 单实例检查 (防止重复运行) |
| | | Process[] MyProcesses = Process.GetProcessesByName("Gs.DevApp"); |
| | | if (MyProcesses.Length > 1) { |
| | | MyProcesses[0].Kill(); |
| | | } |
| | | |
| | | // 2. 启用视觉样式 |
| | | Application.EnableVisualStyles(); |
| | | Application.SetCompatibleTextRenderingDefault(false); |
| | | |
| | | // 3. 启动登录流程 |
| | | _startLogin(); |
| | | } |
| | | ``` |
| | | |
| | | #### FrmLogin.cs - 登录窗体 |
| | | |
| | | **核心功能**: |
| | | - 自动更新检查 (AutoUpdater.NET) |
| | | - 用户身份验证 (调用 `User/UserLogin` API) |
| | | - 记住用户名/密码 |
| | | - 字体设置持久化 (注册表) |
| | | |
| | | **关键代码**: |
| | | |
| | | ```csharp |
| | | // 登录验证 |
| | | string result = UtilityHelper.HttpPost("User/UserLogin", "UserLogin", jsonParam); |
| | | dynamic dy = UtilityHelper.ReturnToDynamic(result); |
| | | |
| | | if (dy.code == 200) { |
| | | LoginInfoModel.CurrentUser = JsonConvert.DeserializeObject<LoginInfoModel>(dy.data.ToString()); |
| | | this.DialogResult = DialogResult.OK; |
| | | } |
| | | ``` |
| | | |
| | | #### FrmMain.cs - 主窗体 |
| | | |
| | | **核心职责**: |
| | | 1. 加载用户菜单结构 (`User/GetUserLoginInfo`) |
| | | 2. 构建 AccordionControl 导航菜单 |
| | | 3. 动态加载窗体 (通过反射) |
| | | 4. 管理 TabPage 生命周期 |
| | | 5. 组织切换 |
| | | 6. 全局事件处理 |
| | | |
| | | **动态窗体加载**: |
| | | |
| | | ```csharp |
| | | // 通过命名空间动态创建窗体实例 |
| | | Form newForm = (Form)Assembly.GetExecutingAssembly() |
| | | .CreateInstance("Gs.DevApp.DevFrm.BasicData.Frm_Customer"); |
| | | |
| | | // 嵌入到 TabPage |
| | | newForm.FormBorderStyle = FormBorderStyle.None; |
| | | newForm.TopLevel = false; |
| | | newForm.Dock = DockStyle.Fill; |
| | | xtraTabPage.Controls.Add(newForm); |
| | | newForm.Show(); |
| | | ``` |
| | | |
| | | **TabPage 缓存** (防止重复打开): |
| | | |
| | | ```csharp |
| | | if (tabPageDict.ContainsKey(formName)) { |
| | | xtraTabControl.SelectedTabPage = tabPageDict[formName]; |
| | | return; |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 6.2 基础数据域 (BasicData/) |
| | | |
| | | #### 客户管理 - Frm_Customer.cs |
| | | |
| | | - 客户主数据维护 |
| | | - 支持分页查询 |
| | | - 使用 `UcToolBarMenu` 实现增删改查 |
| | | - 使用 `UcPageBar` 实现分页 |
| | | |
| | | #### 供应商管理 |
| | | |
| | | - `Frm_Supplier.cs` - 供应商基础信息 |
| | | - `Frm_SupplierSrm.cs` - SRM 供应商关系管理 |
| | | |
| | | #### 物料管理 |
| | | |
| | | - `Frm_MesItems.cs` - 物料主数据维护 |
| | | - `Frm_MesItemsShow.cs` - 物料信息展示 |
| | | - `Frm_MesItemType.cs` - 物料分类管理 |
| | | - `Frm_MesUnit.cs` - 计量单位管理 |
| | | - `Frm_MesDepot.cs` - 仓库信息管理 |
| | | - `Frm_MesWorkshopLine.cs` - 车间生产线配置 |
| | | - `Frm_Staff.cs` - 员工信息管理 |
| | | - `Frm_Department.cs` - 部门信息管理 |
| | | |
| | | ### 2. 仓库出库模块 (Ck/) |
| | | **功能:** 仓库出库业务流程管理,包含各种出库类型 |
| | | #### 产线管理 - Frm_MesWorkshopLine.cs |
| | | |
| | | **主要模块:** |
| | | - `Frm_MesItemCl.cs` / `Frm_MesItemClDj.cs` - 材料出库申请/单据 |
| | | - `Frm_MesItemBl.cs` / `Frm_MesItemBlDJ.cs` - 补料出库申请/单据 |
| | | - `Frm_MesItemQt.cs` / `Frm_MesItemQtDj.cs` - 其他出库申请/单据 |
| | | - `Frm_MesCgthSq.cs` / `Frm_MesCgthSqDj.cs` - 采购退货申请/单据 |
| | | - `Frm_MesSctkSq.cs` / `Frm_MesSctkSqDj.cs` - 生产退库申请/单据 |
| | | - `Frm_MesInvItemOut_SCLL.cs` - 生产领料出库 |
| | | - `Frm_MesYanTui.cs` - 验收退货管理 |
| | | - 车间产线配置 |
| | | - 工作中心定义 |
| | | |
| | | ### 3. 仓库入库模块 (Rk/) |
| | | **功能:** 仓库入库业务流程管理 |
| | | #### 其他主数据 |
| | | |
| | | **主要模块:** |
| | | - `Frm_MesItemTbl.cs` - 材料入库台账 |
| | | - `Frm_MesItemTbl_RK.cs` - 入库单据处理 |
| | | - `Frm_MesItemTblShow.cs` - 入库信息展示 |
| | | - `Frm_MesItemQtrk.cs` / `Frm_MesItemQtrkDj.cs` - 其他入库申请/单据 |
| | | - `Frm_MesInvItemArn.cs` - 到货入库管理 |
| | | - `Frm_MesInvItemIns.cs` - 检验入库管理 |
| | | - `Frm_Staff.cs` - 员工信息 |
| | | - `Frm_Department.cs` - 部门组织 |
| | | |
| | | ### 4. 质量控制模块 |
| | | --- |
| | | |
| | | #### 4.1 FQC (Final Quality Control) - 最终质量控制 |
| | | **功能:** 成品出货前最终质量检验 |
| | | - `Frm_Fqc.cs` - FQC检验主界面 |
| | | - `Frm_FqcDetect01.cs` - FQC检测流程 |
| | | - `Frm_FQCItem.cs` - FQC检验项目管理 |
| | | ### 6.3 仓储管理域 |
| | | |
| | | #### 4.2 IPQC (In-Process Quality Control) - 过程质量控制 |
| | | **功能:** 生产过程中的质量检验和监控 |
| | | - `Frm_ShouJian.cs` - 首件检验 |
| | | - `Frm_ShouJianDetect01.cs` - 首件检测流程 |
| | | - `Frm_ShouJianDetect01H5.cs` - 首件检测H5版本 |
| | | - `Frm_XunJian.cs` - 巡检管理 |
| | | - `Frm_XunJianDetect01.cs` - 巡检检测流程 |
| | | - `Frm_XunJianDetect01Show.cs` - 巡检结果展示 |
| | | #### 出库管理 (Ck/) |
| | | |
| | | #### 4.3 RkQC (Receiving Quality Control) - 来料质量控制 |
| | | **功能:** 来料和入库物料质量检验 |
| | | - `Frm_RkDetect01.cs` - 来料检验 |
| | | - `Frm_CqDetect01.cs` - 抽检检验 |
| | | - `Frm_QtrkDetect01.cs` - 其他入库检验 |
| | | - `Frm_WwrkDetect01.cs` - 完工入库检验 |
| | | - `Frm_ShouTuoDetect01.cs` - 委托加工检验 |
| | | - `Frm_Cqfa.cs` - 抽检方案管理 |
| | | - `Frm_CqfaItems.cs` - 抽检项目配置 |
| | | - `Frm_Cqsq.cs` - 抽检申请 |
| | | | 窗体 | 功能 | |
| | | |------|------| |
| | | | `Frm_MesInvItemOut_SCLL.cs` | 生产领料出库 | |
| | | | `Frm_MesItemBl.cs` | 补料出库 | |
| | | | `Frm_MesCgthSq.cs` | 采购退货申请 | |
| | | | `Frm_MesItemQtck.cs` | 其他出库 | |
| | | |
| | | #### 4.4 QC - 质量控制通用模块 |
| | | **功能:** 质量管理通用功能和配置 |
| | | - `Frm_MesQaMj.cs` - 质量检验模板 |
| | | - `Frm_MesQaItemsDetect01.cs` - 检验项目检测 |
| | | - `Frm_MesQaItemsDetect01Input.cs` - 检验数据录入 |
| | | - `Frm_MesQmCheckitemDt.cs` - 检验项目明细 |
| | | - `Frm_MesQmAql1.cs` - AQL抽样标准 |
| | | - `Frm_MesDefectCodeShow.cs` - 缺陷代码展示 |
| | | - `Frm_IQCLookups.cs` - IQC查询界面 |
| | | - `Frm_MesSysLookups.cs` - 系统查询配置 |
| | | #### 入库管理 (Rk/) |
| | | |
| | | ### 5. 工单管理模块 (WOM/) |
| | | **功能:** 生产工单全生命周期管理 |
| | | | 窗体 | 功能 | |
| | | |------|------| |
| | | | `Frm_MesInvItemArn.cs` | 到货入库 | |
| | | | `Frm_MesItemTbl.cs` | 材料入库台账 | |
| | | | `Frm_MesItemQtrk.cs` | 其他入库 | |
| | | |
| | | **主要模块:** |
| | | - `Frm_MesWorkProd.cs` - 生产工单管理 |
| | | - `Frm_MesProcGx.cs` - 工艺流程管理 |
| | | - `Frm_MesProcGx0.cs` - 工艺流程基础版 |
| | | - `Frm_MesProcGxShow.cs` - 工艺流程展示 |
| | | - `Frm_Womdaa.cs` - 工单档案管理 |
| | | - `Frm_Womdaahb.cs` - 工单档案汇总 |
| | | - `Frm_WomdaaNbz.cs` - 工单档案内部转移 |
| | | - `Frm_Womcaa.cs` - 工单成本分析 |
| | | - `Frm_Wompba.cs` - 工单派工管理 |
| | | - `Frm_WompbaGx.cs` - 工单派工工序 |
| | | - `Frm_WomFanGong.cs` - 返工单管理 |
| | | - `Frm_MesScrkDj.cs` - 生产入库单据 |
| | | - `Frm_MesScrksqDj.cs` - 生产入库申请单据 |
| | | - `FrmAutoRk.cs` - 自动入库 |
| | | - `FrmBackFlash.cs` - 反冲处理 |
| | | #### 仓库操作 (Warehouse/) |
| | | |
| | | ### 6. 生产作业模块 (Work/) |
| | | **功能:** 车间生产作业执行和管理 |
| | | | 窗体 | 功能 | |
| | | |------|------| |
| | | | `Frm_MesDbck.cs` | 调拨出库 | |
| | | | `Frm_MesRohIn.cs` | 原材入库 | |
| | | | `Frm_ArrivalBarcode.cs` | 到货条码生成 | |
| | | | `Frm_InitialBarcode.cs` | 初始条码维护 | |
| | | |
| | | **主要模块:** |
| | | - `Frm_WorkStart.cs` - 生产开工 |
| | | - `Frm_Work01.cs` - 生产作业主界面 |
| | | - `Frm_Work09.cs` - 生产作业流程9 |
| | | - `Frm_WorkProcesses.cs` - 工序作业管理 |
| | | - `Frm_WorkTechnique.cs` - 工艺技术管理 |
| | | - `Frm_WorkTechniqueShow.cs` - 工艺技术展示 |
| | | - `Frm_Repair.cs` - 返修作业管理 |
| | | #### 手持终端 (PDA/) |
| | | |
| | | ### 7. 车间管理模块 (WW/) |
| | | **功能:** 车间现场作业和生产调度 |
| | | 提供简化的扫码作业界面,用于: |
| | | - 快速理货 |
| | | - 库存盘点 |
| | | - 条码扫描 |
| | | - 移动作业 |
| | | |
| | | **主要模块:** |
| | | - `Frm_WwBl.cs` / `Frm_WwBlDj.cs` - 车间补料申请/单据 |
| | | - `Frm_WwCl.cs` / `Frm_WwClDj.cs` - 车间领料申请/单据 |
| | | - `Frm_WwTbl.cs` / `Frm_WwTblDj.cs` - 车间台账/单据 |
| | | - `Frm_WwLlDj.cs` - 车间领料单据 |
| | | - `Frm_WwPc.cs` - 车间排产管理 |
| | | - `Frm_WwGd.cs` - 车间工单管理 |
| | | - `Frm_ProductionOrder.cs` - 生产订单管理 |
| | | --- |
| | | |
| | | ### 8. 仓库管理模块 (Warehouse/) |
| | | **功能:** 仓库综合管理功能 |
| | | ### 6.4 质量管理域 |
| | | |
| | | **主要模块:** |
| | | - `Frm_InitialBarcode.cs` - 初始条码管理 |
| | | - `Frm_ArrivalBarcode.cs` - 到货条码管理 |
| | | - `Frm_MesShouTuo.cs` / `Frm_MesShouTuoDj.cs` - 委托加工申请/单据 |
| | | - `Frm_MesShouTui.cs` / `Frm_MesShouTuiDj.cs` - 委托退货申请/单据 |
| | | - `Frm_MesDbck.cs` / `Frm_MesDbckDj.cs` - 调拨出库申请/单据 |
| | | - `Frm_MesRohIn.cs` - 原材料入库 |
| | | #### QC/ - 质量通用模块 |
| | | |
| | | ### 9. 销售管理模块 (Sales/) |
| | | **功能:** 销售订单和发货管理 |
| | | - 缺陷代码维护 (`DefectCode*.cs`) |
| | | - 检验项目设置 (`Frm_MesQaItemsDetect01.cs`) |
| | | - AQL 抽样方案 (`Frm_MesQmAql1.cs`) |
| | | - 质量标准定义 |
| | | |
| | | **主要模块:** |
| | | - `Frm_SalesOrder.cs` - 销售订单管理 |
| | | - `Frm_SalesDeliver.cs` / `Frm_SalesDeliverDj.cs` - 销售发货申请/单据 |
| | | - `Frm_SalesDeliverSelect.cs` - 发货单选择 |
| | | - `Frm_SalesReturnNotice.cs` / `Frm_SalesReturnNoticeDj.cs` - 销售退货通知申请/单据 |
| | | - `Frm_SalesReturnNoticeSelect.cs` - 退货通知选择 |
| | | - `Frm_SalesReturnNoticeSelect2.cs` - 退货通知选择2 |
| | | - `Frm_SalesReturnNoticeSelectLink.cs` - 退货通知关联选择 |
| | | #### IPQC/ - 制程检验 |
| | | |
| | | ### 10. 条码管理模块 (BarCode/) |
| | | **功能:** 条码生成、打印和管理 |
| | | | 窗体 | 功能 | |
| | | |------|------| |
| | | | `Frm_ShouJian.cs` | 首件检验 | |
| | | | `Frm_XunJian.cs` | 巡检作业 | |
| | | | H5 检验界面 | 移动端检验 | |
| | | |
| | | **主要模块:** |
| | | - `Frm_BoxCode.cs` - 箱码管理 |
| | | - `SelectBoxDaa.cs` - 选择箱档案 |
| | | - `SelectBoxItem.cs` - 选择箱项目 |
| | | #### FQC/ - 成品终检 |
| | | |
| | | ### 11. PDA移动设备模块 (PDA/) |
| | | **功能:** 移动设备集成和用户绑定 |
| | | | 窗体 | 功能 | |
| | | |------|------| |
| | | | `Frm_Fqc.cs` | 成品检验主界面 | |
| | | | `Frm_FqcDetect01.cs` | 检验数据录入 | |
| | | | `MesFqcExceptional.cs` | 异常处理 | |
| | | |
| | | **主要模块:** |
| | | - `Frm_UserBind.cs` - 用户绑定 |
| | | - `Frm_UserBindLst.cs` - 用户绑定列表 |
| | | - `Frm_AreaBind.cs` - 区域绑定 |
| | | #### RkQC/ - 来料质检 |
| | | |
| | | ### 12. 计件工资模块 (JJGZ/) |
| | | **功能:** 员工计件工资计算和管理 |
| | | | 窗体 | 功能 | |
| | | |------|------| |
| | | | `Frm_Cqfa.cs` | 抽检方案 | |
| | | | `Frm_CqfaItems.cs` | 检验项配置 | |
| | | | `Frm_QtrkDetect01.cs` | 来料检验 | |
| | | | `Frm_WwrkDetect01.cs` | 委外来料检验 | |
| | | |
| | | **主要模块:** |
| | | - `Frm_MesJJSalary.cs` - 计件工资管理 |
| | | - `Frm_MesJSSalary.cs` - 计时工资管理 |
| | | - `Frm_MesJjgzSchedule.cs` - 工资排班管理 |
| | | - `Frm_MesTimeType.cs` - 时间类型管理 |
| | | - `Frm_MesAttanCon.cs` - 考勤统计 |
| | | - `Frm_MesDeToLine.cs` - 员工分线管理 |
| | | - `Frm_MESJJERRORJS.cs` - 计件错误校正 |
| | | --- |
| | | |
| | | ### 13. 报表模块 (Rpt/) |
| | | **功能:** 报表查询和生成 |
| | | ### 6.5 制造执行域 (Work/) |
| | | |
| | | **主要模块:** |
| | | - `Frm_MesQL.cs` - MES查询报表 |
| | | #### 工序作业 |
| | | |
| | | ### 14. 系统管理模块 (Sys/) |
| | | **功能:** 系统配置和管理功能 |
| | | | 窗体 | 功能 | |
| | | |------|------| |
| | | | `Frm_WorkStart.cs` | 工序开工 | |
| | | | `Frm_WorkProcesses.cs` | 流程卡管理 | |
| | | | `Frm_Work01.cs` ~ `Frm_Work09.cs` | 各工站数据采集 | |
| | | | `Frm_Repair.cs` | 返工维修 | |
| | | |
| | | **主要模块:** |
| | | - `Frm_Config.cs` - 系统配置 |
| | | - `Frm_MesSysPageview.cs` - 系统页面视图 |
| | | - `Frm_PrintInfo.cs` - 打印信息管理 |
| | | - `Frm_PrintUser.cs` - 打印用户管理 |
| | | #### 特殊功能 |
| | | |
| | | ### 15. 用户管理模块 (User/) |
| | | **功能:** 用户权限和角色管理 |
| | | - 包含用户认证、授权、角色管理等功能 |
| | | - **Modbus 设备通信**: 支持实时读取工业设备数据 |
| | | - **SQL Server 直连**: 部分工站直接与 SQL Server 交互 |
| | | - **实时监控**: 工站状态实时展示 |
| | | |
| | | ## 支撑模块详解 |
| | | --- |
| | | |
| | | ### Entity/ - 数据实体层 |
| | | **功能:** 定义数据传输对象和业务实体 |
| | | ### 6.6 工单管理域 (WOM/) |
| | | |
| | | **核心类:** |
| | | - `LoginInfoModel.cs` - 登录用户信息管理,单例模式实现 |
| | | - `ReturnModel.cs` - API返回结果统一封装 |
| | | - `PageQueryModel.cs` - 分页查询模型 |
| | | - `XlsOutModel.cs` - Excel导出模型 |
| | | - 生产任务下达 |
| | | - 工单排产调整 |
| | | - 工单进度追踪 |
| | | - 工单状态管理 |
| | | |
| | | ### ToolBox/ - 工具类库 |
| | | **功能:** 提供通用工具函数和帮助类 |
| | | --- |
| | | |
| | | **核心类:** |
| | | - `UtilityHelper.cs` - 通用工具类,包含UI操作、HTTP通信、数据处理等 |
| | | - `LogHelper.cs` - 日志记录工具,支持调试和错误日志 |
| | | - `MsgHelper.cs` - 消息提示工具,标准化用户交互 |
| | | - `UpdateParentEventArgs.cs` - 父窗体更新事件参数 |
| | | ### 6.7 销售管理域 (Sales/) |
| | | |
| | | ### UserControl/ - 自定义控件库 |
| | | **功能:** 可复用的用户界面控件 |
| | | - 销售订单管理 |
| | | - 发货单处理 |
| | | - 退货管理 |
| | | - 客户对账 |
| | | |
| | | **主要控件分类:** |
| | | --- |
| | | |
| | | #### 查找控件系列 (UcLook*.cs) |
| | | - `UcLookCustomer.cs` - 客户查找控件 |
| | | - `UcLookSupplier.cs` - 供应商查找控件 |
| | | - `UcLookItems.cs` - 物料查找控件 |
| | | - `UcLookStaff.cs` - 员工查找控件 |
| | | - `UcLookDepartment.cs` - 部门查找控件 |
| | | - `UcLookOrg.cs` - 组织查找控件 |
| | | - `UcLookUnit.cs` - 单位查找控件 |
| | | - `UcLookUser.cs` - 用户查找控件 |
| | | - `UcLookWorkshop.cs` - 车间查找控件 |
| | | - `UcLookWorkline.cs` - 生产线查找控件 |
| | | - `UcLookGx.cs` - 工序查找控件 |
| | | - `UcLookKw.cs` - 库位查找控件 |
| | | - `UcLookCk.cs` - 仓库查找控件 |
| | | - `UcLookWwgd.cs` - 车间工单查找控件 |
| | | - `UcLookDaa.cs` - 档案查找控件 |
| | | - `UcLookHuoZhu.cs` - 货主查找控件 |
| | | - `UcLookSales.cs` - 销售查找控件 |
| | | - `UcLookPrint.cs` - 打印查找控件 |
| | | ### 6.8 委外管理域 (WW/) |
| | | |
| | | #### 选择控件系列 (Select*.cs) |
| | | - `SelectCw.cs` - 仓位选择控件 |
| | | - `SelectFont.cs` - 字体选择控件 |
| | | - `SelectHz.cs` - 货主选择控件 |
| | | - `SelectOrg.cs` - 组织选择控件 |
| | | - `SelectKw.cs` - 库位选择控件 |
| | | - `SelectCk.cs` - 仓库选择控件 |
| | | - `SelectDaa.cs` - 档案选择控件 |
| | | - `SelectCgMx.cs` - 采购明细选择控件 |
| | | - `SelectMesCgthSq.cs` - 采购退货申请选择控件 |
| | | - `SelectMesCgthSqLink.cs` - 采购退货申请关联选择控件 |
| | | - `SelectSrm.cs` - SRM选择控件 |
| | | - `SelectDeleteBar.cs` - 删除条码选择控件 |
| | | - 委外订单管理 |
| | | - 委外来料检验 |
| | | - 委外质量异常处理 |
| | | - 外协流程闭环 |
| | | |
| | | #### 通用功能控件 |
| | | - `UcPageBar.cs` - 分页导航控件 |
| | | - `UcDictionary.cs` - 数据字典控件 |
| | | - `UcDictionaryComBox.cs` - 数据字典下拉控件 |
| | | - `UcDictionarySelect.cs` - 数据字典选择控件 |
| | | - `UcCheckFlow.cs` - 审核流程控件 |
| | | - `UcToolBarMenu.cs` - 工具栏菜单控件 |
| | | --- |
| | | |
| | | #### 文件和打印控件 |
| | | - `UCUpFile.cs` - 文件上传控件 |
| | | - `UCUpFileList.cs` - 文件上传列表控件 |
| | | - `ShowFile.cs` - 文件展示控件 |
| | | - `UcBtnPrint.cs` - 打印按钮控件 |
| | | - `UcBtnPrintOne.cs` - 单次打印按钮控件 |
| | | ### 6.9 报表域 (Rpt/) |
| | | |
| | | #### 展示和布局控件 |
| | | - `ShowLogcs.cs` - 日志展示控件 |
| | | - `ShowFilter.cs` - 过滤器展示控件 |
| | | - `ShowRptWizard.cs` - 报表向导展示控件 |
| | | - `ShowUp.cs` - 上传展示控件 |
| | | - `showLayOut.cs` - 布局展示控件 |
| | | - `Toast.cs` - 消息提示控件 |
| | | - `CopyXls.cs` - Excel复制控件 |
| | | | 窗体 | 功能 | |
| | | |------|------| |
| | | | `EasyRptDesign.cs` | 报表设计器 | |
| | | | `EasyRptEdt.cs` | 报表编辑 | |
| | | | `SysHelp.cs` | 报表帮助 | |
| | | |
| | | ## 辅助项目 |
| | | **支持技术**: |
| | | - FastReport |
| | | - DevExpress Reports |
| | | - 自定义报表引擎 |
| | | |
| | | ### Gs.WeightIqc/ - IQC称重检测 |
| | | **功能:** IQC质量检验中的称重功能模块 |
| | | - 专门用于来料检验过程中的重量检测 |
| | | - 支持电子秤设备集成 |
| | | --- |
| | | |
| | | ### Gs.WeightLine/ - 生产线称重 |
| | | **功能:** 生产线实时称重监控 |
| | | - 生产过程中的重量监控 |
| | | - 支持多种称重设备协议 |
| | | ### 6.10 系统管理域 (Sys/) |
| | | |
| | | ### Gs.Setup/ - 安装程序 |
| | | **功能:** 应用程序安装包制作 |
| | | - ClickOnce部署支持 |
| | | - 自动更新配置 |
| | | | 窗体 | 功能 | |
| | | |------|------| |
| | | | `SysMenu.cs` | 菜单结构维护 | |
| | | | `Organization.cs` | 组织架构管理 | |
| | | | `DocNoRule.cs` | 单号规则配置 | |
| | | | `SysLog.cs` | 系统日志查询 | |
| | | | `Frm_Config.cs` | 系统配置 | |
| | | |
| | | ## 数据访问和通信 |
| | | --- |
| | | |
| | | ### 数据库连接 |
| | | - 使用Oracle.ManagedDataAccess 23.6.0连接Oracle数据库 |
| | | - 通过WebAPI后端服务进行数据访问 |
| | | - 支持连接字符串动态配置 |
| | | ### 6.11 用户与权限域 (User/) |
| | | |
| | | ### HTTP通信 |
| | | - 基于UtilityHelper类实现HTTP客户端功能 |
| | | - 使用Newtonsoft.Json进行数据序列化 |
| | | - 支持RESTful API调用 |
| | | | 窗体 | 功能 | |
| | | |------|------| |
| | | | `User.cs` | 用户管理 | |
| | | | `Role.cs` | 角色管理 | |
| | | | `RoleSelectAction.cs` | 角色授权 | |
| | | | `UserSetPwd.cs` | 密码变更 | |
| | | |
| | | ### 工业通信 |
| | | - 集成NModbus 3.0.81支持工业设备通信 |
| | | - 支持Modbus协议的PLC设备集成 |
| | | **权限模型**: |
| | | ``` |
| | | 用户 → 角色 → 菜单权限 + 操作权限 |
| | | ``` |
| | | |
| | | ## 界面和用户体验 |
| | | --- |
| | | |
| | | ### DevExpress集成 |
| | | - 使用DevExpress LookAndFeel实现统一主题 |
| | | - FluentDesign现代化界面风格 |
| | | - 丰富的网格控件和数据展示组件 |
| | | ### 6.12 夹具工装域 (JJGZ/) |
| | | |
| | | ### Web集成 |
| | | - CefSharp嵌入式浏览器支持 |
| | | - WebView2现代Web视图 |
| | | - 支持H5页面集成(如检测界面) |
| | | - 夹具工装台账 |
| | | - 计量设备管理 |
| | | - 点检任务与记录 |
| | | - 设备维护计划 |
| | | |
| | | ## 部署和更新 |
| | | --- |
| | | |
| | | ### 自动更新 |
| | | - 集成AutoUpdater.NET实现自动更新 |
| | | - 支持版本检测和增量更新 |
| | | - 配置化更新服务器地址 |
| | | ### 6.13 条码管理域 (BarCode/) |
| | | |
| | | ### 配置管理 |
| | | - App.config配置文件管理 |
| | | - 支持WebAPI地址、日志路径等关键配置 |
| | | - 生产和测试环境隔离 |
| | | | 窗体 | 功能 | |
| | | |------|------| |
| | | | `Frm_BarcodePrint.cs` | 条码批量打印 | |
| | | | `Frm_BarcodeTemplate.cs` | 打印模板设置 | |
| | | |
| | | ## 开发规范建议 |
| | | --- |
| | | |
| | | 1. **模块化开发**:遵循现有的按业务功能划分的目录结构 |
| | | 2. **代码复用**:充分利用UserControl中的自定义控件 |
| | | 3. **统一规范**:使用UtilityHelper、LogHelper等工具类保持代码一致性 |
| | | 4. **界面风格**:遵循DevExpress设计规范,保持界面一致性 |
| | | 5. **错误处理**:统一使用LogHelper记录日志,MsgHelper显示用户消息 |
| | | 6. **数据访问**:通过WebAPI进行数据操作,避免直接数据库访问 |
| | | ## 7. 架构与设计模式 |
| | | |
| | | 这个MES系统提供了完整的制造执行管理功能,从基础数据管理到生产执行,从质量控制到仓库管理,形成了完整的制造业务闭环。系统架构清晰,模块职责明确,为制造企业提供了强大的信息化支撑平台。 |
| | | ### 7.1 多层架构 |
| | | |
| | | ``` |
| | | ┌─────────────────────────────────────────┐ |
| | | │ UI Layer (WinForms) │ |
| | | │ DevExpress FluentDesign + 150+ 控件 │ |
| | | └─────────────────┬───────────────────────┘ |
| | | │ HTTP/JSON REST API |
| | | ┌─────────────────▼───────────────────────┐ |
| | | │ Business Logic Layer (Client) │ |
| | | │ 窗体逻辑 + ToolBox 工具类 + 动态加载 │ |
| | | └─────────────────┬───────────────────────┘ |
| | | │ |
| | | ┌─────────────────▼───────────────────────┐ |
| | | │ Backend REST API (别处项目) │ |
| | | │ 身份验证 + 菜单 + 业务逻辑 + 数据访问 │ |
| | | └─────────────────┬───────────────────────┘ |
| | | │ |
| | | ┌─────────────────▼───────────────────────┐ |
| | | │ Data Layer │ |
| | | │ Oracle / SQL Server │ |
| | | └─────────────────────────────────────────┘ |
| | | ``` |
| | | |
| | | ### 7.2 核心设计模式 |
| | | |
| | | #### 模式 1: HTTP 请求集中化 |
| | | |
| | | **所有 API 调用统一使用 `UtilityHelper.HttpPost()`**: |
| | | |
| | | ```csharp |
| | | public static string HttpPost(string url, string method, string param, bool isLoading = true) |
| | | { |
| | | // 1. 拼接完整 URL (WebApiUrl + url) |
| | | // 2. 添加 Bearer Token 认证头 |
| | | // 3. 显示 Loading 对话框 (可选) |
| | | // 4. 发送 POST 请求 |
| | | // 5. 返回 JSON 字符串 |
| | | // 6. 超时时间: 150 秒 |
| | | } |
| | | ``` |
| | | |
| | | **使用示例**: |
| | | |
| | | ```csharp |
| | | string jsonParam = JsonConvert.SerializeObject(new { |
| | | pageIndex = 1, |
| | | pageSize = 50 |
| | | }); |
| | | |
| | | string result = UtilityHelper.HttpPost( |
| | | "BasicData/Customer/GetListPage", // 相对路径 |
| | | "GetListPage", // 方法名 |
| | | jsonParam, // JSON 参数 |
| | | true // 显示加载框 |
| | | ); |
| | | |
| | | dynamic dy = UtilityHelper.ReturnToDynamic(result); |
| | | if (dy.code == 200) { |
| | | // 处理数据 |
| | | } |
| | | ``` |
| | | |
| | | #### 模式 2: 动态窗体加载 (反射) |
| | | |
| | | ```csharp |
| | | // 在 FrmMain.cs 中 |
| | | private void LoadForm(string namespacePath) |
| | | { |
| | | // 通过命名空间路径创建窗体实例 |
| | | string fullName = $"Gs.DevApp.DevFrm.{namespacePath}"; |
| | | Form form = (Form)Assembly.GetExecutingAssembly().CreateInstance(fullName); |
| | | |
| | | if (form != null) |
| | | { |
| | | // 配置为子窗体 |
| | | form.FormBorderStyle = FormBorderStyle.None; |
| | | form.TopLevel = false; |
| | | form.Dock = DockStyle.Fill; |
| | | |
| | | // 添加到 TabPage |
| | | XtraTabPage tabPage = new XtraTabPage(); |
| | | tabPage.Text = form.Text; |
| | | tabPage.Controls.Add(form); |
| | | xtraTabControl.TabPages.Add(tabPage); |
| | | xtraTabControl.SelectedTabPage = tabPage; |
| | | |
| | | form.Show(); |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | **好处**: |
| | | - 菜单结构完全由后端控制 |
| | | - 无需修改代码即可调整菜单 |
| | | - 支持动态权限控制 |
| | | |
| | | #### 模式 3: TabPage 缓存机制 |
| | | |
| | | ```csharp |
| | | // 防止重复打开同一窗体 |
| | | private Dictionary<string, XtraTabPage> tabPageDict = new Dictionary<string, XtraTabPage>(); |
| | | |
| | | private void OpenForm(string formName) |
| | | { |
| | | if (tabPageDict.ContainsKey(formName)) |
| | | { |
| | | // 已存在,激活现有 Tab |
| | | xtraTabControl.SelectedTabPage = tabPageDict[formName]; |
| | | } |
| | | else |
| | | { |
| | | // 新建 Tab |
| | | XtraTabPage newPage = CreateNewTabPage(formName); |
| | | tabPageDict[formName] = newPage; |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | #### 模式 4: 父子窗体事件通信 |
| | | |
| | | **子窗体触发父窗体刷新**: |
| | | |
| | | ```csharp |
| | | // 在子窗体中 |
| | | UpdateParentEventArgs args = new UpdateParentEventArgs(this, "Refresh"); |
| | | // 触发事件,通知父窗体 |
| | | |
| | | // 在父窗体中 |
| | | private void ChildForm_UpdateParent(object sender, UpdateParentEventArgs e) |
| | | { |
| | | if (e.Action == "Refresh") |
| | | { |
| | | LoadData(); // 刷新数据 |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | #### 模式 5: 标准 CRUD 窗体模板 |
| | | |
| | | **典型窗体结构**: |
| | | |
| | | ```csharp |
| | | public partial class Frm_Customer : DevExpress.XtraEditors.XtraForm |
| | | { |
| | | private UcToolBarMenu ucToolBar; // 工具栏 (增删改查) |
| | | private UcPageBar ucPageBar; // 分页控件 |
| | | private GridControl gridControl; // 数据表格 |
| | | |
| | | private void InitializeForm() |
| | | { |
| | | // 1. 初始化工具栏 |
| | | ucToolBar.AddClick += BtnAdd_Click; |
| | | ucToolBar.EditClick += BtnEdit_Click; |
| | | ucToolBar.DeleteClick += BtnDelete_Click; |
| | | ucToolBar.RefreshClick += BtnRefresh_Click; |
| | | |
| | | // 2. 初始化分页 |
| | | ucPageBar.PageChanged += LoadData; |
| | | |
| | | // 3. 加载数据 |
| | | LoadData(); |
| | | } |
| | | |
| | | private void LoadData() |
| | | { |
| | | string jsonParam = JsonConvert.SerializeObject(new { |
| | | pageIndex = ucPageBar.CurrentPage, |
| | | pageSize = ucPageBar.PageSize |
| | | }); |
| | | |
| | | string result = UtilityHelper.HttpPost( |
| | | "BasicData/Customer/GetListPage", |
| | | "GetListPage", |
| | | jsonParam |
| | | ); |
| | | |
| | | dynamic dy = UtilityHelper.ReturnToDynamic(result); |
| | | if (dy.code == 200) |
| | | { |
| | | gridControl.DataSource = dy.data; |
| | | ucPageBar.TotalRecords = dy.totalCount; |
| | | } |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## 8. 工具类与公共组件 |
| | | |
| | | ### 8.1 UtilityHelper.cs - 核心工具类 |
| | | |
| | | #### HTTP 请求 |
| | | |
| | | ```csharp |
| | | // 标准 POST 请求 |
| | | string result = UtilityHelper.HttpPost( |
| | | "User/UserLogin", // 相对路径 |
| | | "UserLogin", // 方法名 |
| | | jsonParam, // JSON 参数 |
| | | true // 显示加载框 |
| | | ); |
| | | ``` |
| | | |
| | | #### JSON 解析 |
| | | |
| | | ```csharp |
| | | // 解析为 dynamic 对象 |
| | | dynamic dy = UtilityHelper.ReturnToDynamic(result); |
| | | |
| | | // 解析为分页数据表 |
| | | DataTable dt = UtilityHelper.ReturnToTablePage(result); |
| | | ``` |
| | | |
| | | #### Grid 初始化 |
| | | |
| | | ```csharp |
| | | // 初始化表格控件 |
| | | UtilityHelper.InitGridControl( |
| | | gridControl, |
| | | gridView, |
| | | columns, // 列定义 |
| | | dataSource, // 数据源 |
| | | allowEdit: false, |
| | | allowDelete: false |
| | | ); |
| | | ``` |
| | | |
| | | ### 8.2 LogHelper.cs - 日志工具 |
| | | |
| | | ```csharp |
| | | // 记录信息日志 |
| | | LogHelper.WriteLog("用户登录成功", LogHelper.LogType.Info); |
| | | |
| | | // 记录错误日志 |
| | | LogHelper.WriteLog($"API 调用失败: {ex.Message}", LogHelper.LogType.Error); |
| | | |
| | | // 记录警告 |
| | | LogHelper.WriteLog("数据异常,使用默认值", LogHelper.LogType.Warning); |
| | | ``` |
| | | |
| | | **日志文件位置**: `logs/{yyyy-MM-dd}.log` |
| | | |
| | | ### 8.3 MsgHelper.cs - 消息提示 |
| | | |
| | | ```csharp |
| | | // 成功提示 |
| | | MsgHelper.ShowSuccess("操作成功!"); |
| | | |
| | | // 错误提示 |
| | | MsgHelper.ShowError("操作失败,请重试!"); |
| | | |
| | | // 警告提示 |
| | | MsgHelper.ShowWarning("数据不完整!"); |
| | | |
| | | // 确认对话框 |
| | | if (MsgHelper.ShowConfirm("确定要删除吗?") == DialogResult.Yes) |
| | | { |
| | | // 执行删除 |
| | | } |
| | | ``` |
| | | |
| | | ### 8.4 Toast.cs - 轻量提示 |
| | | |
| | | ```csharp |
| | | // 显示 3 秒提示 |
| | | Toast.Show("保存成功", 3); |
| | | |
| | | // 显示自定义时长 |
| | | Toast.Show("数据已更新", 5); // 5 秒 |
| | | ``` |
| | | |
| | | ### 8.5 可复用控件 |
| | | |
| | | #### UcToolBarMenu - 工具栏控件 |
| | | |
| | | ```csharp |
| | | UcToolBarMenu toolBar = new UcToolBarMenu(); |
| | | toolBar.AddClick += (s, e) => { /* 新增 */ }; |
| | | toolBar.EditClick += (s, e) => { /* 编辑 */ }; |
| | | toolBar.DeleteClick += (s, e) => { /* 删除 */ }; |
| | | toolBar.RefreshClick += (s, e) => { /* 刷新 */ }; |
| | | toolBar.ExportClick += (s, e) => { /* 导出 */ }; |
| | | ``` |
| | | |
| | | #### UcPageBar - 分页控件 |
| | | |
| | | ```csharp |
| | | UcPageBar pageBar = new UcPageBar(); |
| | | pageBar.PageSize = 50; |
| | | pageBar.TotalRecords = 1000; |
| | | pageBar.PageChanged += (s, e) => { |
| | | LoadData(pageBar.CurrentPage, pageBar.PageSize); |
| | | }; |
| | | ``` |
| | | |
| | | #### UcDictionarySelect - 数据字典下拉 |
| | | |
| | | ```csharp |
| | | UcDictionarySelect cmbStatus = new UcDictionarySelect(); |
| | | cmbStatus.DictionaryType = "OrderStatus"; // 字典类型 |
| | | cmbStatus.LoadData(); |
| | | ``` |
| | | |
| | | #### UcLook* - 数据查找控件 |
| | | |
| | | **60+ 查找控件,覆盖所有主数据**: |
| | | |
| | | ```csharp |
| | | // 客户查找 |
| | | UcLookCustomer lookCustomer = new UcLookCustomer(); |
| | | lookCustomer.ShowDialog(); |
| | | string customerId = lookCustomer.SelectedId; |
| | | string customerName = lookCustomer.SelectedName; |
| | | |
| | | // 物料查找 |
| | | UcLookItems lookItems = new UcLookItems(); |
| | | lookItems.ShowDialog(); |
| | | string itemId = lookItems.SelectedId; |
| | | |
| | | // 仓库查找 |
| | | UcLookWarehouse lookWarehouse = new UcLookWarehouse(); |
| | | lookWarehouse.ShowDialog(); |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## 9. 配置说明 |
| | | |
| | | ### 9.1 App.config 关键配置 |
| | | |
| | | **位置**: `Gs.DevApp\App.config` (运行时为 `Gs.DevApp.exe.config`) |
| | | |
| | | #### 核心配置项 |
| | | |
| | | ```xml |
| | | <appSettings> |
| | | <!-- 后端 API 地址 (必须配置) --> |
| | | <add key="WebApiUrl" value="http://192.168.0.51:8081/" /> |
| | | |
| | | <!-- 产品名称 --> |
| | | <add key="ProductName" value="G-MES V2.0" /> |
| | | |
| | | <!-- 版本号 --> |
| | | <add key="Version" value="0.1" /> |
| | | |
| | | <!-- 日志目录 (相对路径或绝对路径) --> |
| | | <add key="LogPath" value="logs" /> |
| | | |
| | | <!-- 分页大小 --> |
| | | <add key="PageSize" value="50" /> |
| | | |
| | | <!-- 启用自动更新 (0=禁用, 1=启用) --> |
| | | <add key="IsAutoUpdater" value="0" /> |
| | | |
| | | <!-- 自动更新配置文件 URL --> |
| | | <add key="AutoUpdaterXml" value="http://192.168.0.51:8086/AutoUpdater/AutoUpdater.xml" /> |
| | | |
| | | <!-- Toast 提示框显示时长 (秒) --> |
| | | <add key="ToastSeconds" value="5" /> |
| | | |
| | | <!-- 水检超时时间 (秒) --> |
| | | <add key="AsyncSeconds" value="2" /> |
| | | |
| | | <!-- 是否启用水检及工位码功能 (0=禁用, 1=启用) --> |
| | | <add key="IsWater" value="0" /> |
| | | |
| | | <!-- IQC 称重读取超时 (毫秒) --> |
| | | <add key="IqcGetWeight" value="3000" /> |
| | | |
| | | <!-- 定时邮件发送间隔 (毫秒) --> |
| | | <add key="TimingMailInterval" value="10000" /> |
| | | </appSettings> |
| | | ``` |
| | | |
| | | ### 9.2 用户设置 (自动保存) |
| | | |
| | | ```xml |
| | | <userSettings> |
| | | <Gs.DevApp.Properties.Settings> |
| | | <!-- 用户名 (记住密码功能) --> |
| | | <setting name="userName" serializeAs="String"> |
| | | <value /> |
| | | </setting> |
| | | |
| | | <!-- 密码 (加密存储) --> |
| | | <setting name="userPwd" serializeAs="String"> |
| | | <value /> |
| | | </setting> |
| | | |
| | | <!-- 记住密码 --> |
| | | <setting name="remember" serializeAs="String"> |
| | | <value>False</value> |
| | | </setting> |
| | | |
| | | <!-- 字体设置 --> |
| | | <setting name="fontSizeName" serializeAs="String"> |
| | | <value>宋体,10</value> |
| | | </setting> |
| | | |
| | | <!-- 是否启用称重功能 --> |
| | | <setting name="isWeight" serializeAs="String"> |
| | | <value>False</value> |
| | | </setting> |
| | | </Gs.DevApp.Properties.Settings> |
| | | </userSettings> |
| | | ``` |
| | | |
| | | ### 9.3 部署前必改配置 |
| | | |
| | | **开发环境 → 生产环境**: |
| | | |
| | | | 配置项 | 开发环境 | 生产环境 | |
| | | |--------|----------|----------| |
| | | | `WebApiUrl` | `http://192.168.0.51:8081/` | `http://your-server:port/` | |
| | | | `IsAutoUpdater` | `0` (禁用) | `1` (启用) | |
| | | | `AutoUpdaterXml` | 内网地址 | 生产环境 URL | |
| | | | `LogPath` | `logs` | 建议使用公共目录 | |
| | | |
| | | --- |
| | | |
| | | ## 10. 部署指南 |
| | | |
| | | ### 10.1 构建 Release 版本 |
| | | |
| | | ```bash |
| | | # 清理并重新构建 |
| | | msbuild Gs.DevApp\Gs.DevApp.csproj /t:Clean |
| | | msbuild Gs.DevApp\Gs.DevApp.csproj /t:Rebuild /p:Configuration=Release /p:Platform="Any CPU" |
| | | ``` |
| | | |
| | | ### 10.2 发布目录结构 |
| | | |
| | | ``` |
| | | Gs.DevApp.exe # 主程序 |
| | | Gs.DevApp.exe.config # 配置文件 (必须修改) |
| | | DevExpress.*.dll # DevExpress 组件 |
| | | CefSharp.*.dll # CefSharp 组件 |
| | | AutoUpdater.NET.dll # 自动更新组件 |
| | | Newtonsoft.Json.dll # JSON 库 |
| | | Oracle.ManagedDataAccess.dll # Oracle 驱动 |
| | | x86/ # CefSharp x86 本地库 (必须) |
| | | x64/ # CefSharp x64 本地库 (必须) |
| | | locales/ # CefSharp 语言包 |
| | | logs/ # 日志目录 (运行时创建) |
| | | ``` |
| | | |
| | | ### 10.3 使用安装程序 |
| | | |
| | | 1. 打开 `Gs.Setup\Gs.Setup.vdproj` |
| | | 2. 配置安装程序属性: |
| | | - **ProductName**: G-MES V2.0 |
| | | - **Manufacturer**: 蓝宝 |
| | | - **Version**: 与 App.config 保持一致 |
| | | 3. 右键项目 → 生成 |
| | | 4. 输出: `Gs.Setup\Release\Gs.Setup.msi` |
| | | |
| | | ### 10.4 自动更新配置 |
| | | |
| | | #### AutoUpdater.xml 示例 |
| | | |
| | | ```xml |
| | | <?xml version="1.0" encoding="utf-8"?> |
| | | <update> |
| | | <version>0.2.0.0</version> |
| | | <url>http://your-server/updates/Gs.DevApp_v0.2.0.0.zip</url> |
| | | <changelog> |
| | | <![CDATA[ |
| | | <h3>版本 0.2.0.0 更新内容</h3> |
| | | <ul> |
| | | <li>新增:条码批量打印功能</li> |
| | | <li>优化:仓库出入库流程</li> |
| | | <li>修复:质检数据保存失败问题</li> |
| | | </ul> |
| | | ]]> |
| | | </changelog> |
| | | <mandatory>false</mandatory> |
| | | </update> |
| | | ``` |
| | | |
| | | #### 启用自动更新 |
| | | |
| | | 在 `App.config` 中: |
| | | |
| | | ```xml |
| | | <add key="IsAutoUpdater" value="1" /> |
| | | <add key="AutoUpdaterXml" value="http://your-server/updates/AutoUpdater.xml" /> |
| | | ``` |
| | | |
| | | ### 10.5 部署检查清单 |
| | | |
| | | - [ ] 修改 `WebApiUrl` 为生产环境地址 |
| | | - [ ] 检查 `IsAutoUpdater` 配置 |
| | | - [ ] 确保 `x86/` 和 `x64/` 目录完整 |
| | | - [ ] 测试数据库连接 |
| | | - [ ] 验证日志目录写权限 |
| | | - [ ] 测试自动更新功能 |
| | | - [ ] 检查 DevExpress 许可证 |
| | | - [ ] 备份配置文件 |
| | | |
| | | --- |
| | | |
| | | ## 11. 开发规范与最佳实践 |
| | | |
| | | ### 11.1 代码组织规范 |
| | | |
| | | #### 新增模块 |
| | | |
| | | ``` |
| | | DevFrm/ |
| | | └── YourModule/ # 新模块目录 |
| | | ├── Frm_Main.cs # 主窗体 |
| | | ├── Frm_Edit.cs # 编辑窗体 |
| | | ├── Dlg_Select.cs # 选择对话框 |
| | | └── Models/ # 本地模型 (可选) |
| | | ``` |
| | | |
| | | #### 命名规范 |
| | | |
| | | | 类型 | 命名规则 | 示例 | |
| | | |------|----------|------| |
| | | | 主窗体 | `Frm_{业务名}` | `Frm_Customer.cs` | |
| | | | 编辑窗体 | `Frm_{业务名}Edit` | `Frm_CustomerEdit.cs` | |
| | | | 对话框 | `Dlg_{业务名}` | `Dlg_SelectCustomer.cs` | |
| | | | 用户控件 | `Uc{功能名}` | `UcToolBarMenu.cs` | |
| | | |
| | | ### 11.2 API 调用规范 |
| | | |
| | | #### ✅ 正确做法 |
| | | |
| | | ```csharp |
| | | // 使用 UtilityHelper.HttpPost |
| | | string jsonParam = JsonConvert.SerializeObject(new { |
| | | id = customerId |
| | | }); |
| | | |
| | | string result = UtilityHelper.HttpPost( |
| | | "BasicData/Customer/GetById", |
| | | "GetById", |
| | | jsonParam |
| | | ); |
| | | |
| | | dynamic dy = UtilityHelper.ReturnToDynamic(result); |
| | | if (dy.code == 200) |
| | | { |
| | | // 处理数据 |
| | | } |
| | | else |
| | | { |
| | | MsgHelper.ShowError(dy.msg.ToString()); |
| | | LogHelper.WriteLog($"API Error: {dy.msg}", LogHelper.LogType.Error); |
| | | } |
| | | ``` |
| | | |
| | | #### ❌ 错误做法 |
| | | |
| | | ```csharp |
| | | // 不要直接使用 HttpClient、WebRequest 等 |
| | | // 不要跳过错误处理 |
| | | // 不要忽略日志记录 |
| | | ``` |
| | | |
| | | ### 11.3 异常处理规范 |
| | | |
| | | ```csharp |
| | | try |
| | | { |
| | | // 业务逻辑 |
| | | string result = UtilityHelper.HttpPost(...); |
| | | dynamic dy = UtilityHelper.ReturnToDynamic(result); |
| | | |
| | | if (dy.code == 200) |
| | | { |
| | | // 成功处理 |
| | | } |
| | | else |
| | | { |
| | | // API 返回错误 |
| | | MsgHelper.ShowError(dy.msg.ToString()); |
| | | LogHelper.WriteLog($"API Error: {dy.msg}", LogHelper.LogType.Error); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | // 捕获异常 |
| | | MsgHelper.ShowError($"操作失败: {ex.Message}"); |
| | | LogHelper.WriteLog($"Exception in {MethodName}: {ex}", LogHelper.LogType.Error); |
| | | } |
| | | ``` |
| | | |
| | | ### 11.4 UI 更新规范 |
| | | |
| | | #### 长时间操作使用后台线程 |
| | | |
| | | ```csharp |
| | | // 使用 BackgroundWorker |
| | | BackgroundWorker worker = new BackgroundWorker(); |
| | | worker.DoWork += (s, e) => { |
| | | // 耗时操作 |
| | | e.Result = PerformLongOperation(); |
| | | }; |
| | | worker.RunWorkerCompleted += (s, e) => { |
| | | // UI 更新 |
| | | UpdateUI(e.Result); |
| | | }; |
| | | worker.RunWorkerAsync(); |
| | | ``` |
| | | |
| | | #### 避免 UI 阻塞 |
| | | |
| | | ```csharp |
| | | // ❌ 阻塞 UI 线程 |
| | | Thread.Sleep(5000); |
| | | |
| | | // ✅ 使用定时器或异步 |
| | | Timer timer = new Timer(); |
| | | timer.Interval = 5000; |
| | | timer.Tick += (s, e) => { |
| | | timer.Stop(); |
| | | // 执行操作 |
| | | }; |
| | | timer.Start(); |
| | | ``` |
| | | |
| | | ### 11.5 控件复用规范 |
| | | |
| | | #### 优先使用现有控件 |
| | | |
| | | ```csharp |
| | | // ✅ 使用 UcLookCustomer |
| | | UcLookCustomer lookCustomer = new UcLookCustomer(); |
| | | if (lookCustomer.ShowDialog() == DialogResult.OK) |
| | | { |
| | | txtCustomerId.Text = lookCustomer.SelectedId; |
| | | txtCustomerName.Text = lookCustomer.SelectedName; |
| | | } |
| | | |
| | | // ❌ 不要自己写选择对话框 |
| | | // 已有 60+ UcLook* 控件可用 |
| | | ``` |
| | | |
| | | ### 11.6 日志记录规范 |
| | | |
| | | ```csharp |
| | | // 关键操作前后记录日志 |
| | | LogHelper.WriteLog($"开始保存客户数据: {customerId}", LogHelper.LogType.Info); |
| | | |
| | | try |
| | | { |
| | | string result = UtilityHelper.HttpPost(...); |
| | | LogHelper.WriteLog($"保存成功: {customerId}", LogHelper.LogType.Info); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.WriteLog($"保存失败: {ex.Message}", LogHelper.LogType.Error); |
| | | } |
| | | ``` |
| | | |
| | | ### 11.7 配置管理规范 |
| | | |
| | | ```csharp |
| | | // ✅ 从配置文件读取 |
| | | string apiUrl = ConfigurationManager.AppSettings["WebApiUrl"]; |
| | | int pageSize = int.Parse(ConfigurationManager.AppSettings["PageSize"]); |
| | | |
| | | // ❌ 不要硬编码 |
| | | // string apiUrl = "http://192.168.0.51:8081/"; |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## 12. 常见问题与故障排查 |
| | | |
| | | ### 12.1 构建失败 |
| | | |
| | | #### 问题: DevExpress 组件找不到 |
| | | |
| | | **原因**: DevExpress 未安装或 NuGet 源未配置 |
| | | |
| | | **解决方案**: |
| | | |
| | | 1. 安装 DevExpress v22.2 |
| | | 2. 配置 NuGet 源: |
| | | ``` |
| | | 工具 → NuGet 包管理器 → 程序包管理器设置 → 程序包源 |
| | | 添加: https://nuget.devexpress.com/<your_feed_key>/api |
| | | ``` |
| | | 3. 还原 NuGet 包: |
| | | ```bash |
| | | nuget restore GsDevSolution.sln |
| | | ``` |
| | | |
| | | #### 问题: CefSharp 本地库加载失败 |
| | | |
| | | **原因**: `x86/` 或 `x64/` 目录缺失 |
| | | |
| | | **解决方案**: |
| | | |
| | | 确保输出目录包含: |
| | | ``` |
| | | x86/ |
| | | libcef.dll |
| | | chrome_elf.dll |
| | | ... |
| | | x64/ |
| | | libcef.dll |
| | | chrome_elf.dll |
| | | ... |
| | | ``` |
| | | |
| | | ### 12.2 运行时错误 |
| | | |
| | | #### 问题: "无法连接到 API 服务器" |
| | | |
| | | **排查步骤**: |
| | | |
| | | 1. 检查 `App.config` 中的 `WebApiUrl` |
| | | 2. 使用浏览器访问 API 地址 |
| | | 3. 检查网络连接 |
| | | 4. 查看日志文件 `logs/{yyyy-MM-dd}.log` |
| | | |
| | | #### 问题: "登录失败" |
| | | |
| | | **排查步骤**: |
| | | |
| | | 1. 检查用户名密码是否正确 |
| | | 2. 检查后端 API 是否正常 |
| | | 3. 查看日志文件中的错误信息 |
| | | 4. 检查数据库连接 |
| | | |
| | | #### 问题: "窗体加载失败" |
| | | |
| | | **原因**: 反射创建窗体失败 |
| | | |
| | | **排查步骤**: |
| | | |
| | | 1. 检查命名空间是否正确 |
| | | 2. 检查窗体类是否为 public |
| | | 3. 检查窗体是否有无参构造函数 |
| | | 4. 查看日志中的异常堆栈 |
| | | |
| | | ### 12.3 性能问题 |
| | | |
| | | #### 问题: Grid 加载慢 |
| | | |
| | | **优化方案**: |
| | | |
| | | 1. 启用分页 (使用 `UcPageBar`) |
| | | 2. 减少列数 |
| | | 3. 禁用不必要的 Grid 特性 |
| | | 4. 使用虚拟模式 (大数据量时) |
| | | |
| | | ```csharp |
| | | gridView.OptionsView.ColumnAutoWidth = false; |
| | | gridView.BestFitColumns(); |
| | | ``` |
| | | |
| | | #### 问题: API 请求超时 |
| | | |
| | | **解决方案**: |
| | | |
| | | 1. 检查网络状况 |
| | | 2. 优化后端查询 |
| | | 3. 增加超时时间 (修改 `UtilityHelper.cs` 中的超时设置) |
| | | |
| | | ### 12.4 日志相关 |
| | | |
| | | #### 查看日志 |
| | | |
| | | **位置**: `logs/{yyyy-MM-dd}.log` |
| | | |
| | | **日志级别**: |
| | | - `[Info]` - 信息 |
| | | - `[Warning]` - 警告 |
| | | - `[Error]` - 错误 |
| | | |
| | | #### 日志写入失败 |
| | | |
| | | **原因**: 无写权限 |
| | | |
| | | **解决方案**: |
| | | |
| | | 1. 以管理员身份运行 |
| | | 2. 修改 `LogPath` 为公共目录 |
| | | 3. 赋予应用目录写权限 |
| | | |
| | | ### 12.5 数据库连接问题 |
| | | |
| | | #### Oracle 连接失败 |
| | | |
| | | **检查**: |
| | | - Oracle.ManagedDataAccess.dll 是否存在 |
| | | - 连接字符串是否正确 |
| | | - 网络是否可达 |
| | | |
| | | #### SQL Server 连接失败 |
| | | |
| | | **检查**: |
| | | - SQL Server 是否启用 TCP/IP |
| | | - 端口是否开放 (默认 1433) |
| | | - 防火墙规则 |
| | | |
| | | ### 12.6 自动更新问题 |
| | | |
| | | #### 更新检查失败 |
| | | |
| | | **排查**: |
| | | |
| | | 1. 检查 `AutoUpdaterXml` URL 是否可访问 |
| | | 2. 检查 XML 格式是否正确 |
| | | 3. 检查网络连接 |
| | | 4. 查看日志文件 |
| | | |
| | | #### 更新下载失败 |
| | | |
| | | **排查**: |
| | | |
| | | 1. 检查更新包 URL 是否有效 |
| | | 2. 检查磁盘空间 |
| | | 3. 检查写权限 |
| | | |
| | | --- |
| | | |
| | | ## 附录 A: 后端 API 端点 |
| | | |
| | | ### 认证与用户 |
| | | |
| | | | 端点 | 说明 | |
| | | |------|------| |
| | | | `User/UserLogin` | 用户登录 | |
| | | | `User/GetUserLoginInfo` | 获取用户信息和菜单 | |
| | | | `User/SetUserOrg` | 切换组织 | |
| | | |
| | | ### 组织与菜单 |
| | | |
| | | | 端点 | 说明 | |
| | | |------|------| |
| | | | `Organization/GetListPage` | 获取组织列表 | |
| | | | `MenuAction/GetModelByNameSpace` | 根据命名空间获取窗体信息 | |
| | | |
| | | ### 通用列表查询 |
| | | |
| | | **模式**: `{Module}/{Entity}/GetListPage` |
| | | |
| | | 示例: |
| | | - `BasicData/Customer/GetListPage` - 客户列表 |
| | | - `BasicData/Items/GetListPage` - 物料列表 |
| | | - `Warehouse/Inventory/GetListPage` - 库存列表 |
| | | |
| | | --- |
| | | |
| | | ## 附录 B: 快速参考 |
| | | |
| | | ### 常用命令 |
| | | |
| | | ```bash |
| | | # 还原 NuGet 包 |
| | | nuget restore GsDevSolution.sln |
| | | |
| | | # Debug 构建 |
| | | msbuild GsDevSolution.sln /p:Configuration=Debug |
| | | |
| | | # Release 构建 |
| | | msbuild GsDevSolution.sln /p:Configuration=Release |
| | | |
| | | # 运行程序 |
| | | Gs.DevApp\bin\Debug\Gs.DevApp.exe |
| | | ``` |
| | | |
| | | ### 常用代码片段 |
| | | |
| | | ```csharp |
| | | // API 调用 |
| | | string result = UtilityHelper.HttpPost("Module/Action", "Action", jsonParam); |
| | | dynamic dy = UtilityHelper.ReturnToDynamic(result); |
| | | |
| | | // 消息提示 |
| | | MsgHelper.ShowSuccess("操作成功"); |
| | | MsgHelper.ShowError("操作失败"); |
| | | |
| | | // 日志记录 |
| | | LogHelper.WriteLog("消息内容", LogHelper.LogType.Info); |
| | | |
| | | // Toast 提示 |
| | | Toast.Show("提示内容", 3); |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## 附录 C: 相关文档 |
| | | |
| | | - **CLAUDE.md** - Claude Code AI 辅助开发指南 |
| | | - **DEVFRM_GUIDE.md** - DevFrm 模块详细指南 |
| | | - **ANALYSIS_REPORT.md** - 架构分析报告 |
| | | - **DevFrm详细分析.md** - 模块分析 (中文) |
| | | |
| | | --- |
| | | |
| | | ## 联系与支持 |
| | | |
| | | 如需技术支持或报告问题,请联系开发团队。 |
| | | |
| | | **最后更新**: 2025-10-16 |
| | | |
| | | --- |
| | | |
| | | *本文档随项目持续更新,建议定期查看最新版本。* |