55 lines
1.1 KiB
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)
|
|
}
|