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.

144 lines
4.9 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(0).
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(0).
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
}
func GetTeacherCountAggsBzlb(schoolId string, bzlbs []string) ([]TeacherModel.TeacherCountAggsBzlb, error) {
orgIdTerm := elastic.NewTermQuery("org_id", schoolId)
bUseTerm := elastic.NewTermQuery("data_content.b_use", 1)
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
boolQuery := elastic.NewBoolQuery().Must(orgIdTerm, bUseTerm, enableFlagTerm, delFlagTerm)
bzlbAggs := elastic.
NewTermsAggregation().
Field("data_content.bzlbm").
Size(10)
result, err := esClient.Search().
Index("user_teacher").
Query(boolQuery).
Size(0).
Aggregation("bzlb", bzlbAggs).
Do(CTX)
if err != nil {
return nil, err
}
resByte, err := json.Marshal(result.Aggregations)
resStr := string(resByte)
var teacherCountAggsBzlbArr []TeacherModel.TeacherCountAggsBzlb
resCount := gjson.Get(resStr, "bzlb.buckets.#")
for i := 0; i < int(resCount.Num); i++ {
var teacherCountAggsBzlb TeacherModel.TeacherCountAggsBzlb
teacherCountAggsBzlb.BzlbCode = gjson.Get(resStr, "bzlb.buckets."+CommonUtil.ConvertIntToString(i)+".key").Str
teacherCountAggsBzlb.Count = int(gjson.Get(resStr, "bzlb.buckets."+CommonUtil.ConvertIntToString(i)+".doc_count").Num)
teacherCountAggsBzlbArr = append(teacherCountAggsBzlbArr, teacherCountAggsBzlb)
}
return teacherCountAggsBzlbArr, nil
}