Files
yanpeng200212 69c4052a64 新增生产-前缫看台记录,并导入车头工/挡车工看台记录历史数据
功能:
- 后端新增 KtjlCtgs / KtjlDcgs 两张表、KtjlService 与 api/prod/ktjl 接口
  (按日期+车间+班次查询、整组先删后建保存、整组删除、按看台排班带出默认记录、工种下拉)
- 挡车数按 F9 口径自动重算(与他人接壤的边界车位各扣 0.5),机组由车位反查机组车台
- 前端新增 /prod/qianxian/ktjl 看台记录页:挡车工/车头工双页签、删除、录入(新增)、录入(指定日期)
- 录入弹窗校验对齐 F9:个人时长不超标准、挡车数/看台时长匹配、车头工每机组≥2 人且时长为标准时长整数倍
- 生产-前缫菜单新增「看台记录」,权限 prod:ktjl:list

数据导入:
- 新增内嵌资源 biz_prod_qs_ktjl_ctg.csv / biz_prod_qs_ktjl_dcg.csv(约 5 万行,采用紧凑 CSV)
- 剔除软删除行、日期异常行、部门无法映射与职工不存在的行;日期由 Excel 序列号转换
- 车头工 12693 行、挡车工 38048 行入库,日期范围 2025-12-16 ~ 2026-09-11
- 表内已有数据则整体跳过,分批 1000 行插入

其他:同步工作进度-13 文档与开发数据库快照
2026-10-22 11:16:29 +08:00

7.2 KiB
Raw Permalink Blame History

工作进度-13:生产-前缫「看台记录」+ 历史数据导入

时间:2026-10-22(承接工作进度-12) 需求:仿照 D:\AntaiProject - 副本 生产-前缫的「看台记录」,在本系统落地并与「看台排班」联动,同时导入两张表数据: biz_prod_qs_ktjl_ctg(车头工看台记录)、biz_prod_qs_ktjl_dcg(挡车工看台记录)。 参考实现:WinClient\F9.Business.Prod\QS\KTJL\(Page_Ktjl、Page_Ktjl_Dcg_Edit、Page_Ktjl_Ctg_Edit)、 Application\CQRS\Business\PROD\QS\KTJL\(Save/Del/Query)、Domain\Entities\Business\PROD\QS\KTJL\。


一、功能设计

生产-前缫
├── 机组车台
├── 落丝记录
├── 车间班次
├── 看台排班
└── 看台记录(本次新增)  /prod/qianxian/ktjl
      过滤:日期 + 车间(职责类型=前缫)+ 班次(甲/乙)+ 关键字
      页签:挡车工 / 车头工
      按钮:删除(按 日期+车间+班次 整批)、录入(新增)、录入(指定日期)
F9 行为 本系统实现
列表按 日期+车间+班次 查询,无分页 同左(单日数据量小,一次展示)
删除:按 日期+车间+班次 整批软删 DELETE /api/prod/ktjl/{type}?date=&depId=&banci=
录入(新增):库中无记录时,按看台排班带出该车间该班次的车头工/挡车工 GET .../{type}/defaults,行默认时长 9 小时、未转正职工默认「不计产量」
录入(指定日期):把某日记录复制到当前日期再编辑 前端选来源日期 → 读取 → 重映射日期 → 弹窗编辑
保存:GroupBy(date, dep, banci) 先删后建 同左(服务端事务内先删后建)
挡车数:结束-开始+1,与他人接壤的边界车位各扣 0.5 前后端同一算法(服务端保存时重算)
机组:由车位范围反查机组车台 同左(服务端保存时校正)

录入弹窗校验(对齐 F9 ValidCustom):

  • 车头工:不能有空职工;每机组人数 ≥ 2;每机组时长合计为「标准时长」的整数倍且 ≥ 2 倍标准。
  • 挡车工:不能有空职工;个人时长合计不超过标准时长;挡车数与多人看台接壤关系需匹配(挡车数不能为 0);每台车位的看台时长合计需等于标准时长(多人看台按上下游分别校验)。
  • 校验不通过分「拦截」和「提示后询问是否继续保存」两级,与 F9 一致。

二、后端

2.1 实体(Domain/Entities/Prod/Ktjl.cs)

类 表 字段
KtjlCtg KtjlCtgs Date、DeptId、Banci、Jizu、Hours、EmployeeId、EmployeeDepId、WorktypeId、WorktypeName、NoChanliang
KtjlDcg KtjlDcgs 同上 + ChetaiStart、ChetaiEnd、DangcheNum

WorktypeName 为历史快照(F9 是查询时联表),避免工种改名后历史记录显示漂移。

2.2 服务与接口(KtjlService / KtjlController,路由 api/prod/ktjl)

