From 44ebedd38a3b1b7833a661116636d3f2887032d1 Mon Sep 17 00:00:00 2001 From: DengBiao <2319963317@qq.com> Date: Mon, 30 Oct 2023 16:52:58 +0800 Subject: [PATCH] update --- app/admin/hdl/hdl_data_statistics.go | 4 + app/admin/svc/svc_data_statisstics.go | 98 ++++++++++++++++++ .../自营学校(就餐数据统计表).xlsx | Bin 0 -> 9116 bytes 3 files changed, 102 insertions(+) create mode 100644 static/template/自营学校(就餐数据统计表).xlsx diff --git a/app/admin/hdl/hdl_data_statistics.go b/app/admin/hdl/hdl_data_statistics.go index 79841cf..511e5f5 100644 --- a/app/admin/hdl/hdl_data_statistics.go +++ b/app/admin/hdl/hdl_data_statistics.go @@ -292,6 +292,10 @@ func SelfSupportForSchoolDataStatisticsList(c *gin.Context) { "name": "商家分餐数据统计表", "value": 2, }, + { + "name": "就餐数据统计表", + "value": 3, + }, }, }, nil) return diff --git a/app/admin/svc/svc_data_statisstics.go b/app/admin/svc/svc_data_statisstics.go index e6aa3ca..65a4f1d 100644 --- a/app/admin/svc/svc_data_statisstics.go +++ b/app/admin/svc/svc_data_statisstics.go @@ -377,6 +377,104 @@ func SelfSupportForSchoolDataStatisticsExport(req md.SelfSupportForSchoolDataSta data[vv.Enterprise.Name][shopName]["合计"]["amount"] += utils.StrToFloat64(vv.SelfSupportForSchoolOrd.TradeAmount) } + xlsx.SetSheetRow("", "A1", &titleList) + sheetIndex := 2 //第一个表是模板表 + for k, v := range data { + if k == "" { + k = "未知" + } + xlsx.NewSheet(k) //1、新建表格 + xlsx.CopySheet(1, sheetIndex) + j := 4 //表头前三行被占用了,只能从第四行开始 + for kk, vv := range v { + if kk == "" { + kk = k + } + xlsx.SetSheetRow(k, "A"+strconv.Itoa(j), &[]interface{}{kk, + vv["早餐"]["num"], vv["早餐"]["amount"], + vv["午餐"]["num"], vv["午餐"]["amount"], + vv["晚餐"]["num"], vv["晚餐"]["amount"], + vv["夜宵"]["num"], vv["夜宵"]["amount"], + vv["合计"]["num"], vv["合计"]["amount"], + }) + j++ + } + sheetIndex++ + } + xlsx.DeleteSheet("template") //删除模板表 + //将文件保存至服务器 + xlsx.SaveAs("./static" + downloadPath) + break + case 3: + //就餐数据统计表 + xlsx, _ := excelize.OpenFile("./static/template/自营学校(就餐数据统计表).xlsx") + fileName = "就餐数据统计表_" + utils.Int64ToStr(now.UnixMilli()) + ".xlsx" + downloadPath = "/export/self_support_for_school/" + fileName + + //查询出所有的设备 + //var deviceList []*model.Device + //err := db.Db.Where("enterprise_id != 0").Find(&deviceList) + //if err != nil { + // logx.Error(err) + // println("<<<<SelfSupportForSchoolDataStatisticsExport2>>>>>1111Error:::", err.Error()) + // return + //} + //var deviceListMapping = map[string]model.Device{} + //for _, v := range deviceList { + // deviceListMapping[v.DeviceSn] = *v + //} + + var m []*db.SelfSupportForSchoolOrdWithUserIdentity + sess := db.Db.Desc("self_support_for_school_ord.id") + if req.EnterpriseId != 0 { + sess.And("self_support_for_school_ord.enterprise_id =?", req.EnterpriseId) + } + if req.StartDate != "" { + sess.And("self_support_for_school_ord.face_time >= ?", req.StartDate) + } + if req.EndDate != "" { + sess.And("self_support_for_school_ord.face_time <= ?", req.EndDate) + } + if req.EnterPriseKind != 0 { + sess.And("enterprise.kind = ?", req.EnterPriseKind) + } + _, err := sess. + Join("LEFT", "user_identity", "self_support_for_school_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("<<<<SelfSupportForSchoolDataStatisticsExport2>>>>>Error:::", err.Error()) + return + } + + //整合数据 + var data = map[string]map[string]map[string]map[string]float64{} + shopName := req.StartDate + "~" + req.EndDate + for _, vv := range m { + if data[vv.Enterprise.Name] == nil { + data[vv.Enterprise.Name] = make(map[string]map[string]map[string]float64) + } + if data[vv.Enterprise.Name][shopName] == nil { + data[vv.Enterprise.Name][shopName] = make(map[string]map[string]float64) + } + mealZh := JudgeSelfSupportForMealTime(vv.SelfSupportForSchoolOrd.FaceTime) + if data[vv.Enterprise.Name][shopName][mealZh] == nil { + data[vv.Enterprise.Name][shopName][mealZh] = make(map[string]float64) + } + if data[vv.Enterprise.Name][shopName]["合计"] == nil { + data[vv.Enterprise.Name][shopName]["合计"] = make(map[string]float64) + } + data[vv.Enterprise.Name][shopName][mealZh]["num"]++ + data[vv.Enterprise.Name][shopName][mealZh]["amount"] += utils.StrToFloat64(vv.SelfSupportForSchoolOrd.TradeAmount) + data[vv.Enterprise.Name][shopName]["合计"]["num"]++ + data[vv.Enterprise.Name][shopName]["合计"]["amount"] += utils.StrToFloat64(vv.SelfSupportForSchoolOrd.TradeAmount) + } + xlsx.SetSheetRow("", "A1", &titleList) sheetIndex := 2 //第一个表是模板表 for k, v := range data { diff --git a/static/template/自营学校(就餐数据统计表).xlsx b/static/template/自营学校(就餐数据统计表).xlsx new file mode 100644 index 0000000000000000000000000000000000000000..9d972b987c229a745b6e28ed78cd902970cecc17 GIT binary patch literal 9116 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�MxM|0` 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 UL;ea@RNxmM&_FqV;%B}82cBVP_y7O^ literal 0 HcmV?d00001