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.

745 lines
25 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"
"strings"
"time"
)
var esClient = EsUtil.EsClient
var CTX = EsUtil.CTX
func PageEduAssistInfoByDistrictCode(districtCode string, directly string) ([]SchoolModel.EduAssist, error) {
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
var districtCodeTerm *elastic.TermQuery
if strings.HasSuffix(districtCode, "00") { //市
if directly == "1" {
districtCodeTerm = elastic.NewTermQuery("data_content.district_code", districtCode)
} else {
districtCodeTerm = elastic.NewTermQuery("data_content.city_code", districtCode)
}
} else { //区
districtCodeTerm = elastic.NewTermQuery("data_content.district_code", districtCode)
}
orgTypeTerm := elastic.NewTermQuery("data_content.org_type", "7")
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
}
eduAssistArr := make([]SchoolModel.EduAssist, 0)
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, directly string) ([]SchoolModel.School, error) {
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
var districtCodeTerm *elastic.TermQuery
if strings.HasSuffix(districtCode, "00") { //市
districtCodeTerm = elastic.NewTermQuery("data_content.city_code", districtCode)
} else { //区
districtCodeTerm = elastic.NewTermQuery("data_content.district_code", districtCode)
}
orgTypeTerm := elastic.NewTermQuery("data_content.org_type", "2")
var boolQuery *elastic.BoolQuery
if xxbxlxm == "-1" {
if directly == "1" {
interfaceArr := CommonUtil.ConvertStringArrToInterfaceArr([]string{"360", "811", "821"})
directlyUnderTypeTerms := elastic.NewTermsQuery("data_content.xxjbzm", interfaceArr...)
boolQuery = elastic.NewBoolQuery().Must(enableFlagTerm, delFlagTerm, districtCodeTerm, orgTypeTerm, directlyUnderTypeTerms)
} else {
boolQuery = elastic.NewBoolQuery().Must(enableFlagTerm, delFlagTerm, districtCodeTerm, orgTypeTerm)
}
} else {
xxbxlxmTerm := elastic.NewTermQuery("school_type", xxbxlxm)
if directly == "1" {
interfaceArr := CommonUtil.ConvertStringArrToInterfaceArr([]string{"360", "811", "821"})
directlyUnderTypeTerms := elastic.NewTermsQuery("data_content.xxjbzm", interfaceArr...)
boolQuery = elastic.NewBoolQuery().Must(enableFlagTerm, delFlagTerm, districtCodeTerm, orgTypeTerm, xxbxlxmTerm, directlyUnderTypeTerms)
} else {
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
}
schoolArr := make([]SchoolModel.School, 0)
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("data_content.org_type", "7")
interfaceArr := CommonUtil.ConvertStringArrToInterfaceArr(districtCodeArr)
cityCodeTerms := elastic.NewTermsQuery("data_content.district_code", interfaceArr...)
boolQuery := elastic.NewBoolQuery().Must(enableFlagTerm, delFlagTerm, cityCodeTerms, orgTypeTerm)
districtCodeAggs := elastic.
NewTermsAggregation().
Field("data_content.district_code").
Size(50)
result, err := esClient.Search().
Index("org_school").
Query(boolQuery).
Size(0).
Aggregation("district", districtCodeAggs).
Do(CTX)
if err != nil {
return nil, err
}
resByte, err := json.Marshal(result.Aggregations)
resStr := string(resByte)
eduAssistCountAggsDistrictArr := make([]SchoolModel.EduAssistCountAggsDistrict, 0)
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("data_content.org_type", "2")
//directlyUnderTypeTerm := elastic.NewTermQuery("data_content.directly_under_type", "1")
interfaceArr := CommonUtil.ConvertStringArrToInterfaceArr(districtCodeArr)
cityCodeTerm := elastic.NewTermsQuery("data_content.district_code", interfaceArr...)
boolQuery := elastic.NewBoolQuery().Must(enableFlagTerm, delFlagTerm, cityCodeTerm, orgTypeTerm)
districtCodeAggs := elastic.
NewTermsAggregation().
Field("data_content.district_code").
Size(50)
result, err := esClient.Search().
Index("org_school").
Query(boolQuery).
Size(0).
Aggregation("district", districtCodeAggs).
Do(CTX)
if err != nil {
return nil, err
}
resByte, err := json.Marshal(result.Aggregations)
resStr := string(resByte)
schoolCountAggsDistrictArr := make([]SchoolModel.SchoolCountAggsDistrict, 0)
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("data_content.org_type", "2")
districtCodeTerm := elastic.NewTermQuery("data_content.district_code", districtCode)
boolQuery := elastic.NewBoolQuery().Must(enableFlagTerm, delFlagTerm, orgTypeTerm, districtCodeTerm)
xxbxlxAggs := elastic.
NewTermsAggregation().
Field("data_content.xxbxlxm").
Size(50)
result, err := esClient.Search().
Index("org_school").
Query(boolQuery).
Size(0).
Aggregation("xxbxlx", xxbxlxAggs).
Do(CTX)
if err != nil {
return nil, err
}
resByte, err := json.Marshal(result.Aggregations)
resStr := string(resByte)
schoolCountAggsXxbxlxArr := make([]SchoolModel.SchoolCountAggsXxbxlx, 0)
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("data_content.org_type", "2")
interfaceArr := CommonUtil.ConvertStringArrToInterfaceArr(districtCodeArr)
cityCodeTerm := elastic.NewTermsQuery("data_content.district_code", interfaceArr...)
boolQuery := elastic.NewBoolQuery().Must(enableFlagTerm, delFlagTerm, cityCodeTerm, orgTypeTerm)
districtCodeAggs := elastic.
NewTermsAggregation().
Field("data_content.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(0).
Aggregation("district", districtCodeAggs).
Do(CTX)
if err != nil {
return nil, err
}
resByte, err := json.Marshal(result.Aggregations)
resStr := string(resByte)
schoolCountAggsDistrictArr := make([]SchoolModel.SchoolCountAggsDistrict, 0)
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
}
func PageStageBySchoolId(schoolId string) ([]SchoolModel.Stage, error) {
orgIdTerm := elastic.NewTermQuery("data_content.bureau_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)
stagAggs := elastic.
NewTermsAggregation().
Field("data_content.stage_id").
Size(10)
result, err := esClient.Search().
Index("user_student").
Query(boolQuery).
Size(0).
Aggregation("stag", stagAggs).
Do(CTX)
if err != nil {
return nil, err
}
resByte, err := json.Marshal(result.Aggregations)
resStr := string(resByte)
stageArr := make([]SchoolModel.Stage, 0)
resCount := gjson.Get(resStr, "stag.buckets.#")
for i := 0; i < int(resCount.Num); i++ {
var stage SchoolModel.Stage
stageId := gjson.Get(resStr, "stag.buckets."+CommonUtil.ConvertIntToString(i)+".key").Str
stageName := ""
stage.StageId = stageId
switch stageId {
case "2":
stageName = "小学"
break
case "3":
stageName = "初中"
break
case "4":
stageName = "高中"
break
}
stage.StageName = stageName
stageArr = append(stageArr, stage)
}
return stageArr, nil
}
/**
功能:根据市编码和机构类型获取中省直单位总数
*/
func GetDirectlyUnderOrgTotalCount(areaCode string, orgType string) (int, error) {
orgTypeTerm := elastic.NewTermQuery("data_content.org_type", orgType)
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
bUseTerm := elastic.NewTermQuery("data_content.b_use", 1)
//interfaceArr := CommonUtil.ConvertStringArrToInterfaceArr([]string{"2", "3", "4"})
//directlyUnderTypeTerms := elastic.NewTermsQuery("data_content.directly_under_type", interfaceArr...)
var boolQuery *elastic.BoolQuery
if orgType == "2" {
cityCodeTerm := elastic.NewTermQuery("data_content.city_code", areaCode)
boolQuery = elastic.NewBoolQuery().Must(cityCodeTerm, orgTypeTerm, enableFlagTerm, delFlagTerm, bUseTerm)
} else {
districtCodeTerm := elastic.NewTermQuery("data_content.district_code", areaCode)
boolQuery = elastic.NewBoolQuery().Must(districtCodeTerm, orgTypeTerm, enableFlagTerm, delFlagTerm, bUseTerm)
}
result, err := esClient.Search().
Index("org_school").
Query(boolQuery).
TrackTotalHits(true).
Do(CTX)
if err != nil {
return 0, err
}
return int(result.TotalHits()), nil
}
/**
功能:根据市或区的编码(也可传单位ID)和机构类型获取总数
*/
func GetOrgTotalCount(areaCode string, orgType string) (int, error) {
var areaCodeTerm *elastic.TermQuery
if len(areaCode) == 6 {
if strings.HasSuffix(areaCode, "00") { //市
areaCodeTerm = elastic.NewTermQuery("data_content.city_code", areaCode)
} else { //区
areaCodeTerm = elastic.NewTermQuery("data_content.district_code", areaCode)
}
} else {
areaCodeTerm = elastic.NewTermQuery("org_id", areaCode)
}
orgTypeTerm := elastic.NewTermQuery("data_content.org_type", orgType)
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
bUseTerm := elastic.NewTermQuery("data_content.b_use", 1)
boolQuery := elastic.NewBoolQuery().Must(areaCodeTerm, orgTypeTerm, enableFlagTerm, delFlagTerm, bUseTerm)
result, err := esClient.Search().
Index("org_school").
Query(boolQuery).
TrackTotalHits(true).
Do(CTX)
if err != nil {
return 0, err
}
return int(result.TotalHits()), nil
}
/**
功能:根据市编码和机构类型获取当前学期中省直新增单位数
*/
func GetDirectlyUnderOrgCurrentTermAddCount(areaCode string, orgType string) (int, error) {
endYearStr := CommonUtil.ConvertIntToString(time.Now().Year())
month := CommonUtil.ConvertStringToInt32(time.Now().Format("1"))
monthStr := "08"
if month >= 3 && month <= 7 {
monthStr = "03"
}
createTime := endYearStr + "/" + monthStr + "/01 00:00:01"
orgTypeTerm := elastic.NewTermQuery("data_content.org_type", orgType)
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
bUseTerm := elastic.NewTermQuery("data_content.b_use", 1)
createTimeRang := elastic.NewRangeQuery("data_content.create_time").Gte(createTime)
var boolQuery *elastic.BoolQuery
if orgType == "2" {
cityCodeTerm := elastic.NewTermQuery("data_content.city_code", areaCode)
//interfaceArr := CommonUtil.ConvertStringArrToInterfaceArr([]string{"2", "3", "4"})
//directlyUnderTypeTerms := elastic.NewTermsQuery("data_content.directly_under_type", interfaceArr...)
boolQuery = elastic.NewBoolQuery().Must(cityCodeTerm, orgTypeTerm, enableFlagTerm, delFlagTerm, bUseTerm, createTimeRang)
} else {
districtCodeTerm := elastic.NewTermQuery("data_content.district_code", areaCode)
boolQuery = elastic.NewBoolQuery().Must(districtCodeTerm, orgTypeTerm, enableFlagTerm, delFlagTerm, bUseTerm, createTimeRang)
}
result, err := esClient.Search().
Index("org_school").
Query(boolQuery).
TrackTotalHits(true).
Do(CTX)
if err != nil {
return 0, err
}
return int(result.TotalHits()), nil
}
/**
功能:根据市或区的编码和机构类型获取当前学期新增数
*/
func GetOrgCurrentTermAddCount(areaCode string, orgType string) (int, error) {
endYearStr := CommonUtil.ConvertIntToString(time.Now().Year())
month := CommonUtil.ConvertStringToInt32(time.Now().Format("1"))
monthStr := "08"
if month >= 3 && month <= 7 {
monthStr = "03"
}
createTime := endYearStr + "/" + monthStr + "/01 00:00:01"
var areaCodeTerm *elastic.TermQuery
if len(areaCode) == 6 {
if strings.HasSuffix(areaCode, "00") { //市
areaCodeTerm = elastic.NewTermQuery("data_content.city_code", areaCode)
} else { //区
areaCodeTerm = elastic.NewTermQuery("data_content.district_code", areaCode)
}
} else {
areaCodeTerm = elastic.NewTermQuery("org_id", areaCode)
}
orgTypeTerm := elastic.NewTermQuery("data_content.org_type", orgType)
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
bUseTerm := elastic.NewTermQuery("data_content.b_use", 1)
createTimeRang := elastic.NewRangeQuery("data_content.create_time").Gte(createTime)
boolQuery := elastic.NewBoolQuery().Must(areaCodeTerm, orgTypeTerm, enableFlagTerm, delFlagTerm, bUseTerm, createTimeRang)
result, err := esClient.Search().
Index("org_school").
Query(boolQuery).
TrackTotalHits(true).
Do(CTX)
if err != nil {
return 0, err
}
return int(result.TotalHits()), nil
}
/**
功能根据学校ID获取班级总数
*/
func GetClassTotalCount(schoolId string) (int, error) {
orgIdTerm := elastic.NewTermQuery("data_content.bureau_id", schoolId)
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
bUseTerm := elastic.NewTermQuery("data_content.b_use", 1)
boolQuery := elastic.NewBoolQuery().Must(orgIdTerm, enableFlagTerm, delFlagTerm, bUseTerm)
result, err := esClient.Search().
Index("org_class").
Query(boolQuery).
TrackTotalHits(true).
Do(CTX)
if err != nil {
return 0, err
}
return int(result.TotalHits()), nil
}
/**
功能根据学校ID获取班级当前学期新增数
*/
func GetClassCurrentTermAddCount(schoolId string) (int, error) {
endYearStr := CommonUtil.ConvertIntToString(time.Now().Year())
month := CommonUtil.ConvertStringToInt32(time.Now().Format("1"))
monthStr := "08"
if month >= 3 && month <= 7 {
monthStr = "03"
}
createTime := endYearStr + "/" + monthStr + "/01 00:00:01"
orgIdTerm := elastic.NewTermQuery("data_content.bureau_id", schoolId)
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
bUseTerm := elastic.NewTermQuery("data_content.b_use", 1)
createTimeRang := elastic.NewRangeQuery("data_content.create_time").Gte(createTime)
boolQuery := elastic.NewBoolQuery().Must(orgIdTerm, enableFlagTerm, delFlagTerm, bUseTerm, createTimeRang)
result, err := esClient.Search().
Index("org_class").
Query(boolQuery).
TrackTotalHits(true).
Do(CTX)
if err != nil {
return 0, err
}
return int(result.TotalHits()), nil
}
func GetBaseDirectlyUnderAccessTop(schoolIds []string, topNum string) ([]SchoolModel.BaseAccessTopAggsOrgId, error) {
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
interfaceArr := CommonUtil.ConvertStringArrToInterfaceArr(schoolIds)
orgIdTerms := elastic.NewTermsQuery("org_id", interfaceArr...)
boolQuery := elastic.NewBoolQuery().Must(orgIdTerms, enableFlagTerm, delFlagTerm)
orgIdAggs := elastic.
NewTermsAggregation().
Field("org_id").
Size(CommonUtil.ConvertStringToInt(topNum))
result, err := esClient.Search().
Index("log_login").
Query(boolQuery).
Size(0).
Aggregation("orgId", orgIdAggs).
Do(CTX)
if err != nil {
return nil, err
}
resByte, err := json.Marshal(result.Aggregations)
resStr := string(resByte)
baseAccessTopAggsOrgIdArr := make([]SchoolModel.BaseAccessTopAggsOrgId, 0)
resCount := gjson.Get(resStr, "orgId.buckets.#")
for i := 0; i < int(resCount.Num); i++ {
var baseAccessTopAggsOrgId SchoolModel.BaseAccessTopAggsOrgId
baseAccessTopAggsOrgId.OrgId = gjson.Get(resStr, "orgId.buckets."+CommonUtil.ConvertIntToString(i)+".key").Str
baseAccessTopAggsOrgId.Count = int(gjson.Get(resStr, "orgId.buckets."+CommonUtil.ConvertIntToString(i)+".doc_count").Num)
baseAccessTopAggsOrgIdArr = append(baseAccessTopAggsOrgIdArr, baseAccessTopAggsOrgId)
}
return baseAccessTopAggsOrgIdArr, nil
}
func GetBaseAccessTop(areaCode string, topNum string) ([]SchoolModel.BaseAccessTopAggsOrgId, error) {
var areaCodeTerm *elastic.TermQuery
if strings.HasSuffix(areaCode, "00") { //市
areaCodeTerm = elastic.NewTermQuery("data_content.city_code", areaCode)
} else { //区
areaCodeTerm = elastic.NewTermQuery("data_content.district_code", areaCode)
}
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
boolQuery := elastic.NewBoolQuery().Must(areaCodeTerm, enableFlagTerm, delFlagTerm)
orgIdAggs := elastic.
NewTermsAggregation().
Field("org_id").
Size(CommonUtil.ConvertStringToInt(topNum))
result, err := esClient.Search().
Index("log_login").
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 baseAccessTopAggsOrgIdArr []SchoolModel.BaseAccessTopAggsOrgId
resCount := gjson.Get(resStr, "orgId.buckets.#")
for i := 0; i < int(resCount.Num); i++ {
var baseAccessTopAggsOrgId SchoolModel.BaseAccessTopAggsOrgId
baseAccessTopAggsOrgId.OrgId = gjson.Get(resStr, "orgId.buckets."+CommonUtil.ConvertIntToString(i)+".key").Str
baseAccessTopAggsOrgId.Count = int(gjson.Get(resStr, "orgId.buckets."+CommonUtil.ConvertIntToString(i)+".doc_count").Num)
baseAccessTopAggsOrgIdArr = append(baseAccessTopAggsOrgIdArr, baseAccessTopAggsOrgId)
}
return baseAccessTopAggsOrgIdArr, nil
}
func GetOrgInfoByOrgIds(orgIds []string) ([]SchoolModel.Org, error) {
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
bUseTerm := elastic.NewTermQuery("data_content.b_use", 1)
interfaceArr := CommonUtil.ConvertStringArrToInterfaceArr(orgIds)
orgIdTerms := elastic.NewTermsQuery("data_content.org_id", interfaceArr...)
boolQuery := elastic.NewBoolQuery().Must(enableFlagTerm, delFlagTerm, bUseTerm, orgIdTerms)
result, err := esClient.Search().
Index("org_school").
Query(boolQuery).
Size(100).
Do(CTX)
if err != nil {
return nil, err
}
resByte, err := json.Marshal(result.Hits)
resStr := string(resByte)
orgArr := make([]SchoolModel.Org, 0)
resCount := gjson.Get(resStr, "total.value")
for i := 0; i < int(resCount.Num); i++ {
var org SchoolModel.Org
org.OrgId = gjson.Get(resStr, "hits."+CommonUtil.ConvertIntToString(i)+"._source.data_content.org_id").Str
org.OrgName = gjson.Get(resStr, "hits."+CommonUtil.ConvertIntToString(i)+"._source.data_content.org_name").Str
orgArr = append(orgArr, org)
}
return orgArr, nil
}
/**
功能:根据市编码获取学校数量
*/
func GetCityDirectlySchoolCount(cityCode string) (int, error) {
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
bUseTerm := elastic.NewTermQuery("data_content.b_use", 1)
districtCodeTerm := elastic.NewTermQuery("data_content.city_code", cityCode)
orgTypeTerm := elastic.NewTermQuery("data_content.org_type", "2")
interfaceArr := CommonUtil.ConvertStringArrToInterfaceArr([]string{"360", "811", "821"})
directlyUnderTypeTerms := elastic.NewTermsQuery("data_content.xxjbzm", interfaceArr...)
boolQuery := elastic.NewBoolQuery().Must(districtCodeTerm, orgTypeTerm, enableFlagTerm, delFlagTerm, bUseTerm, directlyUnderTypeTerms)
result, err := esClient.Search().
Index("org_school").
Query(boolQuery).
Size(0).
Do(CTX)
if err != nil {
return 0, err
}
return int(result.TotalHits()), nil
}
/**
功能:根据市编码获取教辅单位数量
*/
func GetCityDirectlyEduAssistCount(cityCode string) (int, error) {
enableFlagTerm := elastic.NewTermQuery("enable_flag", 1)
delFlagTerm := elastic.NewTermQuery("del_flag", 0)
bUseTerm := elastic.NewTermQuery("data_content.b_use", 1)
districtCodeTerm := elastic.NewTermQuery("data_content.district_code", cityCode)
orgTypeTerm := elastic.NewTermQuery("data_content.org_type", "7")
boolQuery := elastic.NewBoolQuery().Must(districtCodeTerm, orgTypeTerm, enableFlagTerm, delFlagTerm, bUseTerm)
result, err := esClient.Search().
Index("org_school").
Query(boolQuery).
Size(0).
Do(CTX)
if err != nil {
return 0, err
}
return int(result.TotalHits()), nil
}