Files
f9-web-ai-test/工作进度/工作进度-12.md
T

8.1 KiB
Raw Blame History

工作进度-12:生产-前缫「看台排班」+ 机组车台/看台排班数据导入

时间:2026-10-22(承接工作进度-11) 需求:仿照 D:\AntaiProject - 副本 生产-前缫的「机组车台 / 看台排班」,在本系统落地看台排班功能,并导入随附的 4 张表数据: biz_prod_qs_jzct(机组车台)、biz_prod_qs_ktpb_ctg(车头工)、biz_prod_qs_ktpb_dcg(挡车工)、biz_prod_qs_ktpb_zbz(值班长)。 参考实现:WinClient\F9.Business.Prod\QS\KTPB\(Page_KTPB、Page_KTPBCTG_Edit、Page_KTPBDCG_Edit、Page_KTPBZBZ_Edit)、Application\CQRS\Business\PROD\QS\KTPB\、Domain\Entities\Business\PROD\QS\KTPB\。


一、功能设计

生产-前缫
├── 机组车台(由「基础数据」迁入)  /prod/qianxian/jizuchetai
├── 落丝记录                       /prod/qianxian/lsjl
├── 车间班次                       /prod/qianxian/chejianbanci
└── 看台排班(新增)                /prod/qianxian/ktpb
      顶部:车间(职责类型=前缫)+ 班次(甲/乙)+ 机组 + 关键字
      页签:挡车工 / 车头工 / 值班长
      ├── 挡车工:按「车间+班次+机组」整组维护
      │     弹窗内可批量添加挡车工(多选职工),逐行填起止车台,
      │     挡车数自动计算(接壤车台各计 0.5),实时显示「已分配 x / y 台」
      ├── 车头工:一个「车间+班次+机组」一条记录,含车头工1 / 车头工2
      └── 值班长:一个「车间+班次」可有多名值班长

与 F9 的对应关系:

F9 本系统
Page_KTPB(三个页签 + 车间/班次/机组过滤) views/prod/ktpb/index.vue
Page_KTPBDCG_Edit(整组批量编辑 + 挡车数计算) 挡车工弹窗 + POST /dcg/batch
Page_KTPBCTG_Edit / Page_KTPBZBZ_Edit 车头工 / 值班长弹窗
BatchReplaceKtpbdcgCommand KtpbService.SaveDcgBatchAsync(先删后建)

挡车数算法(移植 CalculateSingleDangcheshu):每台车权重默认 1;若某车台被多条记录覆盖,且同时是某记录的起点与另一记录的终点(接壤),该车台权重取 0.5,最后四舍五入保留两位。前后端实现完全一致。


二、后端

2.1 实体(Domain/Entities/PROD/Ktpb.cs)

类 表 主要字段
KtpbCtg KtpbCtgs DeptId、Banci、Jizu、Ygid1、Ygid2
KtpbDcg KtpbDcgs DeptId、Banci、Jizu、ChetaiStart、ChetaiEnd、YgId、Dangcheshu
KtpbZbz KtpbZbzs DeptId、Banci、YgId

2.2 服务与接口(KtpbService / KtpbController,路由 api/prod/ktpb)

GET    qianxian-deps                     车间下拉(DutyType=前缫)
GET    jizu-options?depId=               机组下拉(含车台范围,取机组车台)
GET    ctg?depId=&banci=&jizu=&like=     车头工分页
POST   ctg | PUT ctg/{id} | DELETE ctg/{id}
GET    dcg?depId=&banci=&jizu=&like=     挡车工分页
GET    dcg/group?depId=&banci=&jizu=     某机组整组排班
POST   dcg/batch                         整组替换(空集合=清空)
DELETE dcg/{id}
GET    zbz?depId=&banci=&like=           值班长分页
POST   zbz | PUT zbz/{id} | DELETE zbz/{id}

校验规则:

  • 车头工:同「车间+班次+机组」唯一,车头工1 必填。
  • 挡车工:起始车台>0、结束≥起始、必须落在该机组车台范围内;保存时服务端重算挡车数。
  • 值班长:同「车间+班次+值班长」不重复。

2.3 数据导入(ProdSeedData,幂等)

新增 3 个内嵌资源 SeedData/biz_prod_qs_ktpb_ctg.json、_dcg.json、_zbz.json,并把 biz_prod_qs_jzct.json 按本次导出数据重新生成。

