You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.6 KiB
105 lines
3.6 KiB
package TeacherDao
|
|
|
|
import (
|
|
"dsBigData/Business/Teacher/TeacherModel"
|
|
"dsBigData/Utils/CommonUtil"
|
|
"dsBigData/Utils/EsUtil"
|
|
"encoding/json"
|
|
"github.com/olivere/elastic/v7"
|
|
"github.com/tidwall/gjson"
|
|
)
|
|
|
|
var esClient = EsUtil.EsClient
|
|
var CTX = EsUtil.CTX
|
|
|
|
func GetTeacherCountAggsXxbxlxByCityOrDistrict(districtCode []string, schoolIds []string, xxbxlxs []string) ([]TeacherModel.TeacherCountAggsXxbxlx, error) {
|
|
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
|
|
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
|
|
bUseTerm := elastic.NewTermQuery("data_content.b_use", 1)
|
|
interfaceArr := CommonUtil.ConvertStringArrToInterfaceArr(xxbxlxs)
|
|
xxbxlxTerms := elastic.NewTermsQuery("school_type", interfaceArr...)
|
|
|
|
var boolQuery *elastic.BoolQuery
|
|
|
|
if len(districtCode) > 0 {
|
|
interfaceArr := CommonUtil.ConvertStringArrToInterfaceArr(districtCode)
|
|
districtCodeTerms := elastic.NewTermsQuery("district_code", interfaceArr...)
|
|
boolQuery = elastic.NewBoolQuery().Must(districtCodeTerms, enableFlagTerm, delFlagTerm, bUseTerm, xxbxlxTerms)
|
|
} else if len(schoolIds) > 0 {
|
|
interfaceArr := CommonUtil.ConvertStringArrToInterfaceArr(schoolIds)
|
|
orgIdTerms := elastic.NewTermsQuery("org_id", interfaceArr...)
|
|
boolQuery = elastic.NewBoolQuery().Must(orgIdTerms, enableFlagTerm, delFlagTerm, bUseTerm, xxbxlxTerms)
|
|
}
|
|
|
|
xxbxlxAggs := elastic.
|
|
NewTermsAggregation().
|
|
Field("school_type").
|
|
Size(50)
|
|
|
|
result, err := esClient.Search().
|
|
Index("user_teacher").
|
|
Query(boolQuery).
|
|
Size(1000).
|
|
Aggregation("xxbxlx", xxbxlxAggs).
|
|
Do(CTX)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resByte, err := json.Marshal(result.Aggregations)
|
|
resStr := string(resByte)
|
|
|
|
var teacherCountAggsXxbxlxArr []TeacherModel.TeacherCountAggsXxbxlx
|
|
resCount := gjson.Get(resStr, "xxbxlx.buckets.#")
|
|
for i := 0; i < int(resCount.Num); i++ {
|
|
var teacherCountAggsXxbxlx TeacherModel.TeacherCountAggsXxbxlx
|
|
teacherCountAggsXxbxlx.XxbxlxCode = gjson.Get(resStr, "xxbxlx.buckets."+CommonUtil.ConvertIntToString(i)+".key").Str
|
|
teacherCountAggsXxbxlx.Count = int(gjson.Get(resStr, "xxbxlx.buckets."+CommonUtil.ConvertIntToString(i)+".doc_count").Num)
|
|
|
|
teacherCountAggsXxbxlxArr = append(teacherCountAggsXxbxlxArr, teacherCountAggsXxbxlx)
|
|
}
|
|
return teacherCountAggsXxbxlxArr, nil
|
|
|
|
}
|
|
|
|
func GetTeacherCountAggsOrgId(schoolIds []string) ([]TeacherModel.TeacherCountAggsOrg, error) {
|
|
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
|
|
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
|
|
bUseTerm := elastic.NewTermQuery("data_content.b_use", 1)
|
|
interfaceArr := CommonUtil.ConvertStringArrToInterfaceArr(schoolIds)
|
|
orgIdTerms := elastic.NewTermsQuery("org_id", interfaceArr...)
|
|
|
|
boolQuery := elastic.NewBoolQuery().Must(orgIdTerms, enableFlagTerm, delFlagTerm, bUseTerm, orgIdTerms)
|
|
|
|
orgIdAggs := elastic.
|
|
NewTermsAggregation().
|
|
Field("org_id").
|
|
Size(1000)
|
|
|
|
result, err := esClient.Search().
|
|
Index("user_teacher").
|
|
Query(boolQuery).
|
|
Size(1000).
|
|
Aggregation("orgId", orgIdAggs).
|
|
Do(CTX)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resByte, err := json.Marshal(result.Aggregations)
|
|
resStr := string(resByte)
|
|
|
|
var teacherCountAggsOrgArr []TeacherModel.TeacherCountAggsOrg
|
|
resCount := gjson.Get(resStr, "orgId.buckets.#")
|
|
for i := 0; i < int(resCount.Num); i++ {
|
|
var teacherCountAggsOrg TeacherModel.TeacherCountAggsOrg
|
|
teacherCountAggsOrg.OrgId = gjson.Get(resStr, "orgId.buckets."+CommonUtil.ConvertIntToString(i)+".key").Str
|
|
teacherCountAggsOrg.Count = int(gjson.Get(resStr, "orgId.buckets."+CommonUtil.ConvertIntToString(i)+".doc_count").Num)
|
|
|
|
teacherCountAggsOrgArr = append(teacherCountAggsOrgArr, teacherCountAggsOrg)
|
|
}
|
|
return teacherCountAggsOrgArr, nil
|
|
}
|