功能: - 后端新增 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 文档与开发数据库快照
7.2 KiB
7.2 KiB
工作进度-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 正常写入 |
五、后续可做
- 按职工汇总:F9 另有
Ktjl_*_GetAllGroupbyEmployee(按职工汇总挡车数/时长),可用于工资计件;如需要可加GET /api/prod/ktjl/summary?dateFrom=&dateTo=&depId=。 - 代班:F9 录入页支持「他人代班 / 车间内代班」(拆分时长),本版通过「添加职工 + 修改时长 + 调整车位」可等价实现,未做专门按钮。
- 与落丝记录/工资联动:看台记录是计件工资的输入之一,后续接入薪酬模块时可直接复用
KtjlDcgs的DangcheNum × Hours。 - 批量维护:目前单日单班次维护,若需要跨日期批量复制(如整月排班),可在
录入(指定日期)基础上扩展多选日期。