feat: 完成多模块迭代更新
- 新增过程巡检按步骤上报、数量不符上报、工位退料功能 - 增加工单工程编号三级归属字段 - 新增物料安全库存与缺货预警 - 新增附件管理、退库单管理模块 - 优化生产看板展示逻辑与前端页面文案 - 清理冗余的工艺路线相关代码与备份文件
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
package schema
|
||||
|
||||
import (
|
||||
"entgo.io/ent"
|
||||
"entgo.io/ent/schema/field"
|
||||
"entgo.io/ent/schema/index"
|
||||
)
|
||||
|
||||
// Attachment 附件(挂载在业务单据/档案上的文件)
|
||||
//
|
||||
// 客户诉求(问题记录 L30):"列表可以查看附件、上传附件"——入库单/物料档案/检验记录
|
||||
// 都要能挂图纸 PDF、检验报告、成品资料。故用统一单表,biz_type 区分挂载对象:
|
||||
//
|
||||
// biz_type=inbound biz_id=入库单号(inbound_no)
|
||||
// biz_type=material biz_id=物料编码(material.code)
|
||||
// biz_type=inspection biz_id=检验记录ID(inspection_records.id)
|
||||
// biz_type=semi biz_id=半成品 SN
|
||||
// biz_type=outbound biz_id=出库单号
|
||||
//
|
||||
// 磁盘落盘约定:uploads/<uuid><ext>(纯 ASCII 文件名,避免中文 URL 编码问题),
|
||||
// 原始文件名存 file_name,预览走静态路由 GET /uploads/:name。
|
||||
type Attachment struct {
|
||||
ent.Schema
|
||||
}
|
||||
|
||||
func (Attachment) Fields() []ent.Field {
|
||||
return []ent.Field{
|
||||
field.String("biz_type").Comment("业务类型 inbound/material/inspection/semi/outbound"),
|
||||
field.String("biz_id").Comment("业务对象标识(单号/编码/ID)"),
|
||||
field.String("file_name").Comment("原始文件名(含扩展名)"),
|
||||
field.String("file_path").Comment("磁盘相对文件名(uuid+ext)"),
|
||||
field.Int64("file_size").Default(0).Comment("文件大小(字节)"),
|
||||
field.String("mime_type").Optional().Comment("MIME 类型"),
|
||||
field.String("uploaded_by").Optional().Comment("上传人"),
|
||||
field.Int64("created_at").DefaultFunc(nowUnix),
|
||||
}
|
||||
}
|
||||
|
||||
func (Attachment) Indexes() []ent.Index {
|
||||
return []ent.Index{
|
||||
index.Fields("biz_type", "biz_id"),
|
||||
}
|
||||
}
|
||||
@@ -14,8 +14,8 @@ type InboundOrder struct {
|
||||
func (InboundOrder) Fields() []ent.Field {
|
||||
return []ent.Field{
|
||||
field.String("inbound_no").Unique().Comment("入库单号"),
|
||||
// 类型:purchase(采购) semi(半成品) finished(成品) return(退货)
|
||||
field.String("inbound_type").Default("purchase").Comment("入库类型"),
|
||||
// 类型:purchase(采购/结构件) semi(半成品) finished(成品) return(退货) other(其他入库)
|
||||
field.String("inbound_type").Default("purchase").Comment("入库类型 purchase/semi/finished/return/other"),
|
||||
field.String("material_code").Comment("物料编码"),
|
||||
field.String("material_name").Optional().Comment("物料名称(冗余)"),
|
||||
// 管理粒度 1批次(结构件)/2序列号(电气件),冗余自物料档案,便于单单据直接判断
|
||||
@@ -27,6 +27,10 @@ func (InboundOrder) Fields() []ent.Field {
|
||||
field.String("remark").Optional().Comment("备注"),
|
||||
// 检测单号:入库检报告单号,必填以闭环质量追溯
|
||||
field.String("inspection_no").Comment("检测单号(入库检报告单号)"),
|
||||
// 归属(客户诉求 问题记录 L54:入库记录增加 工单号/科技项目号/无)
|
||||
// ownership_type: workorder(工单号) / project(科技项目号) / none(无)
|
||||
field.String("ownership_type").Default("none").Comment("归属类型 workorder/project/none"),
|
||||
field.String("ownership_no").Optional().Comment("归属编号(工单号/科技项目号)"),
|
||||
field.Int64("created_at").DefaultFunc(nowUnix).Comment("创建时间"),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,6 +31,11 @@ func (InspectionRecord) Fields() []ent.Field {
|
||||
// 检测单号:对应的检验报告单号(与入库单检测单号关联)
|
||||
field.String("inspection_no").Optional().Comment("检测单号(检验报告单号)"),
|
||||
field.String("report_no").Optional().Comment("报检单号(生产报检关联)"),
|
||||
// 不合格品处置(客户诉求 问题记录 L135-145:不合格不入库、不上产线,仅合格品计入库存数量)
|
||||
// NONE=不适用(合格或未判定) / RETURN=退货 / SCRAP=报废 / PARTIAL=部分入库(合格数入库、不合格数退或废)
|
||||
field.String("disposal_type").Default("NONE").Comment("不合格处置 NONE/RETURN/SCRAP/PARTIAL"),
|
||||
field.String("disposal_remark").Optional().Comment("处置说明(报废/退货原因)"),
|
||||
field.String("return_tracking_no").Optional().Comment("退货货运单号"),
|
||||
field.String("remark").Optional().Comment("备注"),
|
||||
field.Int64("created_at").DefaultFunc(nowUnix),
|
||||
field.Int64("updated_at").DefaultFunc(nowUnix),
|
||||
|
||||
@@ -27,8 +27,8 @@ func (Material) Fields() []ent.Field {
|
||||
field.String("spec").Optional().Comment("规格型号"),
|
||||
field.String("unit").Optional().Comment("单位"),
|
||||
field.String("description").Optional().Comment("描述"),
|
||||
// 品类:1=原材料 2=半成品 3=成品(成品=产品型号档案)
|
||||
field.Int("item_type").Default(1).Comment("品类 1原材料/2半成品/3成品"),
|
||||
// 品类:1=原材料 2=半成品 3=成品 4=其他(辅料/工装/试验设备,客户诉求 问题记录 L50)
|
||||
field.Int("item_type").Default(1).Comment("品类 1原材料/2半成品/3成品/4其他"),
|
||||
// 管理粒度:1=批次管理(结构件) 2=序列号管理(电气件)
|
||||
field.Int("manage_mode").Default(1).Comment("管理粒度 1批次/2序列号"),
|
||||
field.Bool("is_batch_managed").Default(false).Comment("是否批次管理"),
|
||||
@@ -37,6 +37,8 @@ func (Material) Fields() []ent.Field {
|
||||
field.String("template_code").Optional().Comment("物料模板编码(物料种类)"),
|
||||
// 图号(零件图纸编号,用于装配定位与追溯,可选)
|
||||
field.String("drawing_no").Optional().Comment("图号(图纸编号)"),
|
||||
// 安全库存:低于该值触发缺货预警(客户诉求 问题记录 L473:安全库存/缺货预警进 WMS 首页)
|
||||
field.Int("safety_stock").Default(0).Comment("安全库存(低于则缺货预警,0=不预警)"),
|
||||
// 启用状态:停用后不在新建工单/备料下拉出现(对齐 MES 产品型号 isActive)
|
||||
field.Bool("is_active").Default(true).Comment("是否启用"),
|
||||
field.Int64("created_at").DefaultFunc(nowUnix).Comment("创建时间"),
|
||||
|
||||
@@ -21,6 +21,8 @@ func (OrderMaterialLedger) Fields() []ent.Field {
|
||||
field.Int("total_qty").Default(0).Comment("物料总需求数量"),
|
||||
field.Int("out_qty").Default(0).Comment("累计已出库数量"),
|
||||
field.String("status").Default("进行中").Comment("进行中/领料完结"),
|
||||
// 目标工位:备料送到哪个装配工位(客户诉求 L297-300;MES 同步台账时传入)
|
||||
field.String("target_station").Optional().Comment("目标工位(装配工位号)"),
|
||||
field.String("remark").Optional().Comment("备注"),
|
||||
field.Int64("created_at").DefaultFunc(nowUnix),
|
||||
field.Int64("updated_at").DefaultFunc(nowUnix),
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package schema
|
||||
|
||||
import (
|
||||
"entgo.io/ent"
|
||||
"entgo.io/ent/schema/field"
|
||||
"entgo.io/ent/schema/index"
|
||||
)
|
||||
|
||||
// ReturnOrder 退库单(客户诉求 问题记录 L488/L491):
|
||||
// 工位将原材料退给库房 → MES 调用本内部接口预建「待确认收货」退库单 →
|
||||
// WMS 库管在「退库单」页确认收货,库存加回,链路封闭。
|
||||
type ReturnOrder struct {
|
||||
ent.Schema
|
||||
}
|
||||
|
||||
func (ReturnOrder) Fields() []ent.Field {
|
||||
return []ent.Field{
|
||||
field.String("return_no").Unique().Comment("退库单号"),
|
||||
field.String("source_type").Default("station").Comment("来源 station=工位退库"),
|
||||
field.String("order_no").Default("").Comment("关联工单号"),
|
||||
field.Int("station_no").Default(0).Comment("退库工位号"),
|
||||
field.String("sn").Default("").Comment("工件SN(可空)"),
|
||||
field.String("material_code").Comment("物料编码"),
|
||||
field.String("material_name").Optional().Comment("物料名称(冗余)"),
|
||||
field.String("spec").Optional().Comment("规格"),
|
||||
field.Int("qty").Default(0).Comment("退库数量"),
|
||||
field.String("unit").Default("").Comment("单位"),
|
||||
field.String("reason").Default("").Comment("退库原因"),
|
||||
// 待确认 PENDING / 已收货 RECEIVED
|
||||
field.String("status").Default("PENDING").Comment("PENDING/RECEIVED"),
|
||||
field.String("operator").Default("").Comment("退库发起人(工位终端操作人)"),
|
||||
field.String("receive_by").Default("").Comment("WMS 确认收货人"),
|
||||
field.Int64("created_at").DefaultFunc(nowUnix).Comment("创建时间"),
|
||||
field.Int64("receive_at").Default(0).Comment("确认收货时间"),
|
||||
}
|
||||
}
|
||||
|
||||
func (ReturnOrder) Indexes() []ent.Index {
|
||||
return []ent.Index{
|
||||
index.Fields("status"),
|
||||
index.Fields("order_no"),
|
||||
index.Fields("station_no"),
|
||||
index.Fields("material_code"),
|
||||
}
|
||||
}
|
||||
@@ -5,10 +5,10 @@ import (
|
||||
"entgo.io/ent/schema/field"
|
||||
)
|
||||
|
||||
// Zone 库房区域(大分区)
|
||||
// 仅作为"大分区"维度(如 待检区/标准存储区/暂存区/退货区),编码 Z01~Z04。
|
||||
// 业务决策:小货架高频取货场景无需"货架-层-格"精确货位,系统管到区域即可,
|
||||
// 货架内部由仓管经验定位,不给现场增加录入负担。库存(inventory)只关联 zone_code。
|
||||
// Zone 库房区域
|
||||
// 客户诉求(问题记录 L32/L169 + 本轮 D5):区域要能定位到「货架号 + 第几层 + 位置号」,
|
||||
// 且用户明确"编码规则手填"(L584)——故仅加三个可填文本字段,不做编号规则校验、不做级联实体。
|
||||
// 完整库位串 = 区域编码 / 货架号 / 层 / 位置号(示例 Z01 / A / 3 / 12)。
|
||||
type Zone struct {
|
||||
ent.Schema
|
||||
}
|
||||
@@ -18,6 +18,12 @@ func (Zone) Fields() []ent.Field {
|
||||
field.String("zone_code").Unique().Comment("区域编码"),
|
||||
field.String("zone_name").Comment("区域名称"),
|
||||
field.String("description").Optional().Comment("描述"),
|
||||
// 货架号(手填,如 A/03)
|
||||
field.String("shelf_no").Optional().Comment("货架号(手填)"),
|
||||
// 第几层(手填,如 3)
|
||||
field.String("layer_no").Optional().Comment("第几层(手填)"),
|
||||
// 位置号(手填,如 12)
|
||||
field.String("position_no").Optional().Comment("位置号(手填)"),
|
||||
field.String("status").Default("启用").Comment("状态:启用/停用"),
|
||||
field.Int64("created_at").DefaultFunc(nowUnix),
|
||||
field.Int64("updated_at").DefaultFunc(nowUnix).Optional().Comment("更新时间"),
|
||||
|
||||
Reference in New Issue
Block a user