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) }