92 lines
3.2 KiB
Go
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"}}})
|
|
}
|