package StudentDao import ( "dsBigData/Business/Student/StudentModel" "dsBigData/Utils/CommonUtil" "dsBigData/Utils/EsUtil" "encoding/json" "github.com/olivere/elastic/v7" "github.com/tidwall/gjson" "time" ) var esClient = EsUtil.EsClient var CTX = EsUtil.CTX func GetStudentCountAggsXxbxlx(districtCode []string, schoolIds []string, xxbxlxs []string) ([]StudentModel.StudentCountAggsXxbxlx, 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_student"). 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 studentCountAggsXxbxlxArr []StudentModel.StudentCountAggsXxbxlx resCount := gjson.Get(resStr, "xxbxlx.buckets.#") for i := 0; i < int(resCount.Num); i++ { var studentCountAggsXxbxlx StudentModel.StudentCountAggsXxbxlx studentCountAggsXxbxlx.XxbxlxCode = gjson.Get(resStr, "xxbxlx.buckets."+CommonUtil.ConvertIntToString(i)+".key").Str studentCountAggsXxbxlx.Count = int(gjson.Get(resStr, "xxbxlx.buckets."+CommonUtil.ConvertIntToString(i)+".doc_count").Num) studentCountAggsXxbxlxArr = append(studentCountAggsXxbxlxArr, studentCountAggsXxbxlx) } return studentCountAggsXxbxlxArr, nil } func GetStudentCountAggsOrgId(schoolIds []string) ([]StudentModel.StudentCountAggsOrg, 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_student"). 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 StudentCountAggsOrgArr []StudentModel.StudentCountAggsOrg resCount := gjson.Get(resStr, "orgId.buckets.#") for i := 0; i < int(resCount.Num); i++ { var studentCountAggsOrg StudentModel.StudentCountAggsOrg studentCountAggsOrg.OrgId = gjson.Get(resStr, "orgId.buckets."+CommonUtil.ConvertIntToString(i)+".key").Str studentCountAggsOrg.Count = int(gjson.Get(resStr, "orgId.buckets."+CommonUtil.ConvertIntToString(i)+".doc_count").Num) StudentCountAggsOrgArr = append(StudentCountAggsOrgArr, studentCountAggsOrg) } return StudentCountAggsOrgArr, nil } func GetStudentCountAggsRxnf(schoolId string, stageId string) ([]StudentModel.StudentCountRxnf, error) { endYear := time.Now().Year() startYear := 0 month := CommonUtil.ConvertStringToInt32(time.Now().Format("1")) if month < 8 { endYear = endYear - 1 } if stageId == "2" { startYear = endYear - 5 } else { startYear = endYear - 2 } orgIdTerm := elastic.NewTermQuery("org_id", schoolId) stageIdTerm := elastic.NewTermQuery("data_content.stage_id", stageId) rxnfRang := elastic.NewRangeQuery("data_content.rxnf").Gte(startYear).Lte(endYear) 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, stageIdTerm, bUseTerm, rxnfRang, enableFlagTerm, delFlagTerm) rxnfHistogramAggregation := elastic.NewHistogramAggregation().Field("data_content.rxnf").MinDocCount(0).ExtendedBounds(float64(startYear), float64(endYear)).Interval(1) result, err := esClient.Search(). Index("user_student"). Query(boolQuery). Aggregation("rxnf", rxnfHistogramAggregation). Do(CTX) if err != nil { return nil, err } resByte, err := json.Marshal(result.Aggregations) resStr := string(resByte) var studentCountRxnfArr []StudentModel.StudentCountRxnf resCount := gjson.Get(resStr, "rxnf.buckets.#") for i := 0; i < int(resCount.Num); i++ { var studentCountRxnf StudentModel.StudentCountRxnf studentCountRxnf.Rxnf = CommonUtil.ConverFloat64ToString(gjson.Get(resStr, "rxnf.buckets."+CommonUtil.ConvertIntToString(i)+".key").Num) studentCountRxnf.Count = int(gjson.Get(resStr, "rxnf.buckets."+CommonUtil.ConvertIntToString(i)+".doc_count").Num) studentCountRxnfArr = append(studentCountRxnfArr, studentCountRxnf) } return studentCountRxnfArr, nil }