# 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'已关闭'`