170 lines
5.9 KiB
Go
170 lines
5.9 KiB
Go
package orderman
|
||
|
||
import (
|
||
"time"
|
||
|
||
"git.rosy.net.cn/jx-callback/business/jxcallback/scheduler/basesch"
|
||
"git.rosy.net.cn/jx-callback/business/model"
|
||
"git.rosy.net.cn/jx-callback/globals"
|
||
"github.com/astaxie/beego/orm"
|
||
)
|
||
|
||
const (
|
||
maxLastHours = 7 * 24 // 最多只能查询7天内的订单数据
|
||
defLastHours = 2 * 24 // 缺省是两天内的订单
|
||
defPageSize = 50
|
||
)
|
||
|
||
func (c *OrderManager) GetStoreOrderInfo(storeID string, lastHours int, fromStatus, toStatus, offset, pageSize int) (orders []*model.GoodsOrderExt, err error) {
|
||
globals.SugarLogger.Debugf("GetStoreOrderInfo storeID:%s", storeID)
|
||
if lastHours > maxLastHours {
|
||
lastHours = maxLastHours
|
||
} else if lastHours == 0 {
|
||
lastHours = defLastHours
|
||
}
|
||
if toStatus == 0 {
|
||
toStatus = fromStatus
|
||
}
|
||
if offset < 0 {
|
||
offset = 0
|
||
}
|
||
if pageSize == 0 {
|
||
pageSize = defPageSize
|
||
}
|
||
|
||
db := orm.NewOrm()
|
||
_, err = db.Raw(`
|
||
SELECT t1.*, t2.status waybill_status, t2.courier_name, t2.courier_mobile
|
||
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
|
||
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 <= ?
|
||
ORDER BY t1.status, t1.order_created_at
|
||
LIMIT ? OFFSET ?
|
||
`, storeID, time.Now().Add(-time.Duration(lastHours)*time.Hour), fromStatus, toStatus, pageSize, offset).QueryRows(&orders)
|
||
if err == nil {
|
||
return orders, nil
|
||
}
|
||
globals.SugarLogger.Infof("GetStoreOrderInfo storeID:%s failed with error:%v", storeID, err)
|
||
return nil, err
|
||
}
|
||
|
||
func (c *OrderManager) GetStoreOrderCountInfo(storeID string, lastHours int) (countInfo []*model.GoodsOrderCountInfo, err error) {
|
||
globals.SugarLogger.Debugf("GetStoreOrderCountInfo storeID:%s", storeID)
|
||
if lastHours > maxLastHours {
|
||
lastHours = maxLastHours
|
||
} else if lastHours == 0 {
|
||
lastHours = defLastHours
|
||
}
|
||
|
||
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
|
||
ORDER 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) {
|
||
globals.SugarLogger.Debugf("GetOrderSkuInfo orderID:%s", vendorOrderID)
|
||
db := orm.NewOrm()
|
||
var num int64
|
||
// 为了显示图片,非正规的使用导出表
|
||
if vendorID == model.VendorIDELM {
|
||
num, err = db.Raw(`
|
||
SELECT t1.*, IF(t3.img IS NULL OR t3.img = '', t4.col_imageUrl, t3.img) image
|
||
FROM order_sku t1
|
||
LEFT JOIN jx_sku t2 ON IF(t1.jx_sku_id != 0, t1.jx_sku_id, t1.sku_id) = t2.id
|
||
LEFT JOIN jx_sku_name t3 ON t2.nameid = t3.id
|
||
LEFT JOIN ede_skus t4 ON t1.vendor_sku_id = t4.col_id
|
||
WHERE vendor_order_id = ? AND vendor_id = ?
|
||
ORDER BY t1.sku_name
|
||
`, vendorOrderID, vendorID).QueryRows(&skus)
|
||
} else if vendorID == model.VendorIDJD {
|
||
num, err = db.Raw(`
|
||
SELECT t1.*, IF(t3.img IS NULL OR t3.img = '', t4.image, t3.img) image
|
||
FROM order_sku t1
|
||
LEFT JOIN jx_sku t2 ON IF(t1.jx_sku_id != 0, t1.jx_sku_id, t1.sku_id) = t2.id
|
||
LEFT JOIN jx_sku_name t3 ON t2.nameid = t3.id
|
||
LEFT JOIN jde_sku_infos t4 ON t1.vendor_sku_id = t4.skuId
|
||
WHERE vendor_order_id = ? AND vendor_id = ?
|
||
ORDER BY t1.sku_name
|
||
`, vendorOrderID, vendorID).QueryRows(&skus)
|
||
}
|
||
|
||
if err != nil || num == 0 {
|
||
num, err = db.Raw(`
|
||
SELECT t1.*, t3.img image
|
||
FROM order_sku t1
|
||
LEFT JOIN jx_sku t2 ON IF(t1.jx_sku_id != 0, t1.jx_sku_id, t1.sku_id) = t2.id
|
||
LEFT JOIN jx_sku_name t3 ON t2.nameid = t3.id
|
||
WHERE vendor_order_id = ? AND vendor_id = ?
|
||
ORDER BY t1.sku_name
|
||
`, vendorOrderID, vendorID).QueryRows(&skus)
|
||
}
|
||
if err == nil && num > 0 {
|
||
return skus, nil
|
||
}
|
||
if err == nil {
|
||
err = ErrCanNotFindOrder
|
||
}
|
||
globals.SugarLogger.Infof("GetOrderSkuInfo orderID:%s vendorID:%d failed with error:%v", vendorOrderID, vendorID, err)
|
||
return nil, err
|
||
}
|
||
|
||
func (c *OrderManager) GetOrderInfo(vendorOrderID string, vendorID int, isRefresh bool) (order *model.GoodsOrderExt, err error) {
|
||
globals.SugarLogger.Debugf("GetOrderInfo orderID:%s", vendorOrderID)
|
||
db := orm.NewOrm()
|
||
orders := []*model.GoodsOrderExt{}
|
||
|
||
// 这里用QueryRows而不用QueryRow的原因是用QueryRow在这种情况下不能将数据读出,很奇怪。大概的原因是QueryRow对于GoodsOrderExt这种有嵌入的struct处理有问题
|
||
num, err := db.Raw(`
|
||
SELECT t1.*, t2.status waybill_status, t2.courier_name, t2.courier_mobile
|
||
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
|
||
WHERE t1.vendor_order_id = ? AND vendor_id = ?
|
||
`, vendorOrderID, vendorID).QueryRows(&orders)
|
||
if err == nil && num > 0 {
|
||
order = orders[0]
|
||
if isRefresh && vendorID == model.VendorIDJD {
|
||
tmpOrder, err2 := basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(vendorID).GetOrder(vendorOrderID)
|
||
if err = err2; err == nil {
|
||
order.CurrentConsigneeMobile = tmpOrder.ConsigneeMobile
|
||
} else {
|
||
order.CurrentConsigneeMobile = "Error"
|
||
globals.SugarLogger.Infof("GetOrderInfo GetOrder failed with error:%v", err2)
|
||
}
|
||
}
|
||
return order, nil
|
||
}
|
||
if err == nil {
|
||
err = ErrCanNotFindOrder
|
||
}
|
||
globals.SugarLogger.Infof("GetOrderInfo orderID:%s failed with error:%v", vendorOrderID, err)
|
||
return nil, err
|
||
}
|
||
|
||
func (c *OrderManager) GetOrderWaybillInfo(vendorOrderID string, vendorID int) (bills []*model.Waybill, err error) {
|
||
globals.SugarLogger.Debugf("GetOrderWaybillInfo orderID:%s", vendorOrderID)
|
||
db := orm.NewOrm()
|
||
_, err = db.Raw(`
|
||
SELECT t1.*
|
||
FROM waybill t1
|
||
WHERE t1.vendor_order_id = ? AND order_vendor_id = ?
|
||
`, vendorOrderID, vendorID).QueryRows(&bills)
|
||
if err == nil {
|
||
return bills, nil
|
||
}
|
||
globals.SugarLogger.Infof("GetOrderWaybillInfo orderID:%s failed with error:%v", vendorOrderID, err)
|
||
return nil, err
|
||
}
|