01. 搅拌站ERP系统 — 系统总览与架构

搅拌站ERP系统 — 系统总览与架构

本文档为某混凝土搅拌站ERP系统的总览与架构说明。
阅读顺序:01总览 → 02业务流程 → 03模块详解 → 04数据库分析


一、系统基本信息

项目 说明
系统名称 某混凝土搅拌站ERP系统
系统类型 SaaS多租户平台
数据库 MySQL(云RDS),每租户独立数据库
后端技术 C# .NET Framework 4.8,OWIN/Katana自托管HTTP服务
前端技术 React 15 + Redux + Ant Design 2.9 + Immutable.js
实时通信 SignalR 2.3(ASP.NET SignalR)
报表引擎 FastReport
定时任务 Quartz.NET 2.3
移动端 微信企业号集成 + 移动APP接口
部署方式 后端Windows服务(WinForms宿主),前端Webpack构建静态资源
项目版本 Backend-2.0.6(后端),Frontend-2.0.6(前端)

二、系统定位

本系统是一套面向混凝土搅拌站(商品混凝土企业)的综合管理平台,覆盖从销售签约、生产计划、拌合站调度、原材料采购、车辆运输、质量试验到财务结算的全业务链。系统采用SaaS架构,通过多租户数据库隔离方式为多家搅拌站提供服务。

行业术语

  • (tóng):混凝土的简称
  • 配比:混凝土配合比,各原材料的用量比例
  • 拌台:搅拌站的混凝土搅拌设备
  • 砼令:混凝土生产任务单(生产指令)
  • 回单:送货车辆返回后的签收确认单

三、技术架构

┌─────────────────────────────────────────────────────────────────────────┐
│                         用户层 (浏览器 - 仅支持Chrome)                    │
│   ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐              │
│   │ 普通客户  │  │ 现场调度  │  │ 集团版本  │  │ 平台管理  │              │
│   │ (Full UI)│  │ (调度专用)│  │ (多站汇总)│  │ (Manager) │              │
│   └────┬─────┘  └────┬─────┘  └────┬─────┘  └────┬─────┘              │
│        └──────────────┴──────────────┴──────────────┘                   │
│                           Frontend-2.0.6                                │
│                    React 15 + Redux + Ant Design                        │
│                    Immutable.js + ECharts + jQuery                      │
├─────────────────────────────────────────────────────────────────────────┤
│                     通信层                                               │
│   ┌──────────────┐  ┌──────────────┐  ┌──────────────────┐            │
│   │ REST API     │  │ SignalR Hub  │  │ 微信企业号API     │            │
│   │ (jQuery AJAX)│  │ (WebSocket)  │  │ (消息推送)        │            │
│   └──────┬───────┘  └──────┬───────┘  └────────┬─────────┘            │
├──────────┴──────────────────┴──────────────────┴────────────────────────┤
│                     Backend-2.0.6 后端服务                               │
│   ┌────────────────────────────────────────────────────────────┐       │
│   │              SAPIServer (WinForms 宿主程序)                 │       │
│   │   ┌─────────┐ ┌──────────┐ ┌─────────┐ ┌───────────┐     │       │
│   │   │ 路由引擎 │ │ Session  │ │ 文件服务 │ │ Cookie认证│     │       │
│   │   │(SAPIServ)│ │ (内存)   │ │ (上传)   │ │ (6h过期)  │     │       │
│   │   └─────────┘ └──────────┘ └─────────┘ └───────────┘     │       │
│   ├────────────────────────────────────────────────────────────┤       │
│   │                   Handler 层                                │       │
│   │  Frame/  │ Headquarters/ │ Manufacture/ │ Market/ │ Bizz/ │       │
│   │  核心框架 │ 平台管理      │ 生产制造     │ 销售    │ 业务  │       │
│   │  Lab/    │ General/      │ Special/     │ API/    │       │       │
│   │  试验室  │ 报表统计      │ 特殊功能     │ 外部接口│       │       │
│   ├────────────────────────────────────────────────────────────┤       │
│   │                   BLL 业务逻辑层                             │       │
│   │   定价策略(IPriceStrategy) │ 表达式解析器 │ 任务工作流     │       │
│   ├────────────────────────────────────────────────────────────┤       │
│   │              RE (Runtime Environment) 运行时环境             │       │
│   │  ┌──────────┐ ┌────────────┐ ┌──────────────┐             │       │
│   │  │ Battalion │ │ DataPool   │ │ PollingRWD   │             │       │
│   │  │ (租户实例)│ │ (数据缓存) │ │ (砼令调度)   │             │       │
│   │  └──────────┘ └────────────┘ └──────────────┘             │       │
│   ├────────────────────────────────────────────────────────────┤       │
│   │   SignalR Hub  │  Quartz.NET  │  WeChat Connector          │       │
│   │   (实时推送)   │  (定时任务)  │  (企业号集成)              │       │
│   └────────────────────────────────────────────────────────────┘       │
├─────────────────────────────────────────────────────────────────────────┤
│                     数据层                                               │
│   ┌─────────────┐  ┌─────────────────────────────────────┐            │
│   │ 管理数据库   │  │ 租户数据库 (每个客户独立)             │            │
│   │ mgt-main   │  │ biz-cs-A / biz-cs-B / biz-cs-C     │            │
│   │ mgt-bak    │  │ biz-cs-D / biz-cs-E / ...          │            │
│   │ (x008租户表) │  │ (~340张业务表)                       │            │
│   └─────────────┘  └─────────────────────────────────────┘            │
│                     MySQL (云RDS)                                        │
└─────────────────────────────────────────────────────────────────────────┘

