refactor platform menus and entity statuses

This commit is contained in:
david
2026-07-29 13:18:52 +08:00
parent 978dc446d9
commit afd9dbdeb5
48 changed files with 510 additions and 421 deletions

View File

@@ -40,7 +40,7 @@ func FilterFields(values map[string]any, allowedFields []string) gin.H {
// UpdateRecordStatus 更新主表状态,停用和归档均保留历史记录。
func UpdateRecordStatus(ctx *gin.Context, model any) {
var request struct {
Status string `json:"status" binding:"required,max=32"`
Status int `json:"status" binding:"required"`
}
if err := ctx.ShouldBindJSON(&request); err != nil {
infra.Response.Error(ctx, errcode.ErrInvalidArgument)
@@ -51,10 +51,10 @@ func UpdateRecordStatus(ctx *gin.Context, model any) {
// ArchiveRecord 通过 archived 状态实现逻辑删除,不物理删除主数据。
func ArchiveRecord(ctx *gin.Context, model any) {
UpdateAllowedByIdentity(ctx, model, gin.H{"status": "archived"}, []string{"status"})
UpdateAllowedByIdentity(ctx, model, gin.H{"status": StatusArchived}, []string{"status"})
}
func NewEntity(status string) models.Entity {
func NewEntity(status int) models.Entity {
return models.Entity{Identity: models.NewIdentity(), Status: status, Version: 1}
}

View File

@@ -4,8 +4,6 @@ import (
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/infra"
"git.apinb.com/bsm-sdk/core/middleware"
"git.apinb.com/heqiapp/platforms/backend/api/internal/impl"
"git.apinb.com/heqiapp/platforms/backend/api/internal/models"
"github.com/gin-gonic/gin"
)
@@ -18,24 +16,3 @@ func RequirePlatformRoot(ctx *gin.Context) bool {
infra.Response.Error(ctx, errcode.ErrPermissionDenied)
return false
}
// LoadPlatformMenus returns the menus granted to one platform role.
func LoadPlatformMenus(roleCode string) ([]models.PlatformMenu, error) {
var menus []models.PlatformMenu
if roleCode == "root" {
err := impl.DBService.Order("sort_no asc, id asc").Find(&menus).Error
return menus, err
}
var role models.PlatformRole
if err := impl.DBService.Where("role_code = ? AND status = ?", roleCode, "enabled").First(&role).Error; err != nil {
return nil, err
}
err := impl.DBService.
Select("platform_menu.*").
Joins("JOIN platform_role_menu ON platform_role_menu.platform_menu_id = platform_menu.id").
Where("platform_role_menu.platform_role_id = ? AND platform_menu.status = ?", role.ID, "enabled").
Order("sort_no asc, id asc").
Find(&menus).Error
return menus, err
}

View File

@@ -84,7 +84,7 @@ func createResource(ctx *gin.Context, model any, allowedFields []string, relatio
infra.Response.Error(ctx, errcode.ErrInvalidArgument)
return
}
data.Elem().FieldByName("Entity").Set(reflect.ValueOf(NewEntity("draft")))
data.Elem().FieldByName("Entity").Set(reflect.ValueOf(NewEntity(StatusDraft)))
if err := impl.DBService.Create(data.Interface()).Error; err != nil {
infra.Response.Error(ctx, err)
return
@@ -347,7 +347,6 @@ var relationIdentityModels = map[string]any{
"gasorder_basic_id": &models.GasorderBasic{},
"gasorder_track_id": &models.GasorderTrack{},
"platform_role_id": &models.PlatformRole{},
"platform_menu_id": &models.PlatformMenu{},
"wallet_basic_id": &models.WalletBasic{},
"wallet_payment_id": &models.WalletPayment{},
"wallet_bank_id": &models.WalletBank{},

View File

@@ -0,0 +1,55 @@
package common
// 公共实体状态。所有嵌入 models.Entity 的模型统一使用这些整数值。
const (
StatusDraft = 0 // 草稿
StatusEnable = 1 // 启用
StatusDisable = 2 // 停用
StatusArchived = 3 // 已归档
StatusFrozen = 4 // 已冻结
StatusPending = 10 // 待处理
StatusActive = 11 // 生效中
StatusExpired = 12 // 已过期
StatusTerminated = 13 // 已终止
StatusRecorded = 14 // 已记录
StatusBound = 15 // 已绑定
StatusCreated = 16 // 已创建
StatusOrdered = 17 // 已下单
StatusAssigned = 18 // 已分配
StatusFilling = 19 // 充装中
StatusReady = 20 // 已就绪
StatusException = 21 // 异常
StatusCancelled = 22 // 已取消
StatusCompleted = 23 // 已完成
StatusPosted = 24 // 已入账
StatusApproved = 25 // 已通过
StatusRejected = 26 // 已驳回
StatusScrapped = 27 // 已报废
StatusInStock = 28 // 在库
StatusInTransit = 29 // 运输中
StatusInUse = 30 // 使用中
StatusRepairing = 31 // 维修中
StatusOpen = 32 // 待受理
StatusDelivering = 33 // 配送中
StatusAwaitingConfirmation = 34 // 待确认
StatusPaid = 35 // 已支付
StatusPublished = 36 // 已发布
StatusSuccess = 37 // 成功
StatusMatched = 38 // 已匹配
)
var statusNames = map[int]string{
StatusDraft: "draft", StatusEnable: "enabled", StatusDisable: "disabled", StatusArchived: "archived", StatusFrozen: "frozen",
StatusPending: "pending", StatusActive: "active", StatusExpired: "expired", StatusTerminated: "terminated",
StatusRecorded: "recorded", StatusBound: "bound", StatusCreated: "created", StatusOrdered: "ordered",
StatusAssigned: "assigned", StatusFilling: "filling", StatusReady: "ready", StatusException: "exception",
StatusCancelled: "cancelled", StatusCompleted: "completed", StatusPosted: "posted", StatusApproved: "approved",
StatusRejected: "rejected", StatusScrapped: "scrapped", StatusInStock: "in_stock", StatusInTransit: "in_transit",
StatusInUse: "in_use", StatusRepairing: "repairing", StatusOpen: "open", StatusDelivering: "delivering",
StatusAwaitingConfirmation: "awaiting_confirmation",
StatusPaid: "paid", StatusPublished: "published", StatusSuccess: "success", StatusMatched: "matched",
}
// StatusName 返回状态整数对应的稳定英文名称,供审计快照字段使用。
func StatusName(status int) string { return statusNames[status] }