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.

278 lines
9.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package SchoolDao
import (
"dsBigData/Business/School/SchoolModel"
"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 PageEduAssistInfoByDistrictCode(districtCode string) ([]SchoolModel.EduAssist, error) {
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
districtCodeTerm := elastic.NewTermQuery("district_code", districtCode)
orgTypeTerm := elastic.NewTermQuery("org_type", "3")
bUseTerm := elastic.NewTermQuery("data_content.b_use", 1)
boolQuery := elastic.NewBoolQuery().Must(enableFlagTerm, delFlagTerm, districtCodeTerm, orgTypeTerm, bUseTerm)
result, err := esClient.Search().
Index("org_school").
Query(boolQuery).
Size(1000).
Do(CTX)
if err != nil {
return nil, err
}
resByte, err := json.Marshal(result.Hits)
if err != nil {
return nil, err
}
var eduAssistArr []SchoolModel.EduAssist
resStr := string(resByte)
resCount := gjson.Get(resStr, "total.value")
for i := 0; i < int(resCount.Num); i++ {
var eduAssist SchoolModel.EduAssist
eduAssist.EduAssistId = gjson.Get(resStr, "hits."+CommonUtil.ConvertIntToString(i)+"._source.data_content.org_id").Str
eduAssist.EduAssistName = gjson.Get(resStr, "hits."+CommonUtil.ConvertIntToString(i)+"._source.data_content.org_name").Str
eduAssistArr = append(eduAssistArr, eduAssist)
}
return eduAssistArr, nil
}
/**
功能:根据区编码获取该区下的学校列表
作者:吴缤
日期2020-06-30
xxbxlxm -1全部
*/
func PageSchoolInfoByDistrictCode(districtCode string, xxbxlxm string) ([]SchoolModel.School, error) {
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
districtCodeTerm := elastic.NewTermQuery("district_code", districtCode)
orgTypeTerm := elastic.NewTermQuery("org_type", "2")
var boolQuery *elastic.BoolQuery
if xxbxlxm == "-1" {
boolQuery = elastic.NewBoolQuery().Must(enableFlagTerm, delFlagTerm, districtCodeTerm, orgTypeTerm)
} else {
xxbxlxmTerm := elastic.NewTermQuery("school_type", xxbxlxm)
boolQuery = elastic.NewBoolQuery().Must(enableFlagTerm, delFlagTerm, districtCodeTerm, orgTypeTerm, xxbxlxmTerm)
}
result, err := esClient.Search().
Index("org_school").
Query(boolQuery).
Size(1000).
Do(CTX)
if err != nil {
return nil, err
}
resByte, err := json.Marshal(result.Hits)
if err != nil {
return nil, err
}
var schoolArr []SchoolModel.School
resStr := string(resByte)
resCount := gjson.Get(resStr, "total.value")
for i := 0; i < int(resCount.Num); i++ {
var school SchoolModel.School
school.SchoolId = gjson.Get(resStr, "hits."+CommonUtil.ConvertIntToString(i)+"._source.data_content.org_id").Str
school.SchoolName = gjson.Get(resStr, "hits."+CommonUtil.ConvertIntToString(i)+"._source.data_content.org_name").Str
schoolArr = append(schoolArr, school)
}
return schoolArr, nil
}
func AggsDistrictStatEduAssist(districtCodeArr []string) ([]SchoolModel.EduAssistCountAggsDistrict, error) {
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
orgTypeTerm := elastic.NewTermQuery("org_type", "3")
interfaceArr := CommonUtil.ConvertStringArrToInterfaceArr(districtCodeArr)
cityCodeTerms := elastic.NewTermsQuery("district_code", interfaceArr...)
boolQuery := elastic.NewBoolQuery().Must(enableFlagTerm, delFlagTerm, cityCodeTerms, orgTypeTerm)
districtCodeAggs := elastic.
NewTermsAggregation().
Field("district_code").
Size(50)
result, err := esClient.Search().
Index("org_school").
Query(boolQuery).
Size(1000).
Aggregation("district", districtCodeAggs).
Do(CTX)
if err != nil {
return nil, err
}
resByte, err := json.Marshal(result.Aggregations)
resStr := string(resByte)
var eduAssistCountAggsDistrictArr []SchoolModel.EduAssistCountAggsDistrict
resCount := gjson.Get(resStr, "district.buckets.#")
for i := 0; i < int(resCount.Num); i++ {
var eduAssistCountAggsDistrict SchoolModel.EduAssistCountAggsDistrict
eduAssistCountAggsDistrict.AreaCode = gjson.Get(resStr, "district.buckets."+CommonUtil.ConvertIntToString(i)+".key").Str
eduAssistCountAggsDistrict.Count = gjson.Get(resStr, "district.buckets."+CommonUtil.ConvertIntToString(i)+".doc_count").Raw
eduAssistCountAggsDistrictArr = append(eduAssistCountAggsDistrictArr, eduAssistCountAggsDistrict)
}
return eduAssistCountAggsDistrictArr, nil
}
func AggsDistrictStatSchoolCount(districtCodeArr []string) ([]SchoolModel.SchoolCountAggsDistrict, error) {
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
orgTypeTerm := elastic.NewTermQuery("org_type", "2")
interfaceArr := CommonUtil.ConvertStringArrToInterfaceArr(districtCodeArr)
cityCodeTerm := elastic.NewTermsQuery("district_code", interfaceArr...)
boolQuery := elastic.NewBoolQuery().Must(enableFlagTerm, delFlagTerm, cityCodeTerm, orgTypeTerm)
districtCodeAggs := elastic.
NewTermsAggregation().
Field("district_code").
Size(50)
result, err := esClient.Search().
Index("org_school").
Query(boolQuery).
Size(1000).
Aggregation("district", districtCodeAggs).
Do(CTX)
if err != nil {
return nil, err
}
resByte, err := json.Marshal(result.Aggregations)
resStr := string(resByte)
var schoolCountAggsDistrictArr []SchoolModel.SchoolCountAggsDistrict
resCount := gjson.Get(resStr, "district.buckets.#")
for i := 0; i < int(resCount.Num); i++ {
var schoolCountAggsDistrict SchoolModel.SchoolCountAggsDistrict
schoolCountAggsDistrict.AreaCode = gjson.Get(resStr, "district.buckets."+CommonUtil.ConvertIntToString(i)+".key").Str
schoolCountAggsDistrict.Count = gjson.Get(resStr, "district.buckets."+CommonUtil.ConvertIntToString(i)+".doc_count").Raw
schoolCountAggsDistrictArr = append(schoolCountAggsDistrictArr, schoolCountAggsDistrict)
}
return schoolCountAggsDistrictArr, nil
}
func AggsXxbxlxStatSchoolCountByDistrictCode(districtCode string) ([]SchoolModel.SchoolCountAggsXxbxlx, error) {
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
orgTypeTerm := elastic.NewTermQuery("org_type", "2")
districtCodeTerm := elastic.NewTermQuery("district_code", districtCode)
boolQuery := elastic.NewBoolQuery().Must(enableFlagTerm, delFlagTerm, orgTypeTerm, districtCodeTerm)
xxbxlxAggs := elastic.
NewTermsAggregation().
Field("school_type").
Size(50)
result, err := esClient.Search().
Index("org_school").
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 schoolCountAggsXxbxlxArr []SchoolModel.SchoolCountAggsXxbxlx
resCount := gjson.Get(resStr, "xxbxlx.buckets.#")
for i := 0; i < int(resCount.Num); i++ {
var schoolCountAggsXxbxlx SchoolModel.SchoolCountAggsXxbxlx
schoolCountAggsXxbxlx.Xxbxlxm = gjson.Get(resStr, "xxbxlx.buckets."+CommonUtil.ConvertIntToString(i)+".key").Str
schoolCountAggsXxbxlx.Count = gjson.Get(resStr, "xxbxlx.buckets."+CommonUtil.ConvertIntToString(i)+".doc_count").Raw
schoolCountAggsXxbxlxArr = append(schoolCountAggsXxbxlxArr, schoolCountAggsXxbxlx)
}
return schoolCountAggsXxbxlxArr, nil
}
/**
功能:聚合区统计学校数量
作者:吴缤
日期2020-07-02
districtCodes一个或多个区编码
aggsXxbxlx是否需要办学类型的子聚合 true需要 false不需要
*/
func GetSchoolCountAggsDistrict(districtCodeArr []string, aggsXxbxlx bool) ([]SchoolModel.SchoolCountAggsDistrict, error) {
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
orgTypeTerm := elastic.NewTermQuery("org_type", "2")
interfaceArr := CommonUtil.ConvertStringArrToInterfaceArr(districtCodeArr)
cityCodeTerm := elastic.NewTermsQuery("district_code", interfaceArr...)
boolQuery := elastic.NewBoolQuery().Must(enableFlagTerm, delFlagTerm, cityCodeTerm, orgTypeTerm)
districtCodeAggs := elastic.
NewTermsAggregation().
Field("district_code").
Size(50).
CollectionMode("breadth_first")
if aggsXxbxlx {
xxbxlxAggs := elastic.
NewTermsAggregation().
Field("school_type").
Size(20)
districtCodeAggs.SubAggregation("xxbxlx", xxbxlxAggs)
}
result, err := esClient.Search().
Index("org_school").
Query(boolQuery).
Size(1000).
Aggregation("district", districtCodeAggs).
Do(CTX)
if err != nil {
return nil, err
}
resByte, err := json.Marshal(result.Aggregations)
resStr := string(resByte)
var schoolCountAggsDistrictArr []SchoolModel.SchoolCountAggsDistrict
resCount := gjson.Get(resStr, "district.buckets.#")
for i := 0; i < int(resCount.Num); i++ {
var schoolCountAggsDistrict SchoolModel.SchoolCountAggsDistrict
schoolCountAggsDistrict.AreaCode = gjson.Get(resStr, "district.buckets."+CommonUtil.ConvertIntToString(i)+".key").Str
schoolCountAggsDistrict.Count = gjson.Get(resStr, "district.buckets."+CommonUtil.ConvertIntToString(i)+".doc_count").Raw
XxbxlxArr := make([]SchoolModel.SchoolCountAggsXxbxlx, 0)
if aggsXxbxlx {
xxbxlxCount := gjson.Get(resStr, "district.buckets."+CommonUtil.ConvertIntToString(i)+".xxbxlx.buckets.#")
for j := 0; j < int(xxbxlxCount.Num); j++ {
var xxbxlx SchoolModel.SchoolCountAggsXxbxlx
xxbxlx.Xxbxlxm = gjson.Get(resStr, "district.buckets."+CommonUtil.ConvertIntToString(i)+".xxbxlx.buckets."+CommonUtil.ConvertIntToString(j)+".key").Str
xxbxlx.Count = gjson.Get(resStr, "district.buckets."+CommonUtil.ConvertIntToString(i)+".xxbxlx.buckets."+CommonUtil.ConvertIntToString(j)+".doc_count").Raw
XxbxlxArr = append(XxbxlxArr, xxbxlx)
}
}
//schoolCountAggsDistrict.Xxbxlx = XxbxlxArr
schoolCountAggsDistrictArr = append(schoolCountAggsDistrictArr, schoolCountAggsDistrict)
}
return schoolCountAggsDistrictArr, nil
}