feat: 完成附件存储重构与磁盘监控功能,同步物料档案与入库单规则更新

1.  新增跨平台磁盘空间监控能力,每日7点自动检测附件目录剩余空间,触发阈值告警
2.  重构附件存储方案为年/月/日/文件类型分层结构,统一MES与WMS的附件管理逻辑
3.  对齐物料档案与入库单的质量状态校验规则,仅合格品计入库存与出库
4.  实现入库单作废功能与区域库位的多级父子结构管理
5.  删除物料简称字段,补充规格型号与单位必填项,统一系统数据口径
6.  新增附件中心与磁盘状态查询接口,完善权限控制与操作日志
This commit is contained in:
SunYF
2026-09-19 10:54:15 +08:00
parent 9002d9a642
commit 62e45b7379
95 changed files with 10467 additions and 2677 deletions
+20 -3
View File
@@ -17,8 +17,12 @@ import (
// biz_type=semi biz_id=半成品 SN
// biz_type=outbound biz_id=出库单号
//
// 磁盘落盘约定uploads/<uuid><ext>(纯 ASCII 文件名,避免中文 URL 编码问题)
// 原始文件名存 file_name,预览走静态路由 GET /uploads/:name。
// 磁盘落盘约定2026-09-19 重构):<根目录>/年/月/日/<文件类型大写>/<uuid>.<ext>
// file_path 存相对路径(如 2026/09/19/INSPECTION_PHOTO/xxx.jpg),不存绝对路径;
// 根目录由 etc/*.yaml 的 Attachment.RootDir 提供,不硬编码。
// 预览/下载走 GET /uploads/<相对路径>(服务端限根目录内,阻断穿越)。
// 文件类型(file_type,大写枚举)决定所在目录:PROCESS_PDF/INSPECTION_PHOTO/INSPECTION_PDF/
// DRAWING/PROCESS_CARD/PACKAGE_PHOTO/EXCEL_IMPORT/OTHERbiz_type 仍表示挂载的业务对象类型。
type Attachment struct {
ent.Schema
}
@@ -28,10 +32,20 @@ func (Attachment) Fields() []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)"),
// file_path 现为相对路径(年/月/日/文件类型/uuid.ext),历史扁平文件名仍兼容
field.String("file_path").Comment("磁盘相对路径(年/月/日/文件类型/uuid.ext)"),
// 文件类型(大写枚举),决定存储目录;与 biz_type(业务对象)正交
field.String("file_type").Optional().Comment("文件类型大写枚举 PROCESS_PDF/INSPECTION_PHOTO/..."),
field.String("file_ext").Optional().Comment("扩展名(小写,不含点)"),
field.String("file_md5").Optional().Comment("文件MD5(秒传/去重)"),
field.Int64("file_size").Default(0).Comment("文件大小(字节)"),
field.String("mime_type").Optional().Comment("MIME 类型"),
field.String("uploaded_by").Optional().Comment("上传人"),
field.Bool("archived").Default(false).Comment("是否已归档(备份到外部存储)"),
field.Int64("archived_at").Optional().Comment("归档时间(unix秒)"),
field.Bool("deleted").Default(false).Comment("逻辑删除标记"),
field.Int64("deleted_at").Optional().Comment("删除时间(unix秒)"),
field.String("deleted_by").Optional().Comment("删除人"),
field.Int64("created_at").DefaultFunc(nowUnix),
}
}
@@ -39,5 +53,8 @@ func (Attachment) Fields() []ent.Field {
func (Attachment) Indexes() []ent.Index {
return []ent.Index{
index.Fields("biz_type", "biz_id"),
index.Fields("file_type"),
index.Fields("file_md5"),
index.Fields("created_at"),
}
}