From 0b9189cb87825c1da5873ec760849fee4c29ae47 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 22 Aug 2018 09:41:02 +0800 Subject: [PATCH] - paging added for GetStoreOrderInfo. - GetStoreOrderCountInfo added. --- business/jxcallback/orderman/orderman_ext.go | 32 +++++++++++- .../jxcallback/scheduler/basesch/basesch.go | 8 ++- .../jxcallback/scheduler/defsch/defsch.go | 2 +- business/model/api.go | 5 ++ controllers/jx_order.go | 52 +++++++++++++++++-- 5 files changed, 89 insertions(+), 10 deletions(-) diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index 16f16dd2c..adec252c6 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -12,19 +12,26 @@ import ( const ( maxLastHours = 2 * 24 // 最多只能查询两天内的订单数据 + defPageSize = 50 ) var ( ErrCanNotFindOrder = errors.New("找不到相应订单") ) -func (c *OrderManager) GetStoreOrderInfo(storeID string, lastHours int, fromStatus, toStatus int) (orders []*model.GoodsOrderExt, err error) { +func (c *OrderManager) GetStoreOrderInfo(storeID string, lastHours int, fromStatus, toStatus, offset, pageSize int) (orders []*model.GoodsOrderExt, err error) { if lastHours > maxLastHours { lastHours = maxLastHours } if toStatus == 0 { toStatus = fromStatus } + if offset < 0 { + offset = 0 + } + if pageSize == 0 { + pageSize = defPageSize + } db := orm.NewOrm() _, err = db.Raw(` @@ -34,7 +41,8 @@ func (c *OrderManager) GetStoreOrderInfo(storeID string, lastHours int, fromStat WHERE IF(t1.jx_store_id != 0, t1.jx_store_id, t1.store_id) = ? AND t1.order_created_at >= ? AND t1.Status >= ? AND t1.Status <= ? - `, storeID, time.Now().Add(-time.Duration(lastHours)*time.Hour), fromStatus, toStatus).QueryRows(&orders) + LIMIT ? OFFSET ? + `, storeID, time.Now().Add(-time.Duration(lastHours)*time.Hour), fromStatus, toStatus, pageSize, offset).QueryRows(&orders) if err == nil { return orders, nil } @@ -42,6 +50,26 @@ func (c *OrderManager) GetStoreOrderInfo(storeID string, lastHours int, fromStat return nil, err } +func (c *OrderManager) GetStoreOrderCountInfo(storeID string, lastHours int) (countInfo *model.GoodsOrderCountInfo, err error) { + if lastHours > maxLastHours { + lastHours = maxLastHours + } + + db := orm.NewOrm() + _, err = db.Raw(` + SELECT t1.status, COUNT(*) count + FROM goods_order t1 + WHERE IF(t1.jx_store_id != 0, t1.jx_store_id, t1.store_id) = ? + AND t1.order_created_at >= ? + GROUP BY 1 + `, storeID, time.Now().Add(-time.Duration(lastHours)*time.Hour)).QueryRows(&countInfo) + if err == nil { + return countInfo, nil + } + globals.SugarLogger.Infof("GetStoreOrderCountInfo storeID:%s failed with error:%v", storeID, err) + return nil, err +} + func (c *OrderManager) GetOrderSkuInfo(vendorOrderID string, vendorID int) (skus []*model.OrderSkuExt, err error) { db := orm.NewOrm() num, err := db.Raw(` diff --git a/business/jxcallback/scheduler/basesch/basesch.go b/business/jxcallback/scheduler/basesch/basesch.go index 828f72aff..269ffb09f 100644 --- a/business/jxcallback/scheduler/basesch/basesch.go +++ b/business/jxcallback/scheduler/basesch/basesch.go @@ -84,7 +84,9 @@ func (c *BaseScheduler) PickupGoods(order *model.GoodsOrder) (err error) { }, "PickupGoods orderID:%s", order.VendorOrderID) } } else { - err = ErrOrderStatusIsNotSuitable + if order.LockStatus != model.OrderStatusUnknown || order.Status < model.OrderStatusAccepted { + err = ErrOrderStatusIsNotSuitable + } globals.SugarLogger.Infof("PickupGoods orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status) } return err @@ -102,7 +104,9 @@ func (c *BaseScheduler) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) } } } else { - err = ErrOrderStatusIsNotSuitable + if order.LockStatus != model.OrderStatusUnknown || order.Status < model.OrderStatusFinishedPickup { + err = ErrOrderStatusIsNotSuitable + } globals.SugarLogger.Infof("Swtich2SelfDeliver orderID:%s, status:%d is not suitable", order.VendorOrderID, order.Status) } return err diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 65abd71fb..9d670e485 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -478,7 +478,7 @@ func (s *DefScheduler) swtich2SelfDeliverWithRetry(savedOrderInfo *WatchOrderInf order := savedOrderInfo.order globals.SugarLogger.Debugf("swtich2SelfDeliverWithRetry orderID:%s", order.VendorOrderID) if order.WaybillVendorID != order.VendorID { - if err := s.Swtich2SelfDeliver(order); err != nil && err != scheduler.ErrStatusIsNotOKForOperation { + if err := s.Swtich2SelfDeliver(order); err != nil { globals.SugarLogger.Infof("swtich2SelfDeliverWithRetry failed, bill:%v, err:%v", bill, err) if retryCount > 0 { time.AfterFunc(duration, func() { diff --git a/business/model/api.go b/business/model/api.go index 098b3c72f..7d703af50 100644 --- a/business/model/api.go +++ b/business/model/api.go @@ -17,3 +17,8 @@ type OrderSkuExt struct { OrderSku Image string `json:"image"` } + +type GoodsOrderCountInfo struct { + Status int `json:"status"` + Count int `json:"count"` +} diff --git a/controllers/jx_order.go b/controllers/jx_order.go index cf9ae74e5..4a4034ef4 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -97,23 +97,65 @@ func (c *OrderController) CreateWaybillOnProviders() { // @Description 得到门店订单信息 // @Param storeID query string true "京西门店ID" // @Param lastHours query int false "最近多少小时的信息" +// @Success 200 {object} business.model.CallResult +// @Failure 200 {object} business.model.CallResult +// @router /GetStoreOrderCountInfo [get] +func (c *OrderController) GetStoreOrderCountInfo() { + var ( + storeID string + lastHours int + err error + ) + storeID = c.GetString("storeID") + lastHours, err1 := c.GetInt("lastHours", 0) + if storeID != "" && err1 == nil { + result, err2 := orderman.FixedOrderManager.GetStoreOrderCountInfo(storeID, lastHours) + if err = err2; err == nil { + c.Data["json"] = &model.CallResult{ + Code: "0", + Data: string(utils.MustMarshal(result)), + } + } + } + errMsg := jxutils.Errs2Str("", err1, err) + if storeID == "" { + errMsg += "storeID is empty\n" + } + if errMsg != "" { + c.Data["json"] = &model.CallResult{ + Code: "-1", + Desc: errMsg, + } + } + c.ServeJSON() +} + +// @Title 得到门店订单状态信息 +// @Description 得到门店订单状态信息 +// @Param storeID query string true "京西门店ID" +// @Param lastHours query int false "最近多少小时的信息" // @Param fromStatus query int true "起始状态" // @Param toStatus query int false "起始状态" +// @Param offset query int false "起始状态" +// @Param pageSize query int false "起始状态" // @Success 200 {object} business.model.CallResult // @Failure 200 {object} business.model.CallResult // @router /GetStoreOrderInfo [get] func (c *OrderController) GetStoreOrderInfo() { var ( - storeID string - lastHours, fromStatus, toStatus int - err error + storeID string + lastHours, fromStatus, toStatus, offset, pageSize int + err error ) storeID = c.GetString("storeID") lastHours, err1 := c.GetInt("lastHours", 0) fromStatus, err2 := c.GetInt("fromStatus", 0) toStatus, err3 := c.GetInt("toStatus", 0) - if storeID != "" && err1 == nil && err2 == nil && err3 == nil { - result, err2 := orderman.FixedOrderManager.GetStoreOrderInfo(storeID, lastHours, fromStatus, toStatus) + offset, err4 := c.GetInt("offset", 0) + pageSize, err5 := c.GetInt("pageSize", 0) + + if storeID != "" && err1 == nil && err2 == nil && err3 == nil && err4 == nil && err5 == nil { + result, err2 := orderman.FixedOrderManager.GetStoreOrderInfo(storeID, lastHours, fromStatus, toStatus, offset, pageSize) if err = err2; err == nil { c.Data["json"] = &model.CallResult{ Code: "0",