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

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

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

8.8 KiB
Raw Permalink Blame History

工作进度-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 → 改 → 上传;占位判定不会误覆盖正式模板

六、遗留与后续建议

  1. 列宽与纸张:内置模板 9 列合计约 17.3cm,横向内容紧张时会在 ResizeToFit 下缩放;若要更宽可改模板 Printer 或减少列。
  2. 车间默认值:F9-DEP-QS-SELECT 会默认选中登录用户部门(F9 口径),因此非 admin 用户打开默认只看本车间;如需默认全部,可把该参数控件换成 F9-DEP-ALL-SELECT 或清空 defaultFromUser。
  3. 班组 / 班次维度:落丝记录暂无班次字段,若后续按班次统计需在 LsjlRecord 补字段并同步报表。
  4. 同类报表复用:纤度检验 / 黑板检验 可按本轮的「Query + Provider + 内置模板 + 种子」模板照做,或直接用进度-5 的新增报表自动配置(选 DsName 即可识别参数与列)。
  5. 进度-5 遗留仍在:_WR7_ 模板不能反解列、探测需真实执行查询、进度-3 的 Number() 精度隐患等。

七、工作进度文档约定(协作规则)

工作进度文档不再每轮对话都生成,按以下规则执行:

  • 只在上下文即将结束(或用户明确要求「记一下进度」)时,才把这一阶段的改动一次性汇总成当轮进度文档
  • 中间过程只在对话里说明改动与验证结果,不落盘成文档
  • 已产出的 工作进度-1 ~ 6.md 保留不动;本篇作为落丝记录报表的阶段成果留档
  • 若某次改动比较关键、需要立刻留档,由用户明确说「记一下进度」后再生成