|
|
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
|
|
|
}
|