From 2abacd7458eaf553b004fd3d576573bba23ad222 Mon Sep 17 00:00:00 2001 From: huangjiajun <582604932@qq.com> Date: Wed, 5 Jun 2024 17:34:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/hdl/order/hdl_order_list.go | 4 +- app/admin/svc/order/svc_order_list.go | 88 ++++++++++++++++++ app/db/db_order_goods_list.go | 69 ++++++++++++++ app/router/admin_router.go | 38 ++++---- .../template/综合订单品类明细表.xlsx | Bin 0 -> 9266 bytes static/template/订单品类明细表.xlsx | Bin 9266 -> 9410 bytes 6 files changed, 180 insertions(+), 19 deletions(-) create mode 100644 static/template/综合订单品类明细表.xlsx diff --git a/app/admin/hdl/order/hdl_order_list.go b/app/admin/hdl/order/hdl_order_list.go index 4182b9b..3e517e5 100644 --- a/app/admin/hdl/order/hdl_order_list.go +++ b/app/admin/hdl/order/hdl_order_list.go @@ -11,7 +11,9 @@ func OrderList(c *gin.Context) { func OrderGoodsList(c *gin.Context) { order.OrderGoodsList(c) } - +func NewOrderGoodsList(c *gin.Context) { + order.NewOrderGoodsList(c) +} func OrderExport(c *gin.Context) { order.OrderExport(c) } diff --git a/app/admin/svc/order/svc_order_list.go b/app/admin/svc/order/svc_order_list.go index 58e3722..08c295f 100644 --- a/app/admin/svc/order/svc_order_list.go +++ b/app/admin/svc/order/svc_order_list.go @@ -153,6 +153,94 @@ func OrderGoodsList(c *gin.Context) { e.OutSuc(c, res, nil) return } +func NewOrderGoodsList(c *gin.Context) { + var args map[string]string + if err := c.ShouldBindJSON(&args); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + eg := db.Db + list, _ := db.GetOrderGoodsList(eg, args) + xlsx, _ := excelize.OpenFile("./static/template/综合订单品类明细表.xlsx") + + data := make([]map[string]interface{}, 0) + if list != nil { + stateArr := []string{"待制作", "制作中", "制作完成", "烘焙完成", "分拣完成", "已取消"} + enterpriseIds := make([]int, 0) + for _, v := range list { + enterpriseIds = append(enterpriseIds, utils.StrToInt(v["enterprise_id"])) + } + enterpriseMap := db.GetEnterpriseMore(eg, enterpriseIds) + for _, v := range list { + JudgePackageOrdOrdStateSecond(v["oid"], v["state"]) + enterpriseName := "" + insideEnterpriseName := "" + _, ok := enterpriseMap[utils.StrToInt(v["enterprise_id"])] + if ok { + enterpriseName = enterpriseMap[utils.StrToInt(v["enterprise_id"])].Name + insideEnterpriseName = enterpriseMap[utils.StrToInt(v["enterprise_id"])].InsideName + } + var tmp = map[string]interface{}{ + "buy_phone": v["buy_phone"], + "ord_no": v["ord_no"], + "goods_title": v["goods_title"], + "oid": v["oid"], + "price": v["price"], + "num": v["num"], + "state_str": stateArr[utils.StrToInt(v["state"])], + "state": v["state"], + "time": gjson.Get(v["buy_info"], "time").String(), + "date": gjson.Get(v["buy_info"], "date").String(), + "create_at": v["create_at"], + "enterprise_name": enterpriseName, + "inside_name": insideEnterpriseName, + "memo": v["deduct_memo"], + "make_date": utils.TimeParseDateStd1(utils.StrToInt(v["make_date"])), + } + skuData := make([]md.Sku, 0) + json.Unmarshal([]byte(v["sku"]), &skuData) + skuStr := "" + for _, v1 := range skuData { + if skuStr != "" { + skuStr += ";" + } + skuStr += v1.Value + } + tmp["sku_str"] = skuStr + data = append(data, tmp) + } + } + sheetIndex := 2 //第一个表是模板表 + xlsx.NewSheet("Sheet1") //新建表格 + xlsx.CopySheet(1, sheetIndex) + xlsx.SetSheetRow("Sheet1", "A"+strconv.Itoa(2), &[]interface{}{ + "日期:" + utils.TimeParseStd(args["start_at"]).Format("2006-01-02") + " ~ " + utils.TimeParseStd(args["end_at"]).Format("2006-01-02"), + }) + j := 4 //表头前三行被占用了,只能从第四行开始 + for _, v := range data { + xlsx.SetSheetRow("Sheet1", "A"+strconv.Itoa(j), &[]interface{}{ + v["oid"], + v["enterprise_name"], + v["goods_title"], + v["inside_name"], + "¥" + utils.AnyToString(v["price"]), + v["num"], + v["state_str"], + v["ord_no"], + v["create_at"], + v["make_date"], + }) + xlsx.SetRowHeight("Sheet1", j, 18) + j++ + } + xlsx.DeleteSheet("template") //删除模板表 + c.Header("Content-Type", "application/octet-stream") + c.Header("Content-Disposition", "attachment; filename="+"订单记录"+".xlsx") + c.Header("Content-Transfer-Encoding", "binary") + //回写到web 流媒体 形成下载 + _ = xlsx.Write(c.Writer) + return +} func OrderExport(c *gin.Context) { var args map[string]string if err := c.ShouldBindJSON(&args); err != nil { diff --git a/app/db/db_order_goods_list.go b/app/db/db_order_goods_list.go index eb16bec..2563f2c 100644 --- a/app/db/db_order_goods_list.go +++ b/app/db/db_order_goods_list.go @@ -157,3 +157,72 @@ func GetOrderGoodsList(eg *xorm.Engine, param map[string]string) ([]map[string]s return nativeString1, int64(count) } +func GetOutputOrderGoodsList(eg *xorm.Engine, param map[string]string) ([]map[string]string, int64) { + where := "goods_type=0" + if param["phone"] != "" { + where += " and o.buy_phone like '%" + param["phone"] + "%'" + } + if param["oid"] != "" { + where += " and o.oid like '%" + param["oid"] + "%'" + + } + if param["ord_no"] != "" { + where += " and o.ord_no like '%" + param["ord_no"] + "%'" + } + if param["goods_title"] != "" { + where += " and og.goods_title like '%" + param["goods_title"] + "%'" + } + if param["state"] != "" { + where += " and o.state =" + param["state"] + + } + if param["start_at"] != "" { + where += " and o.create_at >='" + param["start_at"] + "'" + + } + if param["end_at"] != "" { + where += " and o.create_at <='" + param["end_at"] + "'" + } + if param["date"] != "" { + param["date"] = strings.ReplaceAll(param["date"], "-", "") + where += " and o.date ='" + param["date"] + "'" + + } + if param["make_date"] != "" { + param["make_date"] = strings.ReplaceAll(param["make_date"], "-", "") + where += " and o.make_date ='" + param["make_date"] + "'" + + } + if param["enterprise_name"] != "" { + var enterprise []model.Enterprise + eg.Where("name like ?", "%"+param["enterprise_name"]+"%").Find(&enterprise) + oids := []string{"-1"} + for _, v := range enterprise { + oids = append(oids, utils.IntToStr(v.Id)) + } + where += " and o.enterprise_id in(" + php2go.Implode(",", oids) + ")" + } + if param["inside_name"] != "" { + var enterprise []model.Enterprise + eg.Where("inside_name like ?", "%"+param["inside_name"]+"%").Find(&enterprise) + oids := []string{"-1"} + for _, v := range enterprise { + oids = append(oids, utils.IntToStr(v.Id)) + } + where += " and o.enterprise_id in(" + php2go.Implode(",", oids) + ")" + } + size := utils.StrToInt(param["limit"]) + start := (utils.StrToInt(param["page"]) - 1) * size + + sql := "SELECT %s FROM order_goods og left join `order` o on o.oid=og.oid where %s order by og.id asc %s" + sql1 := fmt.Sprintf(sql, "og.deduct_memo,og.oid,og.goods_id,og.sku_id,og.num,og.price,og.state,og.sku_code,og.goods_title,og.sku,og.success_num,og.memo,og.time,og.admin_id,og.enterprise_id,og.deduct_memo,og.ord_no,og.make_date,o.create_at,o.buy_info,o.buy_phone", where, "limit "+utils.IntToStr(start)+","+utils.IntToStr(size)) + sql2 := fmt.Sprintf(sql, "COUNT(*) as count", where, "") + nativeString, _ := QueryNativeString(eg, sql2) + count := 0 + for _, v := range nativeString { + count = utils.StrToInt(v["count"]) + } + nativeString1, _ := QueryNativeString(eg, sql1) + + return nativeString1, int64(count) +} diff --git a/app/router/admin_router.go b/app/router/admin_router.go index 61c535e..ac88a12 100644 --- a/app/router/admin_router.go +++ b/app/router/admin_router.go @@ -136,24 +136,26 @@ func rGoodsPay(r *gin.RouterGroup) { r.POST("/create", orderHdl.GoodsPayCreate) //商品下单 } func rOrder(r *gin.RouterGroup) { - r.POST("/list", orderHdl.OrderList) //用户订单 - r.POST("/goods/list", orderHdl.OrderGoodsList) //用户订单 - r.POST("/goods/total", orderHdl.OrderGoodsTotal) //用户订单统计 - r.POST("/total", orderHdl.OrderTotal) //用户订单统计 - r.POST("/cancel", orderHdl.OrderCancel) //用户订单取消 - r.POST("/detail", orderHdl.OrderDetail) //用户订单详情 - r.POST("/output", orderHdl.OrderOutput) //用户订单导出 - r.POST("/goods/output", orderHdl.OrderGoodsOutput) //用户订单导出 - r.POST("/del", orderHdl.OrderDel) //用户订单商品删除 - r.POST("/edit", orderHdl.OrderEdit) //用户订单修改购买人信息 - r.POST("/editNum", orderHdl.OrderEditNum) //用户订单修改订单数 - r.POST("/addSku", orderHdl.OrderAddSku) //用户订单修改订单数 - r.POST("/addNum", orderHdl.OrderAddNum) //用户订单增加数量 - r.POST("/deductNum", orderHdl.OrderDeductNum) //用户订单减少数量 - r.POST("/makeRecord", orderHdl.MarkRecord) //制作记录 - r.POST("/notice", orderHdl.NoticeList) //公告 - r.POST("/notice_save", orderHdl.NoticeSave) //公告 - r.POST("/notice_del", orderHdl.NoticeDel) //公告 + r.POST("/list", orderHdl.OrderList) //用户订单 + r.POST("/goods/list", orderHdl.OrderGoodsList) //用户订单 + r.POST("/goods/total", orderHdl.OrderGoodsTotal) //用户订单统计 + r.POST("/total", orderHdl.OrderTotal) //用户订单统计 + r.POST("/cancel", orderHdl.OrderCancel) //用户订单取消 + r.POST("/detail", orderHdl.OrderDetail) //用户订单详情 + r.POST("/output", orderHdl.OrderOutput) //用户订单导出 + r.POST("/goods/output", orderHdl.OrderGoodsOutput) //用户订单导出 + r.POST("/new_goods/output", orderHdl.NewOrderGoodsList) //用户订单 + + r.POST("/del", orderHdl.OrderDel) //用户订单商品删除 + r.POST("/edit", orderHdl.OrderEdit) //用户订单修改购买人信息 + r.POST("/editNum", orderHdl.OrderEditNum) //用户订单修改订单数 + r.POST("/addSku", orderHdl.OrderAddSku) //用户订单修改订单数 + r.POST("/addNum", orderHdl.OrderAddNum) //用户订单增加数量 + r.POST("/deductNum", orderHdl.OrderDeductNum) //用户订单减少数量 + r.POST("/makeRecord", orderHdl.MarkRecord) //制作记录 + r.POST("/notice", orderHdl.NoticeList) //公告 + r.POST("/notice_save", orderHdl.NoticeSave) //公告 + r.POST("/notice_del", orderHdl.NoticeDel) //公告 } func rDataStatistics(r *gin.RouterGroup) { diff --git a/static/template/综合订单品类明细表.xlsx b/static/template/综合订单品类明细表.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..fc4bcf5d4e0d46c7c7cff50d7fde6e76b80f324a GIT binary patch literal 9266 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 z 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 K96sfP-v0x;WZWSD literal 0 HcmV?d00001 diff --git a/static/template/订单品类明细表.xlsx b/static/template/订单品类明细表.xlsx index fc4bcf5d4e0d46c7c7cff50d7fde6e76b80f324a..cfc1753252694fcd57c8341c71c591e594503f65 100644 GIT binary patch delta 4345 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