36 lines
811 B
Go
36 lines
811 B
Go
package registry
|
|
|
|
import (
|
|
"enterprise/common/model"
|
|
"github.com/spf13/cast"
|
|
)
|
|
|
|
var (
|
|
salaryFactory map[string]SalaryCalculatorFactory
|
|
)
|
|
|
|
func init() {
|
|
salaryFactory = make(map[string]SalaryCalculatorFactory)
|
|
}
|
|
|
|
type SalaryCalculator interface {
|
|
Calculate(salary *model.StaffSalary) map[string]interface{}
|
|
}
|
|
|
|
type SalaryCalculatorFactory func(corp *model.Corp, user *model.StaffUser) SalaryCalculator
|
|
|
|
func RegisterSalaryCalculator(key string, factory SalaryCalculatorFactory) {
|
|
salaryFactory[key] = factory
|
|
}
|
|
|
|
func NewSalaryCalculator(corp *model.Corp, user *model.StaffUser) SalaryCalculator {
|
|
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)
|
|
}
|