From 121d1416e3dde7add079f0397368d9565184f992 Mon Sep 17 00:00:00 2001 From: wubin Date: Tue, 7 Jul 2020 08:33:45 +0800 Subject: [PATCH] update --- .../Business/School/SchoolDao/SchoolDao.go | 35 ++++++ .../School/SchoolModel/SchoolModel.go | 5 + .../School/SchoolService/SchoolService.go | 5 + .../StudentController/StudentController.go | 63 +++++++++- .../Business/Student/StudentDao/StudentDao.go | 42 ++++++- .../Student/StudentModel/StudentModel.go | 24 +++- .../Student/StudentService/StudentService.go | 9 +- .../TeacherController/TeacherController.go | 112 +++++++++++++++++- .../Business/Teacher/TeacherDao/TeacherDao.go | 40 +++++++ .../Teacher/TeacherModel/TeacherModel.go | 13 +- .../Teacher/TeacherService/TeacherService.go | 5 + 11 files changed, 341 insertions(+), 12 deletions(-) diff --git a/dsBigData/Business/School/SchoolDao/SchoolDao.go b/dsBigData/Business/School/SchoolDao/SchoolDao.go index ad2b130d..5d24dec4 100644 --- a/dsBigData/Business/School/SchoolDao/SchoolDao.go +++ b/dsBigData/Business/School/SchoolDao/SchoolDao.go @@ -12,6 +12,41 @@ import ( 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 +} + /** 功能:根据区编码获取该区下的学校列表 作者:吴缤 diff --git a/dsBigData/Business/School/SchoolModel/SchoolModel.go b/dsBigData/Business/School/SchoolModel/SchoolModel.go index 9abecd36..d526bf1c 100644 --- a/dsBigData/Business/School/SchoolModel/SchoolModel.go +++ b/dsBigData/Business/School/SchoolModel/SchoolModel.go @@ -5,6 +5,11 @@ type School struct { SchoolName string `json:"school_name"` } +type EduAssist struct { + EduAssistId string `json:"eduassist_id"` + EduAssistName string `json:"eduassist_name"` +} + type EduAssistCountAggsDistrict struct { AreaCode string `json:"area_code"` Count string `json:"count"` diff --git a/dsBigData/Business/School/SchoolService/SchoolService.go b/dsBigData/Business/School/SchoolService/SchoolService.go index 362bc464..c4f26e28 100644 --- a/dsBigData/Business/School/SchoolService/SchoolService.go +++ b/dsBigData/Business/School/SchoolService/SchoolService.go @@ -16,6 +16,11 @@ func PageSchoolInfoByDistrictCode(districtCode string, xxbxlxm string) ([]School return arr, err } +func PageEduAssistInfoByDistrictCode(districtCode string) ([]SchoolModel.EduAssist, error) { + arr, err := SchoolDao.PageEduAssistInfoByDistrictCode(districtCode) + return arr, err +} + /** 功能:聚合区统计学校数量 作者:吴缤 diff --git a/dsBigData/Business/Student/StudentController/StudentController.go b/dsBigData/Business/Student/StudentController/StudentController.go index 0f8aca5e..340fefb8 100644 --- a/dsBigData/Business/Student/StudentController/StudentController.go +++ b/dsBigData/Business/Student/StudentController/StudentController.go @@ -17,12 +17,66 @@ func Routers(r *gin.RouterGroup) { rr := r.Group("/student") rr.GET("/GetStudentCountAggsXxbxlxByArea", GetStudentCountAggsXxbxlxByArea) + rr.GET("/GetStudentCountAggsOrgByDistrict", GetStudentCountAggsOrgByDistrict) return } /* -功能:根据市或区的编码聚合办学类型获取学生数量 +功能:根据区编码聚合学校获取学生数量 +*/ +func GetStudentCountAggsOrgByDistrict(c *gin.Context) { + districtCode := c.Query("districtCode") + + //获取学校的数组 + schoolArr := make([]string, 0) + schoolInfo, err := SchoolService.PageSchoolInfoByDistrictCode(districtCode, "-1") + if err != nil { + c.JSON(http.StatusOK, Model.Res{ + Success: false, + Message: err.Error(), + }) + return + } + for i := range schoolInfo { + schoolArr = append(schoolArr, schoolInfo[i].SchoolId) + } + + resArr, err := StudentService.GetStudentCountAggsOrgId(schoolArr) + if err != nil { + c.JSON(http.StatusOK, Model.Res{ + Success: false, + Message: err.Error(), + }) + return + } + + resMap := make(map[string]int) + for i := range resArr { + resMap[resArr[i].OrgId] = resArr[i].Count + } + + StudentCountOrgArr := make([]StudentModel.StudentCountOrg, 0) + for i := range schoolInfo { + var studentCountOrg StudentModel.StudentCountOrg + schoolId := schoolInfo[i].SchoolId + studentCountOrg.OrgId = schoolId + studentCountOrg.OrgName = schoolInfo[i].SchoolName + if _, ok := resMap[schoolId]; ok { + studentCountOrg.Count = resMap[schoolId] + } + StudentCountOrgArr = append(StudentCountOrgArr, studentCountOrg) + } + + c.JSON(http.StatusOK, Model.Res{ + Success: true, + List: StudentCountOrgArr, + }) + +} + +/* +功能:根据地区编码聚合办学类型获取学生数量 */ func GetStudentCountAggsXxbxlxByArea(c *gin.Context) { areaCode := c.Query("areaCode") @@ -82,7 +136,7 @@ func GetStudentCountAggsXxbxlxByArea(c *gin.Context) { xxbxlxArr = append(xxbxlxArr, xxbxlxInfo[i].DictCode) } - resArr, err := StudentService.GetStudentCountAggsXxbxlxByCityOrDistrict(districtArr, schoolArr, xxbxlxArr) + resArr, err := StudentService.GetStudentCountAggsXxbxlx(districtArr, schoolArr, xxbxlxArr) if err != nil { c.JSON(http.StatusOK, Model.Res{ Success: false, @@ -96,9 +150,9 @@ func GetStudentCountAggsXxbxlxByArea(c *gin.Context) { resMap[resArr[i].XxbxlxCode] = resArr[i].Count } - StudentCountArr := make([]StudentModel.StudentCount, 0) + StudentCountArr := make([]StudentModel.StudentCountXxbxlx, 0) for i := range xxbxlxInfo { - var studentCount StudentModel.StudentCount + var studentCount StudentModel.StudentCountXxbxlx dictCode := xxbxlxInfo[i].DictCode studentCount.XxbxlxCode = dictCode studentCount.XxbxlxName = xxbxlxInfo[i].DictValue @@ -112,5 +166,4 @@ func GetStudentCountAggsXxbxlxByArea(c *gin.Context) { Success: true, List: StudentCountArr, }) - } diff --git a/dsBigData/Business/Student/StudentDao/StudentDao.go b/dsBigData/Business/Student/StudentDao/StudentDao.go index cda170b1..c08151a4 100644 --- a/dsBigData/Business/Student/StudentDao/StudentDao.go +++ b/dsBigData/Business/Student/StudentDao/StudentDao.go @@ -12,7 +12,7 @@ import ( var esClient = EsUtil.EsClient var CTX = EsUtil.CTX -func GetStudentCountAggsXxbxlxByCityOrDistrict(districtCode []string, schoolIds []string, xxbxlxs []string) ([]StudentModel.StudentCountAggsXxbxlx, error) { +func GetStudentCountAggsXxbxlx(districtCode []string, schoolIds []string, xxbxlxs []string) ([]StudentModel.StudentCountAggsXxbxlx, error) { enableFlagTerm := elastic.NewTermQuery("enable_flag", 1) delFlagTerm := elastic.NewTermQuery("del_flag", 0) bUseTerm := elastic.NewTermQuery("data_content.b_use", 1) @@ -62,3 +62,43 @@ func GetStudentCountAggsXxbxlxByCityOrDistrict(districtCode []string, schoolIds return studentCountAggsXxbxlxArr, nil } + +func GetStudentCountAggsOrgId(schoolIds []string) ([]StudentModel.StudentCountAggsOrg, error) { + enableFlagTerm := elastic.NewTermQuery("enable_flag", 1) + delFlagTerm := elastic.NewTermQuery("del_flag", 0) + bUseTerm := elastic.NewTermQuery("data_content.b_use", 1) + interfaceArr := CommonUtil.ConvertStringArrToInterfaceArr(schoolIds) + orgIdTerms := elastic.NewTermsQuery("org_id", interfaceArr...) + + boolQuery := elastic.NewBoolQuery().Must(orgIdTerms, enableFlagTerm, delFlagTerm, bUseTerm, orgIdTerms) + + orgIdAggs := elastic. + NewTermsAggregation(). + Field("org_id"). + Size(1000) + + result, err := esClient.Search(). + Index("user_student"). + Query(boolQuery). + Size(1000). + Aggregation("orgId", orgIdAggs). + Do(CTX) + + if err != nil { + return nil, err + } + + resByte, err := json.Marshal(result.Aggregations) + resStr := string(resByte) + + var StudentCountAggsOrgArr []StudentModel.StudentCountAggsOrg + resCount := gjson.Get(resStr, "orgId.buckets.#") + for i := 0; i < int(resCount.Num); i++ { + var studentCountAggsOrg StudentModel.StudentCountAggsOrg + studentCountAggsOrg.OrgId = gjson.Get(resStr, "orgId.buckets."+CommonUtil.ConvertIntToString(i)+".key").Str + studentCountAggsOrg.Count = int(gjson.Get(resStr, "orgId.buckets."+CommonUtil.ConvertIntToString(i)+".doc_count").Num) + + StudentCountAggsOrgArr = append(StudentCountAggsOrgArr, studentCountAggsOrg) + } + return StudentCountAggsOrgArr, nil +} diff --git a/dsBigData/Business/Student/StudentModel/StudentModel.go b/dsBigData/Business/Student/StudentModel/StudentModel.go index 41e2bb4d..187d4c61 100644 --- a/dsBigData/Business/Student/StudentModel/StudentModel.go +++ b/dsBigData/Business/Student/StudentModel/StudentModel.go @@ -5,8 +5,30 @@ type StudentCountAggsXxbxlx struct { Count int `json:"count"` } -type StudentCount struct { +type StudentCountXxbxlx struct { XxbxlxCode string `json:"xxbxlx_code"` XxbxlxName string `json:"xxbxlx_name"` Count int `json:"count"` } + +type StudentCountAggsOrg struct { + OrgId string `json:"org_id"` + Count int `json:"count"` +} + +type StudentCountOrg struct { + OrgId string `json:"org_id"` + OrgName string `json:"org_name"` + Count int `json:"count"` +} + +type StudentCountAggsRxnf struct { + OrgId string `json:"org_id"` + Count int `json:"count"` +} + +type StudentCountRxnf struct { + OrgId string `json:"org_id"` + OrgName string `json:"org_name"` + Count int `json:"count"` +} \ No newline at end of file diff --git a/dsBigData/Business/Student/StudentService/StudentService.go b/dsBigData/Business/Student/StudentService/StudentService.go index 05fd9f12..0f4b4c90 100644 --- a/dsBigData/Business/Student/StudentService/StudentService.go +++ b/dsBigData/Business/Student/StudentService/StudentService.go @@ -5,7 +5,12 @@ import ( "dsBigData/Business/Student/StudentModel" ) -func GetStudentCountAggsXxbxlxByCityOrDistrict(districtCodes []string, schoolIds []string, xxbxlxs []string) ([]StudentModel.StudentCountAggsXxbxlx, error) { - arr, err := StudentDao.GetStudentCountAggsXxbxlxByCityOrDistrict(districtCodes, schoolIds, xxbxlxs) +func GetStudentCountAggsXxbxlx(districtCodes []string, schoolIds []string, xxbxlxs []string) ([]StudentModel.StudentCountAggsXxbxlx, error) { + arr, err := StudentDao.GetStudentCountAggsXxbxlx(districtCodes, schoolIds, xxbxlxs) + return arr, err +} + +func GetStudentCountAggsOrgId(schoolIds []string) ([]StudentModel.StudentCountAggsOrg, error) { + arr, err := StudentDao.GetStudentCountAggsOrgId(schoolIds) return arr, err } diff --git a/dsBigData/Business/Teacher/TeacherController/TeacherController.go b/dsBigData/Business/Teacher/TeacherController/TeacherController.go index 945767dd..3a17e125 100644 --- a/dsBigData/Business/Teacher/TeacherController/TeacherController.go +++ b/dsBigData/Business/Teacher/TeacherController/TeacherController.go @@ -17,10 +17,118 @@ func Routers(r *gin.RouterGroup) { rr := r.Group("/teacher") rr.GET("/GetTeacherCountAggsXxbxlxByArea", GetTeacherCountAggsXxbxlxByArea) + rr.GET("/GetTeacherCountAggsOrgByDistrict", GetTeacherCountAggsSchoolByDistrict) + rr.GET("/GetTeacherCountAggsEduAssistByDistrict", GetTeacherCountAggsEduAssistByDistrict) return } +/* +功能:根据区编码聚合教辅单位获取教师数量 +*/ +func GetTeacherCountAggsEduAssistByDistrict(c *gin.Context) { + districtCode := c.Query("districtCode") + + //获取教辅单位的数组 + eduAssistArr := make([]string, 0) + eduAssistInfo, err := SchoolService.PageEduAssistInfoByDistrictCode(districtCode) + if err != nil { + c.JSON(http.StatusOK, Model.Res{ + Success: false, + Message: err.Error(), + }) + return + } + for i := range eduAssistInfo { + eduAssistArr = append(eduAssistArr, eduAssistInfo[i].EduAssistId) + } + + resArr, err := TeacherService.GetTeacherCountAggsOrgId(eduAssistArr) + if err != nil { + c.JSON(http.StatusOK, Model.Res{ + Success: false, + Message: err.Error(), + }) + return + } + + resMap := make(map[string]int) + for i := range resArr { + resMap[resArr[i].OrgId] = resArr[i].Count + } + + teacherCountOrgArr := make([]TeacherModel.TeacherCountOrg, 0) + for i := range eduAssistInfo { + var teacherCountOrg TeacherModel.TeacherCountOrg + eduAssistId := eduAssistInfo[i].EduAssistId + teacherCountOrg.OrgId = eduAssistId + teacherCountOrg.OrgName = eduAssistInfo[i].EduAssistName + if _, ok := resMap[eduAssistId]; ok { + teacherCountOrg.Count = resMap[eduAssistId] + } + teacherCountOrgArr = append(teacherCountOrgArr, teacherCountOrg) + } + + c.JSON(http.StatusOK, Model.Res{ + Success: true, + List: teacherCountOrgArr, + }) + +} + +/* +功能:根据区编码聚合学校获取教师数量 +*/ +func GetTeacherCountAggsSchoolByDistrict(c *gin.Context) { + districtCode := c.Query("districtCode") + + //获取学校的数组 + schoolArr := make([]string, 0) + schoolInfo, err := SchoolService.PageSchoolInfoByDistrictCode(districtCode, "-1") + if err != nil { + c.JSON(http.StatusOK, Model.Res{ + Success: false, + Message: err.Error(), + }) + return + } + for i := range schoolInfo { + schoolArr = append(schoolArr, schoolInfo[i].SchoolId) + } + + resArr, err := TeacherService.GetTeacherCountAggsOrgId(schoolArr) + if err != nil { + c.JSON(http.StatusOK, Model.Res{ + Success: false, + Message: err.Error(), + }) + return + } + + resMap := make(map[string]int) + for i := range resArr { + resMap[resArr[i].OrgId] = resArr[i].Count + } + + teacherCountOrgArr := make([]TeacherModel.TeacherCountOrg, 0) + for i := range schoolInfo { + var teacherCountOrg TeacherModel.TeacherCountOrg + schoolId := schoolInfo[i].SchoolId + teacherCountOrg.OrgId = schoolId + teacherCountOrg.OrgName = schoolInfo[i].SchoolName + if _, ok := resMap[schoolId]; ok { + teacherCountOrg.Count = resMap[schoolId] + } + teacherCountOrgArr = append(teacherCountOrgArr, teacherCountOrg) + } + + c.JSON(http.StatusOK, Model.Res{ + Success: true, + List: teacherCountOrgArr, + }) + +} + /* 功能:根据市或区的编码聚合办学类型获取学生数量 */ @@ -96,9 +204,9 @@ func GetTeacherCountAggsXxbxlxByArea(c *gin.Context) { resMap[resArr[i].XxbxlxCode] = resArr[i].Count } - TeacherCountArr := make([]TeacherModel.TeacherCount, 0) + TeacherCountArr := make([]TeacherModel.TeacherCountXxbxlx, 0) for i := range xxbxlxInfo { - var teacherCount TeacherModel.TeacherCount + var teacherCount TeacherModel.TeacherCountXxbxlx dictCode := xxbxlxInfo[i].DictCode teacherCount.XxbxlxCode = dictCode teacherCount.XxbxlxName = xxbxlxInfo[i].DictValue diff --git a/dsBigData/Business/Teacher/TeacherDao/TeacherDao.go b/dsBigData/Business/Teacher/TeacherDao/TeacherDao.go index ca4a695c..b534e005 100644 --- a/dsBigData/Business/Teacher/TeacherDao/TeacherDao.go +++ b/dsBigData/Business/Teacher/TeacherDao/TeacherDao.go @@ -62,3 +62,43 @@ func GetTeacherCountAggsXxbxlxByCityOrDistrict(districtCode []string, schoolIds return teacherCountAggsXxbxlxArr, nil } + +func GetTeacherCountAggsOrgId(schoolIds []string) ([]TeacherModel.TeacherCountAggsOrg, error) { + enableFlagTerm := elastic.NewTermQuery("enable_flag", 1) + delFlagTerm := elastic.NewTermQuery("del_flag", 0) + bUseTerm := elastic.NewTermQuery("data_content.b_use", 1) + interfaceArr := CommonUtil.ConvertStringArrToInterfaceArr(schoolIds) + orgIdTerms := elastic.NewTermsQuery("org_id", interfaceArr...) + + boolQuery := elastic.NewBoolQuery().Must(orgIdTerms, enableFlagTerm, delFlagTerm, bUseTerm, orgIdTerms) + + orgIdAggs := elastic. + NewTermsAggregation(). + Field("org_id"). + Size(1000) + + result, err := esClient.Search(). + Index("user_teacher"). + Query(boolQuery). + Size(1000). + Aggregation("orgId", orgIdAggs). + Do(CTX) + + if err != nil { + return nil, err + } + + resByte, err := json.Marshal(result.Aggregations) + resStr := string(resByte) + + var teacherCountAggsOrgArr []TeacherModel.TeacherCountAggsOrg + resCount := gjson.Get(resStr, "orgId.buckets.#") + for i := 0; i < int(resCount.Num); i++ { + var teacherCountAggsOrg TeacherModel.TeacherCountAggsOrg + teacherCountAggsOrg.OrgId = gjson.Get(resStr, "orgId.buckets."+CommonUtil.ConvertIntToString(i)+".key").Str + teacherCountAggsOrg.Count = int(gjson.Get(resStr, "orgId.buckets."+CommonUtil.ConvertIntToString(i)+".doc_count").Num) + + teacherCountAggsOrgArr = append(teacherCountAggsOrgArr, teacherCountAggsOrg) + } + return teacherCountAggsOrgArr, nil +} diff --git a/dsBigData/Business/Teacher/TeacherModel/TeacherModel.go b/dsBigData/Business/Teacher/TeacherModel/TeacherModel.go index 1d22b508..23103130 100644 --- a/dsBigData/Business/Teacher/TeacherModel/TeacherModel.go +++ b/dsBigData/Business/Teacher/TeacherModel/TeacherModel.go @@ -5,9 +5,20 @@ type TeacherCountAggsXxbxlx struct { Count int `json:"count"` } -type TeacherCount struct { +type TeacherCountXxbxlx struct { XxbxlxCode string `json:"xxbxlx_code"` XxbxlxName string `json:"xxbxlx_name"` Count int `json:"count"` } +type TeacherCountAggsOrg struct { + OrgId string `json:"org_id"` + Count int `json:"count"` +} + +type TeacherCountOrg struct { + OrgId string `json:"org_id"` + OrgName string `json:"org_name"` + Count int `json:"count"` +} + diff --git a/dsBigData/Business/Teacher/TeacherService/TeacherService.go b/dsBigData/Business/Teacher/TeacherService/TeacherService.go index ffd633f4..5e3eb913 100644 --- a/dsBigData/Business/Teacher/TeacherService/TeacherService.go +++ b/dsBigData/Business/Teacher/TeacherService/TeacherService.go @@ -9,3 +9,8 @@ func GetTeacherCountAggsXxbxlxByCityOrDistrict(districtCodes []string, schoolIds arr, err := TeacherDao.GetTeacherCountAggsXxbxlxByCityOrDistrict(districtCodes, schoolIds, xxbxlxs) return arr, err } + +func GetTeacherCountAggsOrgId(schoolIds []string) ([]TeacherModel.TeacherCountAggsOrg, error) { + arr, err := TeacherDao.GetTeacherCountAggsOrgId(schoolIds) + return arr, err +}