处理查询方案,修改查询条件

处理查询方案,修改查询条件

作者:


如何用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 是最终查询条件语句。