chore: 批量完成项目多模块迭代优化

1. 废弃半成品库存表并统一库存主表
2. 修复列表排序与搜索大小写不敏感问题
3. 新增用户最近登录时间、工单BOM名称字段
4. 完善角色管理、工位选择器功能
5. 增加拧紧数据补录、成品自动回流WMS能力
6. 统一导出时间范围校验规则
7. 丰富物料/备料单筛选条件
8. 调整菜单与权限命名适配产品型号业务
This commit is contained in:
SunYF
2026-09-08 11:44:04 +08:00
parent 06689970e2
commit e852c7cd37
96 changed files with 4528 additions and 542 deletions
+24 -2
View File
@@ -28,6 +28,8 @@ type Material struct {
Unit string `json:"unit,omitempty"`
// 描述
Description string `json:"description,omitempty"`
// 品类 1原材料/2半成品/3成品
ItemType int `json:"itemType,omitempty"`
// 管理粒度 1批次/2序列号
ManageMode int `json:"manageMode,omitempty"`
// 是否批次管理
@@ -36,6 +38,8 @@ type Material struct {
IsSerialManaged bool `json:"isSerialManaged,omitempty"`
// 物料模板编码(物料种类)
TemplateCode string `json:"templateCode,omitempty"`
// 是否启用
IsActive bool `json:"isActive,omitempty"`
// 创建时间
CreatedAt int64 `json:"createdAt,omitempty"`
// 更新时间
@@ -48,9 +52,9 @@ func (*Material) scanValues(columns []string) ([]any, error) {
values := make([]any, len(columns))
for i := range columns {
switch columns[i] {
case material.FieldIsBatchManaged, material.FieldIsSerialManaged:
case material.FieldIsBatchManaged, material.FieldIsSerialManaged, material.FieldIsActive:
values[i] = new(sql.NullBool)
case material.FieldID, material.FieldManageMode, material.FieldCreatedAt, material.FieldUpdatedAt:
case material.FieldID, material.FieldItemType, material.FieldManageMode, material.FieldCreatedAt, material.FieldUpdatedAt:
values[i] = new(sql.NullInt64)
case material.FieldCode, material.FieldName, material.FieldShortName, material.FieldSpec, material.FieldUnit, material.FieldDescription, material.FieldTemplateCode:
values[i] = new(sql.NullString)
@@ -111,6 +115,12 @@ func (_m *Material) assignValues(columns []string, values []any) error {
} else if value.Valid {
_m.Description = value.String
}
case material.FieldItemType:
if value, ok := values[i].(*sql.NullInt64); !ok {
return fmt.Errorf("unexpected type %T for field item_type", values[i])
} else if value.Valid {
_m.ItemType = int(value.Int64)
}
case material.FieldManageMode:
if value, ok := values[i].(*sql.NullInt64); !ok {
return fmt.Errorf("unexpected type %T for field manage_mode", values[i])
@@ -135,6 +145,12 @@ func (_m *Material) assignValues(columns []string, values []any) error {
} else if value.Valid {
_m.TemplateCode = value.String
}
case material.FieldIsActive:
if value, ok := values[i].(*sql.NullBool); !ok {
return fmt.Errorf("unexpected type %T for field is_active", values[i])
} else if value.Valid {
_m.IsActive = value.Bool
}
case material.FieldCreatedAt:
if value, ok := values[i].(*sql.NullInt64); !ok {
return fmt.Errorf("unexpected type %T for field created_at", values[i])
@@ -201,6 +217,9 @@ func (_m *Material) String() string {
builder.WriteString("description=")
builder.WriteString(_m.Description)
builder.WriteString(", ")
builder.WriteString("item_type=")
builder.WriteString(fmt.Sprintf("%v", _m.ItemType))
builder.WriteString(", ")
builder.WriteString("manage_mode=")
builder.WriteString(fmt.Sprintf("%v", _m.ManageMode))
builder.WriteString(", ")
@@ -213,6 +232,9 @@ func (_m *Material) String() string {
builder.WriteString("template_code=")
builder.WriteString(_m.TemplateCode)
builder.WriteString(", ")
builder.WriteString("is_active=")
builder.WriteString(fmt.Sprintf("%v", _m.IsActive))
builder.WriteString(", ")
builder.WriteString("created_at=")
builder.WriteString(fmt.Sprintf("%v", _m.CreatedAt))
builder.WriteString(", ")