enterprise/common/registry/salary.go

55 lines
1.1 KiB
Go

package registry
import (
"enterprise/common/model"
"github.com/spf13/cast"
)
var (
salaryFactory map[string]SalaryFactory
staffFactory map[string]StaffFactory
)
func init() {
salaryFactory = make(map[string]SalaryFactory)
staffFactory = make(map[string]StaffFactory)
}
type Salary interface {
Calculate(salary *model.StaffSalary) map[string]interface{}
}
type Staff interface {
Monitor(user *model.StaffUser)
}
type SalaryFactory func(corp *model.Corp, user *model.StaffUser) Salary
type StaffFactory func(corp *model.Corp) Staff
func RegisterSalary(key string, factory SalaryFactory) {
salaryFactory[key] = factory
}
func RegisterStaff(key string, factory StaffFactory) {
staffFactory[key] = factory
}
func NewSalary(corp *model.Corp, user *model.StaffUser) Salary {
factory := salaryFactory[cast.ToString(corp.Id)+"_"+user.Username]
if factory == nil {
factory = salaryFactory[cast.ToString(corp.Id)]
}
if factory == nil {
return nil
}
return factory(corp, user)
}
func NewStaff(corp *model.Corp) Staff {
factory := staffFactory[cast.ToString(corp.Id)]
if factory == nil {
return nil
}
return factory(corp)
}