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 0000000..fc4bcf5 Binary files /dev/null and b/static/template/综合订单品类明细表.xlsx differ diff --git a/static/template/订单品类明细表.xlsx b/static/template/订单品类明细表.xlsx index fc4bcf5..cfc1753 100644 Binary files a/static/template/订单品类明细表.xlsx and b/static/template/订单品类明细表.xlsx differ