package StudentController import ( "dsBigData/Business/Area/AreaService" "dsBigData/Business/Dict/DictService" "dsBigData/Business/School/SchoolService" "dsBigData/Business/Student/StudentModel" "dsBigData/Business/Student/StudentService" "dsBigData/Model" "dsBigData/Utils/CommonUtil" "github.com/gin-gonic/gin" "net/http" "strings" ) //模块的路由配置 func Routers(r *gin.RouterGroup) { rr := r.Group("/student") rr.GET("/GetStudentCountAggsXxbxlxByArea", GetStudentCountAggsXxbxlxByArea) rr.GET("/GetStudentCountAggsOrgByDistrict", GetStudentCountAggsOrgByDistrict) rr.GET("/GetStudentCountAggsRxnfBySchoolId", GetStudentCountAggsRxnfBySchoolId) rr.GET("/GetStudentCountAggsXbBySchoolId", GetStudentCountAggsXbBySchoolId) return } /** 功能:根据学校ID聚合性别获取学生数量 */ func GetStudentCountAggsXbBySchoolId(c *gin.Context) { schoolId := c.Query("schoolId") resArr, err := StudentService.GetStudentCountAggsXb(schoolId) if err != nil { c.JSON(http.StatusOK, Model.Res{ Success: false, Message: err.Error(), }) return } for i := range resArr { if resArr[i].XbName == "1" { resArr[i].XbName = "男" } else { resArr[i].XbName = "女" } } c.JSON(http.StatusOK, Model.Res{ Success: true, List: resArr, }) } /** 功能:根据学校ID聚合入学年份获取学生数量 */ func GetStudentCountAggsRxnfBySchoolId(c *gin.Context) { stageId := c.Query("stageId") schoolId := c.Query("schoolId") studentCountRxnfArr, err := StudentService.GetStudentCountAggsRxnf(schoolId, stageId) if err != nil { c.JSON(http.StatusOK, Model.Res{ Success: false, Message: err.Error(), }) return } c.JSON(http.StatusOK, Model.Res{ Success: true, List: studentCountRxnfArr, }) } /* 功能:根据区编码聚合学校获取学生数量 */ func GetStudentCountAggsOrgByDistrict(c *gin.Context) { districtCode := c.Query("districtCode") //学校办学类型 -1:为全部 xxbxlx := c.Query("xxbxlx") directly := "" if strings.HasSuffix(districtCode, "00") { //市 directly = "1" } //获取学校的数组 schoolArr := make([]string, 0) schoolInfo, err := SchoolService.PageSchoolInfoByDistrictCode(districtCode, xxbxlx, directly) 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) } CommonUtil.SortItems(StudentCountOrgArr, "Count", "desc") c.JSON(http.StatusOK, Model.Res{ Success: true, List: StudentCountOrgArr, }) } /* 功能:根据地区编码聚合办学类型获取学生数量 */ func GetStudentCountAggsXxbxlxByArea(c *gin.Context) { areaCode := c.Query("areaCode") directly := c.Query("directly") cityCode := "" districtCode := "" if strings.HasSuffix(areaCode, "00") { //市 cityCode = areaCode } else { //区 districtCode = areaCode } //获取区的数组 districtArr := make([]string, 0) //directly=1说明获取的是中省市,不需要根据市编码获取区的数组 if directly == "1" { if len(cityCode) > 0 { //获取区信息 areaInfo, err := AreaService.PageDistrictByCityCode(cityCode, "-1") if err != nil { c.JSON(http.StatusOK, Model.Res{ Success: false, Message: err.Error(), }) return } for i := range areaInfo { districtArr = append(districtArr, areaInfo[i].AreaCode) } districtArr = append(districtArr, areaCode) } } //获取学校的数组 schoolArr := make([]string, 0) if len(districtCode) > 0 { schoolInfo, err := SchoolService.PageSchoolInfoByDistrictCode(districtCode, "-1", directly) 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) } } //获取办学类型数组 xxbxlxInfo, err := DictService.GetDictInfo("xxbxlxm") if err != nil { c.JSON(http.StatusOK, Model.Res{ Success: false, Message: err.Error(), }) return } xxbxlxArr := make([]string, 0) for i := range xxbxlxInfo { xxbxlxArr = append(xxbxlxArr, xxbxlxInfo[i].DictCode) } resArr, err := StudentService.GetStudentCountAggsXxbxlx(districtArr, schoolArr, xxbxlxArr, areaCode) if err != nil { c.JSON(http.StatusOK, Model.Res{ Success: false, Message: err.Error(), }) return } resMapCount := make(map[string]int) resMapPercent := make(map[string]string) for i := range resArr { resMapCount[resArr[i].XxbxlxCode] = resArr[i].Count resMapPercent[resArr[i].XxbxlxCode] = resArr[i].Percent } StudentCountArr := make([]StudentModel.StudentCountXxbxlx, 0) for i := range xxbxlxInfo { var studentCount StudentModel.StudentCountXxbxlx dictCode := xxbxlxInfo[i].DictCode studentCount.XxbxlxCode = dictCode studentCount.XxbxlxName = xxbxlxInfo[i].DictValue if _, ok := resMapCount[dictCode]; ok { studentCount.Count = resMapCount[dictCode] } if _, ok := resMapPercent[dictCode]; ok { studentCount.Percent = resMapPercent[dictCode] } StudentCountArr = append(StudentCountArr, studentCount) } c.JSON(http.StatusOK, Model.Res{ Success: true, List: StudentCountArr, }) }