映射规则:

  • 部门:xlsx 中的 dep_id 是 F9 部门 Id,经 BusinessSeedData.DeptData(F9 Id → 部门名)映射到本系统 Departments.Id;
  • 职工:F9 职工导出时保留了原始雪花 Id,本系统 Employees.Id 与之一致,直接按 Id 关联(不存在的职工行跳过);
  • 清洗:剔除 deleted_at 非空的软删除行(4 张表中大量为测试/删除数据)、部门无法映射或不在前缫四车间的行、机组/车台号非法行;
  • 去重:机组车台按「车间+机组」保留规范行(优先 起始号 = (机组-1)*20+1);车头工按「车间+班次+机组」;值班长按「车间+班次+值班长」;挡车工按整行;
  • 幂等:机组车台按「车间+机组」upsert;车头工按「车间+班次+机组」upsert;挡车工按「车间+班次+机组」整组已存在则跳过;值班长按唯一键跳过。

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

[ProdSeed] 机组车台:来源 24 条,新增 0,更新 0(此前已导入)
[ProdSeed] 车头工看台排班:来源 33 条,新增 33 条
[ProdSeed] 挡车工看台排班:来源 202 条,新增 202 条(34 组)
[ProdSeed] 值班长看台排班:来源 7 条,新增 7 条

原始 xlsx 行数:机组车台 35、车头工 75、挡车工 4543、值班长 13;其中挡车工 4341 行是 F9 里已软删除的历史/测试数据,故有效数据仅 202 行。

2.4 菜单

DbSeeder.SeedProdMenus 统一维护生产-前缫的 4 个子菜单,并按 F9 的归属把「机组车台」从基础数据迁入(排序 1):

顺序 菜单 路径 组件 权限标识
1 机组车台 /prod/qianxian/jizuchetai base/jizuchetai/index prod:jizuchetai:list
2 落丝记录 /prod/qianxian/lsjl prod/lsjl/index prod:lsjl:list
3 车间班次 /prod/qianxian/chejianbanci base/chejianbanci/index prod:chejianbanci:list
4 看台排班 /prod/qianxian/ktpb prod/ktpb/index prod:ktpb:list

迁移方式与之前「车间班次」迁入时一致:删除旧菜单 /base/jizuchetai 及其权限单元 base:jizuchetai:list,再由种子重新创建到生产-前缫并给 admin 授权(幂等,重启不重复)。页面组件与后端接口 /api/jizuchetai 均未改动。


三、前端

文件 说明
views/prod/ktpb/index.vue 看台排班主页面(三页签 + 过滤 + 分页 + 三个弹窗)
components/select/EmployeeSelect.vue 职工选择弹窗(单选/多选,支持按部门过滤与姓名/工号搜索)
router/index.js 注册 prod/ktpb/index 路由组件

前端交互要点:

  • 挡车工维护必须先在顶部选定「车间 + 机组」,弹窗内展示该机组车台范围;
  • 弹窗顶部实时显示「已分配 x / y 台」,未满额时标签变黄,避免漏排;
  • 起止车台用 el-input-number 限制在机组范围内,改动即刷新挡车数;
  • 车头工/值班长新建时默认带出当前过滤的车间与班次。

四、验证记录

项 结果
dotnet build ✅ 0 错误
vite build ✅ 通过(仅既有体积/SignalR 注释警告)
菜单 ✅ 生产-前缫 → 落丝记录 / 车间班次 / 看台排班
车间下拉 ✅ 前缫车间、前缫一~四车间
机组下拉(前缫一车间) ✅ 机组1-6,车台 1-20 / 21-40 / … / 101-120
挡车工列表 ✅ 202 条,姓名/车台/挡车数正确(3.5、3、3.5…)
车头工列表 ✅ 33 条
值班长列表 ✅ 7 条
整组保存 + 挡车数重算 ✅ 行1 1-10、行2 10-20 → 9.5 / 10.5(接壤车台各 0.5)
超范围校验 ✅ 车台 1-99 于机组1(1-20)返回 400「超出该机组车台范围 1-20」
测试数据清理 ✅ 临时数据删除后组内 0 行

五、说明与后续

  1. 职工姓名沿用 F9 档案原文(部分带「宁兴」等后缀,如「谢群生宁兴」),属于基础数据层面的既有情况,本次未改动。
  2. 「机组车台」已按 F9 归属迁到生产-前缫(/prod/qianxian/jizuchetai),组件与接口不变;基础数据目录中原位置已清理。
  3. 挡车工排班目前按「整组替换」保存,没有保留历史版本;若需要留痕,可增加排班生效日期 + 版本表。
  4. 后续若要支持「按班组/按日期」排班(F9 另有班组维度),可在现有三张表上扩展 BanCi 组合键。