新增生产-前缫看台记录,并导入车头工/挡车工看台记录历史数据

功能:
- 后端新增 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 文档与开发数据库快照
This commit is contained in:
yanpeng200212
2026-10-22 11:16:29 +08:00
parent 2e4c045818
commit 69c4052a64
15 changed files with 52228 additions and 2 deletions
@@ -0,0 +1,67 @@
using F9WebAiTest.Domain.Enums.SYS.Employees;
namespace F9WebAiTest.Application.Dtos.Prod;
// ==================== 车头工看台记录 ====================
public class KtjlctgReadDto_View
{
public long Id { get; set; }
public DateTime Date { get; set; }
public long DepId { get; set; }
public string DepName { get; set; } = "";
public Prod_Banci_Enum Banci { get; set; }
public string BanciName { get; set; } = "";
public int Jizu { get; set; }
public decimal Hours { get; set; }
public long EmployeeId { get; set; }
public string EmployeeName { get; set; } = "";
public long EmployeeDepId { get; set; }
public string EmployeeDepName { get; set; } = "";
public long WorktypeId { get; set; }
public string WorktypeName { get; set; } = "";
public bool NoChanliang { get; set; }
}
// ==================== 挡车工看台记录 ====================
public class KtjldcgReadDto_View
{
public long Id { get; set; }
public DateTime Date { get; set; }
public long DepId { get; set; }
public string DepName { get; set; } = "";
public Prod_Banci_Enum Banci { get; set; }
public string BanciName { get; set; } = "";
public int Jizu { get; set; }
public int ChetaiStart { get; set; }
public int ChetaiEnd { get; set; }
public decimal DangcheNum { get; set; }
public decimal Hours { get; set; }
public long EmployeeId { get; set; }
public string EmployeeName { get; set; } = "";
public long EmployeeDepId { get; set; }
public string EmployeeDepName { get; set; } = "";
public long WorktypeId { get; set; }
public string WorktypeName { get; set; } = "";
public bool NoChanliang { get; set; }
}
// ==================== 整组保存 ====================
/// <summary>看台记录整组保存(按 日期+车间+班次 先删后建,对齐 F9 的 SaveCommand)</summary>
public class KtjlctgBatchDto
{
public DateTime Date { get; set; }
public long DepId { get; set; }
public Prod_Banci_Enum Banci { get; set; }
public List<KtjlctgReadDto_View> Items { get; set; } = new();
}
public class KtjldcgBatchDto
{
public DateTime Date { get; set; }
public long DepId { get; set; }
public Prod_Banci_Enum Banci { get; set; }
public List<KtjldcgReadDto_View> Items { get; set; } = new();
}