Kaynağa Gözat

添加选项

yjp 3 ay önce
ebeveyn
işleme
9d47cc22c9

+ 26 - 23
convenient/entity_crud/service.go

@@ -281,7 +281,7 @@ type CustomCondition struct {
 
 type FormCustomConditionFunc func(c *api.Context, params request.Params, e entity.Entity, i *infrastructure.Infrastructure) (*CustomCondition, error)
 
-func Query[O any](tableName string, orderBy string, stringFieldQueryCondition string, callbacks *QueryCallbacks[O], conditionFieldCallback ConditionFieldCallback, formCustomConditionFunc FormCustomConditionFunc) binding.ServiceFunc[response.InfosData[O]] {
+func Query[O any](tableName string, orderBy string, stringFieldQueryCondition string, customStringFieldQueryCondition map[string]string, callbacks *QueryCallbacks[O], conditionFieldCallback ConditionFieldCallback, formCustomConditionFunc FormCustomConditionFunc) binding.ServiceFunc[response.InfosData[O]] {
 	return func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (response.InfosData[O], error) {
 		errResponse := response.InfosData[O]{
 			Infos: make([]O, 0),
@@ -326,28 +326,31 @@ func Query[O any](tableName string, orderBy string, stringFieldQueryCondition st
 				}
 
 				if !hasDeal {
-					fieldValue := reflect.ValueOf(field.Value)
-					if !fieldValue.IsZero() {
-						if fieldValue.Type().Kind() != reflect.String {
-							conditions.Equal(field.ColumnName, field.Value)
-						} else {
-							stringValue, ok := field.Value.(string)
-							if !ok {
-								return errResponse, errors.New("字符串字段值类型错误")
-							}
-
-							switch stringFieldQueryCondition {
-							case StringFieldQueryConditionEqual:
-								conditions.Equal(field.ColumnName, stringValue)
-							case StringFieldQueryConditionTrimSpaceEqual:
-								conditions.Equal(field.ColumnName, strings.TrimSpace(stringValue))
-							case StringFieldQueryConditionLike:
-								conditions.Like(field.ColumnName, "%"+stringValue+"%")
-							case StringFieldQueryConditionTrimSpaceLike:
-								conditions.Like(field.ColumnName, "%"+strings.TrimSpace(stringValue)+"%")
-							default:
-								conditions.Equal(field.ColumnName, stringValue)
-							}
+					fieldValueType := reflect.TypeOf(field.Value)
+					if fieldValueType.Kind() != reflect.String {
+						conditions.Equal(field.ColumnName, field.Value)
+					} else {
+						stringValue, ok := field.Value.(string)
+						if !ok {
+							return errResponse, errors.New("字符串字段值类型错误")
+						}
+
+						queryCondition, ok := customStringFieldQueryCondition[field.FieldName]
+						if !ok {
+							queryCondition = stringFieldQueryCondition
+						}
+
+						switch queryCondition {
+						case StringFieldQueryConditionEqual:
+							conditions.Equal(field.ColumnName, stringValue)
+						case StringFieldQueryConditionTrimSpaceEqual:
+							conditions.Equal(field.ColumnName, strings.TrimSpace(stringValue))
+						case StringFieldQueryConditionLike:
+							conditions.Like(field.ColumnName, "%"+stringValue+"%")
+						case StringFieldQueryConditionTrimSpaceLike:
+							conditions.Like(field.ColumnName, "%"+strings.TrimSpace(stringValue)+"%")
+						default:
+							conditions.Equal(field.ColumnName, stringValue)
 						}
 					}
 				}

+ 11 - 1
convenient/entity_crud/simple.go

@@ -100,7 +100,8 @@ func (simple *Simple[I]) bind(binder *binding.Binder) {
 			SendResponseFunc: response.SendInfosResponse[I],
 			RequestParams:    simple.QueryQueryParams,
 			Objects:          []domain.Object{simple.Entity},
-			ServiceFunc:      Query[I](tableName, queryOptions.orderBy, queryOptions.stringFieldQueryCondition, queryOptions.callbacks, queryOptions.conditionFieldCallback, queryOptions.formCustomConditionFunc),
+			ServiceFunc: Query[I](tableName, queryOptions.orderBy, queryOptions.stringFieldQueryCondition,
+				queryOptions.customStringFieldQueryCondition, queryOptions.callbacks, queryOptions.conditionFieldCallback, queryOptions.formCustomConditionFunc),
 		}, queryMiddlewares...)
 	}
 
@@ -242,6 +243,9 @@ type QueryOptions[I any] struct {
 
 	// 字符串类型字段使用的查询条件
 	stringFieldQueryCondition string
+
+	// 自定义字符串类型字段使用的查询条件,会覆盖stringFieldQueryCondition的设置
+	customStringFieldQueryCondition map[string]string
 }
 
 type GetByIDOptions[I any] struct {
@@ -387,6 +391,12 @@ func WithQueryStringFieldQueryCondition[I any](queryCondition string) QueryOptio
 	}
 }
 
+func WithQueryCustomStringFieldQueryCondition[I any](customStringFieldQueryCondition map[string]string) QueryOption[I] {
+	return func(options *QueryOptions[I]) {
+		options.customStringFieldQueryCondition = customStringFieldQueryCondition
+	}
+}
+
 func WithDisableGetByID[I any]() GetByIDOption[I] {
 	return func(options *GetByIDOptions[I]) {
 		options.disable = true