GET    /api/prod/ktjl/dcg?date=&depId=&banci=&like=
GET    /api/prod/ktjl/ctg?date=&depId=&banci=&like=
GET    /api/prod/ktjl/dcg/defaults?date=&depId=&banci=     按看台排班带出默认记录
GET    /api/prod/ktjl/ctg/defaults?date=&depId=&banci=
POST   /api/prod/ktjl/dcg/batch                            整组保存(先删后建)
POST   /api/prod/ktjl/ctg/batch
DELETE /api/prod/ktjl/dcg?date=&depId=&banci=
DELETE /api/prod/ktjl/ctg?date=&depId=&banci=
GET    /api/prod/ktjl/worktypes                            工种下拉

2.3 数据导入(ProdSeedData 扩展)

  • 新增两个内嵌资源:Data/SeedData/biz_prod_qs_ktjl_ctg.csv、biz_prod_qs_ktjl_dcg.csv (共 5 万行,JSON 体积过大,改用紧凑的 | 分隔 CSV;csproj 增加 *.csv 内嵌规则);
  • 清洗规则:剔除 deleted_at 非空的软删除行、日期序列号异常行(如 25569=1970-01-01)、部门无法映射行、职工不存在的行;
  • 部门:xlsx 的 dep_id 是 F9 部门 Id,经 BusinessSeedData.DeptData(F9 Id → 部门名)映射; 职工:F9 职工导出保留了原始雪花 Id,与本系统 Employees.Id 一致,直接关联; 工种:本系统工种保留 F9 雪花 Id,直接对应,并冗余 WorktypeName;
  • 日期:Excel 序列号(如 46007)转 yyyy-MM-dd;
  • 幂等:表内已有数据则整体跳过(历史流水快照,不重复导入),分批 1000 行插入。

导入结果(本次启动日志):

[ProdSeed] 车头工看台记录:来源 12693 行,导入 12693 行,跳过 0 行
[ProdSeed] 挡车工看台记录:来源 38048 行,导入 38048 行,跳过 0 行

原始数据:车头工 16727 行(已删 4034)、挡车工 59744 行(已删 21692、日期异常 1、职工缺失 3);日期范围 2025-12-16 ~ 2026-09-11,覆盖前缫一四车间、甲/乙班、机组 16。

2.4 菜单

DbSeeder.SeedProdMenus 在生产-前缫下新增第 5 个子菜单「看台记录」(/prod/qianxian/ktjl,权限 prod:ktjl:list),并做排序归一。


三、前端

文件 说明
views/prod/ktjl/index.vue 看台记录列表(双页签 + 日期/车间/班次过滤 + 删除/录入/复制日期)
views/prod/ktjl/KtjlEditDialog.vue 录入弹窗(可编辑机组/车位/挡车数/时长/不计产量,含 F9 同口径校验)
router/index.js 注册 prod/ktjl/index 路由组件

交互要点:

  • 车位改动即时重算挡车数与机组;
  • 支持勾选行「批量修改时长」、「删除选中」,可追加职工(多选职工弹窗,按车间过滤);
  • 校验提示以对话框列出(如「1组5台,看台时长有误」),可「继续保存」或「返回修改」;
  • 列表为空时提示可点「录入(新增)」按排班带出。

四、验证记录

项 结果
dotnet build ✅ 0 错误
vite build ✅ 通过
菜单 ✅ 生产-前缫 5 个子菜单,看台记录排第 5
历史数据 ✅ 车头工 12693 行、挡车工 38048 行入库(日期 2025-12-16 ~ 2026-09-11)
查询 ✅ 任意日期+车间+班次 返回正确行数与姓名/工种/机组/车位/挡车数/时长
录入(新增) 默认带出 ✅ 前缫一车间甲班:挡车工 42 行、车头工 12 行(来自看台排班,时长默认 9)
整组保存 ✅ 保存 6 条后回读,挡车数 3.5/3.5/3/3.5… 与排班一致
整组删除 ✅ 删除后该日该班次 0 行
车头工保存/回读 ✅ 4 条,时长 4.5 正常写入

五、后续可做

  1. 按职工汇总:F9 另有 Ktjl_*_GetAllGroupbyEmployee(按职工汇总挡车数/时长),可用于工资计件;如需要可加 GET /api/prod/ktjl/summary?dateFrom=&dateTo=&depId=。
  2. 代班:F9 录入页支持「他人代班 / 车间内代班」(拆分时长),本版通过「添加职工 + 修改时长 + 调整车位」可等价实现,未做专门按钮。
  3. 与落丝记录/工资联动:看台记录是计件工资的输入之一,后续接入薪酬模块时可直接复用 KtjlDcgs 的 DangcheNum × Hours。
  4. 批量维护:目前单日单班次维护,若需要跨日期批量复制(如整月排班),可在 录入(指定日期) 基础上扩展多选日期。