From 284e92381ca03b8e24b79cc9b8f63d231092302e Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 23 May 2019 14:33:03 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E9=87=8D=E6=9E=84GetOrders=E4=B8=8EExportO?= =?UTF-8?q?rders?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/orderman_ext.go | 205 +++++-------------- business/model/api.go | 15 +- 2 files changed, 51 insertions(+), 169 deletions(-) diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index 39d432af8..9ea98f720 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -218,8 +218,8 @@ func (c *OrderManager) ExportMTWaybills(ctx *jxcontext.Context, fromDateStr, toD return nil, err } -func (c *OrderManager) GetOrders(ctx *jxcontext.Context, fromDateStr, toDateStr string, params map[string]interface{}, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) { - globals.SugarLogger.Debugf("GetOrders from:%s to:%s", fromDateStr, toDateStr) +func (c *OrderManager) getOrders(ctx *jxcontext.Context, isIncludeSku bool, fromDateStr, toDateStr string, params map[string]interface{}, offset, pageSize int) (orders []*model.GoodsOrderExt, totalCount int, err error) { + globals.SugarLogger.Debugf("getOrders from:%s to:%s", fromDateStr, toDateStr) pageSize = jxutils.FormalizePageSize(pageSize) if offset < 0 { @@ -228,10 +228,18 @@ func (c *OrderManager) GetOrders(ctx *jxcontext.Context, fromDateStr, toDateStr sql := ` SELECT SQL_CALC_FOUND_ROWS t1.*, t2.status waybill_status, t2.courier_name, t2.courier_mobile, - t2.actual_fee, t2.desired_fee, t2.waybill_created_at, t2.waybill_finished_at + t2.actual_fee, t2.desired_fee, t2.waybill_created_at, t2.waybill_finished_at` + if isIncludeSku { + sql += `, + t3.sku_id, t3.count sku_count2, t3.shop_price sku_shop_price, t3.sale_price sku_sale_price` + } + sql += ` FROM goods_order t1 - LEFT JOIN waybill t2 ON t1.vendor_waybill_id = t2.vendor_waybill_id AND t1.waybill_vendor_id = t2.waybill_vendor_id - ` + LEFT JOIN waybill t2 ON t1.vendor_waybill_id = t2.vendor_waybill_id AND t1.waybill_vendor_id = t2.waybill_vendor_id` + if isIncludeSku { + sql += ` + JOIN order_sku t3 ON t3.vendor_order_id = t1.vendor_order_id AND t3.vendor_id = t1.vendor_id` + } var ( sqlWhere string sqlParams []interface{} @@ -255,14 +263,14 @@ func (c *OrderManager) GetOrders(ctx *jxcontext.Context, fromDateStr, toDateStr } else { fromDate, err2 := utils.TryStr2Time(fromDateStr) if err = err2; err != nil { - return nil, err + return nil, 0, err } if toDateStr == "" { toDateStr = fromDateStr } toDate, err2 := utils.TryStr2Time(toDateStr) if err = err2; err != nil { - return nil, err + return nil, 0, err } toDate = toDate.Add(24 * time.Hour) @@ -277,7 +285,7 @@ func (c *OrderManager) GetOrders(ctx *jxcontext.Context, fromDateStr, toDateStr keyword := params["keyword"].(string) keywordLike := "%" + keyword + "%" sqlWhere += ` - AND (t1.store_name LIKE ? OR t1.vendor_order_id LIKE ? OR t1.vendor_store_id LIKE ? + AND (t1.store_name LIKE ? OR t1.vendor_order_id LIKE ? OR t1.vendor_store_id LIKE ? OR t1.consignee_name LIKE ? OR t1.consignee_mobile LIKE ? OR t1.consignee_mobile2 LIKE ? OR t1.consignee_address LIKE ? OR t2.vendor_waybill_id LIKE ? OR t2.courier_name LIKE ? OR t2.courier_mobile LIKE ? ` @@ -291,7 +299,7 @@ func (c *OrderManager) GetOrders(ctx *jxcontext.Context, fromDateStr, toDateStr if params["waybillVendorIDs"] != nil { var waybillVendorIDs []int if err = utils.UnmarshalUseNumber([]byte(params["waybillVendorIDs"].(string)), &waybillVendorIDs); err != nil { - return nil, err + return nil, 0, err } if len(waybillVendorIDs) > 0 { sqlWhere += " AND t1.waybill_vendor_id IN (" + dao.GenQuestionMarks(len(waybillVendorIDs)) + ")" @@ -301,7 +309,7 @@ func (c *OrderManager) GetOrders(ctx *jxcontext.Context, fromDateStr, toDateStr if params["storeIDs"] != nil { var storeIDs []int if err = utils.UnmarshalUseNumber([]byte(params["storeIDs"].(string)), &storeIDs); err != nil { - return nil, err + return nil, 0, err } if len(storeIDs) > 0 { sqlWhere += " AND IF(t1.vendor_id = ?, t1.store_id, IF(t1.jx_store_id != 0, t1.jx_store_id, t1.store_id) ) IN (" + dao.GenQuestionMarks(len(storeIDs)) + ")" @@ -311,7 +319,7 @@ func (c *OrderManager) GetOrders(ctx *jxcontext.Context, fromDateStr, toDateStr if params["statuss"] != nil { var statuss []int if err = utils.UnmarshalUseNumber([]byte(params["statuss"].(string)), &statuss); err != nil { - return nil, err + return nil, 0, err } if len(statuss) > 0 { sqlWhere += " AND t1.status IN (" + dao.GenQuestionMarks(len(statuss)) + ")" @@ -321,7 +329,7 @@ func (c *OrderManager) GetOrders(ctx *jxcontext.Context, fromDateStr, toDateStr if params["lockStatuss"] != nil { var lockStatuss []int if err = utils.UnmarshalUseNumber([]byte(params["lockStatuss"].(string)), &lockStatuss); err != nil { - return nil, err + return nil, 0, err } if len(lockStatuss) > 0 { sqlWhere += " AND t1.lock_status IN (" + dao.GenQuestionMarks(len(lockStatuss)) + ")" @@ -331,7 +339,7 @@ func (c *OrderManager) GetOrders(ctx *jxcontext.Context, fromDateStr, toDateStr if params["cities"] != nil { var cities []int if err = utils.UnmarshalUseNumber([]byte(params["cities"].(string)), &cities); err != nil { - return nil, err + return nil, 0, err } if len(cities) > 0 { sql += " JOIN store st ON t1.store_id = st.id" @@ -343,7 +351,7 @@ func (c *OrderManager) GetOrders(ctx *jxcontext.Context, fromDateStr, toDateStr if params["vendorIDs"] != nil { var vendorIDs []int if err = utils.UnmarshalUseNumber([]byte(params["vendorIDs"].(string)), &vendorIDs); err != nil { - return nil, err + return nil, 0, err } if len(vendorIDs) > 0 { sqlWhere += " AND t1.vendor_id IN (" + dao.GenQuestionMarks(len(vendorIDs)) + ")" @@ -351,13 +359,16 @@ func (c *OrderManager) GetOrders(ctx *jxcontext.Context, fromDateStr, toDateStr } } sql += sqlWhere - sql += ` - ORDER BY t1.order_created_at DESC - LIMIT ? OFFSET ? - ` - sqlParams = append(sqlParams, pageSize, offset) + if isIncludeSku { + sql += ` + ORDER BY t1.id` + } else { + sql += ` + ORDER BY t1.order_created_at DESC + LIMIT ? OFFSET ?` + sqlParams = append(sqlParams, pageSize, offset) + } - var orders []*model.GoodsOrderExt db := dao.GetDB() dao.Begin(db) defer func() { @@ -367,160 +378,36 @@ func (c *OrderManager) GetOrders(ctx *jxcontext.Context, fromDateStr, toDateStr } }() if err = dao.GetRows(db, &orders, sql, sqlParams...); err == nil { + totalCount = dao.GetLastTotalRowCount(db) + } + dao.Commit(db) + return orders, totalCount, err +} + +func (c *OrderManager) GetOrders(ctx *jxcontext.Context, fromDateStr, toDateStr string, params map[string]interface{}, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) { + globals.SugarLogger.Debugf("GetOrders from:%s to:%s", fromDateStr, toDateStr) + orders, totalCount, err := c.getOrders(ctx, false, fromDateStr, toDateStr, params, offset, pageSize) + if err == nil { pagedInfo = &model.PagedInfo{ - TotalCount: dao.GetLastTotalRowCount(db), + TotalCount: totalCount, Data: orders, } } - dao.Commit(db) return pagedInfo, err } -func (c *OrderManager) ExportOrders(ctx *jxcontext.Context, fromDateStr, toDateStr string, params map[string]interface{}) (hint string, err error) { +func (c *OrderManager) ExportOrders(ctx *jxcontext.Context, fromDateStr, toDateStr string, mapParams map[string]interface{}) (hint string, err error) { globals.SugarLogger.Debugf("ExportOrders from:%s to:%s", fromDateStr, toDateStr) - sql := ` - SELECT t1.*, - t2.status waybill_status, t2.courier_name, t2.courier_mobile, - t2.actual_fee, t2.desired_fee, t2.waybill_created_at, t2.waybill_finished_at, - t3.sku_id, t3.count sku_count2, t3.shop_price sku_shop_price, t3.sale_price sku_sale_price - FROM goods_order t1 - LEFT JOIN waybill t2 ON t1.vendor_waybill_id = t2.vendor_waybill_id AND t1.waybill_vendor_id = t2.waybill_vendor_id - JOIN order_sku t3 ON t3.vendor_order_id = t1.vendor_order_id AND t3.vendor_id = t1.vendor_id - ` var ( - sqlWhere string - sqlParams []interface{} - ) - // 如果搜索关键字可能为订单号,则当成订单号查询 - if params["keyword"] != nil { - if jxutils.GetPossibleVendorIDFromVendorOrderID(params["keyword"].(string)) > model.VendorIDUnknown { - params["vendorOrderID"] = params["keyword"] - } - } - if params["orderID"] != nil || params["vendorOrderID"] != nil { - sqlWhere = " WHERE (t1.vendor_order_id = ? OR t1.vendor_order_id2 = ?)" - vendorOrderID := params["vendorOrderID"] - if vendorOrderID == nil { - vendorOrderID = params["orderID"] - } - sqlParams = []interface{}{ - vendorOrderID, - vendorOrderID, - } - } else { - fromDate, err2 := utils.TryStr2Time(fromDateStr) - if err = err2; err != nil { - return "", err - } - if toDateStr == "" { - toDateStr = fromDateStr - } - toDate, err2 := utils.TryStr2Time(toDateStr) - if err = err2; err != nil { - return "", err - } - toDate = toDate.Add(24 * time.Hour) - - sqlWhere = ` - WHERE t1.order_created_at >= ? AND t1.order_created_at < ? - ` - sqlParams = []interface{}{ - fromDate, - toDate, - } - if params["keyword"] != nil { - keyword := params["keyword"].(string) - keywordLike := "%" + keyword + "%" - sqlWhere += ` - AND (t1.store_name LIKE ? OR t1.vendor_order_id LIKE ? OR t1.vendor_store_id LIKE ? - OR t1.consignee_name LIKE ? OR t1.consignee_mobile LIKE ? OR t1.consignee_mobile2 LIKE ? OR t1.consignee_address LIKE ? - OR t2.vendor_waybill_id LIKE ? OR t2.courier_name LIKE ? OR t2.courier_mobile LIKE ? - ` - sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike) - if keywordInt64, err2 := strconv.ParseInt(keyword, 10, 64); err2 == nil { - sqlWhere += " OR t1.store_id = ? OR t1.jx_store_id = ?" - sqlParams = append(sqlParams, keywordInt64, keywordInt64) - } - sqlWhere += ")" - } - if params["waybillVendorIDs"] != nil { - var waybillVendorIDs []int - if err = utils.UnmarshalUseNumber([]byte(params["waybillVendorIDs"].(string)), &waybillVendorIDs); err != nil { - return "", err - } - if len(waybillVendorIDs) > 0 { - sqlWhere += " AND t1.waybill_vendor_id IN (" + dao.GenQuestionMarks(len(waybillVendorIDs)) + ")" - sqlParams = append(sqlParams, waybillVendorIDs) - } - } - if params["storeIDs"] != nil { - var storeIDs []int - if err = utils.UnmarshalUseNumber([]byte(params["storeIDs"].(string)), &storeIDs); err != nil { - return "", err - } - if len(storeIDs) > 0 { - sqlWhere += " AND IF(t1.vendor_id = ?, t1.store_id, IF(t1.jx_store_id != 0, t1.jx_store_id, t1.store_id) ) IN (" + dao.GenQuestionMarks(len(storeIDs)) + ")" - sqlParams = append(sqlParams, model.VendorIDWSC, storeIDs) - } - } - if params["statuss"] != nil { - var statuss []int - if err = utils.UnmarshalUseNumber([]byte(params["statuss"].(string)), &statuss); err != nil { - return "", err - } - if len(statuss) > 0 { - sqlWhere += " AND t1.status IN (" + dao.GenQuestionMarks(len(statuss)) + ")" - sqlParams = append(sqlParams, statuss) - } - } - if params["lockStatuss"] != nil { - var lockStatuss []int - if err = utils.UnmarshalUseNumber([]byte(params["lockStatuss"].(string)), &lockStatuss); err != nil { - return "", err - } - if len(lockStatuss) > 0 { - sqlWhere += " AND t1.lock_status IN (" + dao.GenQuestionMarks(len(lockStatuss)) + ")" - sqlParams = append(sqlParams, lockStatuss) - } - } - if params["cities"] != nil { - var cities []int - if err = utils.UnmarshalUseNumber([]byte(params["cities"].(string)), &cities); err != nil { - return "", err - } - if len(cities) > 0 { - sql += " JOIN store st ON t1.store_id = st.id" - sqlWhere += " AND st.city_code IN (" + dao.GenQuestionMarks(len(cities)) + ")" - sqlParams = append(sqlParams, cities) - } - } - } - if params["vendorIDs"] != nil { - var vendorIDs []int - if err = utils.UnmarshalUseNumber([]byte(params["vendorIDs"].(string)), &vendorIDs); err != nil { - return "", err - } - if len(vendorIDs) > 0 { - sqlWhere += " AND t1.vendor_id IN (" + dao.GenQuestionMarks(len(vendorIDs)) + ")" - sqlParams = append(sqlParams, vendorIDs) - } - } - sql += sqlWhere - sql += ` - ORDER BY t1.id DESC - ` - - var ( - orders, orders2 []*model.GoodsOrderExtAndSku - order *model.GoodsOrderExtAndSku + orders, orders2 []*model.GoodsOrderExt + order *model.GoodsOrderExt excelBin []byte ) task := tasksch.NewSeqTask("导出订单SKU信息", ctx, func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { switch step { case 0: - db := dao.GetDB() - err = dao.GetRows(db, &orders, sql, sqlParams...) + orders, _, err = c.getOrders(ctx, true, fromDateStr, toDateStr, mapParams, 0, -1) case 1: for _, v := range orders { skuStr := strings.Join([]string{ diff --git a/business/model/api.go b/business/model/api.go index dd5d5fd8c..788b85a90 100644 --- a/business/model/api.go +++ b/business/model/api.go @@ -22,17 +22,12 @@ type GoodsOrderExt struct { DesiredFee int64 `json:"desiredFee"` // 运单总费用 WaybillCreatedAt time.Time `orm:"type(datetime);index" json:"waybillCreatedAt"` WaybillFinishedAt time.Time `orm:"type(datetime)" json:"waybillFinishedAt"` -} -type GoodsOrderExtAndSku struct { - GoodsOrderExt - - SkuID int `orm:"column(sku_id)" json:"skuID"` - SkuShopPrice int `json:"skuShopPrice"` - SkuSalePrice int `json:"skuSalePrice"` - SkuCount2 int `json:"skuCount2"` - - SkuInfo string `json:"skuInfo"` + SkuID int `orm:"column(sku_id)" json:"skuID,omitempty"` + SkuShopPrice int `json:"skuShopPrice,omitempty"` + SkuSalePrice int `json:"skuSalePrice,omitempty"` + SkuCount2 int `json:"skuCount2,omitempty"` + SkuInfo string `json:"skuInfo,omitempty"` } type OrderSkuExt struct {