From d8f005cadd1e73748524a2459f2bf7421436a362 Mon Sep 17 00:00:00 2001 From: DengBiao <2319963317@qq.com> Date: Fri, 22 Sep 2023 16:42:55 +0800 Subject: [PATCH] update --- .../hdl_central_kitchen_for_school.go | 56 +++++- app/admin/hdl/hdl_data_statistics.go | 32 +++ ...ntral_kitchen_for_school_export_records.go | 8 + app/admin/md/md_enterprise.go | 15 ++ .../svc_central_kitchen_for_school.go | 52 +++++ app/admin/svc/svc_data_statisstics.go | 183 ++++++++++++++++++ ...ntral_kitchen_for_school_export_records.go | 2 +- app/router/admin_router.go | 40 ++-- 8 files changed, 367 insertions(+), 21 deletions(-) diff --git a/app/admin/hdl/enterprise_manage/hdl_central_kitchen_for_school.go b/app/admin/hdl/enterprise_manage/hdl_central_kitchen_for_school.go index ba15316..879470b 100644 --- a/app/admin/hdl/enterprise_manage/hdl_central_kitchen_for_school.go +++ b/app/admin/hdl/enterprise_manage/hdl_central_kitchen_for_school.go @@ -231,6 +231,60 @@ func CentralKitchenForSchoolStudentAdmission(c *gin.Context) { return } +func CentralKitchenForSchoolBatchStudentAdmission(c *gin.Context) { + Kind := c.DefaultQuery("kind", "1") + switch Kind { + case "1": + //按学校 + var req md.CentralKitchenForSchoolStudentAdmissionBySchool + err := c.ShouldBindJSON(&req) + if err != nil { + err = validate.HandleValidateErr(err) + err1 := err.(e.E) + e.OutErr(c, err1.Code, err1.Error()) + return + } + err = svc2.CentralKitchenForSchoolStudentAdmissionBySchool(req) + if err != nil { + e.OutErr(c, e.ERR, err.Error()) + return + } + break + case "2": + //按年级 + var req md.CentralKitchenForSchoolStudentAdmissionByGrade + err := c.ShouldBindJSON(&req) + if err != nil { + err = validate.HandleValidateErr(err) + err1 := err.(e.E) + e.OutErr(c, err1.Code, err1.Error()) + return + } + err = svc2.CentralKitchenForSchoolStudentAdmissionByGrade(req) + if err != nil { + e.OutErr(c, e.ERR, err.Error()) + return + } + break + case "3": + //按班级 + var req md.CentralKitchenForSchoolStudentAdmissionByClass + err := c.ShouldBindJSON(&req) + if err != nil { + err = validate.HandleValidateErr(err) + err1 := err.(e.E) + e.OutErr(c, err1.Code, err1.Error()) + return + } + err = svc2.CentralKitchenForSchoolStudentAdmissionByClass(req) + if err != nil { + e.OutErr(c, e.ERR, err.Error()) + return + } + break + } +} + func CentralKitchenForSchoolStudentDelete(c *gin.Context) { var req md.CentralKitchenForSchoolStudentDeleteReq err := c.ShouldBindJSON(&req) @@ -1039,6 +1093,7 @@ func CentralKitchenForSchoolBatchAskForLeave(c *gin.Context) { Kind := c.DefaultQuery("kind", "1") switch Kind { case "1": + //按学校 var req md.CentralKitchenForSchoolBatchAskForLeaveReqBySchool err := c.ShouldBindJSON(&req) if err != nil { @@ -1052,7 +1107,6 @@ func CentralKitchenForSchoolBatchAskForLeave(c *gin.Context) { e.OutErr(c, e.ERR, err.Error()) return } - //按学校 break case "2": //按年级 diff --git a/app/admin/hdl/hdl_data_statistics.go b/app/admin/hdl/hdl_data_statistics.go index e83296b..904e9d2 100644 --- a/app/admin/hdl/hdl_data_statistics.go +++ b/app/admin/hdl/hdl_data_statistics.go @@ -70,6 +70,10 @@ func CentralKitchenForSchoolDataStatisticsList(c *gin.Context) { "name": "学校预定数量统计表", "value": 8, }, + { + "name": "数据对比", + "value": 9, + }, }, }, nil) return @@ -125,6 +129,34 @@ func CentralKitchenForSchoolDataStatisticsExport(c *gin.Context) { return } +func CentralKitchenForSchoolDataStatisticsContrast(c *gin.Context) { + var req md.CentralKitchenForSchoolDataStatisticsContrastReq + err := c.ShouldBindJSON(&req) + if err != nil { + err = validate.HandleValidateErr(err) + err1 := err.(e.E) + e.OutErr(c, err1.Code, err1.Error()) + return + } + if req.EnterpriseId != 0 { + enterpriseDb := db.EnterpriseDb{} + enterpriseDb.Set() + enterprise, err1 := enterpriseDb.GetEnterprise(req.EnterpriseId) + if err1 != nil { + e.OutErr(c, e.ERR_DB_ORM, err1.Error()) + return + } + req.EnterpriseName = enterprise.Name + } + + go svc.CentralKitchenForSchoolDataStatisticsContrast(req) + + e.OutSuc(c, map[string]interface{}{ + "msg": "导出成功,请稍后刷新数据列表", + }, nil) + return +} + func NursingHomeDataStatisticsList(c *gin.Context) { var req md.NursingHomeExportRecordsListReq err := c.ShouldBindJSON(&req) diff --git a/app/admin/md/md_central_kitchen_for_school_export_records.go b/app/admin/md/md_central_kitchen_for_school_export_records.go index e4ab5d6..972d0d1 100644 --- a/app/admin/md/md_central_kitchen_for_school_export_records.go +++ b/app/admin/md/md_central_kitchen_for_school_export_records.go @@ -17,6 +17,14 @@ type CentralKitchenForSchoolDataStatisticsExportReq struct { EnterpriseName string `json:"enterprise_name" label:"校企名称"` } +type CentralKitchenForSchoolDataStatisticsContrastReq struct { + Date1 []string `json:"date_1" binding:"required" label:"起始时间"` + Date2 []string `json:"date_2" binding:"required" label:"截止时间"` + MealKindList []int `json:"meal_kind_list" label:"就餐类型(1:早餐 2:午餐 3:晚餐)"` + EnterpriseId int `json:"enterprise_id" label:"校企id"` + EnterpriseName string `json:"enterprise_name" label:"校企名称"` +} + type NursingHomeExportRecordsListReq struct { Page int `json:"page" label:"页码"` Kind int `json:"kind" label:"导出类型"` diff --git a/app/admin/md/md_enterprise.go b/app/admin/md/md_enterprise.go index 77c3cc9..5e07928 100644 --- a/app/admin/md/md_enterprise.go +++ b/app/admin/md/md_enterprise.go @@ -108,3 +108,18 @@ type CentralKitchenForSchoolPackageForSystemWithDay struct { IsOpenDinner int `json:"is_open_dinner"` IsOpenReplenish int `json:"is_open_replenish"` } + +type CentralKitchenForSchoolStudentAdmissionBySchool struct { + EnterpriseIds []int `json:"enterprise_ids" binding:"required" label:"企业id"` +} + +type CentralKitchenForSchoolStudentAdmissionByGrade struct { + EnterpriseId int `json:"enterprise_id" binding:"required" label:"企业id"` + GradeIds []int `json:"grade_ids" binding:"required" label:"年级id"` +} + +type CentralKitchenForSchoolStudentAdmissionByClass struct { + EnterpriseId int `json:"enterprise_id" binding:"required" label:"企业id"` + GradeId int `json:"grade_id" binding:"required" label:"年级id"` + ClassIds []int `json:"class_ids" label:"班级id"` +} diff --git a/app/admin/svc/enterprise_manage/svc_central_kitchen_for_school.go b/app/admin/svc/enterprise_manage/svc_central_kitchen_for_school.go index ecc8fab..8097352 100644 --- a/app/admin/svc/enterprise_manage/svc_central_kitchen_for_school.go +++ b/app/admin/svc/enterprise_manage/svc_central_kitchen_for_school.go @@ -534,6 +534,58 @@ func CentralKitchenForSchoolStudentAdmission(req md.CentralKitchenForSchoolStude return } +func CentralKitchenForSchoolStudentAdmissionByClass(req md.CentralKitchenForSchoolStudentAdmissionByClass) (err error) { + // 删除 class_with_user 记录 + _, err = db.Db.In("class_id = ?", req.ClassIds).Delete(model.ClassWithUser{}) + return +} + +func CentralKitchenForSchoolStudentAdmissionByGrade(req md.CentralKitchenForSchoolStudentAdmissionByGrade) (err error) { + for _, v := range req.GradeIds { + // 查找班级记录 + classDb := db.ClassDb{} + classDb.Set(v) + classes, err1 := classDb.FindClass() + if err1 != nil { + return err1 + } + var classesIds []int + for _, v := range *classes { + classesIds = append(classesIds, v.Id) + } + + // 删除 class_with_user 记录 + _, err = db.Db.In("class_id", classesIds).Delete(model.ClassWithUser{}) + if err != nil { + return + } + } + return +} + +func CentralKitchenForSchoolStudentAdmissionBySchool(req md.CentralKitchenForSchoolStudentAdmissionBySchool) (err error) { + for _, v := range req.EnterpriseIds { + // 查找班级记录 + classDb := db.ClassDb{} + classDb.Set(0) + classes, err1 := classDb.FindClassByEnterprise(v) + if err1 != nil { + return err1 + } + var classesIds []int + for _, v := range *classes { + classesIds = append(classesIds, v.Id) + } + + // 删除 class_with_user 记录 + _, err = db.Db.In("class_id", classesIds).Delete(model.ClassWithUser{}) + if err != nil { + return + } + } + return +} + func CentralKitchenForSchoolOrdList(req md.CentralKitchenForSchoolOrdListReq) (resp []md.CentralKitchenForSchoolOrdListResp, count int64, err error) { var classWithUserIdentityIdsOne []int var classWithUserIdentityIdsTwo []int diff --git a/app/admin/svc/svc_data_statisstics.go b/app/admin/svc/svc_data_statisstics.go index f43699d..2cf1ed3 100644 --- a/app/admin/svc/svc_data_statisstics.go +++ b/app/admin/svc/svc_data_statisstics.go @@ -1328,6 +1328,189 @@ func CentralKitchenForSchoolDataStatisticsExport(req md.CentralKitchenForSchoolD } } +func CentralKitchenForSchoolDataStatisticsContrast(req md.CentralKitchenForSchoolDataStatisticsContrastReq) { + var titleList []string + var fileName, downloadPath string + var now = time.Now() + + xlsx := excelize.NewFile() + //数据对比 + fileName = "数据对比_" + utils.Int64ToStr(now.UnixMilli()) + ".zip" + downloadPath = "/export/central_kitchen_for_school/" + fileName + + var m []*db.CentralKitchenForSchoolPackageOrdForReserveWithUserIdentity + sess := db.Db.Desc("central_kitchen_for_school_package_ord_for_reserve.id") + if req.EnterpriseId != 0 { + sess.And("central_kitchen_for_school_package_ord_for_reserve.enterprise_id =?", req.EnterpriseId) + } + sess.And("central_kitchen_for_school_package_ord_for_reserve.meal_time_start >= ?", req.Date1[0]) + sess.And("central_kitchen_for_school_package_ord_for_reserve.meal_time_start <= ?", req.Date1[1]) + if len(req.MealKindList) > 0 { + sess.In("central_kitchen_for_school_package_ord_for_reserve.kind", req.MealKindList) + } + _, err := sess. + Join("LEFT", "central_kitchen_for_school_package_ord", "central_kitchen_for_school_package_ord_for_reserve.out_trade_no = central_kitchen_for_school_package_ord.out_trade_no"). + Join("LEFT", "user_identity", "central_kitchen_for_school_package_ord.user_identity_id = user_identity.id"). + Join("LEFT", "enterprise", "enterprise.id = user_identity.enterprise_id"). + Join("LEFT", "user", "user.id = user_identity.uid"). + Join("LEFT", "class_with_user", "class_with_user.user_identity_id = user_identity.id"). + Join("LEFT", "class", "class_with_user.class_id = class.id"). + Join("LEFT", "grade", "class.grade_id = grade.id"). + FindAndCount(&m) + if err != nil { + logx.Error(err) + println("<<<>>>>Error:::", err.Error()) + return + } + + var m1 []*db.CentralKitchenForSchoolPackageOrdForReserveWithUserIdentity + sess1 := db.Db.Desc("central_kitchen_for_school_package_ord_for_reserve.id") + if req.EnterpriseId != 0 { + sess1.And("central_kitchen_for_school_package_ord_for_reserve.enterprise_id =?", req.EnterpriseId) + } + sess1.And("central_kitchen_for_school_package_ord_for_reserve.meal_time_start >= ?", req.Date2[0]) + sess1.And("central_kitchen_for_school_package_ord_for_reserve.meal_time_start <= ?", req.Date2[1]) + if len(req.MealKindList) > 0 { + sess1.In("central_kitchen_for_school_package_ord_for_reserve.kind", req.MealKindList) + } + _, err1 := sess1. + Join("LEFT", "central_kitchen_for_school_package_ord", "central_kitchen_for_school_package_ord_for_reserve.out_trade_no = central_kitchen_for_school_package_ord.out_trade_no"). + Join("LEFT", "user_identity", "central_kitchen_for_school_package_ord.user_identity_id = user_identity.id"). + Join("LEFT", "enterprise", "enterprise.id = user_identity.enterprise_id"). + Join("LEFT", "user", "user.id = user_identity.uid"). + Join("LEFT", "class_with_user", "class_with_user.user_identity_id = user_identity.id"). + Join("LEFT", "class", "class_with_user.class_id = class.id"). + Join("LEFT", "grade", "class.grade_id = grade.id"). + FindAndCount(&m) + if err1 != nil { + logx.Error(err1) + println("<<<>>>>Error:::", err.Error()) + return + } + + var list = map[string]map[string]map[string]map[string]string{} + for _, v := range m { + if list[v.Enterprise.Name] == nil { + list[v.Enterprise.Name] = make(map[string]map[string]map[string]string) + } + if list[v.Enterprise.Name][v.Grade.Name] == nil { + list[v.Enterprise.Name][v.Grade.Name] = make(map[string]map[string]string) + } + if list[v.Enterprise.Name][v.Grade.Name][v.Class.Name] == nil { + list[v.Enterprise.Name][v.Grade.Name][v.Class.Name] = make(map[string]string) + } + list[v.Enterprise.Name][v.Grade.Name][v.Class.Name][v.UserIdentity.Name] = v.User.Phone + } + + var list1 = map[string]map[string]map[string]map[string]string{} + for _, v := range m1 { + if list1[v.Enterprise.Name] == nil { + list1[v.Enterprise.Name] = make(map[string]map[string]map[string]string) + } + if list1[v.Enterprise.Name][v.Grade.Name] == nil { + list1[v.Enterprise.Name][v.Grade.Name] = make(map[string]map[string]string) + } + if list1[v.Enterprise.Name][v.Grade.Name][v.Class.Name] == nil { + list1[v.Enterprise.Name][v.Grade.Name][v.Class.Name] = make(map[string]string) + } + list1[v.Enterprise.Name][v.Grade.Name][v.Class.Name][v.UserIdentity.Name] = v.User.Phone + } + + var xlsFileName, xlsDownloadPath []string + for k1, v1 := range list { + tmpFileName := k1 + "数据对比_" + utils.Int64ToStr(now.UnixMilli()) + ".xlsx" + tmpDownloadPath := "./static/export/central_kitchen_for_school/" + tmpFileName + for k2, v2 := range v1 { + if k2 == "" { + //若年级为空,则为教师 + continue + } + + for k3, v3 := range v2 { + titleList = []string{"姓名", "家长联系电话"} + xlsx.NewSheet(k3) + xlsx.SetSheetRow(k3, "A1", &titleList) + j := 2 //表头被第一行用了,只能从第二行开始 + for k4, v4 := range v3 { + //TODO::判断当前用户是否在新的月份里面 + if list1[k1] == nil || list1[k1][k2] == nil || list1[k1][k2][k3] == nil || list1[k1][k2][k3][k4] == "" { + xlsx.SetSheetRow(k3, "A"+strconv.Itoa(j), &[]interface{}{ + k4, v4}) + j++ + } + } + } + } + + //将文件保存至服务器 + xlsx.DeleteSheet("Sheet1") //TODO::只能放这里删除 + err1 := xlsx.SaveAs(tmpDownloadPath) + if err1 != nil { + logx.Error(err1) + println("<<<>>>>Error:::", err1.Error()) + panic(err1) + } + xlsDownloadPath = append(xlsDownloadPath, tmpDownloadPath) + xlsFileName = append(xlsFileName, tmpFileName) + } + + archive, err := os.Create("./static" + downloadPath) //第一步,创建 zip 文件 + if err != nil { + logx.Error(err) + println("<<<>>>>Error:::", err.Error()) + panic(err) + } + defer archive.Close() + + zipWriter := zip.NewWriter(archive) //第二步,创建一个新的 *Writer 对象 + for k, v := range xlsDownloadPath { + w, err1 := zipWriter.Create("数据对比/" + xlsFileName[k]) //向 zip 文件中添加一个文件,返回一个待压缩的文件内容应写入的 Writer + if err1 != nil { + logx.Error(err1) + println("<<<>>>>Error:::", err1.Error()) + panic(err1) + } + + f, err1 := os.Open(v) //打开待压缩的文件 + if err1 != nil { + logx.Error(err1) + println("<<<>>>>Error:::", err1.Error()) + panic(err1) + } + + if _, err1 = io.Copy(w, f); err != nil { + logx.Error(err1) + println("<<<>>>>Error:::", err1.Error()) + panic(err1) + } + if err1 != nil { + logx.Error(err1) + println("<<<>>>>Error:::", err1.Error()) + panic(err1) + } + f.Close() + os.RemoveAll(v) //TODO::移除源文件 + } + + zipWriter.Close() // 第四步,关闭 zip writer,将所有数据写入指向基础 zip 文件的数据流 + if err != nil { + panic(err) + } + + //新增数据 + centralKitchenForSchoolExportRecordsDb := db.CentralKitchenForSchoolExportRecordsDb{} + centralKitchenForSchoolExportRecordsDb.Set() + marshal, _ := json.Marshal(req) + centralKitchenForSchoolExportRecordsDb.CentralKitchenForSchoolExportRecordsInsert(&model.CentralKitchenForSchoolExportRecords{ + Name: fileName, + DownloadPath: downloadPath, + Kind: 9, //数据对比 + ReqContent: string(marshal), + CreateAt: now.Format("2006-01-02 15:04:05"), + UpdateAt: now.Format("2006-01-02 15:04:05"), + }) +} + func JudgeSelfSupportForMealTime(mealDate string) (mealZh string) { mealZh = "未知" mealTime, _ := time.ParseInLocation("2006-01-02 15:04:05", mealDate, time.Local) diff --git a/app/db/model/central_kitchen_for_school_export_records.go b/app/db/model/central_kitchen_for_school_export_records.go index 9d1d177..6483adf 100644 --- a/app/db/model/central_kitchen_for_school_export_records.go +++ b/app/db/model/central_kitchen_for_school_export_records.go @@ -4,7 +4,7 @@ type CentralKitchenForSchoolExportRecords struct { Id int `json:"id" xorm:"not null pk autoincr INT(11)"` Name string `json:"name" xorm:"not null default '' comment('名称') VARCHAR(255)"` DownloadPath string `json:"download_path" xorm:"not null default '' comment('下载地址') VARCHAR(255)"` - Kind int `json:"kind" xorm:"not null default 0 comment('类型(1:订单列表 2:退款申请表 3:学校预定统计表 4:班级明细表 5:退款明细表 6:收款统计表 7:班级收款明细表 8:学校预定数量统计表)') TINYINT(1)"` + Kind int `json:"kind" xorm:"not null default 0 comment('类型(1:订单列表 2:退款申请表 3:学校预定统计表 4:班级明细表 5:退款明细表 6:收款统计表 7:班级收款明细表 8:学校预定数量统计表 9:数据对比)') TINYINT(1)"` ReqContent string `json:"req_content" xorm:"TEXT"` CreateAt string `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"` UpdateAt string `json:"update_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"` diff --git a/app/router/admin_router.go b/app/router/admin_router.go index fe8578c..d6070ea 100644 --- a/app/router/admin_router.go +++ b/app/router/admin_router.go @@ -109,6 +109,7 @@ func rDeviceManage(r *gin.RouterGroup) { func rDataStatistics(r *gin.RouterGroup) { r.POST("/centralKitchenForSchool/export", hdl2.CentralKitchenForSchoolDataStatisticsExport) //数据统计-(央厨-学校)-导出 + r.POST("/centralKitchenForSchool/contrast", hdl2.CentralKitchenForSchoolDataStatisticsContrast) //数据统计-(央厨-学校)-数据对比 r.POST("/centralKitchenForSchool/list", hdl2.CentralKitchenForSchoolDataStatisticsList) //数据统计-(央厨-学校)-列表 r.DELETE("/centralKitchenForSchool/delete/:id", hdl2.CentralKitchenForSchoolDataStatisticsDelete) //数据统计-(央厨-学校)-删除 @@ -159,25 +160,26 @@ func rEnterpriseManage(r *gin.RouterGroup) { r.POST("/centralKitchenForSchool/userUpdate", hdl.CentralKitchenForSchoolUserUpdate) //"央厨-学校"用户编辑 r.POST("/centralKitchenForSchool/userDelete", hdl.CentralKitchenForSchoolUserDelete) //"央厨-学校"用户删除 - r.POST("/centralKitchenForSchool/studentList", hdl.CentralKitchenForSchoolStudentList) //"央厨-学校"学生列表 - r.POST("/centralKitchenForSchool/studentUpdate", hdl.CentralKitchenForSchoolStudentUpdate) //"央厨-学校"学生编辑 - r.POST("/centralKitchenForSchool/studentDelete", hdl.CentralKitchenForSchoolStudentDelete) //"央厨-学校"学生删除 - r.POST("/centralKitchenForSchool/studentAdmission", hdl.CentralKitchenForSchoolStudentAdmission) //"央厨-学校"学生升学 - r.POST("/centralKitchenForSchool/teacherList", hdl.CentralKitchenForSchoolTeacherList) //"央厨-学校"教师列表 - r.POST("/centralKitchenForSchool/teacherUpdate", hdl.CentralKitchenForSchoolTeacherUpdate) //"央厨-学校"教师编辑 - r.POST("/centralKitchenForSchool/teacherDelete", hdl.CentralKitchenForSchoolTeacherDelete) //"央厨-学校"教师删除 - r.POST("/centralKitchenForSchool/gradeList", hdl.CentralKitchenForSchoolGradeList) //"央厨-学校"年级列表 - r.DELETE("/centralKitchenForSchool/gradeDelete/:id", hdl.CentralKitchenForSchoolGradeDelete) //"央厨-学校"年级删除 - r.POST("/centralKitchenForSchool/classList", hdl.CentralKitchenForSchoolClassList) //"央厨-学校"班级列表 - r.DELETE("/centralKitchenForSchool/classDelete/:id", hdl.CentralKitchenForSchoolClassDelete) //"央厨-学校"班级删除 - r.POST("/centralKitchenForSchool/ordList", hdl.CentralKitchenForSchoolOrdList) //"央厨-学校"订单列表 - r.GET("/centralKitchenForSchool/ordDetail", hdl.CentralKitchenForSchoolOrdDetail) //"央厨-学校"订单详情 - r.POST("/centralKitchenForSchool/ordRefund", hdl.CentralKitchenForSchoolOrdRefund) //"央厨-学校"订单退款 - r.POST("/centralKitchenForSchool/batchAskForLeave", hdl.CentralKitchenForSchoolBatchAskForLeave) //"央厨-学校"批量请假 - r.POST("/centralKitchenForSchool/reserveList", hdl.CentralKitchenForSchoolReserveList) //"央厨-学校"预定列表 - r.GET("/centralKitchenForSchool/reserveUpdateStudent", hdl.CentralKitchenForSchoolReserveUpdateStudent) //"央厨-学校"获取修改学生预定数据 - r.POST("/centralKitchenForSchool/reserveUpdateStudent", hdl.CentralKitchenForSchoolReserveUpdateStudent) //"央厨-学校"修改学生预定 - r.GET("/centralKitchenForSchool/reserveDetail", hdl.CentralKitchenForSchoolReserveDetail) //"央厨-学校"预定详情 + r.POST("/centralKitchenForSchool/studentList", hdl.CentralKitchenForSchoolStudentList) //"央厨-学校"学生列表 + r.POST("/centralKitchenForSchool/studentUpdate", hdl.CentralKitchenForSchoolStudentUpdate) //"央厨-学校"学生编辑 + r.POST("/centralKitchenForSchool/studentDelete", hdl.CentralKitchenForSchoolStudentDelete) //"央厨-学校"学生删除 + r.POST("/centralKitchenForSchool/batchStudentAdmission", hdl.CentralKitchenForSchoolBatchStudentAdmission) //"央厨-学校"学生升学 + r.POST("/centralKitchenForSchool/studentAdmission", hdl.CentralKitchenForSchoolStudentAdmission) //"央厨-学校"学生升学 + r.POST("/centralKitchenForSchool/teacherList", hdl.CentralKitchenForSchoolTeacherList) //"央厨-学校"教师列表 + r.POST("/centralKitchenForSchool/teacherUpdate", hdl.CentralKitchenForSchoolTeacherUpdate) //"央厨-学校"教师编辑 + r.POST("/centralKitchenForSchool/teacherDelete", hdl.CentralKitchenForSchoolTeacherDelete) //"央厨-学校"教师删除 + r.POST("/centralKitchenForSchool/gradeList", hdl.CentralKitchenForSchoolGradeList) //"央厨-学校"年级列表 + r.DELETE("/centralKitchenForSchool/gradeDelete/:id", hdl.CentralKitchenForSchoolGradeDelete) //"央厨-学校"年级删除 + r.POST("/centralKitchenForSchool/classList", hdl.CentralKitchenForSchoolClassList) //"央厨-学校"班级列表 + r.DELETE("/centralKitchenForSchool/classDelete/:id", hdl.CentralKitchenForSchoolClassDelete) //"央厨-学校"班级删除 + r.POST("/centralKitchenForSchool/ordList", hdl.CentralKitchenForSchoolOrdList) //"央厨-学校"订单列表 + r.GET("/centralKitchenForSchool/ordDetail", hdl.CentralKitchenForSchoolOrdDetail) //"央厨-学校"订单详情 + r.POST("/centralKitchenForSchool/ordRefund", hdl.CentralKitchenForSchoolOrdRefund) //"央厨-学校"订单退款 + r.POST("/centralKitchenForSchool/batchAskForLeave", hdl.CentralKitchenForSchoolBatchAskForLeave) //"央厨-学校"批量请假 + r.POST("/centralKitchenForSchool/reserveList", hdl.CentralKitchenForSchoolReserveList) //"央厨-学校"预定列表 + r.GET("/centralKitchenForSchool/reserveUpdateStudent", hdl.CentralKitchenForSchoolReserveUpdateStudent) //"央厨-学校"获取修改学生预定数据 + r.POST("/centralKitchenForSchool/reserveUpdateStudent", hdl.CentralKitchenForSchoolReserveUpdateStudent) //"央厨-学校"修改学生预定 + r.GET("/centralKitchenForSchool/reserveDetail", hdl.CentralKitchenForSchoolReserveDetail) //"央厨-学校"预定详情 r.POST("/centralKitchenForSchoolOrderRefundList", hdl2.CentralKitchenForSchoolOrderRefundList) //"央厨-学校"订单退款列表 //r.POST("/centralKitchenForSchoolOrderRefundAudit", hdl2.CentralKitchenForSchoolOrderRefundAudit) //"央厨-学校"订单退款审核