质量模块: - 11 张工艺执行书表:封面、试产、选剥茧(含混茧明细)、试缫与大样、煮茧(含分车间配温、副煮车间)、自动缫(含大样)、后缫 - 10 张样茧试缫表:原料小样/综合样主表 + 选茧、解舒、茧幅、切剖、清洁洁净、茧丝百回纤度 - 服务与接口、主控指针回写(列表 √ 标记)、封面编号自增、报表数据包 - 前端 8 张报表打印版式、7 类工艺单据与 6 类调查录入弹窗、字段驱动表单/表格组件 - 菜单种子新增「质量」目录,样茧子表增加 YjssType 判别列,避免原料小样与综合样自增 Id 重号串数据 报表中心: - 报表模板管理、锐浪 grhtml5 加载与预览、全屏设计面板、数据源 Provider(落丝记录、职工花名册) 其他:同步工作进度 1-11 文档、开发数据库快照、.gitignore 忽略运行日志目录
8.8 KiB
8.8 KiB
工作进度-6:落丝记录报表(生产-前缫)落地实现
时间:2026-10-20(承接工作进度-5) 环境:后端 .NET 8 + FreeSql + MediatR(Windows/SQLite),前端 Vue3 + Element Plus + Vite 目标:把「落丝记录」从占位报表补成可查询、可打印的正式报表(DsName + 参数 + 明细列 + 模板全链路)
一、改造前的状态(问题定位)
数据库里已有报表 PROD_QS_1 / 落丝记录,但只是占位:
| 项 | 改造前 |
|---|---|
Config.DsName |
空("DsName":"") |
Config.Parms |
仅 1 个 q_date,Label 为空、控件为 AntdUI.DatePicker |
DataSql |
SELECT 1 |
| 模板 | 早期「上传测试」产物:Title 空、报表头标题为空文本、无参数区、9 列列宽全 2.5cm |
| 数据链路 | DsName 为空 → 落回 SELECT 1 → 报表永远空 |
二、后端实现
2.1 新增文件
| 文件 | 说明 |
|---|---|
Application/CQRS/SYS/Reports/Queries/GetLsjlRepQuery.cs |
报表查询:日期范围 / 车间(含子车间)/ 机组 / 庄口 / 关键字过滤,输出中文列名记录集 + 报表参数 |
Application/Services/Reports/Providers/RepDt_Prod_Lsjl.cs |
Provider(ReportName = RepDt_Prod_Lsjl),实现 IReportDataProviderMeta(6 个参数声明 + 13 个字段中文名) |
Infrastructure/Assets/ReportTemplates/lsjl.grf |
内置模板(嵌入资源):标题 + 参数区 + 9 列明细网格 + 页码/打印时间页脚 |
DbSeeder.SeedLsjlReport(...) |
幂等种子:报表定义 + 查询配置 + 权限单元 + 模板 |
2.2 查询参数
| 参数名 | 标签 | 控件 | 说明 |
|---|---|---|---|
q_date_start |
开始日期 | AntdUI.DatePicker |
默认值 不限(不预填今天) |
q_date_end |
结束日期 | AntdUI.DatePicker |
默认值 不限 |
q_dep |
车间 | F9-DEP-QS-SELECT |
前缫口径部门树,含子车间 |
q_jizu |
机组 | AntdUI.Input |
数字,留空为全部 |
q_zk |
庄口 | F9-GYZK-SELECT |
打开工艺庄口选择页,取值 = 庄口 Id |
q_like |
关键字 | AntdUI.Input |
匹配 庄口名 / 规格 / 颜色 |
2.3 明细列(键名与 F9 落丝记录模板一致,中文)
| 报表列 | 取值 |
|---|---|
| 日期 | WorkDate.ToString("yyyy-MM-dd") |
| 车间 | 部门名(DeptId → Department.Name) |
| 机组 | Jizu |
| 庄口 | 工艺庄口名(GyzkId → CraftZhuangKou.ZhuangKouName) |
| 回数 | Huishu |
| 颜色 | Yanse |
| 半车 | Isbanche ? "半车" : "整车" |
| 落丝时间 | LuosiTime |
| 缫丝桶数 | Chetaishu(车台数) |
| 规格 / 车台范围 / 缫丝时长 / 车速 | 备选列(模板未用不显示,自定义模板可用) |
报表参数(模板头展示):开始日期 / 结束日期 / 车间 / 机组 / 庄口 / 记录数 / 查询时间。
2.4 种子策略(幂等,不覆盖用户成果)
| 场景 | 行为 |
|---|---|
| 报表不存在 | 创建报表 + 写入内置模板 lsjl.grf + 创建权限单元并授权 admin |
已存在且 Config 不含 RepDt_Prod_Lsjl |
只补齐查询配置,DataSql 置空(避免与 DsName 混淆) |
| 已存在且模板是占位模板 | 替换为内置模板。判定:JSON 模板 + Title 为空 + 未声明任何 Parameter;_WR7_ 压缩模板一律不覆盖 |
用户在设计器里做过正式模板(有标题/参数)后,重启不会被动覆盖。
三、顺带修掉的两个真缺陷
| # | 问题 | 根因 | 解决 |
|---|---|---|---|
| 1 | 0 行数据时报表参数区错位((全部)2(全部) 跑到明细网格下方) |
ToGridReportJson 只输出有数据的数据集,0 行时连 recordset 键都不输出 → 渲染库找不到主记录集,参数绑定错乱 |
后端 0 行时输出 "recordset": [];前端报表中心 + 编辑器预览改走「当前查询条件没有数据」空态,不再交给渲染库 |
| 2 | 日期范围参数默认预填「今天」,落丝记录默认只查到当天 1 条 | paramInitialValue 对空 DefaultValue 的日期控件一律返回今天(为单日期参数设计) |
新增 DefaultValue = "不限" 约定(不限/不填/none/null/empty → 空值),仅日期范围参数使用;其他报表行为不变 |
四、验证记录
4.1 接口层(参数过滤矩阵)
全部 rows=2 dates=2026-09-09,2026-10-20
机组=1 rows=2 dates=2026-09-09,2026-10-20
机组=2 rows=0
开始日期≥2026-10-01 rows=1 dates=2026-10-20
结束日期≤2026-09-30 rows=1 dates=2026-09-09
关键字=蓝色 rows=2 dates=2026-09-09,2026-10-20
关键字=20/22 rows=2 dates=2026-09-09,2026-10-20
车间=前缫车间(26) rows=2 dates=2026-09-09,2026-10-20
车间=后缫(27) rows=0
日期范围 09-01~09-30 rows=1 dates=2026-09-09
PARAMETER={"开始日期":"","结束日期":"","车间":"(全部)","机组":"(全部)","庄口":"(全部)","记录数":2,"查询时间":"..."}
数据源探测(进度-5 的自动配置接口):
DS_LIST: 落丝记录 / RepDt_Prod_Lsjl / params=6
PROBE total=2 fields=13 parms=6
FIELDS=日期,车间,机组,庄口,回数,颜色,半车,落丝时间,缫丝桶数,规格,车台范围,缫丝时长,车速
4.2 报表中心(GR7 渲染)
TREE=生产 / 前缫 / 落丝记录 / 用户 / 职工花名册
QP_LABELS=开始日期,结束日期,车间,机组,庄口,关键字
QP_KINDS=date,date,select,input,picker,input
VIEWER_TEXT=落丝记录 开始日期: 结束日期: 车间:(全部) 机组:(全部) 庄口:(全部)
记录数:2 查询时间:2026-10-20 14:26:00
日期 车间 机组 庄口 回数 颜色 半车 落丝时间 缫丝桶数
2026-09-09 前缫车间 1 2026会东二类茧(7532)宁兴 1 蓝色 整车 16:21:32 20
2026-10-20 前缫车间 1 2026会东二类茧(7532)宁兴 1 蓝色 整车 14:16:35 20
界面交互(改控件 → 点查询):
INIT_ROWS=2 机组=1 → 2 机组=2 → 无数据(显示「当前查询条件没有数据」)
重置 → 2 关键字=宁兴 → 2
4.3 报表管理页(编辑器)
TOPBAR=编辑报表 · 落丝记录 TAG=模板已配置
LEFT_TABS=配置,参数 (6),明细字段 (9)
FIELD_NAMES=日期,车间,机组,庄口,回数,颜色,半车,落丝时间,缫丝桶数
VIEWER_TEXT=落丝记录 开始日期: 结束日期: 车间:(全部)… 2 行数据
4.4 编译 / 运行
- 后端
dotnet build:0 错误 - 前端无 lint 诊断
- 服务:后端
http://localhost:3000、前端http://localhost:5173运行中
五、当前状态
| 项 | 状态 |
|---|---|
| 落丝记录报表数据链路(DsName → Provider → CQRS) | ✅ |
| 6 个查询参数(日期范围 / 车间含子车间 / 机组 / 庄口 / 关键字) | ✅ 界面控件类型正确、过滤生效 |
| 明细 9 列(标题、列宽、中文数据) | ✅ |
| 报表头:标题 + 参数区(查询条件回显) | ✅ 内置模板 lsjl.grf |
| 0 行查询 | ✅ 显示「没有数据」,不再错位 |
| 报表中心 / 报表管理两个入口 | ✅ 均可正常渲染与打印导出 |
| 模板可继续设计器维护 | ✅ 下载 .grf → 改 → 上传;占位判定不会误覆盖正式模板 |
六、遗留与后续建议
- 列宽与纸张:内置模板 9 列合计约 17.3cm,横向内容紧张时会在
ResizeToFit下缩放;若要更宽可改模板Printer或减少列。 - 车间默认值:
F9-DEP-QS-SELECT会默认选中登录用户部门(F9 口径),因此非 admin 用户打开默认只看本车间;如需默认全部,可把该参数控件换成F9-DEP-ALL-SELECT或清空defaultFromUser。 - 班组 / 班次维度:落丝记录暂无班次字段,若后续按班次统计需在
LsjlRecord补字段并同步报表。 - 同类报表复用:
纤度检验 / 黑板检验可按本轮的「Query + Provider + 内置模板 + 种子」模板照做,或直接用进度-5 的新增报表自动配置(选 DsName 即可识别参数与列)。 - 进度-5 遗留仍在:
_WR7_模板不能反解列、探测需真实执行查询、进度-3 的Number()精度隐患等。
七、工作进度文档约定(协作规则)
工作进度文档不再每轮对话都生成,按以下规则执行:
- 只在上下文即将结束(或用户明确要求「记一下进度」)时,才把这一阶段的改动一次性汇总成当轮进度文档
- 中间过程只在对话里说明改动与验证结果,不落盘成文档
- 已产出的
工作进度-1 ~ 6.md保留不动;本篇作为落丝记录报表的阶段成果留档 - 若某次改动比较关键、需要立刻留档,由用户明确说「记一下进度」后再生成