Files
kra-new/internal/data/business/management_models.go
T

92 lines
3.2 KiB
Go

package business
import (
"time"
"gorm.io/gorm"
"gorm.io/gorm/clause"
"kra/pkg/database/migration"
)
type businessGroupPO struct {
ID uint64 `gorm:"primaryKey"`
Name string `gorm:"size:40;not null"`
OwnerID uint `gorm:"index"`
Sort int
CreatedAt, UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
}
func (businessGroupPO) TableName() string { return "sys_business_groups" }
type businessGroupMemberPO struct {
UserID uint `gorm:"primaryKey;autoIncrement:false"`
GroupID uint64 `gorm:"index;not null"`
}
func (businessGroupMemberPO) TableName() string { return "sys_business_group_members" }
type businessMemberProfilePO struct {
UserID uint `gorm:"primaryKey;autoIncrement:false"`
HireDate string `gorm:"size:10"`
Employment string `gorm:"size:16;not null;default:employed"`
UpdatedAt time.Time
}
func (businessMemberProfilePO) TableName() string { return "sys_business_member_profiles" }
type businessGroupStatePO struct {
ID uint `gorm:"primaryKey;autoIncrement:false"`
Revision uint64
}
func (businessGroupStatePO) TableName() string { return "sys_business_group_state" }
type performanceGoalPO struct {
Kind string `gorm:"primaryKey;size:8"`
TargetID uint64 `gorm:"primaryKey;autoIncrement:false"`
Month string `gorm:"primaryKey;size:7;index"`
Open, Effective, Amount *int64
UpdatedBy uint
CreatedAt, UpdatedAt time.Time
}
func (performanceGoalPO) TableName() string { return "sys_business_performance_goals" }
type effectivenessStatePO struct {
ID uint `gorm:"primaryKey;autoIncrement:false"`
RuleKey string `gorm:"size:64"`
Revision uint64
BuiltAt *time.Time
}
func (effectivenessStatePO) TableName() string { return "sys_business_effectiveness_state" }
type effectivenessPO struct {
RuleKey string `gorm:"primaryKey;size:64;index:idx_sw_effective_date,priority:1"`
// Platform codes are identifiers. Binary storage also avoids collation
// conflicts when joining historical SDK tables imported with another collation.
SourceDB string `gorm:"primaryKey;type:varbinary(10)"`
PromoteID uint64 `gorm:"primaryKey;autoIncrement:false"`
QualifiedAt *int64 `gorm:"index:idx_sw_effective_date,priority:2"`
WindowPay string `gorm:"type:decimal(28,2);not null;default:0"`
Complete bool
UpdatedAt time.Time
}
func (effectivenessPO) TableName() string { return "sys_business_channel_effectiveness" }
func migrateBusinessManagement(db *gorm.DB) error {
if err := migration.CreateMissingTables(db, &businessGroupPO{}, &businessGroupMemberPO{}, &businessMemberProfilePO{}, &businessGroupStatePO{}, &performanceGoalPO{}, &effectivenessStatePO{}, &effectivenessPO{}); err != nil {
return err
}
if err := db.Clauses(clause.OnConflict{DoNothing: true}).Create(&businessGroupStatePO{ID: 1}).Error; err != nil {
return err
}
return db.Clauses(clause.OnConflict{DoNothing: true}).Create(&effectivenessStatePO{ID: 1}).Error
}
func migrateEffectivenessQueryIndex(db *gorm.DB) error {
return migrateQueryIndexes(db, []businessQueryIndex{{"tab_spend", "idx_sw_spend_effective_scan", []string{"promote_id", "source_db", "pay_status", "pay_time", "id", "pay_amount"}}})
}