四、多租户SaaS架构

4.1 租户管理

系统采用数据库级别的租户隔离,核心设计:

概念 说明
管理数据库 mgt-main / mgt-bak,存储平台级配置(租户列表、用户、权限、元数据等)
租户数据库 每个搅拌站客户一个独立数据库(如 biz-cs-A A站、biz-cs-B B站)
租户映射表 x008 表,存储租户ID→数据库连接的完整映射
租户实例 Battalion 对象,运行时为每个租户维护独立的连接池和数据缓存

4.2 x008 租户映射表核心字段

字段 含义 示例
FID 租户ID 1, 2, 3
FKhno 客户编号 "0011", "cs01", "cs02"
FKhmc 客户名称 具体搅拌站名称
ENT 企业类型 0=普通, 1=集团, 2=协会, 3=现场版
FIp 数据库服务器IP rm-xxxxx.mysql.rds.cloud.com
FDk 数据库端口 3306
FSjkmc 数据库名称 biz-cs-A, biz-cs-B
FYhm 数据库用户名 db-user
FMm 数据库密码 (加密存储)
corpid 微信企业号ID wxxxxxxxxxxxxxxxxx
secret 微信企业号密钥 (加密)
Gpsx/Gpsy GPS坐标 经度/纬度

x008 实际数据示例:

FID FKhno ENT FDk FSjkmc FYhm Gpsx Gpsy
1 0011 0(普通) 3306 mgt-main db-user NULL NULL
2 cs01 0(普通) 3306 biz-cs-A db-user 1xx.xx 3x.xx
63 cs02 2(协会) 3306 biz-cs-B db-user 1xx.xx 3x.xx
81 cs03 1(集团) 3306 biz-cs-C db-user 0 0

4.3 ENT企业类型与前端视图映射

ENT值 类型 前端视图 说明
0 普通客户 Full UI 完整的任务+调度+管理界面
1 集团/协会 AssIndex 多站点地图总览+汇总报表+预警
2 协会版 AssIndex 同集团版
3 现场版 DispatchComp 仅生产调度界面(拌台控制+车辆排队+发货)
Manager 管理员 Manager 平台管理后台(租户管理+权限+报表配置)

4.4 运行时初始化流程

SAPIServer 启动
    ├── 读取 App.config 获取管理库连接
    ├── 启动 OWIN/Katana HTTP 服务
    ├── 启动 SignalR Hub (pushHub, taskHub)
    ├── RE.Main.Application_Start()
    │   ├── 从 x008 加载所有租户记录
    │   └── 为每个租户创建 Battalion 实例(独立线程)
    │       ├── 建立MySQL连接
    │       ├── 加载 BattalionDataPool (用户/部门/字典缓存)
    │       └── 初始化微信连接器
    ├── 启动 Quartz.NET 定时任务
    │   ├── 每日 4:00 AM 日报生成
    │   ├── 每日 6:00 PM 晚间批处理
    │   ├── 每日 00:01 日切操作
    │   ├── 每30分钟 搅拌站速度计算
    │   └── 每30分钟 订单统计
    └── 启动 PollingRWD (砼令调度引擎)

五、后端架构详解

5.1 HTTP服务框架

