Преглед на файлове

添加查询规则参数

yjp преди 1 месец
родител
ревизия
bdddf09c1f
променени са 1 файла, в които са добавени 22 реда и са изтрити 6 реда
  1. 22 6
      convenient/domain/query_rule/query_rule.go

+ 22 - 6
convenient/domain/query_rule/query_rule.go

@@ -60,11 +60,13 @@ func (queryParams *BaseAdvanceQueryParams) GetPageSize() int {
 }
 
 type FormAdditionalConditionsFunc func(queryParams AdvanceQueryParams) (clause.Clause, error)
+type FormOtherClausesFunc func(queryParams AdvanceQueryParams) ([]clause.Clause, error)
 
 type AddUseQueryRuleQueryRouteParams struct {
 	DBSchema                     string
 	QueryParams                  AdvanceQueryParams
 	FormAdditionalConditionsFunc FormAdditionalConditionsFunc
+	FormOtherClausesFunc         FormOtherClausesFunc
 	Object                       domain.Object
 	QueryMiddlewares             []binding.Middleware
 }
@@ -110,6 +112,8 @@ func AddUseQueryRuleQueryRoute[O any](binder *binding.Binder, addParams *AddUseQ
 			var selectClause *clause.Select
 			var countClause *clause.Select
 			var additionalConditions clause.Clause
+			selectOtherClauses := make([]clause.Clause, 0)
+			countOtherClauses := make([]clause.Clause, 0)
 
 			fromClause := clause.NewFrom([]clause.Clause{clause.TableName(domain.TableName(addParams.DBSchema, e))})
 			limitClause := clause.NewLimit(advanceQueryParams.GetPageNo(), advanceQueryParams.GetPageSize())
@@ -125,11 +129,10 @@ func AddUseQueryRuleQueryRoute[O any](binder *binding.Binder, addParams *AddUseQ
 
 			if strutils.IsStringEmpty(advanceQueryParams.GetRule()) {
 				if additionalConditions != nil {
-					selectClause = clause.NewSelect(nil, fromClause, clause.NewWhere(additionalConditions), limitClause)
-					countClause = clause.NewSelect([]string{"COUNT(*) AS total"}, fromClause, clause.NewWhere(additionalConditions))
+					selectOtherClauses = append(selectOtherClauses, clause.NewWhere(additionalConditions), limitClause)
+					countOtherClauses = append(countOtherClauses, clause.NewWhere(additionalConditions))
 				} else {
-					selectClause = clause.NewSelect(nil, fromClause, limitClause)
-					countClause = clause.NewSelect([]string{"COUNT(*) AS total"}, fromClause)
+					selectOtherClauses = append(selectOtherClauses, limitClause)
 				}
 			} else {
 				queryRule := new(rule.Rule)
@@ -147,10 +150,23 @@ func AddUseQueryRuleQueryRoute[O any](binder *binding.Binder, addParams *AddUseQ
 					conditionClause = clause.NewConditionJoin(conditionClause, additionalConditions).And()
 				}
 
-				selectClause = clause.NewSelect(nil, fromClause, clause.NewWhere(conditionClause), limitClause)
-				countClause = clause.NewSelect([]string{"COUNT(*) AS total"}, fromClause, clause.NewWhere(conditionClause))
+				selectOtherClauses = append(selectOtherClauses, clause.NewWhere(conditionClause), limitClause)
+				countOtherClauses = append(countOtherClauses, clause.NewWhere(conditionClause))
 			}
 
+			if addParams.FormOtherClausesFunc != nil {
+				otherClauses, err := addParams.FormOtherClausesFunc(advanceQueryParams)
+				if err != nil {
+					return errResponse, err
+				}
+
+				selectOtherClauses = append(selectOtherClauses, otherClauses...)
+				countOtherClauses = append(countOtherClauses, otherClauses...)
+			}
+
+			selectClause = clause.NewSelect(nil, fromClause, selectOtherClauses...)
+			countClause = clause.NewSelect([]string{"COUNT(*) AS total"}, fromClause, countOtherClauses...)
+
 			selectClauseStr, err := selectClause.Clause()
 			if err != nil {
 				return errResponse, err