From 07957ec7f2ddefc4c5af49de4f7296a79d0ccb3d Mon Sep 17 00:00:00 2001 From: wubin Date: Fri, 3 Jul 2020 17:27:41 +0800 Subject: [PATCH] UPDATE --- .../StudentController/StudentController.go | 9 +++ .../Business/Student/StudentDao/StudentDao.go | 55 ++++++++++++++++++- .../Student/StudentModel/StudentModel.go | 12 ++++ .../Student/StudentService/StudentService.go | 11 ++++ 4 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 dsBigData/Business/Student/StudentController/StudentController.go create mode 100644 dsBigData/Business/Student/StudentModel/StudentModel.go create mode 100644 dsBigData/Business/Student/StudentService/StudentService.go diff --git a/dsBigData/Business/Student/StudentController/StudentController.go b/dsBigData/Business/Student/StudentController/StudentController.go new file mode 100644 index 00000000..05b41784 --- /dev/null +++ b/dsBigData/Business/Student/StudentController/StudentController.go @@ -0,0 +1,9 @@ +package StudentController + +import "github.com/gin-gonic/gin" + +func GetStudentCountByArea(c *gin.Context) { + cityCode := c.Query("cityCode") + districtCode := c.Query("districtCode") + +} diff --git a/dsBigData/Business/Student/StudentDao/StudentDao.go b/dsBigData/Business/Student/StudentDao/StudentDao.go index edc359db..2599795c 100644 --- a/dsBigData/Business/Student/StudentDao/StudentDao.go +++ b/dsBigData/Business/Student/StudentDao/StudentDao.go @@ -1,6 +1,59 @@ package StudentDao -import "dsBigData/Utils/EsUtil" +import ( + "dsBigData/Business/Student/StudentModel" + "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 GetStudentCountByCityOrDistrict(cityCode string, districtCode string) ([]StudentModel.StudentCountAggsXxbxlx, error) { + enableFlagTerm := elastic.NewTermQuery("enable_flag", 1) + delFlagTerm := elastic.NewTermQuery("del_flag", 0) + bUseTerm := elastic.NewTermQuery("data_content.b_use", 1) + + var areaTerm *elastic.TermQuery + if len(cityCode) > 0 { + areaTerm = elastic.NewTermQuery("city_code", cityCode) + } else if len(districtCode) > 0 { + areaTerm = elastic.NewTermQuery("district_code", districtCode) + } + + boolQuery := elastic.NewBoolQuery().Must(areaTerm, enableFlagTerm, delFlagTerm, bUseTerm) + + xxbxlxAggs := elastic. + NewTermsAggregation(). + Field("school_type"). + Size(50) + + result, err := esClient.Search(). + Index("user_student"). + Query(boolQuery). + Size(1000). + Aggregation("district", 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 = gjson.Get(resStr, "xxbxlx.buckets."+CommonUtil.ConvertIntToString(i)+".doc_count").Raw + + studentCountAggsXxbxlxArr = append(studentCountAggsXxbxlxArr, studentCountAggsXxbxlx) + } + return studentCountAggsXxbxlxArr, nil + +} diff --git a/dsBigData/Business/Student/StudentModel/StudentModel.go b/dsBigData/Business/Student/StudentModel/StudentModel.go new file mode 100644 index 00000000..ace54713 --- /dev/null +++ b/dsBigData/Business/Student/StudentModel/StudentModel.go @@ -0,0 +1,12 @@ +package StudentModel + +type StudentCountAggsXxbxlx struct{ + XxbxlxCode string `json:"xxbxlx_code"` + Count string `json:"count"` +} + +type StudentCount struct { + XxbxlxCode string `json:"xxbxlx_code"` + XxbxlxName string `json:"xxbxlx_name"` + Count int `json:"count"` +} diff --git a/dsBigData/Business/Student/StudentService/StudentService.go b/dsBigData/Business/Student/StudentService/StudentService.go new file mode 100644 index 00000000..76716d22 --- /dev/null +++ b/dsBigData/Business/Student/StudentService/StudentService.go @@ -0,0 +1,11 @@ +package StudentService + +import ( + "dsBigData/Business/Student/StudentDao" + "dsBigData/Business/Student/StudentModel" +) + +func GetStudentCountByCityOrDistrict(cityCode string, districtCode string) ([]StudentModel.StudentCountAggsXxbxlx, error) { + arr, err := StudentDao.GetStudentCountByCityOrDistrict(cityCode, districtCode) + return arr, err +}