feat: update MES tracking and reporting workflows

This commit is contained in:
2026-06-30 17:41:40 +08:00
parent e0e1b5d2bb
commit 1399b9a80a
47 changed files with 4465 additions and 90 deletions

View File

@@ -0,0 +1,26 @@
# 01-项目功能内容
## 页面
- 页面路径:`src/views/PlanManagement/PlannOrderClose/index.vue`
- 页面功能:生产订单关闭查询、确认、关闭、批量确认、批量关闭。
- 查询过程:`dbo.计划排产_生产订单关闭_查询全部订单`
## 原有口径
1. “可关闭”查询以 `dbo.View_生产工时视图` 为基准。
2. 有工时记录的订单必须全部工时校验完成。
3. 同时满足原有可关闭条件:
- 单据状态为空。
- 终检合格数 + 收检不合格数 = 计划数量,或计划数量 = 入库数量,或收检不合格数 = 计划数量。
- 入库数量 = 终检合格数。
4. 按属性过滤机加或装配。
## 2026-06-30 补充口径
1. 特殊情况:订单没有工时记录,但入库、终检、计划数量等其他条件已经满足。
2. 处理方式:可关闭查询改为“有工时订单 + 无工时满足条件订单”合并。
3. 有工时订单继续要求全部工时校验。
4. 无工时订单不做工时校验,但必须满足原有可关闭条件。
5. 为避免页面默认查询变慢,先将 `View_生产工时视图` 的订单号汇总到临时表,再判断生产计划订单是否无工时。

View File

@@ -0,0 +1,44 @@
# 02-项目程序开发详细步骤
## 1. 需求解析
1. 用户反馈生产订单关闭“可关闭”查询以工时为基准,导致没有工时记录但满足其他条件的订单查不出来。
2. 确认不能简单放开所有无工时订单,否则会把未完工的新订单带入可关闭列表。
3. 确定口径:无工时订单只免除“全部工时校验”,仍必须满足原有可关闭条件。
## 2. 数据库开发
1. 新增脚本 `db_backups/update_plan_order_close_no_work_hours_20260630.sql`
2. 修改 `dbo.计划排产_生产订单关闭_查询全部订单``@单据状态 = N'可关闭'` 分支。
3. 使用 CTE 汇总收检数量和终检数量。
4. 第一段查询保留原有 `View_生产工时视图` 逻辑:
- 订单有工时。
- `MIN(CASE WHEN v.Expr1 IS NULL THEN 0 ELSE 1 END) = 1`,确保全部工时已校验。
- 保留原有计划数量、入库数量、终检和收检条件。
5. 第二段查询从 `MES_接口_生产计划` 补充无工时订单:
- `#工时订单` 临时表中不存在该订单号。
- 单据状态为空。
- 属性匹配。
- 满足原有计划数量、入库数量、终检和收检条件。
6. 两段结果使用 `UNION ALL` 合并。
7. 非“可关闭”分支改为参数化静态 SQL保留原输出字段。
## 3. 发布
1. 使用 `sqlcmd` 发布脚本到 `YL_MESDB`
2. 发布命令使用环境变量传入密码,不写入脚本和文档。
## 4. 验证
1. 验证无工时样例 `7410`
- `View_生产工时视图` 中无工时。
- `MES_接口_生产计划` 中计划数量 `1`、入库数量 `1`、单据状态为空、属性为机加件。
- 终检合格数 `1`、终检不合格数 `0`
- 查询 `@单据状态=N'可关闭', @属性=N'机加'` 能返回。
2. 验证默认可关闭机加查询:
- 查询耗时约 `0.56` 秒。
- 返回无工时样例 `7280``7409``7410`
3. 验证非可关闭分支可执行:
- `@单据状态=N'未关闭'`
- `@单据状态=N'已关闭'`

View File

@@ -0,0 +1,46 @@
# 03-推进台账
## 第1轮无工时订单纳入可关闭查询
### 用户反馈
- 生产订单关闭查询以工时为基准。
- 当前只能查出全部校验的工时再筛选。
- 特殊情况:没有工时,但满足其他条件的订单也需要处理。
### 执行过程
1. 读取线上过程 `dbo.计划排产_生产订单关闭_查询全部订单`
2. 核对页面 `src/views/PlanManagement/PlannOrderClose/index.vue`,确认页面默认查询为“可关闭 + 机加”。
3. 查询字段结构,确认 `MES_接口_生产计划``View_生产工时视图` 字段可支撑补充逻辑。
4. 查询样例,确认存在无工时但满足条件订单,例如 `7410`
5. 新增数据库脚本 `db_backups/update_plan_order_close_no_work_hours_20260630.sql`
6. 第一次发布后发现默认全量可关闭查询超时。
7. 优化为先将 `View_生产工时视图` 的订单号写入 `#工时订单` 临时表,再判断无工时订单。
8. 重新发布成功。
9. 验证 `7410` 可按“可关闭 + 机加”查出。
10. 验证默认“可关闭 + 机加”约 `0.56` 秒返回,并命中 `7280``7409``7410`
### 修改文件
- `db_backups/update_plan_order_close_no_work_hours_20260630.sql`
- `work/PlanManagement/PlannOrderClose/README.md`
- `work/PlanManagement/PlannOrderClose/01-项目功能内容.md`
- `work/PlanManagement/PlannOrderClose/02-项目程序开发详细步骤.md`
- `work/PlanManagement/PlannOrderClose/03-推进台账.md`
- `work/PlanManagement/PlannOrderClose/04-任务矩阵.md`
- `work/PlanManagement/PlannOrderClose/05-验收证据.md`
- `work/PlanManagement/PlannOrderClose/06-决策记录.md`
- `gptlog-process/gpdlog.md`
- `C:\gptlog-process\gpdlog.md`
### 验证结果
- 数据库过程发布成功。
- 无工时样例 `7410` 可查询。
- 默认“可关闭 + 机加”查询未超时,约 `0.56` 秒返回。
### 下一步
- 页面上用默认条件确认无工时但满足条件的订单可参与确认和关闭流程。

