检测说明
@@ -576,7 +577,7 @@ export default {
Urgentarr: {},
seeVisible:false,
downPDF:MESDownFile,
- submitLoading: false,
+ submitLoading: false,
};
},
created() {
@@ -604,7 +605,7 @@ export default {
this.$message.error('未上传图纸');
}
})
-
+
},
getitemdraw2(row) {
var param = [];
@@ -620,7 +621,7 @@ export default {
this.$message.error('未上传图纸');
}
})
-
+
},
Urgent(row){
var param = []
@@ -702,7 +703,7 @@ export default {
param.push(["检测类别", this.type]);
param.push(["检测状态", this.checkstatus]);
param.push(["属性", this.attribute]);
-
+
// 调用封装方法生成请求数据 - 使用新的存储过程名称
var Data = this.CreateData(
"11",
@@ -799,14 +800,14 @@ export default {
this.$message.warning("数量输入错误");
return;
}
-
+
// 调用存储过程保存数据
this.saveReceiveCheck();
},
async saveReceiveCheck() {
// 设置提交状态为true,防止重复提交
this.submitLoading = true;
-
+
var param = [];
param.push(["TaskAID", this.receiveCheckData.TaskAID || ""]);
param.push(["检测类型编号", 6]);
@@ -825,14 +826,14 @@ export default {
param.push(["放行数量", this.receiveCheckData.放行数量]);
param.push(["工位名称", this.receiveCheckData.工位名称]);
console.log(param);
-
+
try {
if(this.receiveCheckData.工位名称 == '外协' && this.receiveCheckData.合格数 > 0){
- var result = await postB1("/QueryService_PostQuery",{
- "QueryPath": "$crossjoin(PurchaseOrders,PurchaseOrders/DocumentLines)",
+ var result = await postB1("/QueryService_PostQuery",{
+ "QueryPath": "$crossjoin(PurchaseOrders,PurchaseOrders/DocumentLines)",
"QueryOption": "$expand=PurchaseOrders($select=DocEntry, DocNum,CardCode,CardName),PurchaseOrders/DocumentLines($select=ItemCode,LineNum,Price,U_WWOworID,U_WWOrstHS,LineStatus)&$filter=PurchaseOrders/DocEntry eq PurchaseOrders/DocumentLines/DocEntry and PurchaseOrders/DocumentLines/U_WWOworID eq "+this.receiveCheckData.计划号+""
})
-
+
if (result.success) {
if(result.data.value.length>0){
let processed = false;
@@ -842,13 +843,13 @@ export default {
console.log(element['PurchaseOrders/DocumentLines'].U_WWOrstHS)
console.log(element['PurchaseOrders/DocumentLines'].LineStatus)
console.log(this.receiveCheckData.工序名称 == element['PurchaseOrders/DocumentLines'].U_WWOrstHS & element['PurchaseOrders/DocumentLines'].LineStatus == 'O')
-
+
if( this.receiveCheckData.工序名称 == element['PurchaseOrders/DocumentLines'].U_WWOrstHS && element['PurchaseOrders/DocumentLines'].LineStatus == 'O' ){
var CardCode = element.PurchaseOrders.CardCode
var CardName = element.PurchaseOrders.Cardname
var DocEntry = element.PurchaseOrders.DocEntry
var LineNum = element['PurchaseOrders/DocumentLines'].LineNum
-
+
// 创建采购收货单
const deliveryResult = await postB1(
"/PurchaseDeliveryNotes",
@@ -879,7 +880,7 @@ export default {
}
if (!processed) {
const errorElement = failedElement || (result.data.value.length > 0 ? result.data.value[0] : null);
-
+
if (errorElement) {
const docEntry = errorElement['PurchaseOrders'].DocEntry;
const processName = errorElement['PurchaseOrders/DocumentLines'].U_WWOrstHS;
@@ -904,11 +905,11 @@ export default {
throw new Error('外协订单查询失败');
}
}
-
+
// 执行收检操作
var Data = this.CreateData("12", "质量管理_序检收检_新增", param);
const response = await this.ExecDatabase(Data);
-
+
if (
response.data &&
response.data[0] &&
@@ -950,8 +951,8 @@ export default {
// param.push(["放行数量", this.receiveCheckData.放行数量]);
// console.log(param);
// if(this.receiveCheckData.工位名称 == '外协'){
- // var result = await postB1("/QueryService_PostQuery",{
- // "QueryPath": "$crossjoin(PurchaseOrders,PurchaseOrders/DocumentLines)",
+ // var result = await postB1("/QueryService_PostQuery",{
+ // "QueryPath": "$crossjoin(PurchaseOrders,PurchaseOrders/DocumentLines)",
// "QueryOption": "$expand=PurchaseOrders($select=DocEntry, DocNum,CardCode,CardName),PurchaseOrders/DocumentLines($select=ItemCode,LineNum,Price,U_WWOworID,U_WWOrstHS,LineStatus)&$filter=PurchaseOrders/DocEntry eq PurchaseOrders/DocumentLines/DocEntry and PurchaseOrders/DocumentLines/U_WWOworID eq "+this.receiveCheckData.计划号+""
// })
// }else{
@@ -1027,14 +1028,14 @@ export default {
// });
// }
// });
-
-
+
+
// } else {
// this.$message.error('质检失败:外协采购订单未创建');
// }
// }
-
+
// },
formatDateTime(date) {
@@ -1207,4 +1208,4 @@ export default {
display: flex;
align-items: center;
}
-
\ No newline at end of file
+
diff --git a/work/PlanManagement/PlannOrderClose/01-项目功能内容.md b/work/PlanManagement/PlannOrderClose/01-项目功能内容.md
new file mode 100644
index 0000000..c9dc24e
--- /dev/null
+++ b/work/PlanManagement/PlannOrderClose/01-项目功能内容.md
@@ -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_生产工时视图` 的订单号汇总到临时表,再判断生产计划订单是否无工时。
+
diff --git a/work/PlanManagement/PlannOrderClose/02-项目程序开发详细步骤.md b/work/PlanManagement/PlannOrderClose/02-项目程序开发详细步骤.md
new file mode 100644
index 0000000..b45e5fb
--- /dev/null
+++ b/work/PlanManagement/PlannOrderClose/02-项目程序开发详细步骤.md
@@ -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'已关闭'`
+
diff --git a/work/PlanManagement/PlannOrderClose/03-推进台账.md b/work/PlanManagement/PlannOrderClose/03-推进台账.md
new file mode 100644
index 0000000..4ef50aa
--- /dev/null
+++ b/work/PlanManagement/PlannOrderClose/03-推进台账.md
@@ -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` 秒返回。
+
+### 下一步
+
+- 页面上用默认条件确认无工时但满足条件的订单可参与确认和关闭流程。
+
diff --git a/work/PlanManagement/PlannOrderClose/04-任务矩阵.md b/work/PlanManagement/PlannOrderClose/04-任务矩阵.md
new file mode 100644
index 0000000..d17599e
--- /dev/null
+++ b/work/PlanManagement/PlannOrderClose/04-任务矩阵.md
@@ -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` 已更新 |
+
diff --git a/work/PlanManagement/PlannOrderClose/05-验收证据.md b/work/PlanManagement/PlannOrderClose/05-验收证据.md
new file mode 100644
index 0000000..fcc9631
--- /dev/null
+++ b/work/PlanManagement/PlannOrderClose/05-验收证据.md
@@ -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。
+```
+
diff --git a/work/PlanManagement/PlannOrderClose/06-决策记录.md b/work/PlanManagement/PlannOrderClose/06-决策记录.md
new file mode 100644
index 0000000..5a3b150
--- /dev/null
+++ b/work/PlanManagement/PlannOrderClose/06-决策记录.md
@@ -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` 秒返回。
+
diff --git a/work/PlanManagement/PlannOrderClose/README.md b/work/PlanManagement/PlannOrderClose/README.md
new file mode 100644
index 0000000..6d8839b
--- /dev/null
+++ b/work/PlanManagement/PlannOrderClose/README.md
@@ -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`
+- 当前口径:可关闭查询仍以工时校验为主要规则;没有工时记录的订单,如果满足单据未关闭、入库数量、终检合格数、计划数量等原有可关闭条件,也进入可关闭列表。
+
diff --git a/work/PlanManagement/TimelyKitTrackingResult/01-项目功能内容.md b/work/PlanManagement/TimelyKitTrackingResult/01-项目功能内容.md
index 8454119..e041b8c 100644
--- a/work/PlanManagement/TimelyKitTrackingResult/01-项目功能内容.md
+++ b/work/PlanManagement/TimelyKitTrackingResult/01-项目功能内容.md
@@ -16,12 +16,21 @@
- 物料编码:`SAP.SBO_YL.dbo.VIEW_Jijiankukc.ItemCode`
- 物料名称:`SAP.SBO_YL.dbo.VIEW_Jijiankukc.U_Name`
- 缺件数量:`SAP.SBO_YL.dbo.VIEW_Jijiankukc.未发货数量`
+ - 库存数量:`SAP.SBO_YL.dbo.VIEW_Jijiankukc.库存量`
- 属性:`SAP.SBO_YL.dbo.VIEW_Jijiankukc.属性`,属性为空时显示为外购
- 生产订单号:机加件按 SAP 物料编码匹配 MES 生产计划;装配按 SAP 物料编码 + 销售订单匹配 MES 生产计划;外购取 SAP `在制采购`
- 进度:属性不为空时参考生产计划跟踪当前序;外购为空
- 工艺路线:属性不为空时参考生产计划跟踪工艺路线;外购拼接采购员、采购未清数量、到货草稿、质检状态
- 预计完成时间:属性不为空时取 MES 任务最大计划完成时间;外购取 SAP 采购预计交货时间
+## 2026-06-30 页面修正范围
+
+1. 二级缺件明细在“缺件数量”后新增“库存数量”。
+2. 二级明细去掉单独“采购员”列。
+3. 外购采购状态文本保留采购员拼接。
+4. 二级工艺路线改为左对齐、缩小间距,并按生产计划跟踪的红/蓝/绿配色展示,不使用橙色。
+5. 自制缺件同一物料匹配到多个生产订单时全部显示;同一个缺件生产订单号只显示一次,避免重复行。
+
## 数据库对象
- 查询过程:`dbo.生产管理_及时齐套跟踪结果_查询`
@@ -32,3 +41,6 @@
- 增量脚本:
- `db_backups/create_timely_kit_tracking_result_20260629.sql`
- `db_backups/add_timely_kit_tracking_result_menu_20260629.sql`
+ - `db_backups/update_timely_kit_tracking_result_inventory_20260630.sql`
+ - `db_backups/update_timely_kit_tracking_result_purchase_order_20260630.sql`
+ - `db_backups/update_timely_kit_tracking_result_multi_detail_orders_20260630.sql`
diff --git a/work/PlanManagement/TimelyKitTrackingResult/02-项目程序开发详细步骤.md b/work/PlanManagement/TimelyKitTrackingResult/02-项目程序开发详细步骤.md
index b996063..c8eaf5e 100644
--- a/work/PlanManagement/TimelyKitTrackingResult/02-项目程序开发详细步骤.md
+++ b/work/PlanManagement/TimelyKitTrackingResult/02-项目程序开发详细步骤.md
@@ -16,6 +16,10 @@
5. 使用 `View_生产订单_MES` 匹配 MES 计划、任务状态、工艺路线和预计完成时间。
6. 使用 `YL_质量检验_质检记录` 判断终检和外购到货草稿对应的来料检验状态。
7. 脚本补充 `SET ANSI_NULLS ON` 和 `SET QUOTED_IDENTIFIER ON`,避免 XML `.value()` 和索引视图相关 SET 选项错误。
+8. 2026-06-30 新增 `db_backups/update_timely_kit_tracking_result_inventory_20260630.sql`,在不覆盖历史脚本的前提下更新查询过程。
+9. 2026-06-30 查询过程从 SAP 视图 `库存量` 读取并输出为页面字段 `库存数量`。
+10. 2026-06-30 外购采购状态文本保留采购员、采购未清数量、到货草稿、质检状态,不单独输出采购员列。
+11. 2026-06-30 新增 `db_backups/update_timely_kit_tracking_result_multi_detail_orders_20260630.sql`,去掉自制缺件生产订单匹配处的单行限制,同一缺件物料匹配到的多个生产订单全部返回,并按缺件生产订单号去重。
## 3. 菜单开发
@@ -35,6 +39,9 @@
4. 使用 `el-table-column type="expand"` 展示缺件二级明细。
5. 二级行使用浅绿色背景,贴合原文档“绿色部分二级数据”的表达。
6. 状态字段使用与既有页面一致的绿色/橙色标签样式。
+7. 2026-06-30 二级缺件明细在“缺件数量”后增加“库存数量”列。
+8. 2026-06-30 二级缺件明细去掉单独“采购员”列,采购员仅在外购采购状态文本中显示。
+9. 2026-06-30 二级工艺路线样式参考 `src/views/ProductionManagement/ProductionPlanTrack/index.vue`,调整为左对齐、缩小间距、红/蓝/绿三色,不使用橙色。
## 5. 验证
@@ -43,3 +50,6 @@
3. 直接执行 `dbo.生产管理_及时齐套跟踪结果_查询`,确认 SAP linked server 可访问并返回数据。
4. 执行 `npm run build`,确认前端构建通过。
5. 复制原始 docx 到 `work/PlanManagement/TimelyKitTrackingResult` 并补齐 README、01-06 文档。
+6. 2026-06-30 执行线上过程定义检查,确认包含 `库存数量`;最新口径为外购采购状态文本包含 `采购员:`,但结果集和页面均无单独采购员列。
+7. 2026-06-30 查询 SAP 视图 `VIEW_Jijiankukc`,确认 `库存量` 字段存在且样例有库存值。
+8. 2026-06-30 执行 `EXEC dbo.[生产管理_及时齐套跟踪结果_查询] @订单号 = 4222`,确认缺件物料 `22-103-060-YDZF-20V1.0-4.1` 同时返回生产订单 `5960` 和 `7142`,且同一生产订单号未重复。
diff --git a/work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md b/work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md
index 03ea7b6..a4bc423 100644
--- a/work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md
+++ b/work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md
@@ -103,3 +103,146 @@
### 下一步
- 在页面刷新后检查前 1-10 行和第 32 行 `2007`,确认主数据、二级缺件、外购采购状态展示符合业务预期。
+
+## 2026-06-30 第 4 轮:补库存数量并调整采购员和工艺路线展示
+
+### 做了什么
+
+- 根据反馈在二级缺件明细“缺件数量”后增加“库存数量”字段。
+- 连接 `YL_MESDB`,确认 `[SAP].[SBO_YL].[dbo].[VIEW_Jijiankukc]` 已存在 `库存量` 字段。
+- 新增 `db_backups/update_timely_kit_tracking_result_inventory_20260630.sql`,从 SAP `库存量` 输出为过程字段 `库存数量`。
+- 去掉页面二级明细“采购员”列,并从前端合并数据中移除 `采购员` 映射。
+- 修改存储过程外购采购状态文本,去掉 `采购员:` 拼接,保留未清数量、到货草稿、质检状态。
+- 二级工艺路线参考生产计划跟踪页面调整为左对齐、缩小间距、红/蓝/绿三色,删除橙色逻辑和样式。
+- 更新 README、01-06 文档,并将完整执行过程追加到总日志。
+
+### 改了哪些文件
+
+- `src/views/PlanManagement/TimelyKitTrackingResult/index.vue`
+- `db_backups/update_timely_kit_tracking_result_inventory_20260630.sql`
+- `work/PlanManagement/TimelyKitTrackingResult/README.md`
+- `work/PlanManagement/TimelyKitTrackingResult/01-项目功能内容.md`
+- `work/PlanManagement/TimelyKitTrackingResult/02-项目程序开发详细步骤.md`
+- `work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md`
+- `work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md`
+- `work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md`
+- `work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md`
+- `gptlog-process/gpdlog.md`
+
+### 验证了什么
+
+- `VIEW_Jijiankukc` 字段列表包含 `库存量`。
+- SAP 视图取样:`DocEntry=2007`、`ItemCode=24112-011-HY-WF50L` 的 `库存量=27`。
+- 发布 `dbo.生产管理_及时齐套跟踪结果_查询` 成功。
+- 查询 `@订单号=2007`,结果返回 `库存数量=27`,且结果列不再包含 `采购员`。
+- 查询 `@订单号=7321`,结果返回 `库存数量=2`,外购采购状态文本不再包含采购员。
+- 线上过程定义检查显示:包含 `库存数量`,未拼接 `采购员:`。
+- `npm run build` 通过,仅有项目既有资源体积和 Browserslist/caniuse-lite 过期警告。
+
+### 下一步
+
+- 登录页面人工验收展开明细,确认“库存数量”位置、外购采购状态文本、工艺路线颜色和左对齐效果符合现场使用预期。
+
+## 2026-06-30 第 5 轮:修正 7134 工艺路线判色口径
+
+### 做了什么
+
+- 根据反馈核对二级数据 `7134` 的工艺路线颜色差异。
+- 查询 `View_生产订单_MES` 和 `YL_质量检验_质检记录`,确认 `7134` 三道工序为:
+ - 打磨:加工状态 `6`,收检合格数 `6`。
+ - 打压检测:加工状态为空,收检合格数 `6`。
+ - 喷塑:外协,收检合格数 `0`。
+- 对比生产计划跟踪页面判色逻辑,确认其蓝色口径为:加工状态 `6` 或 `3`,或 `收检合格数 > 0`。
+- 将当前页二级工艺路线判色逻辑改为与生产计划跟踪一致。
+- 保留外协连续分组逻辑,外协工序按生产计划跟踪的 `getOutsourceGroupClassState` 口径继承同组末道工序颜色。
+
+### 改了哪些文件
+
+- `src/views/PlanManagement/TimelyKitTrackingResult/index.vue`
+- `work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md`
+- `work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md`
+- `work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md`
+- `work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md`
+- `gptlog-process/gpdlog.md`
+
+### 验证了什么
+
+- SQL 验证 `7134`:
+ - 打磨:`收检合格数=6`。
+ - 打压检测:`收检合格数=6`。
+ - 喷塑:`收检合格数=0`。
+- 本地判色模拟结果:`step1:process-route-blue,step2:process-route-blue,step3:process-route-red`。
+- `rg` 检查当前页无 `process-route-orange`。
+- `npm run build` 通过,仅有项目既有资源体积和 Browserslist/caniuse-lite 过期警告。
+
+### 下一步
+
+- 登录页面展开 `7134`,确认当前页显示两个蓝色、一个红色,与生产计划跟踪一致。
+
+## 2026-06-30 第 6 轮:恢复外购采购员拼接但不恢复采购员列
+
+### 做了什么
+
+- 根据最新反馈恢复外购 `工艺路线/采购状态` 中的采购员拼接。
+- 保持页面二级明细不增加单独“采购员”列。
+- 在最新过程脚本 `db_backups/update_timely_kit_tracking_result_purchase_order_20260630.sql` 中读取 SAP `采购员`,仅用于拼接外购采购状态文本。
+- 外购采购状态格式恢复为:`采购员:xxx / 未清数量:xxx / 到货草稿:xxx / 质检状态:xxx`。
+- 继续保留外购缺件生产订单号按 SAP `在制采购` 取值、预计完成时间按 SAP `采购预计交货日期` 取值。
+
+### 改了哪些文件
+
+- `db_backups/update_timely_kit_tracking_result_purchase_order_20260630.sql`
+- `work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md`
+- `work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md`
+- `work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md`
+- `work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md`
+- `gptlog-process/gpdlog.md`
+
+### 验证了什么
+
+- 发布 `dbo.生产管理_及时齐套跟踪结果_查询` 成功。
+- 查询 `@订单号=7321`,外购采购状态显示:`采购员:张丹 / 未清数量:50 / 到货草稿:11209 / 质检状态:未完成`。
+- 查询 `@订单号=7321`,二级缺件生产订单号为 SAP `在制采购=4111`,预计完成时间为 SAP `采购预计交货日期=2026-06-25`。
+- 结果集元数据检查:无单独 `采购员` 结果列。
+- 前端页面检查:无 `label="采购员"` 或 `prop="采购员"`。
+- `npm run build` 通过,仅有项目既有资源体积和 Browserslist/caniuse-lite 过期警告。
+
+### 下一步
+
+- 登录页面确认外购采购状态中可见采购员,同时二级表没有单独采购员列。
+
+## 2026-06-30 第 7 轮:自制缺件显示所有匹配生产订单
+
+### 做了什么
+
+- 根据反馈调整自制缺件二级匹配口径:同一缺件物料匹配到的所有生产订单都显示,同一个生产订单号不重复。
+- 排查 `4222`:
+ - SAP 缺件物料为 `22-103-060-YDZF-20V1.0-4.1`。
+ - SAP 视图 `DocNum=5960`。
+ - MES 中同物料存在生产订单 `5960` 和 `7142`。
+ - 旧过程在 `detail_order` 中使用 `TOP (1)`,只能显示其中一个。
+- 新增 `db_backups/update_timely_kit_tracking_result_multi_detail_orders_20260630.sql`。
+- 将自制件 `detail_order` 从 `TOP (1)` 改为按 `订单编号` 分组去重后返回多条。
+- 保留 SQL 最终层按 `订单号 + 缺件生产订单号` 去重,避免同一生产订单号重复。
+
+### 改了哪些文件
+
+- `db_backups/update_timely_kit_tracking_result_multi_detail_orders_20260630.sql`
+- `work/PlanManagement/TimelyKitTrackingResult/README.md`
+- `work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md`
+- `work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md`
+- `work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md`
+- `work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md`
+- `gptlog-process/gpdlog.md`
+
+### 验证了什么
+
+- 发布 `dbo.生产管理_及时齐套跟踪结果_查询` 成功。
+- 查询 `@订单号=4222`,二级数据返回 `5960` 和 `7142` 两条生产订单。
+- `5960` 使用完整的 13 道工艺路线。
+- `7142` 仍显示其 4 道工艺路线。
+- 同一生产订单号没有重复出现。
+
+### 下一步
+
+- 登录页面展开 `4222`,确认二级数据同时显示 `5960` 和 `7142`,且没有重复生产订单号。
diff --git a/work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md b/work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md
index 4e6a380..86f50f4 100644
--- a/work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md
+++ b/work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md
@@ -16,5 +16,12 @@
| TKR-014 | 一级主数据禁止 SAP 兜底 | 已完成 | 默认查询中产品编码/产品名称为空行数为 0,不出现只有 SAP 缺件字段的假主数据 |
| TKR-015 | 外购二级生产订单号修正 | 已完成 | 外购缺件不再显示主生产订单号,有到货草稿时显示采购入库检生产订单 |
| TKR-016 | 外购质检状态按采购入库检口径 | 已完成 | 外购按 `到货草稿 -> 质量检验_质检任务_SAP -> YL_质量检验_质检记录` 判断未完成/已完成 |
+| TKR-017 | 二级新增库存数量 | 已完成 | SAP `VIEW_Jijiankukc.库存量` 已通过过程输出为 `库存数量`,页面在缺件数量后显示 |
+| TKR-018 | 去掉单独采购员列 | 已完成 | 页面二级明细无单独采购员列,采购员仅在外购采购状态文本中拼接显示 |
+| TKR-019 | 工艺路线样式调整 | 已完成 | 二级工艺路线左对齐、间距收紧、只使用红/蓝/绿三色,无橙色 |
+| TKR-020 | 2026-06-30 增量脚本归档 | 已完成 | `db_backups/update_timely_kit_tracking_result_inventory_20260630.sql` 已创建并发布成功 |
+| TKR-021 | 工艺路线判色对齐生产计划跟踪 | 已完成 | 7134 二级工艺路线按生产计划跟踪口径显示两个蓝色、一个红色 |
+| TKR-022 | 外购采购员恢复为拼接文本 | 已完成 | 外购采购状态包含 `采购员:`,页面和过程结果集均无单独采购员列 |
+| TKR-023 | 自制缺件多生产订单显示 | 已完成 | 同一缺件物料匹配到的所有生产订单都显示,且同一生产订单号不重复 |
| TKR-009 | 页面人工验收 | 待办 | 登录系统确认菜单可见、查询成功、展开行字段与业务一致 |
| TKR-010 | 采购质检匹配口径复核 | 观察 | 如业务确认到货草稿不是 `YL_质量检验_质检记录.计划号`,需调整质检状态匹配规则 |
diff --git a/work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md b/work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md
index a890411..10225d2 100644
--- a/work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md
+++ b/work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md
@@ -198,3 +198,293 @@ npm run build
- 构建通过。
- webpack compiled with 2 warnings。
- 警告为项目既有资源体积过大和 Browserslist/caniuse-lite 数据过期。
+
+## 第 4 轮修正验证
+
+### SAP 库存字段确认
+
+命令:
+
+```powershell
+sqlcmd -S 192.168.2.92 -d YL_MESDB -U sa -P ****** -C -Q "SELECT c.name FROM [SAP].[SBO_YL].sys.columns c JOIN [SAP].[SBO_YL].sys.objects o ON c.object_id=o.object_id WHERE o.name=N'VIEW_Jijiankukc' ORDER BY c.column_id;"
+```
+
+结果:
+
+- `[SAP].[SBO_YL].[dbo].[VIEW_Jijiankukc]` 包含 `库存量` 字段。
+
+取样命令:
+
+```powershell
+sqlcmd -S 192.168.2.92 -d YL_MESDB -U sa -P ****** -C -Q "SELECT TOP (5) s.DocEntry, s.ItemCode, s.[未发货数量], s.[库存量] FROM [SAP].[SBO_YL].[dbo].[VIEW_Jijiankukc] AS s WHERE ISNULL(s.[未发货数量],0)>0 AND ISNULL(s.[库存量],0)>0 ORDER BY s.DocEntry;"
+```
+
+样例结果:
+
+```text
+DocEntry ItemCode 未发货数量 库存量
+2007 24112-011-HY-WF50L 78 27
+2011 213-YGLQ-DTFC20C-210 107 85
+2248 213-YGLQ-DTFC20C-100 102 85
+```
+
+### 查询过程发布
+
+命令:
+
+```powershell
+sqlcmd -S 192.168.2.92 -d YL_MESDB -U sa -P ****** -C -b -f 65001 -i db_backups\update_timely_kit_tracking_result_inventory_20260630.sql
+```
+
+结果:
+
+- 执行成功。
+- 过程 `dbo.生产管理_及时齐套跟踪结果_查询` 已输出 `库存数量`。
+- 外购采购状态不再拼接 `采购员:`。
+
+### 样例过程验证
+
+命令:
+
+```sql
+EXEC dbo.[生产管理_及时齐套跟踪结果_查询] @订单号=2007;
+EXEC dbo.[生产管理_及时齐套跟踪结果_查询] @订单号=7321;
+```
+
+结果:
+
+- `@订单号=2007` 返回缺件 `24112-011-HY-WF50L`,缺件数量 `78`,库存数量 `27`。
+- `@订单号=7321` 返回缺件 `XX-YG01013990`,缺件数量 `6`,库存数量 `2`。
+- 结果列不再包含 `采购员`。
+- 外购工艺路线/采购状态示例:`未清数量:50 / 到货草稿:11209 / 质检状态:未完成`。
+
+### 过程定义检查
+
+命令:
+
+```powershell
+sqlcmd -S 192.168.2.92 -d YL_MESDB -U sa -P ****** -C -Q "SELECT CASE WHEN CHARINDEX(N'[库存数量]', OBJECT_DEFINITION(OBJECT_ID(N'dbo.生产管理_及时齐套跟踪结果_查询'))) > 0 THEN N'有库存数量' ELSE N'缺库存数量' END AS 库存字段, CASE WHEN CHARINDEX(N'采购员:', OBJECT_DEFINITION(OBJECT_ID(N'dbo.生产管理_及时齐套跟踪结果_查询'))) > 0 THEN N'仍拼接采购员' ELSE N'未拼接采购员' END AS 采购员拼接;"
+```
+
+结果:
+
+```text
+库存字段 采购员拼接
+有库存数量 未拼接采购员
+```
+
+### 前端构建
+
+命令:
+
+```powershell
+npm run build
+```
+
+结果:
+
+- 构建通过。
+- `webpack 5.103.0 compiled with 2 warnings`。
+- 警告仍为项目既有资源体积过大和 Browserslist/caniuse-lite 数据过期。
+
+### 无效验证命令说明
+
+- 曾尝试使用 `OPENQUERY([LOCALSERVER], ...)` 做辅助结果集落表验证。
+- 数据库未配置 `LOCALSERVER` linked server,返回“在 sys.servers 中找不到服务器 'LOCALSERVER'”。
+- 该命令不作为验收证据,已用 SAP 取样、过程样例查询和过程定义检查替代。
+
+## 第 5 轮修正验证
+
+### 7134 工艺数据验证
+
+命令:
+
+```sql
+SELECT [订单编号],[订单行号],[工序名称],[指派对象],[计划数量],[进度],[完成数量],[收料数量],[加工状态],[开工时间],[外协分组]
+FROM dbo.[View_生产订单_MES]
+WHERE [订单编号]=7134 AND [物料类型]=N'pit_Resource'
+ORDER BY [订单行号];
+
+SELECT p.[订单行号], p.[工序名称],
+ SUM(ISNULL(q.[合格数],0)) AS 收检合格数,
+ SUM(ISNULL(q.[不合格数],0)) AS 收检不合格数
+FROM dbo.[View_生产订单_MES] p
+LEFT JOIN dbo.[YL_质量检验_质检记录] q
+ ON q.[TaskAID]=p.[TaskAID] AND q.[质检类型]=N'收检'
+WHERE p.[订单编号]=7134 AND p.[物料类型]=N'pit_Resource'
+GROUP BY p.[订单行号], p.[工序名称]
+ORDER BY p.[订单行号];
+```
+
+结果:
+
+```text
+订单行号 工序名称 指派对象 加工状态 收检合格数
+1 打磨 走手续 6 6
+2 打压检测 机械装配 NULL 6
+3 喷塑 外协 NULL 0
+```
+
+### 判色口径验证
+
+- 生产计划跟踪页面蓝色口径:`加工状态` 为 `6` 或 `3`,或 `收检合格数 > 0`。
+- 当前页已改为同口径。
+- 本地模拟结果:
+
+```text
+step1:process-route-blue,step2:process-route-blue,step3:process-route-red
+```
+
+### 构建验证
+
+命令:
+
+```powershell
+npm run build
+```
+
+结果:
+
+- 构建通过。
+- `webpack 5.103.0 compiled with 2 warnings`。
+- 警告为项目既有资源体积过大和 Browserslist/caniuse-lite 数据过期。
+
+## 第 7 轮修正验证
+
+### 4222 数据来源验证
+
+命令:
+
+```sql
+SELECT DocEntry, Project, [行号], ItemCode, U_Name, [属性],
+ [未发货数量], [库存量], DocNum, [生产未清数量]
+FROM [SAP].[SBO_YL].[dbo].[VIEW_Jijiankukc]
+WHERE DocEntry=4222;
+
+SELECT [订单编号], [物料编号], [物料描述], [订单行号], [工序名称], [指派对象]
+FROM dbo.[View_生产订单_MES]
+WHERE [订单编号] IN (5960,7142)
+ORDER BY [订单编号], [订单行号];
+```
+
+结果:
+
+- SAP 缺件物料:`22-103-060-YDZF-20V1.0-4.1`。
+- SAP `DocNum=5960`。
+- MES 同物料存在生产订单 `5960` 和 `7142`。
+
+### 查询过程发布
+
+命令:
+
+```powershell
+sqlcmd -S 192.168.2.92 -d YL_MESDB -U sa -P ****** -C -b -f 65001 -i db_backups\update_timely_kit_tracking_result_multi_detail_orders_20260630.sql
+```
+
+结果:
+
+- 执行成功。
+- 自制件 `detail_order` 改为按订单编号去重后返回多条,不再只取 `TOP (1)`。
+
+### 4222 查询验证
+
+命令:
+
+```sql
+EXEC dbo.[生产管理_及时齐套跟踪结果_查询] @订单号=4222;
+```
+
+结果:
+
+```text
+缺件物料编码 缺件生产订单号
+22-103-060-YDZF-20V1.0-4.1 5960
+22-103-060-YDZF-20V1.0-4.1 7142
+```
+
+- `5960` 和 `7142` 均显示。
+- 同一生产订单号未重复。
+- `5960` 显示完整 13 道工艺路线,`7142` 显示 4 道工艺路线。
+
+## 第 6 轮修正验证
+
+### 查询过程发布
+
+命令:
+
+```powershell
+sqlcmd -S 192.168.2.92 -d YL_MESDB -U sa -P ****** -C -b -f 65001 -i db_backups\update_timely_kit_tracking_result_purchase_order_20260630.sql
+```
+
+结果:
+
+- 执行成功。
+- 外购采购状态恢复采购员拼接。
+- 未恢复单独采购员结果列。
+
+### 样例验证
+
+命令:
+
+```sql
+EXEC dbo.[生产管理_及时齐套跟踪结果_查询] @订单号=7321;
+```
+
+结果:
+
+- 缺件物料:`XX-YG01013990`。
+- 缺件属性:`外购`。
+- 缺件生产订单号:`4111`,来自 SAP `在制采购`。
+- 工艺路线/采购状态:`采购员:张丹 / 未清数量:50 / 到货草稿:11209 / 质检状态:未完成`。
+- 预计完成时间:`2026-06-25`,来自 SAP `采购预计交货日期`。
+
+### 结果集列验证
+
+命令:
+
+```sql
+SELECT column_ordinal, name
+FROM sys.dm_exec_describe_first_result_set_for_object(
+ OBJECT_ID(N'dbo.生产管理_及时齐套跟踪结果_查询'), 0
+)
+WHERE name LIKE N'%采购员%'
+ OR name IN (N'工艺路线', N'缺件生产订单号', N'预计完成时间');
+```
+
+结果:
+
+```text
+column_ordinal name
+26 缺件生产订单号
+28 工艺路线
+29 预计完成时间
+```
+
+说明:结果集中无单独 `采购员` 列。
+
+### 前端列验证
+
+命令:
+
+```powershell
+Select-String -Path src\views\PlanManagement\TimelyKitTrackingResult\index.vue -Pattern '采购员|label="采购员"|prop="采购员"'
+```
+
+结果:
+
+- 无匹配。
+- 页面不包含单独采购员列。
+
+### 构建验证
+
+命令:
+
+```powershell
+npm run build
+```
+
+结果:
+
+- 构建通过。
+- `webpack 5.103.0 compiled with 2 warnings`。
+- 警告为项目既有资源体积过大和 Browserslist/caniuse-lite 数据过期。
diff --git a/work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md b/work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md
index 790e597..375f8f6 100644
--- a/work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md
+++ b/work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md
@@ -71,3 +71,39 @@
- 决策:外购质检状态按 `SAP.到货草稿 -> 质量检验_质检任务_SAP.订单编号 -> YL_质量检验_质检记录` 判断。
- 原因:采购入库检页面的生产订单字段来自 `质量检验_质检任务_SAP.订单编号`,状态由入库数量与来料检验数量决定。
- 影响:有到货草稿的外购缺件能展示采购入库检口径的未完成/已完成;非外购不显示采购质检状态。
+
+## DR-013 库存数量直接来自 SAP 缺件视图
+
+- 决策:二级缺件明细的 `库存数量` 直接取 `[SAP].[SBO_YL].[dbo].[VIEW_Jijiankukc].[库存量]`,过程输出别名为 `库存数量`。
+- 原因:用户确认“库存数量字段在 SAP 里面有”,实际字段列表也显示缺件视图已有 `库存量`,不需要再 join 其他库存表。
+- 影响:库存口径与 SAP 缺件视图保持一致;如果 SAP 后续调整 `库存量` 口径,页面同步变化。
+
+## DR-014 本轮数据库调整使用新日期增量脚本
+
+- 决策:新增 `db_backups/update_timely_kit_tracking_result_inventory_20260630.sql`,不覆盖 `create_timely_kit_tracking_result_20260629.sql`。
+- 原因:昨天的脚本已经作为历史交付和验收证据,新增日期脚本更利于追踪本轮库存字段和采购员拼接变更。
+- 影响:后续继续修改过程时优先新增日期脚本或在最新脚本基础上演进,保留历史过程版本。
+
+## DR-015 外购采购状态不再拼接采购员(已废止)
+
+- 决策:外购 `工艺路线/采购状态` 文本只保留采购未清数量、到货草稿、质检状态,不再拼接采购员。
+- 原因:用户明确要求“去掉拼接的采购员字段”,且页面已单独去掉采购员列。
+- 影响:该决策已被 DR-017 替代。最新口径为恢复采购员拼接,但不恢复单独采购员列。
+
+## DR-016 工艺路线判色与生产计划跟踪一致
+
+- 决策:及时齐套跟踪结果二级工艺路线判色复用生产计划跟踪口径:`加工状态` 为 `6` 或 `3`,或 `收检合格数 > 0` 时为蓝色;外协在收料数量大于已收检数量时为绿色;`加工状态` 为 `2` 或 `4` 时为绿色;否则为红色。
+- 原因:用户指出 `7134` 在当前页显示一个蓝色两个红色,而生产计划跟踪显示两个蓝色一个红色。差异来自当前页旧逻辑需要进度/完成量满足条件才判蓝,而生产计划跟踪只要有收检合格数就判蓝。
+- 影响:`7134` 的“打磨、打压检测、喷塑”将显示为蓝、蓝、红;后续颜色争议以生产计划跟踪页面口径为准。
+
+## DR-017 外购采购员只作为采购状态拼接文本
+
+- 决策:外购 `工艺路线/采购状态` 文本恢复拼接采购员,格式为 `采购员:xxx / 未清数量:xxx / 到货草稿:xxx / 质检状态:xxx`;页面和过程结果集都不提供单独 `采购员` 列。
+- 原因:用户明确最新口径为“还原字段拼接采购员部分,不要单独的采购员列”。
+- 影响:前端无需新增列;外购采购状态里能看到采购员,导出/接口结果集仍不会出现独立采购员字段。
+
+## DR-018 自制缺件显示所有匹配生产订单
+
+- 决策:属性不为空的自制缺件按 SAP 缺件物料匹配 MES 生产订单时,不再只取 `TOP (1)`;同一缺件物料匹配到的所有生产订单都显示,但同一生产订单号只保留一条。
+- 原因:用户明确要求“同一个生产订单号不要出现重复,同一缺件物料所有匹配生产订单都显示”。4222 的缺件物料同时匹配到 5960 和 7142,旧 `TOP (1)` 只能显示其中一个。
+- 影响:4222 这类同物料多生产订单场景会显示多条二级明细;页面已有前端去重,SQL 最终层也按 `订单号 + 缺件生产订单号` 去重。
diff --git a/work/PlanManagement/TimelyKitTrackingResult/README.md b/work/PlanManagement/TimelyKitTrackingResult/README.md
index 09940e9..e068d74 100644
--- a/work/PlanManagement/TimelyKitTrackingResult/README.md
+++ b/work/PlanManagement/TimelyKitTrackingResult/README.md
@@ -11,7 +11,17 @@
| `04-任务矩阵.md` | 任务编号、状态、验收标准 |
| `05-验收证据.md` | 命令、页面、SQL、构建等证据 |
| `06-决策记录.md` | 关键实现决策与原因 |
+| `db_backups/update_timely_kit_tracking_result_inventory_20260630.sql` | 2026-06-30 库存数量和采购员拼接修正增量脚本 |
+| `db_backups/update_timely_kit_tracking_result_purchase_order_20260630.sql` | 2026-06-30 外购生产订单号和采购员拼接当前有效增量脚本 |
+| `db_backups/update_timely_kit_tracking_result_multi_detail_orders_20260630.sql` | 2026-06-30 自制缺件多生产订单显示当前有效增量脚本 |
## 后续推进方式
后续继续该任务时,先看 `04-任务矩阵.md` 中状态为“待办”或“观察”的任务,再按 `03-推进台账.md` 追加新轮次。涉及数据库口径调整时,新增 `db_backups` 增量脚本,不直接覆盖历史脚本。
+
+## 当前状态
+
+- 2026-06-30 已完成二级缺件明细“库存数量”字段。
+- 2026-06-30 已去掉页面单独采购员列;外购采购状态文本保留采购员拼接。
+- 2026-06-30 已将二级工艺路线调整为左对齐、红/蓝/绿三色、无橙色。
+- 2026-06-30 自制缺件同物料匹配到多个生产订单时全部显示,同一生产订单号只显示一次。
diff --git a/work/ProductionManagement/AGVtask/01-项目功能内容.md b/work/ProductionManagement/AGVtask/01-项目功能内容.md
new file mode 100644
index 0000000..caa4983
--- /dev/null
+++ b/work/ProductionManagement/AGVtask/01-项目功能内容.md
@@ -0,0 +1,27 @@
+# 01-项目功能内容
+
+## 页面
+
+- 页面路径:`src/views/ProductionManagement/AGVtask/index.vue`
+- 页面模块:生产管理
+- 页面功能:AGV 任务创建、实时任务查看、历史记录、点位管理。
+
+## 数据来源
+
+- 实时列表:`dbo.生产管理_物料机器人_查询实时数据`
+- 实时表:`dbo.AGV_实时数据`
+- 历史列表:`dbo.生产管理_物料机器人_查询历史数据`
+- 历史表:`dbo.AGV_历史数据`
+
+## 状态口径
+
+- `PENDING`:待执行
+- `RUNNING`:执行中
+- `FINISHED`:已完成
+- `CANCELED`:已取消
+
+## 2026-06-30 处理内容
+
+- 将页面中实时任务状态为 `RUNNING` 的任务全部改为已完成。
+- 处理方式不是前端显示替换,而是按现有完成任务口径,将实时任务转入历史表,状态写为 `FINISHED`,并从实时表删除。
+
diff --git a/work/ProductionManagement/AGVtask/02-项目程序开发详细步骤.md b/work/ProductionManagement/AGVtask/02-项目程序开发详细步骤.md
new file mode 100644
index 0000000..53a682f
--- /dev/null
+++ b/work/ProductionManagement/AGVtask/02-项目程序开发详细步骤.md
@@ -0,0 +1,32 @@
+# 02-项目程序开发详细步骤
+
+## 1. 排查页面
+
+1. 读取 `src/views/ProductionManagement/AGVtask/index.vue`。
+2. 确认实时任务调用 `生产管理_物料机器人_查询实时数据`。
+3. 确认页面状态映射:`RUNNING` 显示为“执行中”,`FINISHED` 显示为“已完成”。
+
+## 2. 排查数据库
+
+1. 查询 AGV 相关对象。
+2. 确认实时表为 `dbo.AGV_实时数据`。
+3. 确认历史表为 `dbo.AGV_历史数据`。
+4. 确认完成任务过程 `dbo.生产管理_物料机器人_完成任务` 的逻辑为:
+ - 插入历史表。
+ - 从实时表删除。
+
+## 3. 数据处理
+
+1. 查询处理前实时任务状态分布:
+ - `PENDING`:1 条
+ - `RUNNING`:35 条
+2. 使用事务将 `RUNNING` 任务写入 `AGV_历史数据`,状态为 `FINISHED`。
+3. 从 `AGV_实时数据` 删除这些 `RUNNING` 任务。
+4. 不处理 `PENDING` 待执行任务。
+
+## 4. 验证
+
+1. 执行 `生产管理_物料机器人_查询实时数据 @状态='RUNNING'`,结果为空。
+2. 执行 `生产管理_物料机器人_查询实时数据 @状态=''`,实时表只剩 1 条 `PENDING`。
+3. 查询最近 5 分钟历史记录,确认新增 `FINISHED` 35 条。
+
diff --git a/work/ProductionManagement/AGVtask/03-推进台账.md b/work/ProductionManagement/AGVtask/03-推进台账.md
new file mode 100644
index 0000000..838a021
--- /dev/null
+++ b/work/ProductionManagement/AGVtask/03-推进台账.md
@@ -0,0 +1,44 @@
+# 03-推进台账
+
+## 第1轮:执行中任务改为已完成
+
+### 用户反馈
+
+- 处理页面 `ProductionManagement/AGVtask/index` 里面任务状态为执行中的数据。
+- 都改为已完成。
+
+### 执行过程
+
+1. 读取 `src/views/ProductionManagement/AGVtask/index.vue`。
+2. 确认实时查询过程为 `dbo.生产管理_物料机器人_查询实时数据`。
+3. 确认实时表为 `dbo.AGV_实时数据`,历史表为 `dbo.AGV_历史数据`。
+4. 查询处理前状态分布:`RUNNING` 35 条,`PENDING` 1 条。
+5. 使用事务将 `RUNNING` 任务插入 `AGV_历史数据`,状态设为 `FINISHED`。
+6. 删除实时表中的 `RUNNING` 任务。
+7. 验证实时查询 `RUNNING` 为空。
+8. 验证实时表仅剩 1 条 `PENDING`。
+9. 验证历史表最近 5 分钟新增 `FINISHED` 35 条。
+
+### 修改文件
+
+- `work/ProductionManagement/AGVtask/README.md`
+- `work/ProductionManagement/AGVtask/01-项目功能内容.md`
+- `work/ProductionManagement/AGVtask/02-项目程序开发详细步骤.md`
+- `work/ProductionManagement/AGVtask/03-推进台账.md`
+- `work/ProductionManagement/AGVtask/04-任务矩阵.md`
+- `work/ProductionManagement/AGVtask/05-验收证据.md`
+- `work/ProductionManagement/AGVtask/06-决策记录.md`
+- `gptlog-process/gpdlog.md`
+- `C:\gptlog-process\gpdlog.md`
+
+### 验证结果
+
+- 已转历史数量:35。
+- `RUNNING` 实时任务:0。
+- 实时表剩余:`PENDING` 1 条。
+- 历史表最近 5 分钟 `FINISHED`:35 条。
+
+### 下一步
+
+- 页面刷新实时任务,确认执行中列表为空。
+
diff --git a/work/ProductionManagement/AGVtask/04-任务矩阵.md b/work/ProductionManagement/AGVtask/04-任务矩阵.md
new file mode 100644
index 0000000..2d42628
--- /dev/null
+++ b/work/ProductionManagement/AGVtask/04-任务矩阵.md
@@ -0,0 +1,11 @@
+# 04-任务矩阵
+
+| 任务编号 | 任务名称 | 状态 | 验收标准 |
+| --- | --- | --- | --- |
+| AGV-001 | 定位页面数据来源 | 已完成 | 确认实时列表使用 `生产管理_物料机器人_查询实时数据` |
+| AGV-002 | 定位状态表 | 已完成 | 确认实时表 `AGV_实时数据`、历史表 `AGV_历史数据` |
+| AGV-003 | 执行中转已完成 | 已完成 | 35 条 `RUNNING` 任务转为历史 `FINISHED` |
+| AGV-004 | 保留待执行 | 已完成 | `PENDING` 任务未处理,实时表仍保留 1 条 |
+| AGV-005 | 验证实时列表 | 已完成 | 查询 `RUNNING` 为空 |
+| AGV-006 | 文档和日志 | 已完成 | README、01-06 文档和两处 `gpdlog.md` 已更新 |
+
diff --git a/work/ProductionManagement/AGVtask/05-验收证据.md b/work/ProductionManagement/AGVtask/05-验收证据.md
new file mode 100644
index 0000000..b23ad90
--- /dev/null
+++ b/work/ProductionManagement/AGVtask/05-验收证据.md
@@ -0,0 +1,58 @@
+# 05-验收证据
+
+## 处理前状态
+
+```sql
+SELECT TaskStatus, COUNT(*) AS 数量
+FROM dbo.AGV_实时数据
+GROUP BY TaskStatus;
+```
+
+结果:
+
+```text
+PENDING 1
+RUNNING 35
+```
+
+## 执行处理
+
+处理方式:
+
+```text
+将 dbo.AGV_实时数据 中 TaskStatus='RUNNING' 的任务插入 dbo.AGV_历史数据,TaskStatus 写为 FINISHED;
+随后删除实时表中的 RUNNING 任务。
+```
+
+结果:
+
+```text
+已转历史数量 = 35
+```
+
+## 处理后验证
+
+实时查询:
+
+```sql
+EXEC dbo.[生产管理_物料机器人_查询实时数据] @AGV编号=N'', @状态=N'RUNNING';
+```
+
+结果:
+
+```text
+无 RUNNING 数据。
+```
+
+实时表剩余:
+
+```text
+PENDING 1
+```
+
+历史表最近 5 分钟:
+
+```text
+FINISHED 35
+```
+
diff --git a/work/ProductionManagement/AGVtask/06-决策记录.md b/work/ProductionManagement/AGVtask/06-决策记录.md
new file mode 100644
index 0000000..0479aae
--- /dev/null
+++ b/work/ProductionManagement/AGVtask/06-决策记录.md
@@ -0,0 +1,14 @@
+# 06-决策记录
+
+## DR-001 执行中任务按完成流程转入历史表
+
+- 日期:2026-06-30
+- 决策:将 `AGV_实时数据.TaskStatus='RUNNING'` 的任务插入 `AGV_历史数据`,状态写为 `FINISHED`,然后从实时表删除。
+- 原因:页面已有完成任务过程也是“写历史表 + 删除实时表”的口径,直接把实时表状态改成 `FINISHED` 会让已完成任务继续出现在实时列表中,不符合页面现有设计。
+
+## DR-002 不处理待执行任务
+
+- 日期:2026-06-30
+- 决策:只处理 `RUNNING`,不处理 `PENDING`。
+- 原因:用户要求处理“执行中”的数据,待执行任务不属于本次范围。
+
diff --git a/work/ProductionManagement/AGVtask/README.md b/work/ProductionManagement/AGVtask/README.md
new file mode 100644
index 0000000..0d0be27
--- /dev/null
+++ b/work/ProductionManagement/AGVtask/README.md
@@ -0,0 +1,19 @@
+# AGV任务 README 索引
+
+## 文档清单
+
+- `01-项目功能内容.md`:记录页面、数据来源和状态口径。
+- `02-项目程序开发详细步骤.md`:记录本次数据处理步骤。
+- `03-推进台账.md`:记录每轮做了什么、改了哪些文件、验证了什么、下一步是什么。
+- `04-任务矩阵.md`:记录任务编号、状态、验收标准。
+- `05-验收证据.md`:记录命令、表、过程和结果证据。
+- `06-决策记录.md`:记录关键处理口径。
+
+## 当前状态
+
+- 页面路径:`src/views/ProductionManagement/AGVtask/index.vue`
+- 实时数据过程:`dbo.生产管理_物料机器人_查询实时数据`
+- 实时表:`dbo.AGV_实时数据`
+- 历史表:`dbo.AGV_历史数据`
+- 本次处理:将实时表中 `TaskStatus='RUNNING'` 的 35 条任务转入历史表,状态改为 `FINISHED`。
+
diff --git a/work/ProductionManagement/DesignReportTask/01-项目功能内容.md b/work/ProductionManagement/DesignReportTask/01-项目功能内容.md
new file mode 100644
index 0000000..95cd110
--- /dev/null
+++ b/work/ProductionManagement/DesignReportTask/01-项目功能内容.md
@@ -0,0 +1,154 @@
+# 01-项目功能内容
+
+## 一、模块目标
+
+新增一套独立的设计报工任务模块,用于记录研发/设计类任务、人员报工、工时校验和工时报表。
+
+该模块不参与现有生产报工体系,不上传 SAP,不影响现有工时校验、生产计划、装配中心、机加工、作业者工时等既有功能。
+
+## 二、页面范围
+
+### 1. 设计任务页面
+
+功能:
+- 查询过滤。
+- 新建任务。
+- 编辑任务。
+- 删除任务。
+
+查询条件:
+- 任务ID。
+- 项目号。
+- 物料编码。
+- 图号。
+- 关联父件物料编码。
+- 预计开始时间。
+- 预计结束时间。
+- 单据状态。
+
+字段:
+- DID:唯一序号,自增;新建时不可见,编辑时不可修改。
+- 项目号:下拉选择,可搜索;具体 SAP 视图字段后续提供。
+- 物料编码:下拉选择,可搜索,参考 `ProcessManagement/PartDrawlook/index.vue` 的物料编码过滤。
+- 图号:文本框输入。
+- 任务描述:文本框输入。
+- 关联父件物料编码:下拉选择,可搜索,参考 `ProcessManagement/PartDrawlook/index.vue` 的物料编码过滤。
+- 设计要求:文本框输入。
+- 研发立项号:文本框输入。
+- 研发目的:文本框输入。
+- 指派对象:按二次派工口径支持多人员选择,参考 `PlanManagement/SelfMakePlando/index.vue`;落库保存人员ID列表和人员名称列表。
+- 预计开始时间:日期选择器。
+- 预计结束时间:日期选择器。
+- 创建日期:系统创建时间;新建时不可见,编辑时不可修改。
+- 单据状态:待开始、执行中、已结束、已完成。
+
+删除约束:
+- 如果任务已经存在设计报工记录,不能删除。
+- 如果任务没有报工记录,允许删除。
+
+### 2. 设计报工页面
+
+字段显示和设计任务页面基本一致。
+
+过滤条件和设计任务页面基本一致。
+
+页面功能:
+- 开始。
+- 结束。
+- 完成。
+
+业务规则:
+- 开始:生成设计报工记录,记录开始时间、操作人和任务状态。
+- 结束:补写结束时间,计算本次设计工时。
+- 完成:必须已有结束时间;未结束不能完成。
+- 完成后代表设计任务完成,任务状态变更为已完成。
+- 已完成任务不允许再次开始或结束。
+
+### 3. 设计工时校验页面
+
+参考页面:`ProductionManagement/WorkHoursCheck/index.vue`。
+
+业务规则:
+- 数据来源只取设计报工记录。
+- 校验后只写入设计报工独立表或独立校验记录表。
+- 不上传 SAP。
+- 不调用现有生产工时校验的 SAP 上传逻辑。
+
+### 4. 设计工时报表页面
+
+参考页面:`ProductionManagement/Workhours/index.vue` 的作业者工时/工序工时展示方式。
+
+业务规则:
+- 数据来源只取设计报工记录。
+- 可按人员、任务、项目号、物料编码、日期汇总设计工时。
+- 不合并到现有作业者工时统计。
+
+## 三、建议数据表
+
+### 1. `MES_设计报工_任务`
+
+用途:存储设计任务主数据。
+
+建议字段:
+- DID。
+- 项目号。
+- 物料编码。
+- 图号。
+- 任务描述。
+- 关联父件物料编码。
+- 设计要求。
+- 研发立项号。
+- 研发目的。
+- 指派对象ID。
+- 指派对象。
+- 预计开始时间。
+- 预计结束时间。
+- 单据状态。
+- 创建日期。
+- 创建人。
+- 最后编辑人。
+- 最后编辑时间。
+
+### 2. `MES_设计报工_记录`
+
+用途:存储设计报工开始、结束和工时数据。
+
+建议字段:
+- RID。
+- DID。
+- 操作人ID。
+- 操作人。
+- 开始时间。
+- 结束时间。
+- 工时秒数。
+- 报工状态。
+- 已校验。
+- 校验人。
+- 校验时间。
+- 创建时间。
+- 备注。
+
+### 3. `MES_设计报工_校验记录`
+
+用途:保留校验动作流水,便于审计。
+
+建议字段:
+- VID。
+- RID。
+- DID。
+- 校验前开始时间。
+- 校验前结束时间。
+- 校验后开始时间。
+- 校验后结束时间。
+- 校验后工时秒数。
+- 校验人。
+- 校验时间。
+- 校验备注。
+
+## 四、独立性要求
+
+- 不写入现有生产报工表。
+- 不写入现有生产工时校验表。
+- 不上传 SAP。
+- 不参与现有生产工时报表。
+- 不影响装配中心、机加工、自制件排产、生产订单关闭逻辑。
diff --git a/work/ProductionManagement/DesignReportTask/02-项目程序开发详细步骤.md b/work/ProductionManagement/DesignReportTask/02-项目程序开发详细步骤.md
new file mode 100644
index 0000000..1de60c4
--- /dev/null
+++ b/work/ProductionManagement/DesignReportTask/02-项目程序开发详细步骤.md
@@ -0,0 +1,55 @@
+# 02-项目程序开发详细步骤
+
+## 一、数据库开发
+
+1. 新建独立数据表:
+ - `MES_设计报工_任务`。
+ - `MES_设计报工_记录`。
+ - 可选 `MES_设计报工_校验记录`。
+2. 新建设计任务增删改查存储过程:
+ - `设计报工_任务_查询`。
+ - `设计报工_任务_新增`。
+ - `设计报工_任务_编辑`。
+ - `设计报工_任务_删除`。
+3. 删除过程增加约束:
+ - 存在 `MES_设计报工_记录` 时禁止删除。
+4. 新建设计报工过程:
+ - `设计报工_任务_开始`。
+ - `设计报工_任务_结束`。
+ - `设计报工_任务_完成`。
+5. 完成过程增加约束:
+ - 必须存在结束时间。
+ - 未结束不能完成。
+6. 新建设计工时校验过程:
+ - `设计报工_工时校验_查询`。
+ - `设计报工_工时校验_保存`。
+ - `设计报工_工时校验_批量保存`。
+7. 新建设计工时报表过程:
+ - `设计报工_工时报表_作业者工时_查询`。
+ - 可按后续页面需要增加导出过程。
+
+## 二、前端开发
+
+1. 新建设计任务页面。
+2. 新建设计报工页面。
+3. 新建设计工时校验页面。
+4. 新建设计工时报表页面。
+5. 按系统菜单权限新增菜单记录。
+6. 物料编码、关联父件物料编码下拉查询参考 `ProcessManagement/PartDrawlook/index.vue`。
+7. 指派对象多人员选择参考 `PlanManagement/SelfMakePlando/index.vue` 的二次派工。
+8. 工时校验布局参考 `ProductionManagement/WorkHoursCheck/index.vue`,但移除 SAP 上传相关逻辑。
+9. 工时报表布局参考 `ProductionManagement/Workhours/index.vue`,但查询独立设计报工表。
+
+## 三、验证步骤
+
+1. 新建一条设计任务,确认 DID 和创建日期自动生成。
+2. 编辑设计任务,确认 DID 和创建日期不可修改。
+3. 未报工任务可删除。
+4. 已存在报工记录任务不可删除。
+5. 点击开始后生成报工记录。
+6. 未结束时点击完成,应提示不能完成。
+7. 点击结束后生成结束时间和工时秒数。
+8. 已结束后点击完成,任务变为已完成。
+9. 已完成任务不能再次开始或结束。
+10. 校验页面只更新设计报工数据,不触发 SAP 上传。
+11. 报表页面只展示设计报工工时,不混入现有生产报工数据。
diff --git a/work/ProductionManagement/DesignReportTask/03-推进台账.md b/work/ProductionManagement/DesignReportTask/03-推进台账.md
new file mode 100644
index 0000000..b00db9c
--- /dev/null
+++ b/work/ProductionManagement/DesignReportTask/03-推进台账.md
@@ -0,0 +1,36 @@
+# 03-推进台账
+
+## 2026-06-30 方案梳理
+
+### 做了什么
+- 读取 `doc/设计报工任务模块.docx`。
+- 梳理设计任务、设计报工、设计工时校验、设计工时报表四个页面。
+- 对照参考页面:
+ - `ProcessManagement/PartDrawlook/index.vue`
+ - `PlanManagement/SelfMakePlando/index.vue`
+ - `ProductionManagement/WorkHoursCheck/index.vue`
+ - `ProductionManagement/Workhours/index.vue`
+
+### 改了哪些文件
+- `doc/设计报工任务模块.docx`
+- `work/ProductionManagement/DesignReportTask/README.md`
+- `work/ProductionManagement/DesignReportTask/01-项目功能内容.md`
+- `work/ProductionManagement/DesignReportTask/02-项目程序开发详细步骤.md`
+- `work/ProductionManagement/DesignReportTask/03-推进台账.md`
+- `work/ProductionManagement/DesignReportTask/04-任务矩阵.md`
+- `work/ProductionManagement/DesignReportTask/05-验收证据.md`
+- `work/ProductionManagement/DesignReportTask/06-决策记录.md`
+- `gptlog-process/gpdlog.md`
+- `C:\gptlog-process\gpdlog.md`
+
+### 验证了什么
+- 文档中明确要求新建独立设计报工体系。
+- 用户确认:
+ - 项目号 SAP 视图字段后续提供。
+ - 完成必须已有结束时间,未结束不能完成。
+ - 已有报工记录的任务不能删除。
+ - 不参与之前任何生产/SAP/工时报表流程,完全独立。
+
+### 下一步
+- 等待项目号 SAP 视图字段。
+- 开始数据库脚本和页面开发。
diff --git a/work/ProductionManagement/DesignReportTask/04-任务矩阵.md b/work/ProductionManagement/DesignReportTask/04-任务矩阵.md
new file mode 100644
index 0000000..766abfc
--- /dev/null
+++ b/work/ProductionManagement/DesignReportTask/04-任务矩阵.md
@@ -0,0 +1,14 @@
+# 04-任务矩阵
+
+| 任务编号 | 任务内容 | 状态 | 验收标准 |
+| --- | --- | --- | --- |
+| DRT-001 | 读取原始 Word 文档 | 已完成 | 已提取字段、页面和业务要求 |
+| DRT-002 | 梳理设计任务页面方案 | 已完成 | 字段、查询、新建、编辑、删除规则明确 |
+| DRT-003 | 梳理设计报工页面方案 | 已完成 | 开始、结束、完成规则明确 |
+| DRT-004 | 梳理设计工时校验方案 | 已完成 | 明确不上传 SAP,只校验独立数据 |
+| DRT-005 | 梳理设计工时报表方案 | 已完成 | 明确只查询设计报工数据 |
+| DRT-006 | 确认完成规则 | 已完成 | 必须已有结束时间,未结束不能完成 |
+| DRT-007 | 确认删除规则 | 已完成 | 有报工记录不能删除 |
+| DRT-008 | 确认独立性 | 已完成 | 不参与现有任何生产/SAP/工时报表流程 |
+| DRT-009 | 确认项目号来源 | 待确认 | 业务提供 SAP 视图和字段 |
+| DRT-010 | 数据库和页面开发 | 待开始 | 表、过程、页面、菜单发布并验证 |
diff --git a/work/ProductionManagement/DesignReportTask/05-验收证据.md b/work/ProductionManagement/DesignReportTask/05-验收证据.md
new file mode 100644
index 0000000..46f8846
--- /dev/null
+++ b/work/ProductionManagement/DesignReportTask/05-验收证据.md
@@ -0,0 +1,41 @@
+# 05-验收证据
+
+## 文档读取
+
+来源:
+```text
+doc/设计报工任务模块.docx
+```
+
+读取结果摘要:
+```text
+新增设计任务页面。
+新建设计报工界面。
+新建设计工时校验。
+新建设计工时报表。
+新建表存储设计报工信息,和其他报工不产生影响。
+```
+
+## 用户确认口径
+
+```text
+项目号具体取哪个 SAP 视图字段后续提供。
+完成要求已有结束时间,未结束不能完成。
+删除任务时,如果已经有报工记录,不能删除。
+不参与之前的任何东西,独立的。
+```
+
+## 参考页面
+
+```text
+src/views/ProcessManagement/PartDrawlook/index.vue
+src/views/PlanManagement/SelfMakePlando/index.vue
+src/views/ProductionManagement/WorkHoursCheck/index.vue
+src/views/ProductionManagement/Workhours/index.vue
+```
+
+## 验收结论
+
+当前为方案文档阶段,尚未开发代码和数据库脚本。
+
+方案可进入开发,但需要先补齐项目号 SAP 视图字段来源。
diff --git a/work/ProductionManagement/DesignReportTask/06-决策记录.md b/work/ProductionManagement/DesignReportTask/06-决策记录.md
new file mode 100644
index 0000000..d1ab748
--- /dev/null
+++ b/work/ProductionManagement/DesignReportTask/06-决策记录.md
@@ -0,0 +1,54 @@
+# 06-决策记录
+
+## DDR-001 独立设计报工体系
+
+决策:设计任务、设计报工记录、设计工时校验、设计工时报表全部使用独立表和独立存储过程。
+
+原因:用户明确要求“和其他报工不产生影响”“不参与之前的任何东西,独立的”。
+
+影响:
+- 不写入现有生产报工表。
+- 不上传 SAP。
+- 不参与现有工时报表。
+- 不影响生产订单关闭、装配中心、机加工等既有逻辑。
+
+## DDR-002 完成必须先结束
+
+决策:设计任务点击完成前,必须已有结束时间。
+
+原因:完成代表任务闭环,未结束时无法计算完整工时。
+
+影响:
+- 未结束点击完成时,页面提示不能完成。
+- 后端过程也必须校验,不能只依赖前端。
+
+## DDR-003 有报工记录不能删除任务
+
+决策:设计任务如果已经有报工记录,禁止删除。
+
+原因:避免删除主任务造成工时记录失去归属。
+
+影响:
+- 删除过程需要先检查设计报工记录表。
+- 后续如需撤销,只能增加作废状态,不做物理删除。
+
+## DDR-004 项目号来源待业务提供
+
+决策:项目号字段暂保留为可搜索下拉,SAP 视图和字段来源后续补充。
+
+原因:用户确认项目号具体 SAP 视图字段后续提供。
+
+影响:
+- 开发时可先预留过程参数和前端控件。
+- 项目号下拉过程需等字段来源明确后实现。
+
+## DDR-005 指派对象按多人派工预留
+
+决策:指派对象按 `PlanManagement/SelfMakePlando/index.vue` 二次派工口径支持多人员选择,保存人员ID列表和名称列表。
+
+原因:原文要求参考二次派工,且设计任务常见多人协作。
+
+影响:
+- 前端使用多选人员下拉。
+- 数据库建议同时保存人员ID列表和人员名称列表。
+- 如果后续业务确认只允许单人,可收窄为单选,不影响表结构扩展。
diff --git a/work/ProductionManagement/DesignReportTask/README.md b/work/ProductionManagement/DesignReportTask/README.md
new file mode 100644
index 0000000..c66364d
--- /dev/null
+++ b/work/ProductionManagement/DesignReportTask/README.md
@@ -0,0 +1,17 @@
+# 设计报工任务模块 README 索引
+
+## 文档清单
+
+- `01-项目功能内容.md`:记录模块目标、页面范围、字段和业务口径。
+- `02-项目程序开发详细步骤.md`:记录后续开发落地步骤。
+- `03-推进台账.md`:记录每轮做了什么、改了哪些文件、验证了什么、下一步是什么。
+- `04-任务矩阵.md`:记录任务编号、状态和验收标准。
+- `05-验收证据.md`:记录文档读取、方案确认和后续开发验证证据。
+- `06-决策记录.md`:记录已确认的关键设计决策。
+
+## 当前状态
+
+- 来源文档:`doc/设计报工任务模块.docx`
+- 当前阶段:方案梳理与文档修订。
+- 核心原则:设计报工任务、设计报工记录、设计工时校验、设计工时报表全部独立,不参与现有生产报工、SAP 上传、生产工时校验和既有工时报表。
+- 待确认项:`项目号` 的 SAP 视图和字段来源由业务后续提供。
diff --git a/work/ProductionManagement/ProductPassRateWorkstation/01-项目功能内容.md b/work/ProductionManagement/ProductPassRateWorkstation/01-项目功能内容.md
new file mode 100644
index 0000000..a7c60d3
--- /dev/null
+++ b/work/ProductionManagement/ProductPassRateWorkstation/01-项目功能内容.md
@@ -0,0 +1,55 @@
+# 01-项目功能内容
+
+## 页面
+
+- 页面名称:产品合格率(工位)
+- 页面路径:`src/views/ProductionManagement/ProductPassRateWorkstation/index.vue`
+- 菜单模块:生产管理
+
+## 数据范围
+
+1. 只统计生产订单已关闭的数据。
+2. 已关闭判断来自 SAP 视图 `[SAP].[SBO_YL].[dbo].[UBT_OWOR]` 的 `单据状态 IS NOT NULL`。
+3. 关闭日期取 `[SAP].[SBO_YL].[dbo].[UBT_OWOR].[实际结算日期]`。
+4. 生产过程质检明细取 `dbo.YL_质量检验_质检记录`。
+5. 二级明细按生产订单、工序号、工序、工位汇总。
+
+## 一级字段
+
+- 关闭日期
+- 生产订单号
+- 物料名称
+- 物料编码
+- 计划数量
+- 完成数量:二级完成数量合计
+- 不良数量:二级不良数量合计
+- 合格率:按截图口径计算为 `(完成数量 - 不良数量) / 完成数量`
+
+## 二级字段
+
+- 工序
+- 工序号:`dbo.MES_接口_生产计划_生产任务.订单行号`
+- 工位:质检记录 `工位名称`,为空时补 `View_生产订单_MES.指派对象`,仍为空显示 `空白`
+- 完成数量:按订单行号、工序、工位汇总 `检验数量`
+- 不良数量:按订单行号、工序、工位汇总 `不合格数`
+- 合格率:`(完成数量 - 不良数量) / 完成数量`
+- 检验说明:同组多条说明用 `;` 并列显示
+
+## 查询条件
+
+- 关闭日期范围,页面默认近 30 天
+- 生产订单号
+- 物料编码
+- 物料名称
+- 工序
+- 工位
+- 合格状态:不合格、合格、全部;页面默认不合格
+
+## 2026-06-30 补充口径
+
+1. 页面进入时默认不查询数据,避免打开页面直接加载报表。
+2. 查询条件新增“合格状态”。
+3. 合格状态默认值为“不合格”。
+4. 主数据合格率小于 `100` 判定为“不合格”,大于等于 `100` 判定为“合格”。
+5. 关闭日期筛选拆成“关闭日期起”和“关闭日期止”两个独立日期框,降低误操作。
+6. 二级工序号固定从 `dbo.MES_接口_生产计划_生产任务.订单行号` 读取,关联关系为 `YL_质量检验_质检记录.TaskAID = MES_接口_生产计划_生产任务.AID`。
diff --git a/work/ProductionManagement/ProductPassRateWorkstation/02-项目程序开发详细步骤.md b/work/ProductionManagement/ProductPassRateWorkstation/02-项目程序开发详细步骤.md
new file mode 100644
index 0000000..d800f33
--- /dev/null
+++ b/work/ProductionManagement/ProductPassRateWorkstation/02-项目程序开发详细步骤.md
@@ -0,0 +1,51 @@
+# 02-项目程序开发详细步骤
+
+## 1. 需求解析
+
+1. 解包并读取 `doc/新增产品合格率.docx`。
+2. 确认新增页面为“产品合格率(工位)”,放在生产管理模块下。
+3. 确认一级数据只计算已关闭生产订单。
+4. 确认二级数据按订单行号、工序、工位汇总完成数量、不良数量和检验说明。
+
+## 2. 数据库开发
+
+1. 新增 `db_backups/create_product_pass_rate_workstation_20260630.sql`。
+2. 创建或更新查询过程 `dbo.生产管理_产品合格率工位_查询`。
+3. 参数包括生产订单号、物料编码、物料名称、关闭日期起止、工序、工位。
+4. 使用 `OPENQUERY([SAP], ...)` 读取 `SBO_YL.dbo.UBT_OWOR`,将 SAP 已关闭订单先写入本地临时表。
+5. 使用 `YL_质量检验_质检记录` 汇总生产过程质检数据。
+6. 使用 `View_生产订单_MES` 补齐订单行号、工序和指派对象。
+7. 输出一级汇总和 `明细JSON`,前端展开行解析 JSON 展示二级数据。
+8. 空条件查询自动限定近 30 天,避免页面默认打开时全量扫描。
+9. 2026-06-30 按用户反馈修正工序号来源:改为连接 `dbo.MES_接口_生产计划_生产任务`,通过 `YL_质量检验_质检记录.TaskAID = MES_接口_生产计划_生产任务.AID` 读取 `订单行号`。
+
+## 3. 菜单开发
+
+1. 新增 `db_backups/add_product_pass_rate_workstation_menu_20260630.sql`。
+2. 菜单标题:`产品合格率(工位)`。
+3. 路由:`ProductPassRateWorkstation/index`。
+4. 组件:`/ProductionManagement/ProductPassRateWorkstation/index`。
+5. 权限来源参考已有“生产计划跟踪”,写入生产管理模块下。
+
+## 4. 前端开发
+
+1. 新增页面 `src/views/ProductionManagement/ProductPassRateWorkstation/index.vue`。
+2. 查询区提供关闭日期、生产订单、物料编码、物料名称、工序、工位。
+3. 主表展示一级汇总字段。
+4. 使用展开行展示二级明细。
+5. 合格率按 100%、90%-99.99%、低于 90% 显示不同颜色。
+6. 默认关闭日期范围为近 30 天。
+7. 2026-06-30 页面去掉 `created()` 自动查询,进入页面后先显示空表。
+8. 2026-06-30 查询区新增“合格状态”,默认 `不合格`,查询时传入存储过程参数 `合格状态`。
+9. 2026-06-30 将关闭日期范围控件拆成两个独立日期控件,分别传入 `关闭日期_Start` 和 `关闭日期_End`。
+
+## 5. 验证
+
+1. 发布查询过程成功。
+2. 发布菜单脚本成功,写入 `12` 条角色菜单记录。
+3. 验证 `@生产订单号=N'7649'` 能返回一级汇总和二级明细。
+4. 验证近 7 天查询返回 `175` 行,耗时约 `0.37` 秒。
+5. 验证空条件自动限定近 30 天,返回 `1420` 行,耗时约 `1.17` 秒。
+6. 执行 `npm run build`,构建通过,只有项目既有资源体积和 browserslist 警告。
+7. 2026-06-30 验证近 30 天 `不合格` 返回 `50` 行,最高合格率 `99.99`;`合格` 返回 `1370` 行;`全部` 返回 `1420` 行。
+8. 2026-06-30 拆分关闭日期控件后执行 `npm run build`,构建通过。
diff --git a/work/ProductionManagement/ProductPassRateWorkstation/03-推进台账.md b/work/ProductionManagement/ProductPassRateWorkstation/03-推进台账.md
new file mode 100644
index 0000000..1f86323
--- /dev/null
+++ b/work/ProductionManagement/ProductPassRateWorkstation/03-推进台账.md
@@ -0,0 +1,176 @@
+# 03-推进台账
+
+## 第1轮:新增产品合格率(工位)页面
+
+### 用户反馈
+
+- 查看 `doc/新增产品合格率.docx`。
+- 根据文档新增页面“产品合格率(工位)”。
+
+### 执行过程
+
+1. 解包 `doc/新增产品合格率.docx`,读取文字和截图。
+2. 确认页面放在生产管理下面。
+3. 确认 SAP 关闭日期来源为 `SBO_YL.dbo.UBT_OWOR.实际结算日期`。
+4. 查询 `YL_质量检验_质检记录` 字段,确认生产订单号为 `计划号`,订单行号为 `行号`,工位字段为 `工位名称`。
+5. 新增查询过程脚本 `db_backups/create_product_pass_rate_workstation_20260630.sql`。
+6. 初版跨库四段名查询较慢,改为 `OPENQUERY([SAP], ...)` 先取 SAP 已关闭订单到本地临时表。
+7. 新增菜单脚本 `db_backups/add_product_pass_rate_workstation_menu_20260630.sql`。
+8. 新增前端页面 `src/views/ProductionManagement/ProductPassRateWorkstation/index.vue`。
+9. 发布查询过程和菜单脚本。
+10. 执行数据库样例验证和 `npm run build`。
+
+### 修改文件
+
+- `src/views/ProductionManagement/ProductPassRateWorkstation/index.vue`
+- `db_backups/create_product_pass_rate_workstation_20260630.sql`
+- `db_backups/add_product_pass_rate_workstation_menu_20260630.sql`
+- `work/ProductionManagement/ProductPassRateWorkstation/README.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/01-项目功能内容.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/02-项目程序开发详细步骤.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/03-推进台账.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/04-任务矩阵.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/05-验收证据.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/06-决策记录.md`
+- `gptlog-process/gpdlog.md`
+- `C:\gptlog-process\gpdlog.md`
+
+### 验证结果
+
+- 查询过程发布成功。
+- 菜单脚本发布成功,生产管理下新增 `产品合格率(工位)`。
+- 样例 `7649` 返回一级汇总和二级明细。
+- `npm run build` 通过。
+
+### 下一步
+
+- 登录页面确认菜单可见,并检查展开行明细展示是否符合现场习惯。
+
+## 第2轮:默认不查询并新增合格状态筛选
+
+### 用户反馈
+
+- 默认进来不查询数据。
+- 增加“合格”和“不合格”筛选。
+- 主数据合格率小于 `100` 的为不合格。
+- 默认不合格。
+
+### 执行过程
+
+1. 修改 `db_backups/create_product_pass_rate_workstation_20260630.sql`,新增参数 `@合格状态`,默认 `不合格`。
+2. 查询过程最终输出前按主数据合格率筛选:
+ - `合格`:合格率大于等于 `100`。
+ - `不合格`:合格率小于 `100`。
+ - `全部`:不过滤。
+3. 修改 `src/views/ProductionManagement/ProductPassRateWorkstation/index.vue`:
+ - 删除页面 `created()` 自动查询。
+ - 查询区新增“合格状态”下拉。
+ - 默认值设为 `不合格`。
+ - 查询时传入 `合格状态` 参数。
+4. 发布查询过程成功。
+5. 验证近 30 天 `不合格`、`合格`、`全部` 三种筛选。
+6. 执行 `npm run build`,构建通过。
+
+### 修改文件
+
+- `src/views/ProductionManagement/ProductPassRateWorkstation/index.vue`
+- `db_backups/create_product_pass_rate_workstation_20260630.sql`
+- `work/ProductionManagement/ProductPassRateWorkstation/README.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/01-项目功能内容.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/02-项目程序开发详细步骤.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/03-推进台账.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/04-任务矩阵.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/05-验收证据.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/06-决策记录.md`
+- `gptlog-process/gpdlog.md`
+- `C:\gptlog-process\gpdlog.md`
+
+### 验证结果
+
+- 近 30 天 `不合格` 返回 `50` 行,合格率范围 `66.67` 到 `99.99`。
+- 近 30 天 `合格` 返回 `1370` 行,合格率均为 `100.00`。
+- 近 30 天 `全部` 返回 `1420` 行。
+- `npm run build` 通过,仅有项目既有 warning。
+
+### 下一步
+
+- 登录页面确认初始为空表,点击查询后按默认不合格返回数据。
+
+## 第3轮:关闭日期筛选拆分
+
+### 用户反馈
+
+- 关闭日期筛选拆成两个筛选。
+- 客户不习惯一次选两个日期。
+
+### 执行过程
+
+1. 修改 `src/views/ProductionManagement/ProductPassRateWorkstation/index.vue`。
+2. 将原 `daterange` 日期范围控件拆成两个 `date` 日期控件。
+3. 新增 `searchForm.closeDateStart` 和 `searchForm.closeDateEnd`。
+4. 查询时仍传入原有参数 `关闭日期_Start` 和 `关闭日期_End`,数据库过程无需修改。
+5. 执行 `npm run build`,构建通过。
+
+### 修改文件
+
+- `src/views/ProductionManagement/ProductPassRateWorkstation/index.vue`
+- `work/ProductionManagement/ProductPassRateWorkstation/01-项目功能内容.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/02-项目程序开发详细步骤.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/03-推进台账.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/04-任务矩阵.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/05-验收证据.md`
+- `gptlog-process/gpdlog.md`
+- `C:\gptlog-process\gpdlog.md`
+
+### 验证结果
+
+- `npm run build` 通过,仅有项目既有 warning。
+- 前端继续使用 `关闭日期_Start` 和 `关闭日期_End` 参数,数据库过程无需重新发布。
+
+### 下一步
+
+- 登录页面确认两个日期框更符合客户操作习惯。
+
+## 第4轮:修正二级工序号来源
+
+### 用户反馈
+
+- 工序号为什么都是空。
+- 工序号应取表 `dbo.MES_接口_生产计划_生产任务.订单行号`。
+- 该表中订单行号肯定不会为空。
+
+### 执行过程
+
+1. 查询 `dbo.MES_接口_生产计划_生产任务` 字段,确认存在 `AID`、`订单编号`、`订单行号`、`工序名称`、`指派对象`。
+2. 查询样例 `7649`、`7002`、`7280`、`7410`,确认 `MES_接口_生产计划_生产任务.订单行号` 有值。
+3. 定位原脚本中工序号来源为 `COALESCE(View_生产订单_MES.订单行号, 质检记录.行号)`。
+4. 确认质检记录的 `TaskAID` 对应生产任务表的 `AID`。
+5. 修改 `db_backups/create_product_pass_rate_workstation_20260630.sql`:
+ - 将明细补充表从 `View_生产订单_MES` 改为 `MES_接口_生产计划_生产任务`。
+ - 关联条件改为 `q.TaskAID = t.AID`。
+ - 工序号改为 `COALESCE(t.订单行号, q.行号)`。
+6. 发布查询过程成功。
+7. 验证 `7649` 二级工序号为 `1`、`2`、`3`。
+8. 验证近 30 天 `3281` 条二级明细中空工序号为 `0`。
+
+### 修改文件
+
+- `db_backups/create_product_pass_rate_workstation_20260630.sql`
+- `work/ProductionManagement/ProductPassRateWorkstation/01-项目功能内容.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/02-项目程序开发详细步骤.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/03-推进台账.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/04-任务矩阵.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/05-验收证据.md`
+- `work/ProductionManagement/ProductPassRateWorkstation/06-决策记录.md`
+- `gptlog-process/gpdlog.md`
+- `C:\gptlog-process\gpdlog.md`
+
+### 验证结果
+
+- 过程 `dbo.生产管理_产品合格率工位_查询` 发布成功,修改时间 `2026-06-30 15:12:24.840`。
+- 样例 `7649` 返回:领料 1、数车 2、打磨 3。
+- 近 30 天二级明细空工序号行数为 `0`。
+
+### 下一步
+
+- 页面展开二级明细确认工序号列不再为空。
diff --git a/work/ProductionManagement/ProductPassRateWorkstation/04-任务矩阵.md b/work/ProductionManagement/ProductPassRateWorkstation/04-任务矩阵.md
new file mode 100644
index 0000000..2b45a70
--- /dev/null
+++ b/work/ProductionManagement/ProductPassRateWorkstation/04-任务矩阵.md
@@ -0,0 +1,15 @@
+# 04-任务矩阵
+
+| 任务编号 | 任务名称 | 状态 | 验收标准 |
+| --- | --- | --- | --- |
+| PPRW-001 | 需求文档解析 | 已完成 | 读取 docx 文字和截图,确认字段和数据源 |
+| PPRW-002 | 查询过程开发 | 已完成 | `dbo.生产管理_产品合格率工位_查询` 发布成功 |
+| PPRW-003 | 查询性能优化 | 已完成 | SAP 数据通过 `OPENQUERY` 下推过滤,近 7 天查询约 `0.37` 秒 |
+| PPRW-004 | 菜单脚本开发 | 已完成 | 生产管理下新增 `产品合格率(工位)`,写入 12 条角色菜单记录 |
+| PPRW-005 | 前端页面开发 | 已完成 | 页面新增主表、展开二级明细和查询条件 |
+| PPRW-006 | 构建验证 | 已完成 | `npm run build` 通过 |
+| PPRW-007 | 文档与日志 | 已完成 | README、01-06 文档和两处 `gpdlog.md` 已更新 |
+| PPRW-008 | 默认不自动查询 | 已完成 | 页面进入后不调用查询过程,表格初始为空 |
+| PPRW-009 | 合格状态筛选 | 已完成 | 默认不合格,合格率小于 `100` 为不合格,大于等于 `100` 为合格 |
+| PPRW-010 | 关闭日期拆分 | 已完成 | 页面使用“关闭日期起”和“关闭日期止”两个独立日期框 |
+| PPRW-011 | 修正工序号来源 | 已完成 | 二级工序号从 `MES_接口_生产计划_生产任务.订单行号` 读取,近 30 天空工序号为 0 |
diff --git a/work/ProductionManagement/ProductPassRateWorkstation/05-验收证据.md b/work/ProductionManagement/ProductPassRateWorkstation/05-验收证据.md
new file mode 100644
index 0000000..028ce6e
--- /dev/null
+++ b/work/ProductionManagement/ProductPassRateWorkstation/05-验收证据.md
@@ -0,0 +1,137 @@
+# 05-验收证据
+
+## 数据库发布
+
+```powershell
+$env:SQLCMDPASSWORD='******'
+sqlcmd -S 192.168.2.92 -d YL_MESDB -U sa -C -l 30 -b -f 65001 -i 'db_backups\create_product_pass_rate_workstation_20260630.sql'
+sqlcmd -S 192.168.2.92 -d YL_MESDB -U sa -C -l 30 -b -f 65001 -i 'db_backups\add_product_pass_rate_workstation_menu_20260630.sql'
+Remove-Item Env:SQLCMDPASSWORD
+```
+
+结果:
+
+```text
+已将数据库上下文更改为 "YL_MESDB"。
+```
+
+## 存储过程验证
+
+```sql
+SELECT OBJECT_NAME(object_id) AS procedure_name, modify_date
+FROM sys.objects
+WHERE object_id=OBJECT_ID(N'dbo.生产管理_产品合格率工位_查询');
+```
+
+结果:
+
+```text
+生产管理_产品合格率工位_查询 2026-06-30 14:31:00.690
+```
+
+## 样例订单
+
+```sql
+EXEC dbo.[生产管理_产品合格率工位_查询] @生产订单号=N'7649';
+```
+
+结果要点:
+
+| 生产订单号 | 关闭日期 | 物料编码 | 计划数量 | 完成数量 | 不良数量 | 合格率 |
+| --- | --- | --- | --- | --- | --- | --- |
+| 7649 | 2026-06-30 | 22-100-021-YQZF-20V2.0-8-08 | 10.0000 | 30.0000 | 0.0000 | 100.00 |
+
+二级明细包括:
+
+- 打磨 / 打磨 / 完成数量 10
+- 领料 / 空白 / 完成数量 10
+- 数车 / 空白 / 完成数量 10
+
+## 性能验证
+
+```text
+近 7 天查询:175 行,ElapsedSeconds=0.37。
+空条件查询:自动限定近 30 天,1420 行,ElapsedSeconds=1.17。
+```
+
+## 前端构建
+
+```powershell
+npm run build
+```
+
+结果:
+
+```text
+webpack 5.103.0 compiled with 2 warnings
+```
+
+说明:warnings 为项目既有资源体积和 browserslist/caniuse-lite 过期提示。
+
+## 工序号来源修正验证
+
+工序号来源:
+
+```text
+dbo.YL_质量检验_质检记录.TaskAID = dbo.MES_接口_生产计划_生产任务.AID
+工序号 = dbo.MES_接口_生产计划_生产任务.订单行号
+```
+
+样例 `7649`:
+
+| 生产订单号 | 工序 | 工序号 | 工位 | 完成数量 | 不良数量 | 合格率 |
+| --- | --- | --- | --- | --- | --- | --- |
+| 7649 | 领料 | 1 | 领料 | 10.0000 | 0.0000 | 100.00 |
+| 7649 | 数车 | 2 | 数2 | 10.0000 | 0.0000 | 100.00 |
+| 7649 | 打磨 | 3 | 打磨 | 10.0000 | 0.0000 | 100.00 |
+
+近 30 天检查:
+
+```text
+明细行数=3281,空工序号行数=0。
+```
+
+## 合格状态筛选验证
+
+```sql
+EXEC dbo.[生产管理_产品合格率工位_查询]
+ @关闭日期_Start=N'2026-06-01',
+ @关闭日期_End=N'2026-06-30',
+ @合格状态=N'不合格';
+```
+
+结果要点:
+
+```text
+不合格:50 行,最低合格率 66.67,最高合格率 99.99。
+合格:1370 行,最低合格率 100.00,最高合格率 100.00。
+全部:1420 行,最低合格率 66.67,最高合格率 100.00。
+```
+
+页面验证点:
+
+- 页面进入时不自动调用查询,表格初始为空。
+- 合格状态下拉默认值为 `不合格`。
+
+## 关闭日期拆分验证
+
+页面调整:
+
+```text
+关闭日期范围控件已拆成两个独立日期框:开始日期、结束日期。
+查询参数仍为 关闭日期_Start 和 关闭日期_End。
+```
+
+构建:
+
+```powershell
+npm run build
+```
+
+结果:
+
+```text
+webpack 5.103.0 compiled with 2 warnings
+```
+
+说明:warnings 为项目既有资源体积和 browserslist/caniuse-lite 过期提示。
diff --git a/work/ProductionManagement/ProductPassRateWorkstation/06-决策记录.md b/work/ProductionManagement/ProductPassRateWorkstation/06-决策记录.md
new file mode 100644
index 0000000..011d010
--- /dev/null
+++ b/work/ProductionManagement/ProductPassRateWorkstation/06-决策记录.md
@@ -0,0 +1,44 @@
+# 06-决策记录
+
+## DR-001 合格率按截图口径计算
+
+- 日期:2026-06-30
+- 决策:合格率按 `(完成数量 - 不良数量) / 完成数量` 计算。
+- 原因:文档文字写“合格率:不良数量/完成数量”,但截图中 `完成数量=6`、`不良数量=1` 显示 `83.33%`,实际对应 `(6-1)/6`。
+
+## DR-002 二级只统计生产过程质检
+
+- 日期:2026-06-30
+- 决策:二级明细当前统计 `质检类型 = 收检` 的生产过程记录,不混入来料检验和退库检验。
+- 原因:同一生产订单号可能存在来料检验记录,例如样例数据中来料检验数量远大于生产计划数量,混入会导致产品工位合格率失真。
+
+## DR-003 使用 OPENQUERY 优化 SAP 视图读取
+
+- 日期:2026-06-30
+- 决策:查询过程通过 `OPENQUERY([SAP], ...)` 读取 `SBO_YL.dbo.UBT_OWOR`,并将日期、生产订单条件下推到 SAP。
+- 原因:直接四段名查询在日期范围内仍然约 44 秒;改为 `OPENQUERY` 后近 7 天约 0.37 秒。
+
+## DR-004 空条件自动限定近 30 天
+
+- 日期:2026-06-30
+- 决策:当未传关闭日期且未传生产订单号时,存储过程自动查询近 30 天。
+- 原因:避免页面默认打开触发历史全量扫描,同时前端也默认近 30 天,前后端口径一致。
+
+## DR-005 页面进入不自动查询
+
+- 日期:2026-06-30
+- 决策:前端页面删除 `created()` 自动查询,进入页面先显示空表。
+- 原因:用户明确要求默认进来不查询数据。
+
+## DR-006 合格状态按主数据合格率判断
+
+- 日期:2026-06-30
+- 决策:主数据合格率小于 `100` 判定为不合格,大于等于 `100` 判定为合格。
+- 原因:用户明确要求“主数据合格率小于100的为不合格”,默认筛选不合格。
+
+## DR-007 工序号以生产任务表为准
+
+- 日期:2026-06-30
+- 决策:二级工序号从 `dbo.MES_接口_生产计划_生产任务.订单行号` 读取。
+- 关联:`dbo.YL_质量检验_质检记录.TaskAID = dbo.MES_接口_生产计划_生产任务.AID`。
+- 原因:用户确认生产任务表的 `订单行号` 是明确来源,原逻辑依赖视图和质检记录行号,部分记录会为空。
diff --git a/work/ProductionManagement/ProductPassRateWorkstation/README.md b/work/ProductionManagement/ProductPassRateWorkstation/README.md
new file mode 100644
index 0000000..749155c
--- /dev/null
+++ b/work/ProductionManagement/ProductPassRateWorkstation/README.md
@@ -0,0 +1,22 @@
+# 产品合格率(工位) README 索引
+
+## 文档清单
+
+- `01-项目功能内容.md`:记录页面、字段、数据源和计算口径。
+- `02-项目程序开发详细步骤.md`:记录数据库、菜单、前端开发和验证步骤。
+- `03-推进台账.md`:记录每轮做了什么、改了哪些文件、验证了什么、下一步是什么。
+- `04-任务矩阵.md`:记录任务编号、状态、验收标准。
+- `05-验收证据.md`:记录命令、页面、数据库对象和样例输出。
+- `06-决策记录.md`:记录关键口径和原因,避免后续重复争论。
+
+## 当前状态
+
+- 页面路径:`src/views/ProductionManagement/ProductPassRateWorkstation/index.vue`
+- 菜单标题:`产品合格率(工位)`
+- 菜单模块:生产管理
+- 查询过程:`dbo.生产管理_产品合格率工位_查询`
+- 数据库脚本:
+ - `db_backups/create_product_pass_rate_workstation_20260630.sql`
+ - `db_backups/add_product_pass_rate_workstation_menu_20260630.sql`
+- 原始需求文档:`doc/新增产品合格率.docx`
+- 当前补充口径:页面进入时不自动查询;合格状态默认 `不合格`,主数据合格率小于 `100` 判定为不合格。