编辑 | blame | 历史 | 原始文档

项目分析报告

一、项目概况

LB_MesClient 解决方案提供面向工厂现场的桌面客户端套件,核心是基于 .NET Framework 4.8 的 DevExpress WinForms 应用 Gs.DevApp,同时配套 Gs.WeightIqcGs.WeightLine 等串口称重采集站点以及 Gs.Setup 安装项目。整体采用汉化界面,围绕 WebApi (App.config 中默认为 http://192.168.0.51:8081/) 提供的 MES 服务进行数据交互。

二、解决方案结构

  • Gs.DevApp/:主客户端,DevFrm/ 按业务领域拆分(QC 质检、Work 制程、Sys 系统配置、Warehouse 仓储等),UserControl/ 提供跨窗体复用的工具条、分页、字典选择器,ToolBox/ 聚合工具类(HTTP、对话框、日志、事件传递等),Entity/ 存放轻量级 DTO。
  • Gs.WeightIqc/Gs.WeightLine/:串口/Modbus 采集程序,周期性读取重量数据并调用 WorkWeight/EditModel WebApi 上传。
  • Gs.Setup/:Visual Studio Installer (.vdproj) 用于打包发布。
  • packages/:本地 NuGet 缓存,包含 DevExpress、CefSharp、NModbus、System.* 各版本。

三、核心技术栈与主要依赖

  • UI 框架:DevExpress v22.2(FluentDesign、XtraGrid、XtraTab、WaitDialog 等),FastReport 嵌入式报表。
  • 浏览内嵌:CefSharp 109 用于内嵌 Web 页或登陆扩展。
  • 自动更新:AutoUpdater.NET(可选,IsAutoUpdater=1 时启用)。
  • 工控通信:NModbus(TCP 与 RTU)、SerialPort 直接读取称重仪表。
  • JSON 与配置:Newtonsoft.Json 处理 API 响应,ConfigurationManager 读取 App.config

四、业务与基础模块分析

1. 登录与权限

FrmLogin 处理自动更新、字体加载、账号记忆,调用 User/UserLogin 并将登录 GUID 写入 LoginInfoModel。错误通过 MsgHelper 封装的 MessageBox 呈现。

2. 主界面导航

FrmMain 基于 DevExpress FluentDesignForm,实现:
- 仿 ERP 左侧导航树,通过 UtilityHelper.HttpPost("User/GetUserLoginInfo") 获得菜单、组织信息;
- 页签管理(Dictionary<string, XtraTabPage> 缓存),右键菜单支持关闭当前/其它页;
- 工具栏组织切换、字体显示、版本提示;
- 事件委托 UpdateParentEventArgs 用于子窗体请求父窗体刷新。

3. 业务窗体

DevFrm 下按业务拆分,例如:
- QC:缺陷代码、检验模板、异常管理等窗体,配套 Models DTO;
- Work:生产报工、工序启动 (Frm_WorkStart)、工艺参数采集 (Frm_Work01 包含 Modbus 轮询、SQL Server 数据读取);
- Sys:菜单、组织、编号规则、日志管理等系统配置界面。
窗体普遍调用 UtilityHelper.HttpPost 与后端交互,并使用 WaitDialogForm 指示加载。

4. 用户控件与工具箱

  • UserControl/UcToolBarMenuUcPageBar 封装常见操作按钮、分页逻辑;
  • ToolBox/UtilityHelper 集成 HTTP 请求、JSON 解析 (ReturnToDynamic/ReturnToTablePage)、资源加载、Grid 默认化、FilterEntity 等;
  • ToolBox/LogHelper 将日志按日期写入 logs/{yyyy-MM-dd}.log

5. 硬件集成

Gs.WeightIqcGs.WeightLine 共用 ToolBox,利用 SerialPort + NModbus.Serial 读取称重仪寄存器,并通过线程/计时器异步上传;界面提供串口参数、采集开关、线体选择。

五、配置与环境依赖

  • Gs.DevApp/App.config 配置 WebApi 地址、日志目录、自动更新、超时(AsyncSeconds)、称重等待等;需按环境调整 IP 与端口。
  • Frm_Work01 等处存在硬编码 SQL Server 连接串(含账号 mesUser 与明文密码)及 Modbus 设备 IP (192.168.60.51:502),部署前必须审查并抽取至配置。
  • 安装目录默认写入 logs/,需确保客户端具备写权限。

六、构建与部署流程

  • 解决方案通过 msbuild GsDevSolution.sln /p:Configuration=Debug 编译;Gs.DevAppGs.WeightIqcGs.WeightLine 默认 AnyCPU 输出至 bin\{Configuration}
  • 发布版本通常使用 msbuild Gs.DevApp\Gs.DevApp.csproj /t:Rebuild /p:Configuration=Release 构建,再通过 Gs.Setup 打包。
  • CefSharp & DevExpress 依赖需随发行包一起分发(涉及 x86/x64 子目录)。

七、质量与测试现状

  • 仓库未包含自动化测试项目,主要依靠手工流程验证。
  • 关键交互(登录、菜单加载、报工、称重上传)需制定手工测试脚本,并配合日志文件定位问题。
  • 建议引入最小化的 UI 自动化或服务层单元测试,保障核心 API 调用逻辑。

八、风险与待改进项

  1. 安全性:大量配置使用明文 HTTP 与硬编码数据库凭据,缺少 Token 校验和异常处理,需引入 HTTPS、凭据加密及配置分层管理。
  2. 异常处理不足UtilityHelper.HttpPost 捕捉异常后直接抛出原始 ex,缺少重试与具体错误提示;串口线程异常多为吞掉处理。
  3. 可维护性:窗体代码体量大(如 Frm_Work01 超 600 行),业务逻辑与界面混杂,建议拆分服务类或引入 MVP/MVVM 模式。
  4. 性能与资源:频繁创建 WaitDialogForm、HTTP 请求未显式释放 HttpWebResponse,需注意资源回收与 UI 阻塞。
  5. 国际化/本地化:文本硬编码为简体中文,后续若需多语支持需要集中抽取。

九、改进建议

  • 配置治理:将 API、数据库、设备参数迁移至加密配置或数据库表,支持环境切换与权限控制。
  • 模块重构:为重量采集、报工等核心流程封装服务层,减轻窗体负担,提升测试友好度。
  • 引入测试与 CI:补充至少一个单元测试项目,结合 msbuild 构建脚本在 CI 中运行;关键流程(登录、称重上传)可使用集成测试验证。
  • 日志与监控: 改造 LogHelper 支持日志级别配置、文件滚动和云端收集,并在 HTTP 请求中增加详细上下文。
  • 安全加固:启用 HTTPS、令牌校验、敏感信息脱敏,串口线程中避免 Thread.Abort,改用取消标记与 Task

十、后续工作路线

  1. 制定配置清单与部署手册,确保环境差异可追踪。
  2. 识别高风险窗体(如 Frm_Work01、串口相关模块)进行代码审计与重构。
  3. 规划测试策略,优先补齐登录、菜单加载、称重上传、报表导出的验证用例。
  4. 引入版本化发布流,结合 Gs.Setup 自动化打包,并记录变更日志。