View File

@@ -0,0 +1,11 @@
# 04-任务矩阵
| 任务编号 | 任务名称 | 状态 | 验收标准 |
| --- | --- | --- | --- |
| POC-001 | 排查可关闭查询基准 | 已完成 | 确认原过程以 `View_生产工时视图` 为主表,导致无工时订单无法出现 |
| POC-002 | 无工时可关闭口径设计 | 已完成 | 无工时订单只免工时校验,仍满足原有可关闭条件 |
| POC-003 | 存储过程脚本开发 | 已完成 | 新增 `update_plan_order_close_no_work_hours_20260630.sql` 并发布成功 |
| POC-004 | 性能优化 | 已完成 | 默认“可关闭 + 机加”查询约 `0.56` 秒返回 |
| POC-005 | 样例验证 | 已完成 | `7410` 无工时但满足条件,可被可关闭查询返回 |
| POC-006 | 文档与日志 | 已完成 | README、01-06 文档和两处 `gpdlog.md` 已更新 |

View File

@@ -0,0 +1,74 @@
# 05-验收证据
## 数据库发布
```powershell
$env:SQLCMDPASSWORD='******'
sqlcmd -S 192.168.2.92 -d YL_MESDB -U sa -C -l 30 -b -f 65001 -i 'db_backups\update_plan_order_close_no_work_hours_20260630.sql'
Remove-Item Env:SQLCMDPASSWORD
```
结果:
```text
已将数据库上下文更改为 "YL_MESDB"。
```
## 无工时样例验证
命令:
```sql
EXEC dbo.[_生产订单关闭_查询全部订单]
@=N'7410',
@=N'可关闭',
@=N'机加';
```
结果要点:
| 订单编号 | 产品名称 | 产品编码 | 入库数量 | 终检合格数合计 | 计划数量 | 单据状态 | 是否全部校验 |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 7410 | 数码管显示屏 | 24415-MS1808-S | 1.000000 | 1.0000 | 1.000000 | NULL | 1 |
## 样例来源验证
```sql
SELECT CASE WHEN EXISTS
(
SELECT 1 FROM dbo.View_生产工时视图 WHERE =N'7410'
)
THEN N'有工时' ELSE N'无工时' END AS ;
```
结果:
```text
无工时
```
生产计划和终检条件:
```text
计划数量=1.00,入库数量=1.000000,单据状态=NULL自制件属性=机加件。
终检合格数合计=1.0000,终检不合格数合计=0.0000。
```
## 默认查询性能验证
命令:
```sql
EXEC dbo.[_生产订单关闭_查询全部订单]
@=N'',
@=N'可关闭',
@=N'机加';
```
结果要点:
```text
ElapsedSeconds=0.56
命中无工时样例7280、7409、7410。
```

View File

@@ -0,0 +1,20 @@
# 06-决策记录
## DR-001 无工时订单不直接全部放开
- 日期2026-06-30
- 决策:无工时订单只免除工时全部校验,仍必须满足单据未关闭、计划数量、入库数量、终检和收检等原有可关闭条件。
- 原因:数据库中存在大量无工时的新订单,计划数量和终检数量尚未满足。如果全部放开,会误进入可关闭列表。
## DR-002 保留有工时订单的全部校验要求
- 日期2026-06-30
- 决策:有工时记录的订单继续使用 `MIN(CASE WHEN v.Expr1 IS NULL THEN 0 ELSE 1 END) = 1` 判断全部校验。
- 原因:这是原有关闭风险控制点,不能因为补充无工时场景而降低已有工时订单的关闭门槛。
## DR-003 使用临时表优化无工时判断
- 日期2026-06-30
- 决策:在可关闭分支先将 `View_生产工时视图` 中的订单号写入 `#工时订单`,再判断生产计划订单是否无工时。
- 原因:直接在每条生产计划记录上 `NOT EXISTS` 查询复杂视图会导致默认页面查询超时;临时表方案验证约 `0.56` 秒返回。

View File

@@ -0,0 +1,18 @@
# 生产订单关闭 README 索引
## 文档清单
- `01-项目功能内容.md`:记录生产订单关闭查询功能范围和本次无工时可关闭补充口径。
- `02-项目程序开发详细步骤.md`:记录数据库脚本、发布和验证步骤。
- `03-推进台账.md`:记录每轮做了什么、改了哪些文件、验证了什么、下一步是什么。
- `04-任务矩阵.md`:记录任务编号、状态和验收标准。
- `05-验收证据.md`:记录命令、数据库对象、样例订单和验证输出。
- `06-决策记录.md`:记录关键口径,避免后续重复争论。
## 当前状态
- 查询过程:`dbo.计划排产_生产订单关闭_查询全部订单`
- 当前脚本:`db_backups/update_plan_order_close_no_work_hours_20260630.sql`
- 已发布环境:`YL_MESDB`
- 当前口径:可关闭查询仍以工时校验为主要规则;没有工时记录的订单,如果满足单据未关闭、入库数量、终检合格数、计划数量等原有可关闭条件,也进入可关闭列表。