refactor: 重构产线工位与备料流程,移除冗余字段

1. 移除工单、工件、日排产中的冗余工位组合/接驳台字段
2. 新增工位接驳台编码字段与唯一约束,关联WMS接驳台主数据
3. 重构日排产为工位产量分配模式,替代原接驳台列表
4. 新增备料单工位级字段与分批出库支持
5. 移除定时同步可生产数量,改为WMS实时拉取接口
6. 过滤操作日志,排除登录/退出相关日志
7. 调整仪表盘工序展示逻辑为今日派工路线
8. 新增接驳台维护菜单与基础数据
This commit is contained in:
SunYF
2026-09-19 07:50:21 +08:00
parent 543655d441
commit 37f10d3a13
156 changed files with 4489 additions and 1285 deletions
+4 -4
View File
@@ -27,11 +27,11 @@ func (DailyPlan) Fields() []ent.Field {
field.String("planDate").MaxLen(10).Comment("排产日期 yyyy-MM-dd"),
field.Int("planQty").Default(0).Comment("计划数量"),
field.Int("completedQty").Default(0).Comment("已完成数量"),
// 送达接驳台:排产时计划员确认该工单物料送达哪些接驳台 DOCK01..20(可多选)
// 备料单生成时,该排产下所有物料行的 target_dock 取此处的 dock_codes
field.JSON("dockCodes", []string{}).Optional().SchemaType(map[string]string{
// 各工位产量分配:stationNo(字符串键) → 该工位分配到的总计划产量。
// 备料算料时,按「工位↔工序」派工(station_process) + 本分配,把 BOM 物料拆到工位级
field.JSON("stationPlanQty", map[string]int{}).Optional().SchemaType(map[string]string{
dialect.Postgres: "jsonb",
}).Comment("送达接驳台列表 DOCK01..20"),
}).Comment("各工位产量分配 stationNo→计划产量"),
// PENDING / PROCESSING / DONE
field.String("status").Default("PENDING").MaxLen(20),
field.String("operator").Default("").MaxLen(64),
+5
View File
@@ -33,6 +33,11 @@ func (MaterialRequest) Fields() []ent.Field {
// PENDING / LOCKED / DELIVERING / DONE
field.String("status").Default("PENDING").MaxLen(20),
field.String("targetDock").Default("").MaxLen(20).Comment("目标接驳台 DOCK01..20"),
// 工位级备料:物料送达的工位号(由 station_process 派工 + 日排产分配派生)
field.Int("stationNo").Default(0).Comment("目标工位号(0=未指定)"),
field.Int("processCode").Default(0).Comment("该物料所属装配工序(1~12)"),
field.Float("sentQty").Default(0).Comment("已发料数量(分批出库累加)"),
field.String("batchNo").Default("").MaxLen(64).Comment("发料批次号(分批出库时填写)"),
field.String("operator").Default("").MaxLen(64),
field.Time("createdAt").Default(time.Now).Immutable(),
field.Time("updatedAt").Default(time.Now).UpdateDefault(time.Now).Optional().Nillable(),
+2
View File
@@ -36,6 +36,8 @@ func (Station) Fields() []ent.Field {
// 是否有接驳台:对应实体位置(1~10 号工位各 2 个接驳台;0/11/12/13 无),
// 由内置数据给定,页面不可手动更改。
field.Bool("hasDock").Default(false).Comment("是否有接驳台(实体位置,内置不可改)"),
// 引用接驳台编码(与 WMS dock.dock_code 对应,1:1):产线工位 DOCKn↔工位n,无接驳台则空
field.String("dockCode").Default("").MaxLen(20).Comment("接驳台编码 DOCK01..21"),
field.Time("createdAt").Default(time.Now).Immutable(),
}
}
+2
View File
@@ -36,5 +36,7 @@ func (StationProcess) Indexes() []ent.Index {
index.Fields("stationNo"),
index.Fields("effectDate"),
index.Fields("stationNo", "effectDate"),
// 同工位同天同班次唯一(派工覆盖式写入),防止备料算料翻倍
index.Fields("stationNo", "effectDate", "shift").Unique(),
}
}
-1
View File
@@ -30,7 +30,6 @@ func (WorkOrder) Fields() []ent.Field {
field.Int("quantity").Default(1).Comment("工件数量"),
field.Int("finishedNum").Default(0).Comment("完成数量"),
field.Int("failNum").Default(0).Comment("NG数量"),
field.String("processSeq").Default("").MaxLen(64).Comment("工位组合,如 1,3,5(本工单要经过的工位,按序执行)"),
// 工程编号体系(客户口径 问题记录 L580):合同 → 工程编号 → 产品序号
field.String("contractNo").Default("").MaxLen(64).Comment("合同编号"),
field.String("projectNo").Default("").MaxLen(64).Comment("工程编号(一个合同对应一个工程编号)"),
-1
View File
@@ -25,7 +25,6 @@ func (Workpiece) Fields() []ent.Field {
field.String("sn").Unique().MaxLen(64).Comment("工件唯一SN"),
field.String("orderNo").Default("").MaxLen(64).Comment("所属工单"),
field.Int("workOrderId").Optional().Comment("工单ID"),
field.String("processSeq").Default("").MaxLen(64).Comment("工序组合,如 135"),
field.Int("currentProcess").Optional().Comment("当前进行到的工序码"),
// ONLINE(已进线) / PROCESSING(在工位) / DONE(完工) / REPAIR / SCRAPPED
field.String("status").Default("ONLINE").MaxLen(20),