处理查询方案,修改查询条件
作者:
如何用Go处理查询方案的条件?
func (m *resourceLoadQueryMiddleware) Register(ctx query_list.QueryListContext) {
ctx.AddCriteriaPiplineItem(m.CriteriaHandler)
}
func (m *resourceLoadQueryMiddleware) CriteriaHandler(ctx query_list.QueryDataContext, builder criteria.CriteriaBuilder) {
builder.AddResolver("project", func(c criteria.Criteria, criteriaStr string) string {
m.criteriaStrMap[name] = criteriaStr
return ""
})
builder.AddResultResolver(func(criteriaStr string) string {
resourceStr := m.criteriaStrMap[resource]
// 快捷查询列表不管是否选了部门
if resourceStr == "" && groupName == "WorkforceResourceQuickSet_list" {
// 如果没输入资源的条件,就什么都查不出来
resourceStr = "1 != 1"
} else if resourceStr == "" && m.criteriaStrMap[manageDept] == "" {
// 如果没输入资源的条件,就什么都查不出来
resourceStr = "1 != 1"
} else {
resourceStr = strings.Replace(m.criteriaStrMap[resource], resource, "id", 1)
}
s = []string{criteriaStr, resourceStr}
condition = strings.Join(s, " AND ")
return condition
})
}
builder.AddResolver 可以处理单个查询条件,回调中的第二个参数(criteriaStr)是前端传过来的,这个查询项对应的条件。
builder.AddResultResolver 是最终查询条件语句。