Files
f9-web-ai-test/工作进度/工作进度-11.md
T
yanpeng200212 a8890c81e9 新增质量模块(工艺执行书 / 样茧试缫)与报表中心
质量模块:
- 11 张工艺执行书表:封面、试产、选剥茧(含混茧明细)、试缫与大样、煮茧(含分车间配温、副煮车间)、自动缫(含大样)、后缫
- 10 张样茧试缫表:原料小样/综合样主表 + 选茧、解舒、茧幅、切剖、清洁洁净、茧丝百回纤度
- 服务与接口、主控指针回写(列表 √ 标记)、封面编号自增、报表数据包
- 前端 8 张报表打印版式、7 类工艺单据与 6 类调查录入弹窗、字段驱动表单/表格组件
- 菜单种子新增「质量」目录,样茧子表增加 YjssType 判别列,避免原料小样与综合样自增 Id 重号串数据

报表中心:
- 报表模板管理、锐浪 grhtml5 加载与预览、全屏设计面板、数据源 Provider(落丝记录、职工花名册)

其他:同步工作进度 1-11 文档、开发数据库快照、.gitignore 忽略运行日志目录
2026-10-22 10:30:37 +08:00

153 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 工作进度-11:新增「质量」模块(工艺执行书 + 样茧试缫)
> 时间:2026-10-22(承接工作进度-10)
> 需求:把 `D:\AntaiProject - 副本`(F9 智慧缫丝 WinForms 版)里 **质量模块 → 工艺执行书** 与 **质量模块 → 样茧试缫** 迁移进本系统,并还原随附的 8 张报表版式。
> 参考实现位置:
> - 客户端:`WinClient\F9.Business.Prod\Gyzxs\`、`WinClient\F9.Business.Prod\QC\YJSS\`
> - 服务端:`F9Servic\BBIT.F9\BBIT.F9.Domain\Entities\Business\PROD\QC\`、`BBIT.F9.Application\CQRS\Business\PROD\QC\YJSS\`、`Application\Implements\Reports\Prod\QC\RepDt_Qc_Yjss_*`
> - 报表样例(本次已按 RTF 还原):封面 / 工艺执行书 / 混剥选茧工艺执行书 / 试缫工艺单 / 试缫与大样模板 / 煮茧工艺执行书 / 自动缫车间生产工艺执行书 / 自动缫大样
---
## 一、功能地图
```
质量(新一级菜单,sort=7,图标 Medal)
├── 工艺执行书 /qc/gyzxs qc/gyzxs/index
│ 一行 = 一个工艺庄口;√ 标记 7 张子单据是否已录入
│ ├── 封面 (桑蚕丝工艺设计书:编号/规格/原料总量/生产丝量/生产线时间)
│ ├── 试产 (试缫工艺单:茧质调查 + 自动缫试缫指标 + 试缫煮茧工艺)
│ ├── 选剥茧 (混剥选茧:混茧工艺明细 + 生产/质量/质量控制指标)
│ ├── 试缫与大样 (试缫 vs 大样 两行对比 + 技术措施 + 签署)
│ ├── 煮茧 (庄口原料性能 + 工艺技术指标 + 真空渗透 + 分车间配温 + 副煮车间)
│ ├── 自动缫 (表一:茧质概况 + 生产指标 + 工艺技术指标 + 表二大样)
│ └── 后缫 (工艺执行书:生产指标 9 项 + 工艺条件及控制指标 18 项)
│ 打印下拉 = 8 张报表任意一张
└── 样茧试缫 /qc/yjss qc/yjss/index
页签:原料小样 / 综合样
├── 选茧调查 11 个茧别 重量 + 比例(按茧重重算)
├── 解舒调查 多条记录(缫丝参数/纤度丝长/落绪/蛹体/附煮/屑物)
├── 茧幅调查 仅综合样(按茧幅分档,算平均/整齐率/均方差)
├── 切剖调查 仅综合样(原量/干量/粒数比例,算茧层率/脱胶率)
├── 清洁洁净 匀度 + 洁净档位 + 疵点,自动算清洁/洁净/片数
└── 茧丝百回纤度 仅综合样(按回数批量生成 + 自动汇总标注值)
打印下拉 = 原料小样报表 / 综合样报表 / 解舒调查报表
```
---
## 二、后端
### 2.1 领域实体(`F9WebAiTest.Domain/Entities/QC/`)
工艺执行书(`Gyzxs/`,表前缀 `qc_gyzxs_`):
| 文件 | 表 | 说明 |
|---|---|---|
| `GyzxsDocVersion.cs` | `qc_gyzxs_doc_version` | 主控:以庄口为键,记录 7 张子单据 Id(列表 √ 来源) |
| `GyzxsFengMian.cs` | `qc_gyzxs_fengmian` | 封面(含编号 SJZ-{年}-工艺-{序}、生产时间区间) |
| `GyzxsShichan.cs` | `qc_gyzxs_shichan` | 试产:茧质 7 项 + 自动缫 16 项 + 煮茧 11 项 |
| `GyzxsXbj.cs` | `qc_gyzxs_xbj` / `qc_gyzxs_xbj_hunjian` | 选剥茧主表 + 混茧比例明细(庄别/重量/包数/比例/混茧包数) |
| `GyzxsXbjSsDy.cs` | `qc_gyzxs_xbj_ssdy` | 试缫与大样(Ss*/Dy* 各 10 项 + 技术措施 + 签署) |
| `GyzxsZhuJian.cs` | `qc_gyzxs_zhujian` / `_chejian` / `_fuzhu` | 煮茧主表 + 分车间配温 + 副煮车间结果 |
| `GyzxsZds.cs` | `qc_gyzxs_zds` / `qc_gyzxs_zds_dyzl` | 自动缫表一 + 大样表二 |
| `GyzxsHs.cs` | `qc_gyzxs_hs` | 后缫(工艺执行书本体) |
样茧试缫(`Yjss/`,表前缀 `qc_yjss_`):`main_ylxy`、`main_zhy`、`dc_xjdc`、`dc_jsdc`、`dc_jfdc_main`、`dc_jfdc_item`、`dc_jsbhxd_main`、`dc_jsbhxd`、`dc_qpdc`、`dc_qjjj`。
> **与 F9 的差异(有意为之)**:F9 子表只用 `yjss_id` 外键,依赖雪花全局唯一 Id;本系统主表用自增 Id,原料小样与综合样会重号,因此所有子表增加 **`YjssType`(1 原料小样 / 2 综合样)** 判别列,读写一律按 `(YjssId, YjssType)` 定位。
> 另:F9 的「综合样茧质」在本系统未单独立表,其指标以冗余字段直接落在选剥茧 / 煮茧 / 自动缫 / 试产表上,报表照常可打。
### 2.2 服务与接口
| 服务 | 主要方法 |
|---|---|
| `GyzxsService` | `GetDocVersionPagedAsync` / `CreateDocVersionAsync` / 7 组 `Get*Async`+`Save*Async` / `GetPrintDataAsync` |
| `YjssService` | `GetPagedAsync` / `SaveYlxyAsync` / `SaveZhyAsync` / 6 组子单据读写 / `GetFullAsync` / `GetJsdcSummaryAsync` |
设计要点:
1. **指针回写**:任一张子单据保存后 upsert `qc_gyzxs_doc_version` 对应列(`ZdsDyId` 早前漏检已修);解舒/百回纤度保存后回写主表记录数 `JsdcCt`/`JsbhxdCt`。
2. **按「庄口 + 规格」唯一**:试产、试缫与大样、自动缫、大样、后缫均以 `(GyzkId, Guige)` 为业务键;封面、选剥茧、煮茧按庄口唯一。
3. **报表数据包**:`GetPrintDataAsync(type, gyzkId, guige)` 返回 `Parameters`(中文键)+ `Main/Sub1/Sub2`,结构与 Grid++ 的 `Report_Data` 对齐,后续可直接被报表中心 Provider 复用。
4. **编号自增**:封面新建时按 `SJZ-{年度}-工艺-{n}` 预生成。
接口一览(均需登录):
```
GET /api/qc/gyzxs?year=&keyword=&pageIndex=&pageSize=
POST /api/qc/gyzxs/version?gyzkId= DELETE /api/qc/gyzxs/version/{id}
GET|POST /api/qc/gyzxs/fengmian (gyzkId)
GET|POST /api/qc/gyzxs/shichan (gyzkId + guige)
GET|POST /api/qc/gyzxs/xbj (主表 + hunJian 明细数组)
GET|POST /api/qc/gyzxs/ssdy (gyzkId + guige)
GET|POST /api/qc/gyzxs/zhujian (主表 + cheJian + fuZhu)
GET|POST /api/qc/gyzxs/zds (zds + dyzl)
GET|POST /api/qc/gyzxs/hs (gyzkId + guige)
GET /api/qc/gyzxs/print/{type}?gyzkId=&guige= type = fengmian|gyzxs|xbj|shichan|ssdy|zhujian|zds|zdsdy
GET /api/qc/yjss?type=1|2&year=&keyword=
POST /api/qc/yjss/ylxy | /zhy DELETE /api/qc/yjss/{type}/{id}
GET|POST /api/qc/yjss/xjdc/{yjssId}?type= /api/qc/yjss/xjdc?type=
GET|POST /api/qc/yjss/jsdc/{yjssId}?type= /api/qc/yjss/jsdc?type=
DELETE /api/qc/yjss/jsdc/{type}/{id}
GET|POST /api/qc/yjss/jfdc|qpdc|qjjj|jsbhxd (GET 带 ?type=)
GET /api/qc/yjss/full/{type}/{id}
GET /api/qc/yjss/jsdc-summary/{yjssId}?type=
```
### 2.3 菜单种子
`DbSeeder.SeedQcMenus()`:幂等创建 `/qc` 目录 + 两个页面菜单,admin 角色授权,并把一级目录顺序校正为
`基础(3) < 员工(4) < 前缫(5) < 后缫(6) < 质量(7) < 消息(8) < 系统(9) < 报表(10)`。
---
## 三、前端
| 文件 | 作用 |
|---|---|
| `views/qc/components/SchemaForm.vue` | 字段驱动表单(text/number/date/textarea,支持 `dyzl.xxx` 嵌套键) |
| `views/qc/components/QcGrid.vue` | 字段驱动可编辑表格(对应 WinForms 的 f9AntdUITable) |
| `views/qc/gyzxs/schema.js` | 7 张子单据 + 8 种报表的字段/版式元数据 |
| `views/qc/gyzxs/index.vue` | 庄口列表(√ 标记、按年度筛、打印下拉、按庄口新增) |
| `views/qc/gyzxs/DocDialog.vue` | 子单据录入弹窗(含「从指定庄口读取数据」跨庄口复制) |
| `views/qc/gyzxs/PrintDialog.vue` | 8 张报表版式 + A4 横向打印 |
| `views/qc/yjss/index.vue` | 原料小样 / 综合样双页签列表 |
| `views/qc/yjss/schema.js` | 6 类调查字段 + 计算规则(比例 / 茧幅 / 茧层率 / 清洁洁净) |
| `views/qc/yjss/YjssDocDialog.vue` | 6 类调查录入(解舒为「列表 + 明细弹窗」) |
| `views/qc/yjss/YjssPrintDialog.vue` | 原料小样 / 综合样 / 解舒调查 三张报表 |
业务算法(前端即时计算,保存落库):
- 选剥茧:按重量重算比例,总官堆 40 包分摊混茧包数,末行取差额。
- 茧幅:`平均 = Σ(茧幅×数量)/Σ数量`,整齐率 = `|茧幅-平均| ≤ 1mm` 占比,均方差按加权。
- 茧丝百回纤度:外/中/内三百回为分区间平均,最大/内外开差取极值差。
- 清洁洁净:`片数 = Σ洁净档位片数`;`洁净 = Σ(分值×片数)/片数`;`清洁 = 100 - (特大糙×3 + 废丝×3 + 大糙×2 + 黏附糙 + 大长结 + 重螺旋)/片数×100`。
- 解舒:`解舒率 = 解舒丝长 / 一茧丝长`,`落绪总粒数 = 外+中+内`。
---
## 四、验证记录
| 项 | 结果 |
|---|---|
| `dotnet build F9WebAiTest.sln` | ✅ 0 错误(120 条既有 CS8632 可空注解警告) |
| `vite build` | ✅ 通过(仅既有 chunk 体积/动态导入警告) |
| IDE 诊断(`views/qc/**`、`router/index.js`) | ✅ 0 |
| 菜单 | ✅ `质量`(sort=7) → `工艺执行书` / `样茧试缫`,admin 自动授权 |
| 工艺执行书 7 张子单据保存 + 回读 | ✅ 封面/试产/选剥茧(2 行混茧)/试缫与大样/煮茧(1 分车间+1 副煮)/自动缫(含大样)/后缫 |
| 主控 √ 标记 | ✅ 7 个指针全部回写(`zdsDyId` 漏检缺陷已修) |
| 8 张报表数据 | ✅ 每张均返回 title + 参数区(如「工艺执行书」28 个参数),xbj/zhujian/ssdy 有结果集 |
| 封面编号 | ✅ 新庄口预生成 `SJZ-2026-工艺-1` |
| 样茧试缫(原料小样) | ✅ 主表 + 选茧 + 解舒(1 条) + 清洁洁净,解舒汇总正确 |
| 样茧试缫(综合样) | ✅ 主表 + 茧幅(3 档) + 切剖 + 百回纤度(2 行),整页参数区完整 |
| 两类样品隔离 | ✅ 同一 `yjssId` 下 `type=1` 有数据、`type=2` 返回空 |
---
## 五、后续可做
1. **报表中心对接**:8 张报表目前用 HTML 打印(版式已按 RTF 还原,A4 横向)。若要进「报表中心」,可基于 `/api/qc/gyzxs/print/{type}` 写 8 个 `RepDt_*` Provider 并制作 .grf 模板,数据结构已预留 `Parameters/Main/Sub1/Sub2`。
2. **综合样茧质单独立表**:目前选剥茧/煮茧/自动缫/试产的茧质指标是冗余存储;若需要「综合样茧质」独立维护与联动,可补一张主表并由保存时回填。
3. **审批状态机**:设计/审核/审批目前是文本字段,可升级为流程(参考考勤模块的审批流)。
4. **单位与精度**:部分指标沿用 F9 的字符串区间表达(如 `185±5`、`20~38`),如后续需要统计,可拆分为「下限/上限/目标值」三列。