服务使用自定义的 CustomSAPIService 框架,类似ASP.NET MVC但更轻量:

  • 基于 [Action] 特性标注的方法路由
  • Handler 基类提供 DbConnSessionParameters 等上下文
  • URL模式:/sapi/{handler}/{action}

5.2 Handler分组

系统将Handler按业务域分为以下组:

分组 说明 核心Handler
Frame 核心框架 MainHandler, UserHandler, TaskHandler, FlowHandler, PermissionHandler, ClientHandler
Headquarters 平台管理 BattalionHandler(租户生命周期), AuthorizeHandler, DeptHandler
Manufacture 生产制造 CarHandler(车辆), TRwdHandler(砼令), TscjhHandler(生产计划), BCldHandler(称量), TJlbHandler(计量)
Market 销售管理 XHtHandler(销售合同), XKhHandler(客户), XGcHandler(工程), XCpHandler(产品), XSkHandler(收款)
Bizz 采购/物资 MaterialHandler, ProductHandler, BRkdHandler(入库), BCkdHandler(出库), TKcHandler(库存)
Laboratory 试验管理 ScglHandler(试验管理), SfmhHandler(配比), ShntksHandler(抗渗), ShntkyHandler(抗压)
General 报表统计 ReportHandler(日报), StatisticsHandler(统计), PrintHandler(打印), AnalysisHandler(分析)
API 外部接口 ApiHandler(移动端), TcApiHandler(数据同步), DataReceiverHandler(拌站数据接收)

5.3 核心中间件

组件 说明
TaskManager 任务工作流引擎,LRU缓存(最大10000条),支持创建/查询/锁定
PriceBLL 定价策略引擎,支持多因子定价(IPriceStrategy接口)
PollingRWD 砼令调度引擎,管理生产任务排队、拌台分配、车辆调度
FileLogger 文件日志系统
DataCacheTable 自研数据缓存框架

5.4 SignalR实时通信

Hub 名称 功能
pushHub 推送Hub MCSC(满车生产)、SCSC(首车砂浆)、TDPP(拖动匹配)、通用设置推送
taskHub 任务Hub 新任务通知、任务回退通知、生产调整通知、称重消息、刷新信号

5.5 外部集成

集成项 说明
微信企业号 消息推送、用户同步、部门管理、菜单管理
搅拌站PLC 通过DataReceiverHandler接收拌站实时数据
移动APP ApiHandler提供Token认证的移动端接口
外部ERP TcApiHandler支持工程、合同、任务、回单数据同步

六、前端架构详解

6.1 技术栈

技术 版本 用途
React 15.3 UI框架
Redux 3.6 状态管理
Immutable.js 3.8 不可变数据,优化渲染性能
Ant Design 2.9 UI组件库
ECharts 3.6 图表可视化
jQuery (外部) AJAX请求、DOM操作、SignalR客户端
Webpack 1.x 构建打包
react-loadable 4.0 代码分割/懒加载

6.2 应用结构

Frontend-2.0.6/src/
├── entry/           # 入口 (index.js → container.jsx)
├── redux/
│   ├── store/       # Redux Store配置 (47个reducer)
│   ├── constants/   # Action Type常量 (6个文件)
│   └── actions/     # Action Creators (46个文件,异步thunk)
├── common/          # 公共工具
│   ├── common.js    # AJAX封装(ajaxPost/ajaxGet)、Cookie、URL
│   ├── signalr.js   # SignalR连接管理
│   ├── elements.js  # 动态表单生成(元数据驱动)
│   ├── validator.js # 表单验证策略
│   └── getTaskDeatilFunc.jsx  # 任务类型→组件映射
├── components/
│   ├── login/       # 登录页
│   └── index/       # 主界面
│       ├── client/  # 客户端视图
│       │   ├── header/     # 顶部导航、搜索、消息
│       │   ├── body/       # 主体内容
│       │   │   ├── myTask.jsx        # 我的任务
│       │   │   ├── dispatchComp/     # 生产调度(4个子页)
│       │   │   ├── addTask/          # 新建任务
│       │   │   ├── setting/          # 系统设置
│       │   │   └── ...
│       │   ├── other/      # 38个业务类型组件
│       │   ├── productDispatch/  # 生产调度视图
│       │   ├── TX/          # 试验室模块(12个)
│       │   ├── association/ # 集团版(多站汇总)
│       │   └── board/       # 看板
│       └── manager/     # 平台管理后台
└── views/               # (未使用)

6.3 导航模式

系统不使用React Router,而是通过Redux状态驱动页面切换:

