register.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package definition
  2. import (
  3. "git.sxidc.com/go-framework/baize/framework/core/domain/entity"
  4. "git.sxidc.com/go-framework/baize/framework/core/tag/rule"
  5. "git.sxidc.com/go-tools/utils/strutils"
  6. "github.com/pkg/errors"
  7. "sync"
  8. )
  9. var registeredDomainMap = &sync.Map{}
  10. type RegisterByEntityItem struct {
  11. Entity entity.Entity
  12. FieldMap map[string]string
  13. }
  14. func RegisterByDomainEntity(items ...RegisterByEntityItem) error {
  15. for _, item := range items {
  16. e := item.Entity
  17. fields, err := rule.DefaultUsage(e)
  18. if err != nil {
  19. return err
  20. }
  21. definitions := make([]Entity, 0)
  22. for _, field := range fields {
  23. fieldCNName := item.FieldMap[field.FieldName]
  24. if strutils.IsStringNotEmpty(field.FieldCNName) {
  25. fieldCNName = field.FieldCNName
  26. }
  27. definitions = append(definitions, Entity{
  28. FieldType: field.Type,
  29. FieldName: field.FieldName,
  30. ColumnName: field.ColumnName,
  31. FieldCNName: fieldCNName,
  32. Operators: operatorOfTypeMap[field.Type],
  33. })
  34. }
  35. registeredDomainMap.Store(e.DomainCamelName(), definitions)
  36. }
  37. return nil
  38. }
  39. func GetQueryRuleDefinitions(domainName string) []Entity {
  40. result, ok := registeredDomainMap.Load(domainName)
  41. if !ok {
  42. return make([]Entity, 0)
  43. }
  44. return result.([]Entity)
  45. }
  46. func GetColumnName(domainName string, fieldName string) (string, error) {
  47. definitions := GetQueryRuleDefinitions(domainName)
  48. if definitions == nil || len(definitions) == 0 {
  49. return "", errors.Errorf("领域没有注册: %v", domainName)
  50. }
  51. for _, definition := range definitions {
  52. if definition.FieldName == fieldName {
  53. return definition.ColumnName, nil
  54. }
  55. }
  56. return "", errors.Errorf("领域没有该字段: %v", fieldName)
  57. }