Merge remote-tracking branch 'remotes/origin/master' into lyb

This commit is contained in:
lyb
2018-08-10 16:52:26 +08:00
3 changed files with 63 additions and 22 deletions

View File

@@ -6,6 +6,7 @@ import (
"git.rosy.net.cn/baseapi" "git.rosy.net.cn/baseapi"
"git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/weixinmsg" "git.rosy.net.cn/jx-callback/business/jxutils/weixinmsg"
"git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/scheduler" "git.rosy.net.cn/jx-callback/business/scheduler"
@@ -172,44 +173,79 @@ func (c *OrderController) saveOrder(order *model.GoodsOrder, isAdjust bool, db o
return isDuplicated, err return isDuplicated, err
} }
func (c *OrderController) updateOrderSkuOtherInfo(orderSkus []*model.OrderSku, db orm.Ormer) (err error) { func (c *OrderController) updateOrderSkuOtherInfo(order *model.GoodsOrder, db orm.Ormer) (err error) {
jxStoreID := jxutils.GetJxStoreIDFromOrder(order)
if jxStoreID == 0 {
globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营]订单找不到京西门店信息orderID:%s", order.VendorOrderID)
return nil
}
orderSkus := order.Skus
var sql string var sql string
if orderSkus[0].VendorID == model.VendorIDJD { if orderSkus[0].VendorID == model.VendorIDJD {
sql = ` sql = `
SELECT t1.jdskuid, t1.skuid SELECT t1.jdskuid, t1.skuid, t2.price
FROM skumapper t1 FROM skumapper t1
/* JOIN jx_sku t2 ON t1.skuid = t2.id */ LEFT JOIN jx_sku_store_bind t2 ON t1.skuid = t2.jxskuid AND t2.jxstoreid = ?
WHERE t1.jdskuid IN ( WHERE t1.jdskuid IN (-1,
` `
} else if orderSkus[0].VendorID == model.VendorIDELM { } else if orderSkus[0].VendorID == model.VendorIDELM {
// 饿了么当前没有存映射关系 sql = `
return nil SELECT t2.jxskuid, t2.jxskuid, t2.price
FROM jx_sku_store_bind t2
WHERE t2.jxstoreid = ? AND t2.jxskuid IN (-1,
`
} else { } else {
panic(fmt.Sprintf("wrong vendorid:%d", orderSkus[0].VendorID)) panic(fmt.Sprintf("wrong vendorid:%d", orderSkus[0].VendorID))
} }
jdskuids := []interface{}{} sqlParams := []interface{}{jxStoreID}
for _, v := range orderSkus { for _, v := range orderSkus {
sql += "?," if orderSkus[0].VendorID == model.VendorIDJD {
jdskuids = append(jdskuids, int(utils.Str2Int64(v.VendorSkuID))) sql += "?,"
sqlParams = append(sqlParams, int(utils.Str2Int64(v.VendorSkuID)))
} else if v.SkuID != 0 {
sql += "?,"
sqlParams = append(sqlParams, v.SkuID)
}
} }
sql = sql[:len(sql)-1] + ")" sql = sql[:len(sql)-1] + ")"
var lists []orm.ParamsList var lists []orm.ParamsList
if num, err := db.Raw(sql, jdskuids...).ValuesList(&lists); err == nil && num > 0 { if num, err := db.Raw(sql, sqlParams...).ValuesList(&lists); err == nil {
skumapper := make(map[string]string) skumapper := make(map[string]orm.ParamsList)
for _, v := range lists { for _, v := range lists {
skumapper[v[0].(string)] = v[1].(string) skumapper[v[0].(string)] = v
} }
// globals.SugarLogger.Debug(skumapper) // globals.SugarLogger.Debug(skumapper)
for _, v := range orderSkus { for _, v := range orderSkus {
if jxskuid, ok := skumapper[v.VendorSkuID]; ok { if orderSkus[0].VendorID == model.VendorIDJD {
v.JxSkuID = int(utils.Str2Int64(jxskuid)) if values, ok := skumapper[v.VendorSkuID]; ok {
v.JxSkuID = int(utils.Str2Int64(utils.Interface2String(values[1])))
v.ShopPrice = utils.Str2Int64WithDefault(utils.Interface2String(values[2]), 0)
order.ShopPrice += v.ShopPrice
if v.ShopPrice == 0 {
globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营]京东订单sku门店价格为零orderID:%s sku:%v", order.VendorOrderID, v)
}
} else {
globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营]京东订单sku找不到门店价格orderID:%s sku:%v", order.VendorOrderID, v)
}
} else { } else {
globals.SugarLogger.Infof("updateOrderSkuOtherInfo can not find sku map:%v", v) if v.SkuID != 0 {
if values, ok := skumapper[utils.Int2Str(v.SkuID)]; ok {
v.ShopPrice = utils.Str2Int64WithDefault(utils.Interface2String(values[2]), 0)
order.ShopPrice += v.ShopPrice
if v.ShopPrice == 0 {
globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营]饿了么订单sku门店价格为零orderID:%s sku:%v", order.VendorOrderID, v)
}
} else {
globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营]饿了么订单sku找不到门店价格orderID:%s sku:%v", order.VendorOrderID, v)
}
} else {
globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营]饿了么订单sku没有京西信息orderID:%s sku:%v", order.VendorOrderID, v)
}
} }
} }
} else { } else {
globals.SugarLogger.Errorf("updateOrderSkuOtherInfo can not get sku info for orderID:%s, num:%d, error:%v", orderSkus[0].VendorOrderID, num, err) globals.SugarLogger.Errorf("updateOrderSkuOtherInfo can not get sku info for orderID:%s, num:%d, error:%v", order.VendorOrderID, num, err)
} }
return err return err
} }
@@ -237,9 +273,9 @@ func (c *OrderController) updateOrderOtherInfo(order *model.GoodsOrder, db orm.O
if num, err := db.Raw(sql, utils.Str2Int64(order.VendorStoreID)).ValuesList(&lists); err == nil && num == 1 { if num, err := db.Raw(sql, utils.Str2Int64(order.VendorStoreID)).ValuesList(&lists); err == nil && num == 1 {
order.JxStoreID = int(utils.Str2Int64(lists[0][0].(string))) order.JxStoreID = int(utils.Str2Int64(lists[0][0].(string)))
} else { } else {
globals.SugarLogger.Warnf("updateOrderOtherInfo can not find store info for orderID:%s, store:%s, num:%d, error:%v", order.VendorOrderID, order.VendorStoreID, num, err) globals.SugarLogger.Infof("updateOrderOtherInfo [运营]订单orderID:%s找不到相应的京西门店信息请处理, store:%s, num:%d, error:%v", order.VendorOrderID, order.VendorStoreID, num, err)
} }
err = c.updateOrderSkuOtherInfo(order.Skus, db) err = c.updateOrderSkuOtherInfo(order, db)
return err return err
} }

View File

@@ -217,6 +217,11 @@ func (s *DefScheduler) OnOrderStatusChanged(status *model.OrderStatus, isPending
if status.LockStatus == model.OrderStatusUnknown && status.Status > model.OrderStatusUnknown { // 只处理状态转换,一般消息不处理 if status.LockStatus == model.OrderStatusUnknown && status.Status > model.OrderStatusUnknown { // 只处理状态转换,一般消息不处理
s.resetTimer(savedOrderInfo, nil, isPending) s.resetTimer(savedOrderInfo, nil, isPending)
if status.Status >= model.OrderStatusEndBegin { if status.Status >= model.OrderStatusEndBegin {
if status.Status == model.OrderStatusDelivered || status.Status == model.OrderStatusFinished {
if curWaybill := savedOrderInfo.waybills[savedOrderInfo.order.WaybillVendorID]; curWaybill != nil {
globals.SugarLogger.Warnf("OnOrderStatusChanged [运营]订单orderID:%s可能被手动点击送达有可能导致当前有效运单:%s被非正常取消", status.VendorOrderID, curWaybill.VendorWaybillID)
}
}
s.cancelOtherWaybills(savedOrderInfo, nil) s.cancelOtherWaybills(savedOrderInfo, nil)
s.orderMap.Delete(jxutils.GetUniversalOrderIDFromOrderStatus(status)) s.orderMap.Delete(jxutils.GetUniversalOrderIDFromOrderStatus(status))
} }
@@ -385,7 +390,6 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
globals.SugarLogger.Debugf("createWaybillOn3rdProviders, orderID:%s, status:%d, excludeBill:%v", order.VendorOrderID, order.Status, excludeBill) globals.SugarLogger.Debugf("createWaybillOn3rdProviders, orderID:%s, status:%d, excludeBill:%v", order.VendorOrderID, order.Status, excludeBill)
if order.LockStatus == model.OrderStatusUnknown && order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin { // 订单在配送中被取消时就是配送中状态 if order.LockStatus == model.OrderStatusUnknown && order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin { // 订单在配送中被取消时就是配送中状态
if savedOrderInfo.isNeed3rdDelivery { if savedOrderInfo.isNeed3rdDelivery {
savedOrderInfo.retryCount++
if savedOrderInfo.retryCount <= maxWaybillRetryCount { if savedOrderInfo.retryCount <= maxWaybillRetryCount {
successCount := 0 successCount := 0
for _, vendorID := range savedOrderInfo.supported3rdCarriers { for _, vendorID := range savedOrderInfo.supported3rdCarriers {
@@ -396,18 +400,19 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
} }
} }
if successCount != 0 { if successCount != 0 {
savedOrderInfo.retryCount++
err = nil err = nil
} else { } else {
globals.SugarLogger.Infof("createWaybillOn3rdProviders, orderID:%s all failed", order.VendorOrderID) globals.SugarLogger.Infof("createWaybillOn3rdProviders, orderID:%s all failed", order.VendorOrderID)
err = scheduler.ErrCanNotCreateAtLeastOneWaybill err = scheduler.ErrCanNotCreateAtLeastOneWaybill
} }
} else { } else {
globals.SugarLogger.Warnf("createWaybillOn3rdProviders, orderID:%s failed %d times, stop schedule", order.VendorOrderID, savedOrderInfo.retryCount-1) globals.SugarLogger.Warnf("createWaybillOn3rdProviders [运营]同一订单orderID:%s尝试了%d次创建运单失败, 停止调度,如果还需要发单,请人工处理", order.VendorOrderID, savedOrderInfo.retryCount)
tmpLog := &legacymodel.TempLog{ tmpLog := &legacymodel.TempLog{
VendorOrderID: order.VendorOrderID, VendorOrderID: order.VendorOrderID,
RefVendorOrderID: order.VendorOrderID, RefVendorOrderID: order.VendorOrderID,
Msg: fmt.Sprintf("createWaybillOn3rdProviders, orderID:%s failed %d times, stop schedule", order.VendorOrderID, savedOrderInfo.retryCount-1), Msg: fmt.Sprintf("createWaybillOn3rdProviders, orderID:%s failed %d times, stop schedule", order.VendorOrderID, savedOrderInfo.retryCount),
} }
db := orm.NewOrm() db := orm.NewOrm()
db.Insert(tmpLog) db.Insert(tmpLog)

View File

@@ -137,7 +137,7 @@ func (f *API) AccessFreshFood(apiStr string, params url.Values) error {
} }
} }
if err != nil || response.StatusCode != 200 { if err != nil || response.StatusCode != 200 {
globals.SugarLogger.Infof("AccessFreshFood Call %s error:%v, url:%s, response: %v", fullURL, err, fullURL, response) globals.SugarLogger.Infof("AccessFreshFood finally failed Call %s error:%v, url:%s, response: %v", fullURL, err, fullURL, response)
if err != nil { if err != nil {
return err return err
} }