init: MES_Manage_View_V20 v1.1.0 项目初始化
- Vue 2.7 + Element UI + Webpack 5 前端 - SQL Server 数据库脚本 (script.sql) - 4份技术文档 (技术分析/功能映射/使用说明书/用户操作手册) - 存储过程修复 (fix_生产管理_外协报表_查询.sql)
This commit is contained in:
756
MES_技术分析报告.md
Normal file
756
MES_技术分析报告.md
Normal file
@@ -0,0 +1,756 @@
|
||||
# MES_Manage_View_V20 软件项目技术分析报告
|
||||
|
||||
> **项目名称**: MacroinfManage_MES (MES_Manage_View_V20)
|
||||
> **版本**: v1.1.0
|
||||
> **日期**: 2026-05-18
|
||||
> **作者**: MESWORK
|
||||
> **描述**: 山东元利科技有限公司制造执行系统(MES)管理视图平台
|
||||
|
||||
---
|
||||
|
||||
## 目录
|
||||
|
||||
1. [项目概述](#1-项目概述)
|
||||
2. [技术架构路线](#2-技术架构路线)
|
||||
3. [前端技术详细分析](#3-前端技术详细分析)
|
||||
4. [数据库 script.sql 详细解析](#4-数据库-scriptsql-详细解析)
|
||||
5. [程序问题分析报告](#5-程序问题分析报告)
|
||||
|
||||
---
|
||||
|
||||
## 1. 项目概述
|
||||
|
||||
| 属性 | 内容 |
|
||||
|------|------|
|
||||
| 项目名称 | MacroinfManage_MES (MES_Manage_View_V20) |
|
||||
| 版本 | v1.1.0 |
|
||||
| 基础模板 | vue-element-admin (PanJiaChen) |
|
||||
| 数据库 | Microsoft SQL Server 2019 (兼容级别150) |
|
||||
| 数据库名 | YL_MESDB |
|
||||
| 外部集成 | SAP Business One (跨库查询) |
|
||||
| 设备通信 | MQTT 4.3.7 (物联网设备实时数据) |
|
||||
|
||||
---
|
||||
|
||||
## 2. 技术架构路线
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────────────┐
|
||||
│ 前端层 (Frontend) │
|
||||
│ Vue 2.7.16 + Element UI 2.15.14 + Webpack 5 │
|
||||
│ ├── Vue Router 3.6.5 (权限动态路由) │
|
||||
│ ├── Vuex 3.6.2 (全局状态管理) │
|
||||
│ ├── Axios 0.21.4 (HTTP 通信) │
|
||||
│ ├── ECharts 5.4.3 (数据可视化/看板) │
|
||||
│ ├── FullCalendar 6.1.x (排产日历) │
|
||||
│ ├── MQTT 4.3.7 (设备实时数据/物联网通信) │
|
||||
│ └── xlsx / jspdf / docxtemplater (报表导出) │
|
||||
├──────────────────────────────────────────────────────────────────┤
|
||||
│ 中间层 (Middleware) │
|
||||
│ ├── ASP.NET / Node.js 后端API服务 │
|
||||
│ └── 存储过程调用 (后端直接调用SQL Server存储过程) │
|
||||
├──────────────────────────────────────────────────────────────────┤
|
||||
│ 数据库层 (Database) │
|
||||
│ Microsoft SQL Server 2019 (兼容级别150) │
|
||||
│ 数据库名: YL_MESDB │
|
||||
│ ├── 30+ 数据表 │
|
||||
│ ├── 20+ 视图 │
|
||||
│ ├── 1 用户自定义函数 │
|
||||
│ ├── 60+ 存储过程 │
|
||||
│ └── 外部数据源: SAP.SBO_YL (SAP Business One) │
|
||||
├──────────────────────────────────────────────────────────────────┤
|
||||
│ 外部集成 (Integration) │
|
||||
│ ├── SAP Business One (ERP系统,跨数据库查询) │
|
||||
│ │ ├── SAP.SBO_YL.dbo.UBT_OITM (物料主数据) │
|
||||
│ │ ├── SAP.SBO_YL.dbo.UBT_WW_MES_OPORandOPCH (采购订单) │
|
||||
│ │ └── SAP.SBO_YL.dbo.OWOR / OWR1 / OWR4 (生产订单) │
|
||||
│ ├── 设备PLC/SCADA (通过MQTT协议采集实时数据) │
|
||||
│ └── 文件服务器 (图纸/附件存储) │
|
||||
└──────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. 前端技术详细分析
|
||||
|
||||
### 3.1 核心框架与依赖
|
||||
|
||||
| 类别 | 技术 | 版本 | 用途 |
|
||||
|------|------|------|------|
|
||||
| 框架 | Vue.js | 2.7.16 | SPA 核心框架 |
|
||||
| UI库 | Element UI | 2.15.14 | 企业级UI组件 |
|
||||
| 路由 | Vue Router | 3.6.5 | 动态权限路由 |
|
||||
| 状态管理 | Vuex | 3.6.2 | 全局状态 |
|
||||
| HTTP | Axios | 0.21.4 | API通信 |
|
||||
| 图表 | ECharts | 5.4.3 | 看板/统计图表 |
|
||||
| 日历 | FullCalendar | 6.1.17 | 排产甘特视图 |
|
||||
| IoT | MQTT.js | 4.3.7 | 设备实时数据订阅 |
|
||||
| 构建 | Webpack | 5.89.0 | 模块打包 |
|
||||
| PDF | jsPDF / html2canvas | 2.5.1 / 1.4.1 | PDF导出 |
|
||||
| Excel | xlsx | 0.18.5 | 表格导入导出 |
|
||||
| Word | docxtemplater | 3.42.0 | Word模板生成 |
|
||||
| 条码 | qrcode | 1.5.3 | 二维码生成 |
|
||||
| PDF预览 | pdfjs-dist | 5.1.91 | 图纸在线预览 |
|
||||
|
||||
### 3.2 项目目录结构 (src/)
|
||||
|
||||
```
|
||||
src/
|
||||
├── main.js # 入口文件,全局注册
|
||||
├── App.vue # 根组件
|
||||
├── permission.js # 路由守卫/权限控制
|
||||
├── api/ # API接口层
|
||||
│ └── login.js # 登录/密码修改API
|
||||
├── router/
|
||||
│ ├── index.js # 路由配置
|
||||
│ ├── getTreeData.js # 动态菜单树生成
|
||||
│ └── menuComponentModule.js # 菜单组件映射
|
||||
├── store/
|
||||
│ ├── index.js # Vuex Store 入口
|
||||
│ └── modules/
|
||||
│ ├── app.js # 应用全局状态
|
||||
│ ├── user.js # 用户状态(登录/登出)
|
||||
│ ├── login.js # 登录时间跟踪
|
||||
│ ├── permission.js # 权限路由状态
|
||||
│ └── tagsView.js # 标签页状态
|
||||
├── views/ # 业务视图模块
|
||||
│ ├── layout/ # 布局组件
|
||||
│ ├── login/ # 登录页
|
||||
│ ├── dashboard/ # 看板首页
|
||||
│ └── [业务模块]/ # 各MES业务模块
|
||||
├── components/ # 公用组件
|
||||
├── styles/ # 全局样式
|
||||
├── utils/
|
||||
│ ├── auth.js # Token管理(Cookie)
|
||||
│ ├── request.js # Axios实例配置
|
||||
│ └── curd.js # 通用增删改查
|
||||
├── directive/ # 自定义指令
|
||||
│ └── el-dragDialog/ # 对话框拖拽指令
|
||||
├── icons/ # SVG图标
|
||||
└── vendor/ # 第三方工具(htmlToPdf)
|
||||
```
|
||||
|
||||
### 3.3 权限控制机制
|
||||
|
||||
```
|
||||
1. 用户登录 → 后端验证用户名/密码 → 返回角色列表
|
||||
2. 选择登录角色 → setToken(角色编号) → Cookie存储
|
||||
3. 路由守卫 permission.js 拦截:
|
||||
├── 无Token → 重定向 /login
|
||||
└── 有Token → GetInfo() → getTreeData() 构建动态路由树
|
||||
→ GenerateRoutes → router.addRoutes()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. 数据库 script.sql 详细解析
|
||||
|
||||
### 4.1 数据库基础配置
|
||||
|
||||
```sql
|
||||
数据库名: YL_MESDB
|
||||
数据文件: D:\sqlData\YL_MESDB.mdf (初始 ~6.9GB, 自动增长64MB)
|
||||
日志文件: D:\sqlDataLog\YL_MESDB_log.ldf (初始 ~263GB, 最大2048GB)
|
||||
兼容级别: 150 (SQL Server 2019)
|
||||
恢复模式: FULL (完全恢复)
|
||||
排序规则: DATABASE_DEFAULT
|
||||
```
|
||||
|
||||
### 4.2 核心业务表一览
|
||||
|
||||
#### 生产计划与任务
|
||||
|
||||
| 表名 | 主键 | 说明 |
|
||||
|------|------|------|
|
||||
| `MES_接口_生产计划` | 订单编号 (int) | 从ERP同步的生产订单主表 |
|
||||
| `MES_接口_生产计划_生产任务` | AID (bigint) | 工序级任务拆分表,UK: (订单编号+订单行号+订单拆分内码) |
|
||||
| `MES_接口_生产计划_生产任务_子任务` | AID | 子任务(二次派工) |
|
||||
| `MES_接口_工艺路线主数据` | AID (int) | 工艺路线主数据接口表 |
|
||||
|
||||
**`MES_接口_生产计划_生产任务` 关键字段**:
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| 任务状态 | int | 0-待执行, 1-可执行, 2-已开工, 4-已完成 |
|
||||
| 加工状态 | int | 2-辅助开始, 3-辅助结束, 4-开始加工, 5-暂停, 6-报工 |
|
||||
| 指派对象/编号 | nvarchar(50) | 分配的工位/设备名称与编号 |
|
||||
| 指派数量 | decimal(16,2) | 本序计划生产数量 |
|
||||
| 二次派工 | nvarchar(500) | 多人协作分配(逗号分隔人员ID) |
|
||||
| 进度 | decimal(16,2) | 完成百分比 |
|
||||
|
||||
#### 资源与人员
|
||||
|
||||
| 表名 | 主键 | 说明 |
|
||||
|------|------|------|
|
||||
| `MES_资源主数据` | VisCode (nvarchar(50)) | 设备/工位主数据(SAP同步) |
|
||||
| `登录基础数据_人员信息` | Personnel_Number (int) | 人员账号表, UK: account |
|
||||
| `登录基础数据_角色信息` | Roles_number (int) | 角色定义表 |
|
||||
| `登录基础数据_人员权限角色` | ID (int) | 人员-角色多对多关联 |
|
||||
| `登录基础数据_二级菜单` | IDD (int) | 菜单/路由配置表 |
|
||||
| `登录基础数据_部门` | 部门编号 (int) | 组织架构 |
|
||||
| `工位人员绑定表` | 绑定编号 (int) | 工位-人员绑定关系 |
|
||||
| `班次表` | 班次编号 (nvarchar(50)) | 班次定义(白班07:45-16:30, 夜班16:30-00:40) |
|
||||
| `班次人员绑定表` | 绑定ID (int) | 人员-班次绑定 |
|
||||
|
||||
#### 操作记录与工时
|
||||
|
||||
| 表名 | 主键 | 说明 |
|
||||
|------|------|------|
|
||||
| `YL_加工中心_操作记录表` | AID (int) | **核心操作记录表**,含暂停/恢复/报工全流程 |
|
||||
| `YL_加工中心_报工记录` | AID (int) | 报工确认记录(生产工时/辅助工时) |
|
||||
| `生产管理_工时校验_校验工时表` | AID (int) | 工时审核校验(上传工时 vs 系统计算工时) |
|
||||
|
||||
**操作记录表关键字段**: `总时长`, `暂停总时长`, `实际工时` = 总时长 - 暂停总时长
|
||||
|
||||
| 操作类别 | 说明 |
|
||||
|----------|------|
|
||||
| 收料 | 物料接收确认 |
|
||||
| 开始加工 / 辅助开始 | 生产/辅助启动 |
|
||||
| 暂停 | 暂停加工 |
|
||||
| 报工 / 辅助结束 | 完成报工 |
|
||||
| 首检 | 首件质量检验 |
|
||||
| 加班 / 休息日加班 / 法定休息日加班 | 加班工时记录 |
|
||||
|
||||
#### 质量管理
|
||||
|
||||
| 表名 | 主键 | 说明 |
|
||||
|------|------|------|
|
||||
| `YL_质量检验_质检记录` | QT_AID (bigint) | 质检主记录 |
|
||||
| `YL_质量检验_质检记录_检测零件` | LJ_AID (bigint) | 每个被检零件的检测结果(1合格/0不合格) |
|
||||
| `YL_质量检验_质检记录_检测数据` | AID (bigint) | 检测项目明细(理论值/上限/下限/实测值) |
|
||||
| `YL_质量检验_检测标准` | AID (int) | 各物料工序的检测标准 |
|
||||
| `YL_质量检验_量具信息` | AID (int) | 量具台账 |
|
||||
| `YL_质量检验_不合格品处理` | FlowAID (int) | 不合格品处理流程(让步放行申请) |
|
||||
| `YL_质量检验_不合格品处理_处理节点` | (FlowAID, FlowNodeID) | 审批流程节点 |
|
||||
|
||||
| 检测类型编号 | 质检类型 |
|
||||
|-------------|----------|
|
||||
| 1 | 首检自检 |
|
||||
| 3 | 序检自检 |
|
||||
| 6 | 收检 (跨工序接收检验) |
|
||||
| 8 | 终检 (最终检验) |
|
||||
|
||||
#### 设备管理
|
||||
|
||||
| 表名 | 主键 | 说明 |
|
||||
|------|------|------|
|
||||
| `YL_设备管理_设备台账` | 设备ID (int) | 设备主数据, UK: 设备编号 |
|
||||
| `YL_设备管理_维修记录` | AID (int) | 设备故障维修记录 |
|
||||
| `YL_设备管理_工时记录` | ID (int) | 设备循环时间采集记录 |
|
||||
| `YL_设备管理_设备生产状态_Moby` | AID | 设备实时生产状态 |
|
||||
| `YL_设备管理_设备生产状态_Moby_历史记录` | AID | 设备状态变更历史 |
|
||||
| `基础数据_设备工位点检表` | 设备流水号 (int) | 设备点检清单 |
|
||||
|
||||
#### 实时监控与历史数据
|
||||
|
||||
| 表名 | 主键 | 说明 |
|
||||
|------|------|------|
|
||||
| `CaChe_Var` | AID (int) | 设备变量实时缓存 |
|
||||
| `历史_设备数据_定时` | AID (bigint) | 设备变量历史数据 |
|
||||
| `历史_工位设备状态每分钟记录` | AID_N (bigint) | 每分工位状态快照(含电流/电压/功率) |
|
||||
| `报警_记录_历史` | AID (int) | 报警历史记录 |
|
||||
| `报警_记录_历史_缓存` | AID (int) | 当前活跃报警缓存 |
|
||||
| `设备信息缓存表` | (无主键) | 工位任务信息缓存 |
|
||||
| `记录_日志_项目运行日志` | AID (bigint) | API请求/响应日志 |
|
||||
| `_日志` | ID (int) | 用户操作审计日志 |
|
||||
|
||||
#### 工艺与技术文档
|
||||
|
||||
| 表名 | 主键 | 说明 |
|
||||
|------|------|------|
|
||||
| `基础表_工序` | 工艺编号 (int) | 工序基础数据 |
|
||||
| `车间生产管理工艺_零件工序_工艺库` | id (int) | 标准工艺路线库 |
|
||||
| `车间生产管理工艺_零件生产工艺_工艺库` | id (int) | 生产订单关联工艺库(含订单编号) |
|
||||
| `物料基础数据_零件图纸` | id (int) | 零件图纸文件元数据 |
|
||||
| `物料基础数据_工艺图纸` | id (int) | 工艺图纸文件元数据 |
|
||||
| `物料基础数据_零件图纸删除记录` | ID (int) | 图纸删除审计日志 |
|
||||
|
||||
#### 工作流与审批
|
||||
|
||||
| 表名 | 主键 | 说明 |
|
||||
|------|------|------|
|
||||
| `流程表` | 流程ID (int) | 审批流程主表 |
|
||||
| `流程节点表` | 节点ID (int) | 审批流程节点 |
|
||||
| `流程完成记录表` | 完成记录ID (int) | 流程完成记录 |
|
||||
| `流程转办表` | 转办ID (int) | 审批转办记录 |
|
||||
| `审批记录表` | 记录ID (int) | 审批意见记录 |
|
||||
|
||||
#### 其他
|
||||
|
||||
| 表名 | 说明 |
|
||||
|------|------|
|
||||
| `物料数据` | 物料主数据缓存 |
|
||||
| `BOM数据` | BOM物料清单 |
|
||||
| `YL_基础表_数据字典` | 全局数据字典(操作类别/班次/报工确认等) |
|
||||
| `Attachments` | 文件附件管理 |
|
||||
| `质量检验_质检任务_SAP` | SAP来料检验任务 |
|
||||
|
||||
### 4.3 关键视图分析
|
||||
|
||||
| 视图名称 | 功能描述 |
|
||||
|----------|----------|
|
||||
| `View_生产订单_MES` | **核心视图**:联合生产计划+生产任务+资源+图纸的完整视图 |
|
||||
| `View_生产订单全部(包括已关闭)` | 同上但不过滤已关闭订单 |
|
||||
| `View_生产工时视图` | 整合操作记录+校验工时+生产订单的多表联查 |
|
||||
| `View_校验后的生产工时` | 仅显示已校验通过的生产工时 |
|
||||
| `v_CurrentProductionStatus` | **当前生产状态看板**:机加+装配UNION,含人员名称聚合 |
|
||||
| `View_外协报表视图` | 外协工序完整报表,联查SAP采购数据(s.含税行总计, s.供应商名称) |
|
||||
| `View_设备工位人员` | 设备-工位-人员-班次四维关联视图 |
|
||||
| `View_标准工艺视图` | 标准工艺+零件+工序关联 |
|
||||
| `View_生产工艺视图` | 生产订单工艺+物料+订单状态 |
|
||||
| `View_质检明细` | 质检记录+工位+合同号完整明细 |
|
||||
| `View_外协质检` | 外协收检记录视图 |
|
||||
| `View_装配信息` | 装配送检数/质检合格数统计 |
|
||||
| `View_生产订单完工` | 复杂完工判定逻辑(合格数+不合格数=计划数量) |
|
||||
| `View_终检状态` | 终检记录关联 |
|
||||
| `View_账号权限信息` | 人员-角色-菜单完整权限链路 |
|
||||
| `登录基础数据_管理人员权限视图` | 角色-人员-部门多维视图 |
|
||||
| `计划任务视图` | 工艺编号+订单编号+物料名称 |
|
||||
|
||||
### 4.4 用户自定义函数 (UDF)
|
||||
|
||||
#### `计算班次重叠秒数`
|
||||
|
||||
```sql
|
||||
计算班次重叠秒数(@开始时间 datetime, @结束时间 datetime,
|
||||
@班次开始 time, @班次结束 time) RETURNS int
|
||||
```
|
||||
|
||||
- 逐日循环计算打卡时间和班次时间的重叠秒数
|
||||
- 支持跨天班次(如夜班16:30-00:30)
|
||||
- 限制最大3天计算范围防止无限循环
|
||||
- 用于工时计算和加班判断
|
||||
|
||||
### 4.5 关键存储过程分析
|
||||
|
||||
#### 生产排产
|
||||
|
||||
| 存储过程 | 功能 |
|
||||
|----------|------|
|
||||
| `MES_OrderPlanned_SingleTaskPlanned` | **核心排产逻辑**:单任务拆分。当计划数量>指派数量时创建拆分任务;当计划数量<指派数量时删除未分配任务 |
|
||||
| `MES_OrderPlanned_Finish` | 批量排产确认,通过OPENJSON解析JSON任务列表更新指派信息 |
|
||||
| `MES_OrderPlanned_EditTaskPlanned` | 动态SQL编辑任务排产字段 |
|
||||
| `MES_OrderPlanned_ChildTask_Add` | 子任务(二次派工)新增 |
|
||||
| `MES_OrderPlanned_Query` / `_Queryzp` | 排产查询(自制件/装配件) |
|
||||
| `__Reset_ProductOrder` | 重置订单(排产或加工中心数据) |
|
||||
|
||||
#### 加工中心操作
|
||||
|
||||
| 存储过程 | 功能 |
|
||||
|----------|------|
|
||||
| `MES_ProductTask_MaterialRecieved` | 收料操作:更新收料数量,当收料>0时任务状态变为可执行 |
|
||||
| `MES_ProductTask_WorkingStart` | 开始加工:任务状态变为已开工(2),自动同步上序合格数作为收料数 |
|
||||
| `MES_ProductTask_Rest` | 暂停操作:加工状态变为暂停 |
|
||||
| `MES_ProductTask_ProdReport` | **报工核心**:含完整加班计算(白班/夜班拆分、休息日/法定休息日处理)、捆绑报工、前序不合格数处理、报工记录双插入(生产工时+辅助工时) |
|
||||
| `MES_ProductTask_HelpStart` | 辅助开始 |
|
||||
| `MES_ProductTask_HelpEnd` | 辅助结束:含加班时长计算、班次判断、特殊加班人员处理 |
|
||||
| `MES_ProductTask_FirstCheck` | 首检操作 |
|
||||
| `MES_ProductTask_Excutable` | 标记任务为可执行 |
|
||||
| `MES_ProductTask_SendInspection` | 送检(装配报工) |
|
||||
| `MES_ProductCenter_OptRecord_Save` | **操作记录保存核心**:处理暂停/开始/报工的联动逻辑,计算工时 |
|
||||
| `MES_ProductCenter_OptRecords` | 操作记录查询 |
|
||||
|
||||
#### 人员工时(装配)
|
||||
|
||||
| 存储过程 | 功能 |
|
||||
|----------|------|
|
||||
| `MES_人员工时记录_开始` | 装配人员开始加工记录 |
|
||||
| `MES_人员工时记录_结束` | 装配人员结束加工:含白班/加班/休息日完整计算,生成报工记录和加班记录 |
|
||||
| `MES_人员工时记录_检查是否存在` | 检查是否有未结束的开始记录 |
|
||||
| `MES_人员工时记录_获取进行中任务` | 按用户ID获取进行中的装配任务 |
|
||||
|
||||
#### 质量管理
|
||||
|
||||
| 存储过程 | 功能 |
|
||||
|----------|------|
|
||||
| `MES_QulityInspection_ReceiveCheck` | **收检处理**:事务性写入质检记录,总检测数=计划生产数时自动完成任务,收检合格后触发下一工序可执行 |
|
||||
| `MES_QulityInspection_FinalCheck` | 终检记录 |
|
||||
| `MES_QulityInspection_CheckItemData_Save` | **检测数据保存**:事务性三级写入(质检主表→零件表→检测数据表),支持批量零件检测 |
|
||||
| `MES_QulityInspection_FirstCheckRecords` | 首检记录查询 |
|
||||
| `MES_QulityInspection_RoundCheck` | 巡检操作 |
|
||||
| `MES_QulityInspection_ProcessCheck` | 序检操作 |
|
||||
| `MES_QulityInspection_GetItemStandard` | 获取检测标准 |
|
||||
| `MES_QulityInspection_GetInspectionDetails` | 获取检测明细数据 |
|
||||
| `MES_QulityInspection_GetInspectionParts` | 获取检测零件列表 |
|
||||
| `MES_QulityInspection_NGPart_Add` | 不合格品处理流程发起 |
|
||||
| `MES_QulityInspection_NGPart_FlowNode_Add` | 审批节点新增 |
|
||||
| `MES_QulityInspection_NGPart_FlowNode_Update` | 审批节点完成 |
|
||||
| `MES_QulityInspection_NGPart_Finish` | 不合格品处理流程结束 |
|
||||
|
||||
#### 设备管理与实时监控
|
||||
|
||||
| 存储过程 | 功能 |
|
||||
|----------|------|
|
||||
| `MES_DeviceAdmin_BaseInfo` | 设备台账新增 |
|
||||
| `MES_DeviceAdmin_RepairRecords_Add/Query` | 维修记录增查 |
|
||||
| `MES_DeviceAdmin_DeviceProductState_Update` | 设备生产状态更新(含历史记录) |
|
||||
| `Event_CaChe_Var_Update` | 设备变量实时缓存更新(含循环时间触发工时记录) |
|
||||
| `Event_Device_Insert_CurrInfo` | 设备数据历史写入 |
|
||||
| `Event_Device_Update_CurrInfo` | 设备变量当前值更新 |
|
||||
| `Event_StationStatus_Insert/Update` | 工位状态记录/更新 |
|
||||
| `Event_Alarm_Start/End` | 报警开始/结束处理(含缓存→历史迁移) |
|
||||
| `Event_Log_Request/Respond` | API请求/响应日志 |
|
||||
|
||||
#### 登录与用户
|
||||
|
||||
| 存储过程 | 功能 |
|
||||
|----------|------|
|
||||
| `MES_登录_工号密码验证` | 用户登录验证(查询基础表_用户角色) |
|
||||
| `MES_登录_工位与名称_查询` | 获取工位列表(来自View_基础数据_工位) |
|
||||
| `MES_登录_班次信息` | 获取班次数据字典 |
|
||||
| `Prog_MES_GetDictionar_ByType` | 按类别获取数据字典 |
|
||||
|
||||
#### 系统工具
|
||||
|
||||
| 存储过程 | 功能 |
|
||||
|----------|------|
|
||||
| `___DB_BAK` | 数据库全量备份到 C:\_MW\数据库\ |
|
||||
| `_日志_增加` | 用户操作日志插入 |
|
||||
| `p_PopFirstWord` | 逗号分隔字符串解析工具函数 |
|
||||
|
||||
### 4.6 外部系统集成 (SAP Business One)
|
||||
|
||||
```
|
||||
跨数据库查询链路:
|
||||
├── SAP.SBO_YL.dbo.UBT_OITM → 物料主数据(编码/名称/品牌)
|
||||
├── SAP.SBO_YL.dbo.UBT_WW_MES_OPORandOPCH → 采购订单(供应商/含税单价/材质)
|
||||
├── SAP.SBO_YL.dbo.OWOR → 生产订单(ERP侧)
|
||||
├── SAP.SBO_YL.dbo.OWR1 → 生产订单行
|
||||
└── SAP.SBO_YL.dbo.OWR4 → 生产订单阶段
|
||||
```
|
||||
|
||||
### 4.7 核心数据流
|
||||
|
||||
```
|
||||
ERP(SAP)订单下发
|
||||
│
|
||||
▼
|
||||
MES_接口_生产计划 (订单同步)
|
||||
│
|
||||
▼
|
||||
排产 (MES_OrderPlanned_SingleTaskPlanned)
|
||||
│ └── 任务拆分/工位指派/计划时间设定
|
||||
▼
|
||||
MES_接口_生产计划_生产任务 (工序级任务)
|
||||
│
|
||||
├── 收料 → 任务状态: 0(待执行) → 1(可执行)
|
||||
│
|
||||
├── 开始加工 → 任务状态: 1 → 2(已开工)
|
||||
│ │
|
||||
│ ├── 暂停/恢复循环 (关联开始记录 ↔ 关联暂停记录)
|
||||
│ │
|
||||
│ └── 报工 → 计算工时(总时长-暂停总时长)
|
||||
│ │
|
||||
│ ├── 生成报工记录(生产工时+辅助工时)
|
||||
│ ├── 判断加班(白班/夜班拆分/休息日)
|
||||
│ └── 任务状态: 2 → 4(已完成)
|
||||
│
|
||||
├── 首检 → 巡检 → 序检 (质检环节)
|
||||
│
|
||||
├── 收检 (MES_QulityInspection_ReceiveCheck)
|
||||
│ │ 合格数触发下一工序可执行
|
||||
│ └── 任务状态 → 4(已完成)
|
||||
│
|
||||
└── 终检 → 完工判定
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 程序问题分析报告
|
||||
|
||||
### 🔴 严重问题 (Critical)
|
||||
|
||||
#### 问题 1:SQL注入漏洞 — 60+个存储过程
|
||||
|
||||
**位置**: `script.sql` 中几乎所有动态SQL存储过程
|
||||
|
||||
所有使用 `sp_executesql` 拼接 `@whereStr` 的存储过程都存在SQL注入风险。用户输入直接通过字符串拼接插入SQL语句:
|
||||
|
||||
```sql
|
||||
-- MES_OrderPlanned_Query (line 3303)
|
||||
if(@合同号<>'') set @selectStrWhere = @selectStrWhere
|
||||
+ ' and [合同号] like ''%'+@合同号+'%'''
|
||||
```
|
||||
|
||||
**受影响的存储过程 (部分列表)**:
|
||||
- `MES_OrderPlanned_Query` / `MES_OrderPlanned_Queryzp`
|
||||
- `MES_ProductAdmin_Query` / `MES_ProductAdmin_GetRptRecords`
|
||||
- `MES_ProductCenter_OptRecords`
|
||||
- `MES_QulityInspection_CheckRecord_Query`
|
||||
- `MES_QulityInspection_FirstCheckRecords`
|
||||
- `MES_QulityInspection_MeasuringTool`
|
||||
- `MES_QulityInspection_GetTask`
|
||||
- `MES_ProductCenter_GetTask` / `MES_ProductCenter_GetTask_zp`
|
||||
|
||||
**修复建议**: 统一使用参数化查询模式:
|
||||
```sql
|
||||
SET @SQL = @SQL + ' AND [合同号] LIKE ''%'' + @合同号 + ''%'''
|
||||
EXEC sp_executesql @SQL, N'@合同号 nvarchar(50)', @合同号 = @合同号
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### 问题 2:明文密码存储于Cookie
|
||||
|
||||
**位置**: `src/views/login/index.vue` line 243-246
|
||||
|
||||
```javascript
|
||||
setCookie(username, password, checked) {
|
||||
Cookie.set('username', username, { expires: 7 })
|
||||
Cookie.set('password', password, { expires: 7 }) // ❌ 明文密码存7天
|
||||
Cookie.set('checked', checked, { expires: 7 })
|
||||
}
|
||||
```
|
||||
|
||||
密码以明文存储在客户端Cookie中持续7天,可被XSS攻击轻易窃取。
|
||||
|
||||
---
|
||||
|
||||
#### 问题 3:Axios已知CVE漏洞版本
|
||||
|
||||
**位置**: `package.json` line 17
|
||||
|
||||
```json
|
||||
"axios": "^0.21.4"
|
||||
```
|
||||
|
||||
axios 0.21.4 存在已知安全漏洞 CVE-2021-3749 (ReDoS攻击),当前最新版本为 1.7.x。
|
||||
|
||||
---
|
||||
|
||||
#### 问题 4:开发代理绕过HTTPS证书验证 + 死代码配置
|
||||
|
||||
**位置**: `config/index.js` line 18-19, 37-38
|
||||
|
||||
```javascript
|
||||
proxyTable: {
|
||||
'/api/b1s': {
|
||||
target: 'https://192.168.2.90:50000', // SAP B1
|
||||
secure: false, // ❌ 跳过SSL证书验证 — 中间人攻击风险
|
||||
},
|
||||
'/openapi/v1': {
|
||||
target: 'http://192.168.2.90:8082',
|
||||
pathRewrite: {
|
||||
'^/api/tm': '/openapi/v1' // ❌ 死代码:/openapi/v1 永远不会匹配 /api/tm
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
第二个代理的 pathRewrite 规则永远无法触发。
|
||||
|
||||
---
|
||||
|
||||
#### 问题 5:登录密码拼在URL参数中
|
||||
|
||||
**位置**: `src/api/login.js` line 13
|
||||
|
||||
```javascript
|
||||
param: `用户名=${username}&密码=${password}`
|
||||
```
|
||||
|
||||
密码作为URL查询参数传输,会被代理服务器日志、浏览器历史记录记录。
|
||||
|
||||
---
|
||||
|
||||
### 🟠 高优先级问题 (High)
|
||||
|
||||
#### 问题 6:修改密码验证器Bug (复制粘贴错误)
|
||||
|
||||
**位置**: `src/views/login/index.vue` line 119-130
|
||||
|
||||
```javascript
|
||||
const validateValue = (rules, value, callback) => {
|
||||
// ❌ 三个条件都检查同一个字段 — 明显的复制粘贴bug
|
||||
if (typeof (this.form.againPassword) === 'string' ||
|
||||
typeof (this.form.againPassword) === 'string' ||
|
||||
typeof (this.form.againPassword) === 'string') {
|
||||
callback(new Error('请输入英文字母组合')) // ❌ 字符串类型反而报错?
|
||||
}
|
||||
// ❌ 下面代码永远不会执行:已callback但未return
|
||||
if (this.form.newPassword !== this.form.againPassword) {
|
||||
callback(new Error('两次输入密码不同'))
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
该验证器应用于所有4个密码字段,导致密码修改功能**完全无法正常工作**。
|
||||
|
||||
---
|
||||
|
||||
#### 问题 7:Vuex Action中 this.$router 为undefined
|
||||
|
||||
**位置**: `src/store/modules/user.js` line 44-45
|
||||
|
||||
```javascript
|
||||
Login({ commit }, userInfo) {
|
||||
login(username, userInfo.password).then(response => {
|
||||
if (data.length === 0 || data.result === '0') {
|
||||
Message.error('账号或密码错误,请重新登录')
|
||||
this.$router.push({ path: '/login' }) // ❌ Vuex action中this不是Vue组件实例
|
||||
}
|
||||
```
|
||||
|
||||
在Vuex action中使用 `this.$router` 会抛出 `TypeError: Cannot read properties of undefined`。
|
||||
|
||||
---
|
||||
|
||||
#### 问题 8:GetInfo 硬编码角色为 'admin'
|
||||
|
||||
**位置**: `src/store/modules/user.js` line 83
|
||||
|
||||
```javascript
|
||||
GetInfo({ commit, state }) {
|
||||
getInfo(state.token).then(response => {
|
||||
commit('SET_ROLES', 'admin') // ❌ 无视后端返回的真实角色数据
|
||||
resolve(response)
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
所有登录用户都被授予 `'admin'` 角色。`permission.js` 第13行 `roles.indexOf('admin') >= 0` 对所有用户放行,导致权限控制完全失效。
|
||||
|
||||
---
|
||||
|
||||
#### 问题 9:登录错误被静默吞掉
|
||||
|
||||
**位置**: `src/views/login/index.vue` line 198-200
|
||||
|
||||
```javascript
|
||||
}).catch(() => {
|
||||
this.loading = false // ❌ 无任何错误提示
|
||||
})
|
||||
```
|
||||
|
||||
网络故障或服务器错误时用户看不到任何反馈。
|
||||
|
||||
---
|
||||
|
||||
#### 问题 10:Webpack开发服务器强制HTTPS但无有效证书
|
||||
|
||||
**位置**: `build/webpack.dev.conf.js` line 31
|
||||
|
||||
```javascript
|
||||
devServer: {
|
||||
https: true, // ❌ 未配置证书 → 浏览器报安全错误
|
||||
```
|
||||
|
||||
本地开发时浏览器会因自签名证书阻止访问。
|
||||
|
||||
---
|
||||
|
||||
### 🟡 中优先级问题 (Medium)
|
||||
|
||||
#### 问题 11:Vue 2 已于 2023年12月 EOL
|
||||
|
||||
Vue 2.x 不再接收安全补丁和新功能。建议规划迁移至 Vue 3。
|
||||
|
||||
#### 问题 12:生产环境暴露 Source Map
|
||||
|
||||
**位置**: `config/index.js` line 110
|
||||
|
||||
```javascript
|
||||
devtool: 'source-map', // 生产环境暴露完整源码
|
||||
```
|
||||
|
||||
用户可通过浏览器开发者工具查看未压缩的完整源码。
|
||||
|
||||
#### 问题 13:`__Reset_ProductOrder` 存储过程执行 TRUNCATE
|
||||
|
||||
**位置**: `script.sql` line 2288-2289
|
||||
|
||||
```sql
|
||||
truncate table YL_加工中心_操作记录表
|
||||
truncate table YL_加工中心_报工记录
|
||||
```
|
||||
|
||||
当 `@optType=1` 时无条件清空全部操作记录和报工记录,误调用将导致数据永久丢失且无法回滚。
|
||||
|
||||
#### 问题 14:数据库日志文件初始263GB
|
||||
|
||||
**位置**: `script.sql` line 9
|
||||
|
||||
```sql
|
||||
LOG ON
|
||||
(NAME = N'YL_MESDB_log', FILENAME = N'D:\sqlDataLog\YL_MESDB_log.ldf',
|
||||
SIZE = 269688832KB) -- 约263GB
|
||||
```
|
||||
|
||||
恢复模式为FULL但只有全量备份,没有事务日志备份,日志文件会持续增长直至磁盘占满。
|
||||
|
||||
#### 问题 15:依赖项问题
|
||||
|
||||
**位置**: `package.json` line 26
|
||||
|
||||
```json
|
||||
"install": "^0.13.0" // ❌ "install"是一个真实的npm包但不应作为项目依赖
|
||||
```
|
||||
|
||||
这是脚手架残留或误操作引入。
|
||||
|
||||
#### 问题 16:关键ESLint规则被关闭
|
||||
|
||||
**位置**: `.eslintrc.js` line 83, 153
|
||||
|
||||
```javascript
|
||||
'no-console': 'off',
|
||||
'no-unused-vars': ['off', { ... }]
|
||||
```
|
||||
|
||||
大量 `console.log` 残留于生产代码,未使用变量不提示。
|
||||
|
||||
---
|
||||
|
||||
### 🟢 低优先级/建议 (Low)
|
||||
|
||||
| # | 问题 | 位置 |
|
||||
|---|------|------|
|
||||
| 17 | `vue$` alias 指向 `vue.esm.js` 而非 `vue.runtime.esm.js` | `webpack.base.conf.js` line 32 |
|
||||
| 18 | webpack dev 使用 `cache.type: 'filesystem'` 可能引起缓存过期问题 | `webpack.dev.conf.js` line 24 |
|
||||
| 19 | `devServer` 配置使用 Webpack 4 风格 (static/publicPath) | `webpack.dev.conf.js` |
|
||||
| 20 | `CopyWebpackPlugin` v11 API 已弃用 patterns 外层写法 | `webpack.dev.conf.js` line 61 |
|
||||
| 21 | SCSS loader 使用 Dart Sass 但配置了 `indentedSyntax: true` | `webpack.base.conf.js` line 165 |
|
||||
| 22 | 登录页用户名变更时清空密码 (可能非预期行为) | `login/index.vue` line 182 |
|
||||
| 23 | `config/index.js` 第9行 `networkInterfaces['WLAN']` 硬编码,可能在乙太网卡环境出错 | `config/index.js` line 9 |
|
||||
| 24 | Vue-loader 配置文件为空对象,未配置任何选项 | `build/vue-loader.conf.js` |
|
||||
|
||||
---
|
||||
|
||||
### 📊 问题汇总统计
|
||||
|
||||
| 级别 | 数量 | 影响 |
|
||||
|------|------|------|
|
||||
| 🔴 Critical | 5 | 安全漏洞、数据泄露风险 |
|
||||
| 🟠 High | 5 | 功能Bug、权限失效、运行时错误 |
|
||||
| 🟡 Medium | 6 | 可维护性、稳定性风险 |
|
||||
| 🟢 Low | 7 | 代码质量、最佳实践 |
|
||||
| **总计** | **23** | |
|
||||
|
||||
---
|
||||
|
||||
### 🔧 优先修复路线图
|
||||
|
||||
**第1阶段 (立即)**:
|
||||
1. 修复所有SQL注入漏洞 → 动态SQL改用参数化查询
|
||||
2. 移除Cookie明文密码 → 仅存Token
|
||||
3. 修复 `validateValue` 验证器Bug
|
||||
|
||||
**第2阶段 (本周)**:
|
||||
4. 升级 axios 到 1.7.x
|
||||
5. 修复 `GetInfo` 硬编码 admin 角色
|
||||
6. 修复 `this.$router` 在 Vuex 中的调用
|
||||
|
||||
**第3阶段 (本月)**:
|
||||
7. 配置事务日志定期备份策略
|
||||
8. 修复 webpack 生产环境 source-map 泄露
|
||||
9. 为 `__Reset_ProductOrder` 添加安全防护(备份确认/权限限制)
|
||||
|
||||
**第4阶段 (规划)**:
|
||||
10. 规划 Vue 3 迁移路线图
|
||||
11. 清理无用依赖和死代码
|
||||
12. 恢复 ESLint 关键规则并修复代码
|
||||
|
||||
---
|
||||
|
||||
> 📅 报告生成日期: 2026-05-18
|
||||
> 📝 分析范围: 全项目静态代码分析 (前端 + 数据库)
|
||||
Reference in New Issue
Block a user