enterprise/common/registry/salary.go

36 lines
811 B
Go
Raw Normal View History

2025-03-04 23:14:09 +08:00
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 {
2025-03-13 19:19:30 +08:00
Calculate(salary *model.StaffSalary) map[string]interface{}
2025-03-04 23:14:09 +08:00
}
type SalaryCalculatorFactory func(corp *model.Corp, user *model.StaffUser) SalaryCalculator
2025-03-13 19:19:30 +08:00
func RegisterSalaryCalculator(key string, factory SalaryCalculatorFactory) {
salaryFactory[key] = factory
2025-03-04 23:14:09 +08:00
}
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)
}