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