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.

225 lines
5.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
}
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")
//获取学校的数组
schoolArr := make([]string, 0)
schoolInfo, err := SchoolService.PageSchoolInfoByDistrictCode(districtCode, xxbxlx)
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")
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
}
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,
})
}