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.

170 lines
4.0 KiB

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"
"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)
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")
cityCode := ""
districtCode := ""
if strings.HasSuffix(areaCode, "00") { //市
cityCode = areaCode
} else { //区
districtCode = areaCode
}
//获取区的数组
districtArr := make([]string, 0)
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)
}
}
//获取学校的数组
schoolArr := make([]string, 0)
if len(districtCode) > 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)
}
}
//获取办学类型数组
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)
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].XxbxlxCode] = resArr[i].Count
}
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 := resMap[dictCode]; ok {
studentCount.Count = resMap[dictCode]
}
StudentCountArr = append(StudentCountArr, studentCount)
}
c.JSON(http.StatusOK, Model.Res{
Success: true,
List: StudentCountArr,
})
}