Redux State: currentComponent
    ├── 'Login' → <Login />
    └── 'Index' → <Index />
                      ├── ENT=Manager → <Manager /> (管理后台)
                      ├── ENT=3 → <DispatchComp /> (现场调度)
                      ├── ENT=1/2 → <AssIndex /> (集团版)
                      └── 普通 → Full UI (任务+列表+内容)

6.4 动态表单系统

系统采用元数据驱动的动态表单生成:

  1. 后端 x004 表定义任务类型(编号→名称→所属模块)
  2. 后端 t149 表定义每个任务类型的字段列表(字段名、类型、SQL数据源等)
  3. 前端 elements.js 根据元数据自动渲染表单控件
  4. 前端 getTaskDeatilFunc.jsx 将任务类型名称映射到对应的React组件

6.5 实时功能

功能 实现方式
新任务提醒 SignalR taskHub → 浏览器通知 + 百度TTS语音播报
生产数据推送 SignalR pushHub → 实时更新称重/车辆/生产状态
调度看板 ECharts + SignalR实时数据 → 产量/车辆/设备状态看板

七、部署架构

┌──────────────────────────────────┐
│          用户浏览器(Chrome)        │
│      http://xxx:9900              │
└──────────┬───────────────────────┘
           │ HTTP/WebSocket
┌──────────▼───────────────────────┐
│     Nginx/静态文件服务             │
│     :9900                         │
│  ┌────────────────────────────┐  │
│  │ 前端静态资源              │  │
│  │ (HTML/JS/CSS/图片)          │  │
│  └────────────────────────────┘  │
└──────────┬───────────────────────┘
           │ API代理
┌──────────▼───────────────────────┐
│     SapiServer (C#后端)           │
│     :8885                         │
│     /sapi/* → REST API              │
│     /signalr  → SignalR Hub       │
└──────────┬───────────────────────┘
           │ MySQL
┌──────────▼───────────────────────┐
│     MySQL (云RDS)                   │
│     :3306                         │
│     管理库: mgt-main, mgt-bak       │
│     租户库: biz-cs-*                │
└──────────────────────────────────┘

八、关键技术特点

特点 说明
多租户数据隔离 每个搅拌站客户独立数据库,管理库统一管理租户注册信息
任务工作流引擎 可配置的多步骤审批流(新建→执行→审核),支持角色权限和并发锁控制
元数据驱动表单 通过数据库元数据配置动态生成前端表单,无需修改代码即可新增业务类型
实时调度系统 SignalR推送+轮询结合,实现生产看板、车辆调度、称重数据的实时展示
砼令调度引擎 PollingRWD自动化混凝土生产任务排队,基于拌台产能和区域车辆分配
多版本适配 同一前端代码支持普通版/现场版/集团版/管理版四种界面模式
微信企业号集成 消息推送、用户同步,支持移动端操作审批
定价策略模式 灵活的多因子定价引擎,支持不同客户/产品/项目的差异化定价

九、已发现的数据库列表

管理库

数据库 说明
mgt-main 管理库(主)
mgt-bak 管理库(备)

租户库

数据库 说明
biz-cs-A A站
biz-cs-B B站
biz-cs-C C站
biz-cs-D D站(集团)
biz-cs-E E站
biz-cs-F F站
biz-cs-G G站(协会)
biz-cs-H H站(协会)
biz-cs-I I站
biz-cs-J J站

十、技术依赖一览

后端 (Backend-2.0.6)

依赖 版本 用途
.NET Framework 4.8 运行时
Microsoft.Owin.SelfHost 2.1.0 自托管HTTP
Microsoft.AspNet.SignalR 2.3.0 实时通信
MySql.Data 6.9.8 MySQL连接
Newtonsoft.Json 8.0.3 JSON序列化
Quartz 2.3.3 定时任务
Microsoft.Owin.Cors 3.1.0 跨域支持
CustomSAPIService (自研) HTTP路由框架
CustomServiceUnit (自研) 数据缓存
FastReport (商业) 报表生成

前端 (Frontend-2.0.6)

依赖 版本 用途
React 15.3 UI框架
Redux 3.6 状态管理
Immutable.js 3.8 不可变数据
Ant Design 2.9 UI组件
ECharts 3.6 图表
jQuery (外部) AJAX/DOM
SignalR.JS 2.2 实时通信客户端
Webpack 1.x 构建打包
Babel 6.x ES6+转译
posted @ 2026-06-09 17:21  thanks  阅读(5)  评论(0)    收藏  举报