- all call CallFuncLogError add order info
- callLegacyMsgHandler, callNewMsgHandler and generateLegacyJxOrder config - call legacy lefted msg handler in new process(elm urge order and bad comment on jd)
This commit is contained in:
@@ -41,7 +41,7 @@ func addOrderOrWaybillStatus(status *model.OrderStatus, db orm.Ormer) (isDuplica
|
|||||||
utils.CallFuncLogError(func() error {
|
utils.CallFuncLogError(func() error {
|
||||||
_, err = db.Update(status, "DuplicatedCount")
|
_, err = db.Update(status, "DuplicatedCount")
|
||||||
return err
|
return err
|
||||||
}, "addOrderOrWaybillStatus update DuplicatedCount")
|
}, "addOrderOrWaybillStatus update DuplicatedCount, status:%v", status)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||||
"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"
|
||||||
|
"git.rosy.net.cn/jx-callback/legacy/freshfood"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -117,7 +118,7 @@ func (c *OrderController) onOrderCancelRefundMsg(msg *elmapi.CallbackOrderCancel
|
|||||||
return elmapi.Err2CallbackResponse(controller.OrderManager.OnOrderStatusChanged(status), status.VendorStatus)
|
return elmapi.Err2CallbackResponse(controller.OrderManager.OnOrderStatusChanged(status), status.VendorStatus)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *OrderController) getOrderInfo(orderID string) (order *model.GoodsOrder, err error) {
|
func (c *OrderController) GetOrder(orderID string) (order *model.GoodsOrder, err error) {
|
||||||
result, err := api.ElmAPI.GetOrder(orderID)
|
result, err := api.ElmAPI.GetOrder(orderID)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
phoneList := result["phoneList"].([]interface{})
|
phoneList := result["phoneList"].([]interface{})
|
||||||
@@ -180,7 +181,7 @@ func (c *OrderController) getOrderInfo(orderID string) (order *model.GoodsOrder,
|
|||||||
//
|
//
|
||||||
func (c *OrderController) onOrderNew(msg map[string]interface{}) (response *elmapi.CallbackResponse) {
|
func (c *OrderController) onOrderNew(msg map[string]interface{}) (response *elmapi.CallbackResponse) {
|
||||||
// todo 这里应该可以直接用msg里的内容,而不用再次去查
|
// todo 这里应该可以直接用msg里的内容,而不用再次去查
|
||||||
order, err := c.getOrderInfo(msg["orderId"].(string))
|
order, err := c.GetOrder(msg["orderId"].(string))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
order.VendorStatus = c.stateAndType2Str(msg["status"].(string), elmapi.MsgTypeOrderValid)
|
order.VendorStatus = c.stateAndType2Str(msg["status"].(string), elmapi.MsgTypeOrderValid)
|
||||||
order.Status = model.OrderStatusNew
|
order.Status = model.OrderStatusNew
|
||||||
@@ -203,6 +204,9 @@ func (c *OrderController) onOrderUserUrgeOrder(msg *elmapi.CallbackOrderUrgeMsg)
|
|||||||
VendorStatus: utils.Int2Str(msg.MsgType),
|
VendorStatus: utils.Int2Str(msg.MsgType),
|
||||||
StatusTime: utils.Timestamp2Time(msg.UpdateTime),
|
StatusTime: utils.Timestamp2Time(msg.UpdateTime),
|
||||||
}
|
}
|
||||||
|
if globals.ReallyCallPlatformAPI {
|
||||||
|
freshfood.FreshFoodAPI.ELMClientUrgeOrder(msg.OrderID)
|
||||||
|
}
|
||||||
return elmapi.Err2CallbackResponse(controller.OrderManager.OnOrderStatusChanged(status), status.VendorStatus)
|
return elmapi.Err2CallbackResponse(controller.OrderManager.OnOrderStatusChanged(status), status.VendorStatus)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,9 +228,6 @@ func (c *OrderController) spliltCompositeState(compositeState string) (state str
|
|||||||
|
|
||||||
// PurchasePlatformHandler
|
// PurchasePlatformHandler
|
||||||
func (c *OrderController) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) {
|
func (c *OrderController) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) {
|
||||||
globals.SugarLogger.Infof("AcceptOrRefuseOrder order:%v", order)
|
|
||||||
return nil
|
|
||||||
|
|
||||||
if isAcceptIt {
|
if isAcceptIt {
|
||||||
err = api.ElmAPI.ConfirmOrder(order.VendorOrderID)
|
err = api.ElmAPI.ConfirmOrder(order.VendorOrderID)
|
||||||
} else {
|
} else {
|
||||||
@@ -238,30 +239,18 @@ func (c *OrderController) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI
|
|||||||
// 饿了么没有拣货这个状态,直接返回成功
|
// 饿了么没有拣货这个状态,直接返回成功
|
||||||
// 真实流程中也不会调用这个方法,因为接收订单后状态会直接转移到已拣货
|
// 真实流程中也不会调用这个方法,因为接收订单后状态会直接转移到已拣货
|
||||||
func (c *OrderController) PickedUpGoods(order *model.GoodsOrder) (err error) {
|
func (c *OrderController) PickedUpGoods(order *model.GoodsOrder) (err error) {
|
||||||
globals.SugarLogger.Infof("PickedUpGoods order:%v", order)
|
|
||||||
return nil
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *OrderController) Swtich2SelfDeliver(vendorOrderID string) (err error) {
|
func (c *OrderController) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) {
|
||||||
globals.SugarLogger.Infof("Swtich2SelfDeliver order:%v", vendorOrderID)
|
return api.ElmAPI.DeliveryBySelfLite(order.VendorOrderID)
|
||||||
return nil
|
|
||||||
|
|
||||||
return api.ElmAPI.DeliveryBySelfLite(vendorOrderID)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *OrderController) SelfDeliverDelievering(order *model.GoodsOrder) (err error) {
|
func (c *OrderController) SelfDeliverDelievering(order *model.GoodsOrder) (err error) {
|
||||||
globals.SugarLogger.Infof("SelfDeliverDelievering order:%v", order)
|
|
||||||
return nil
|
|
||||||
|
|
||||||
return api.ElmAPI.StartDeliveryBySelf(order.VendorOrderID, order.ConsigneeMobile)
|
return api.ElmAPI.StartDeliveryBySelf(order.VendorOrderID, order.ConsigneeMobile)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *OrderController) SelfDeliverDelievered(order *model.GoodsOrder) (err error) {
|
func (c *OrderController) SelfDeliverDelievered(order *model.GoodsOrder) (err error) {
|
||||||
globals.SugarLogger.Infof("SelfDeliverDelievered order:%v", order)
|
|
||||||
return nil
|
|
||||||
|
|
||||||
return api.ElmAPI.CompleteDeliveryBySelf(order.VendorOrderID, order.ConsigneeMobile)
|
return api.ElmAPI.CompleteDeliveryBySelf(order.VendorOrderID, order.ConsigneeMobile)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/business/scheduler"
|
"git.rosy.net.cn/jx-callback/business/scheduler"
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
"git.rosy.net.cn/jx-callback/globals/api"
|
"git.rosy.net.cn/jx-callback/globals/api"
|
||||||
|
"git.rosy.net.cn/jx-callback/legacy/freshfood"
|
||||||
)
|
)
|
||||||
|
|
||||||
type OrderController struct {
|
type OrderController struct {
|
||||||
@@ -49,6 +50,11 @@ func (c *OrderController) onOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi
|
|||||||
status.Status = model.OrderStatusCanceled
|
status.Status = model.OrderStatusCanceled
|
||||||
case jdapi.OrderStatusUserApplyCancel:
|
case jdapi.OrderStatusUserApplyCancel:
|
||||||
status.Status = model.OrderStatusApplyCancel
|
status.Status = model.OrderStatusApplyCancel
|
||||||
|
case jdapi.OrderStatusAddComment, jdapi.OrderStatusModifyComment:
|
||||||
|
status.Status = model.OrderStatusUnknown
|
||||||
|
if globals.ReallyCallPlatformAPI {
|
||||||
|
freshfood.FreshFoodAPI.JDOrderComment(msg)
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
status.Status = model.OrderStatusUnknown
|
status.Status = model.OrderStatusUnknown
|
||||||
}
|
}
|
||||||
@@ -61,12 +67,12 @@ func (c *OrderController) onOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi
|
|||||||
return retVal
|
return retVal
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *OrderController) getOrderInfo(msg *jdapi.CallbackOrderMsg) (order *model.GoodsOrder, err error) {
|
func (c *OrderController) GetOrder(orderID string) (order *model.GoodsOrder, err error) {
|
||||||
result, err := api.JdAPI.QuerySingleOrder(msg.BillID)
|
result, err := api.JdAPI.QuerySingleOrder(orderID)
|
||||||
// globals.SugarLogger.Info(result)
|
// globals.SugarLogger.Info(result)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
order = &model.GoodsOrder{
|
order = &model.GoodsOrder{
|
||||||
VendorOrderID: msg.BillID,
|
VendorOrderID: orderID,
|
||||||
VendorID: model.VendorIDJD,
|
VendorID: model.VendorIDJD,
|
||||||
VendorStoreID: result["produceStationNo"].(string),
|
VendorStoreID: result["produceStationNo"].(string),
|
||||||
StoreID: int(utils.Str2Int64WithDefault(utils.Interface2String(result["produceStationNoIsv"]), 0)),
|
StoreID: int(utils.Str2Int64WithDefault(utils.Interface2String(result["produceStationNoIsv"]), 0)),
|
||||||
@@ -77,7 +83,7 @@ func (c *OrderController) getOrderInfo(msg *jdapi.CallbackOrderMsg) (order *mode
|
|||||||
CoordinateType: model.CoordinateTypeMars,
|
CoordinateType: model.CoordinateTypeMars,
|
||||||
BuyerComment: utils.FilterMb4(strings.Trim(utils.Interface2String(result["orderBuyerRemark"]), "\n\r\t ")),
|
BuyerComment: utils.FilterMb4(strings.Trim(utils.Interface2String(result["orderBuyerRemark"]), "\n\r\t ")),
|
||||||
ExpectedDeliveredTime: utils.Str2TimeWithDefault(utils.Interface2String(result["orderPreEndDeliveryTime"]), utils.DefaultTimeValue),
|
ExpectedDeliveredTime: utils.Str2TimeWithDefault(utils.Interface2String(result["orderPreEndDeliveryTime"]), utils.DefaultTimeValue),
|
||||||
VendorStatus: msg.StatusID,
|
VendorStatus: utils.Int64ToStr(utils.MustInterface2Int64(result["orderStatus"])),
|
||||||
OrderSeq: int(utils.MustInterface2Int64(result["orderNum"])),
|
OrderSeq: int(utils.MustInterface2Int64(result["orderNum"])),
|
||||||
StatusTime: utils.Str2Time(result["orderPurchaseTime"].(string)),
|
StatusTime: utils.Str2Time(result["orderPurchaseTime"].(string)),
|
||||||
OriginalData: utils.FilterMb4(string(utils.MustMarshal(result))),
|
OriginalData: utils.FilterMb4(string(utils.MustMarshal(result))),
|
||||||
@@ -103,7 +109,7 @@ func (c *OrderController) getOrderInfo(msg *jdapi.CallbackOrderMsg) (order *mode
|
|||||||
for _, product2 := range result["product"].([]interface{}) {
|
for _, product2 := range result["product"].([]interface{}) {
|
||||||
product := product2.(map[string]interface{})
|
product := product2.(map[string]interface{})
|
||||||
sku := &model.OrderSku{
|
sku := &model.OrderSku{
|
||||||
VendorOrderID: msg.BillID,
|
VendorOrderID: orderID,
|
||||||
VendorID: model.VendorIDJD,
|
VendorID: model.VendorIDJD,
|
||||||
Count: int(utils.MustInterface2Int64(product["skuCount"])),
|
Count: int(utils.MustInterface2Int64(product["skuCount"])),
|
||||||
SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(product["skuIdIsv"]), 0)),
|
SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(product["skuIdIsv"]), 0)),
|
||||||
@@ -128,7 +134,7 @@ func (c *OrderController) getOrderInfo(msg *jdapi.CallbackOrderMsg) (order *mode
|
|||||||
|
|
||||||
//
|
//
|
||||||
func (c *OrderController) onOrderNew(msg *jdapi.CallbackOrderMsg) (response *jdapi.CallbackResponse) {
|
func (c *OrderController) onOrderNew(msg *jdapi.CallbackOrderMsg) (response *jdapi.CallbackResponse) {
|
||||||
order, err := c.getOrderInfo(msg)
|
order, err := c.GetOrder(msg.BillID)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
order.Status = model.OrderStatusNew
|
order.Status = model.OrderStatusNew
|
||||||
err = controller.OrderManager.OnOrderNew(order)
|
err = controller.OrderManager.OnOrderNew(order)
|
||||||
@@ -140,7 +146,7 @@ func (c *OrderController) onOrderNew(msg *jdapi.CallbackOrderMsg) (response *jda
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *OrderController) onOrderAdjust(msg *jdapi.CallbackOrderMsg) *jdapi.CallbackResponse {
|
func (c *OrderController) onOrderAdjust(msg *jdapi.CallbackOrderMsg) *jdapi.CallbackResponse {
|
||||||
order, err := c.getOrderInfo(msg)
|
order, err := c.GetOrder(msg.BillID)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
order.Status = model.OrderStatusAdjust
|
order.Status = model.OrderStatusAdjust
|
||||||
err = controller.OrderManager.OnOrderAdjust(order)
|
err = controller.OrderManager.OnOrderAdjust(order)
|
||||||
@@ -166,41 +172,26 @@ func (c *OrderController) callbackMsg2Status(msg *jdapi.CallbackOrderMsg) *model
|
|||||||
|
|
||||||
// PurchasePlatformHandler
|
// PurchasePlatformHandler
|
||||||
func (c *OrderController) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) {
|
func (c *OrderController) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) {
|
||||||
globals.SugarLogger.Infof("AcceptOrRefuseOrder order:%v", order.VendorOrderID)
|
|
||||||
return nil
|
|
||||||
|
|
||||||
_, err = api.JdAPI.OrderAcceptOperate(order.VendorOrderID, isAcceptIt)
|
_, err = api.JdAPI.OrderAcceptOperate(order.VendorOrderID, isAcceptIt)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *OrderController) PickedUpGoods(order *model.GoodsOrder) (err error) {
|
func (c *OrderController) PickedUpGoods(order *model.GoodsOrder) (err error) {
|
||||||
globals.SugarLogger.Infof("PickedUpGoods order:%v", order)
|
|
||||||
return nil
|
|
||||||
|
|
||||||
_, err = api.JdAPI.OrderJDZBDelivery(order.VendorOrderID)
|
_, err = api.JdAPI.OrderJDZBDelivery(order.VendorOrderID)
|
||||||
return c.translateOrderRelatedErr(err)
|
return c.translateOrderRelatedErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *OrderController) Swtich2SelfDeliver(vendorOrderID string) (err error) {
|
func (c *OrderController) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) {
|
||||||
globals.SugarLogger.Infof("Swtich2SelfDeliver order:%v", vendorOrderID)
|
_, err = api.JdAPI.ModifySellerDelivery(order.VendorOrderID)
|
||||||
return nil
|
|
||||||
|
|
||||||
_, err = api.JdAPI.ModifySellerDelivery(vendorOrderID)
|
|
||||||
return c.translateOrderRelatedErr(err)
|
return c.translateOrderRelatedErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *OrderController) SelfDeliverDelievering(order *model.GoodsOrder) (err error) {
|
func (c *OrderController) SelfDeliverDelievering(order *model.GoodsOrder) (err error) {
|
||||||
globals.SugarLogger.Infof("SelfDeliverDelievering order:%v", order)
|
|
||||||
return nil
|
|
||||||
|
|
||||||
_, err = api.JdAPI.OrderSerllerDelivery(order.VendorOrderID)
|
_, err = api.JdAPI.OrderSerllerDelivery(order.VendorOrderID)
|
||||||
return c.translateOrderRelatedErr(err)
|
return c.translateOrderRelatedErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *OrderController) SelfDeliverDelievered(order *model.GoodsOrder) (err error) {
|
func (c *OrderController) SelfDeliverDelievered(order *model.GoodsOrder) (err error) {
|
||||||
globals.SugarLogger.Infof("SelfDeliverDelievered order:%v", order)
|
|
||||||
return nil
|
|
||||||
|
|
||||||
_, err = api.JdAPI.DeliveryEndOrder(order.VendorOrderID)
|
_, err = api.JdAPI.DeliveryEndOrder(order.VendorOrderID)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,14 +60,14 @@ func (c *OrderController) OnOrderAdjust(order *model.GoodsOrder) (err error) {
|
|||||||
err = utils.CallFuncLogError(func() error {
|
err = utils.CallFuncLogError(func() error {
|
||||||
_, err = db.Raw("DELETE FROM order_sku WHERE vendor_order_id = ? AND vendor_id = ?", order.VendorOrderID, order.VendorID).Exec()
|
_, err = db.Raw("DELETE FROM order_sku WHERE vendor_order_id = ? AND vendor_id = ?", order.VendorOrderID, order.VendorID).Exec()
|
||||||
return err
|
return err
|
||||||
}, "OnAdjustOrder delete order")
|
}, "OnAdjustOrder delete order, orderID:%s", order.VendorOrderID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = utils.CallFuncLogError(func() error {
|
err = utils.CallFuncLogError(func() error {
|
||||||
_, err = db.Raw("DELETE FROM goods_order WHERE vendor_order_id = ? AND vendor_id = ?", order.VendorOrderID, order.VendorID).Exec()
|
_, err = db.Raw("DELETE FROM goods_order WHERE vendor_order_id = ? AND vendor_id = ?", order.VendorOrderID, order.VendorID).Exec()
|
||||||
return err
|
return err
|
||||||
}, "OnAdjustOrder delete order_sku")
|
}, "OnAdjustOrder delete order_sku, orderID:%s", order.VendorOrderID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -82,7 +82,7 @@ func (c *OrderController) OnOrderStatusChanged(orderStatus *model.OrderStatus) (
|
|||||||
isDuplicated, err := c.addOrderStatus(orderStatus, nil)
|
isDuplicated, err := c.addOrderStatus(orderStatus, nil)
|
||||||
if err == nil && !isDuplicated {
|
if err == nil && !isDuplicated {
|
||||||
err = scheduler.CurrentScheduler.OnOrderStatusChanged(orderStatus)
|
err = scheduler.CurrentScheduler.OnOrderStatusChanged(orderStatus)
|
||||||
if globals.HandleLegacyJxOrder {
|
if globals.GenerateLegacyJxOrder {
|
||||||
c.legacyJxOrderStatusChanged(orderStatus, nil)
|
c.legacyJxOrderStatusChanged(orderStatus, nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -116,7 +116,7 @@ func (c *OrderController) saveOrder(order *model.GoodsOrder, isAdjust bool, db o
|
|||||||
baseapi.SugarLogger.Infof("insert order_sku error:%v", err)
|
baseapi.SugarLogger.Infof("insert order_sku error:%v", err)
|
||||||
} else {
|
} else {
|
||||||
db.Commit()
|
db.Commit()
|
||||||
if globals.HandleLegacyJxOrder {
|
if globals.GenerateLegacyJxOrder {
|
||||||
c.legacyWriteJxOrder(order, db, isAdjust)
|
c.legacyWriteJxOrder(order, db, isAdjust)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -221,7 +221,7 @@ func (c *OrderController) addOrderStatus(orderStatus *model.OrderStatus, db orm.
|
|||||||
utils.CallFuncLogError(func() error {
|
utils.CallFuncLogError(func() error {
|
||||||
_, err = db.QueryTable("goods_order").Filter("vendor_order_id", orderStatus.VendorOrderID).Filter("vendor_id", orderStatus.VendorID).Update(params)
|
_, err = db.QueryTable("goods_order").Filter("vendor_order_id", orderStatus.VendorOrderID).Filter("vendor_id", orderStatus.VendorID).Update(params)
|
||||||
return err
|
return err
|
||||||
}, "update order")
|
}, "update order, status:%v", orderStatus)
|
||||||
}
|
}
|
||||||
return isDuplicated, err
|
return isDuplicated, err
|
||||||
}
|
}
|
||||||
@@ -249,6 +249,6 @@ func (c *OrderController) UpdateWaybillVendorID(bill *model.Waybill) (err error)
|
|||||||
utils.CallFuncLogError(func() error {
|
utils.CallFuncLogError(func() error {
|
||||||
_, err = db.QueryTable("goods_order").Filter("vendor_order_id", bill.VendorOrderID).Filter("vendor_id", bill.OrderVendorID).Update(params)
|
_, err = db.QueryTable("goods_order").Filter("vendor_order_id", bill.VendorOrderID).Filter("vendor_id", bill.OrderVendorID).Update(params)
|
||||||
return err
|
return err
|
||||||
}, "update order")
|
}, "update order, bill%v", bill)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ func (w *WaybillController) OnWaybillStatusChanged(bill *model.Waybill) (err err
|
|||||||
weixinmsg.NotifyWaybillStatus(bill, order)
|
weixinmsg.NotifyWaybillStatus(bill, order)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if globals.HandleLegacyJxOrder {
|
if globals.GenerateLegacyJxOrder {
|
||||||
w.legacyWaybillStatusChanged(bill, db)
|
w.legacyWaybillStatusChanged(bill, db)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -106,7 +106,7 @@ func (w *WaybillController) addWaybillStatus(bill *model.Waybill, db orm.Ormer,
|
|||||||
utils.CallFuncLogError(func() error {
|
utils.CallFuncLogError(func() error {
|
||||||
_, err = db.QueryTable("waybill").Filter("vendor_waybill_id", bill.VendorWaybillID).Filter("waybill_vendor_id", bill.WaybillVendorID).Update(params)
|
_, err = db.QueryTable("waybill").Filter("vendor_waybill_id", bill.VendorWaybillID).Filter("waybill_vendor_id", bill.WaybillVendorID).Update(params)
|
||||||
return err
|
return err
|
||||||
}, "update waybill status")
|
}, "update waybill status, bill:%v", bill)
|
||||||
}
|
}
|
||||||
return isDuplicated, err
|
return isDuplicated, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ type DefScheduler struct {
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
sch := &DefScheduler{}
|
sch := &DefScheduler{}
|
||||||
|
sch.IsReallyCallPlatformAPI = globals.ReallyCallPlatformAPI
|
||||||
sch.Init()
|
sch.Init()
|
||||||
scheduler.CurrentScheduler = sch
|
scheduler.CurrentScheduler = sch
|
||||||
sch.defWorkflowConfig = map[int]*scheduler.StatusActionConfig{
|
sch.defWorkflowConfig = map[int]*scheduler.StatusActionConfig{
|
||||||
@@ -47,7 +48,7 @@ func init() {
|
|||||||
Timeout: 1 * time.Second,
|
Timeout: 1 * time.Second,
|
||||||
TimeoutAction: func(order *model.GoodsOrder) (err error) {
|
TimeoutAction: func(order *model.GoodsOrder) (err error) {
|
||||||
_ = sch.handleAutoAcceptOrder(order.VendorOrderID, order.VendorID, order.ConsigneeMobile, jxutils.GetJxStoreIDFromOrder(order), nil, func(isAcceptIt bool) error {
|
_ = sch.handleAutoAcceptOrder(order.VendorOrderID, order.VendorID, order.ConsigneeMobile, jxutils.GetJxStoreIDFromOrder(order), nil, func(isAcceptIt bool) error {
|
||||||
return sch.GetPurchasePlatformFromVendorID(order.VendorID).AcceptOrRefuseOrder(order, isAcceptIt)
|
return sch.AcceptOrRefuseOrder(order, isAcceptIt)
|
||||||
})
|
})
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
@@ -55,7 +56,7 @@ func init() {
|
|||||||
model.OrderStatusAccepted: &scheduler.StatusActionConfig{ // 自动拣货
|
model.OrderStatusAccepted: &scheduler.StatusActionConfig{ // 自动拣货
|
||||||
Timeout: time2AutoPickupMin,
|
Timeout: time2AutoPickupMin,
|
||||||
TimeoutAction: func(order *model.GoodsOrder) (err error) {
|
TimeoutAction: func(order *model.GoodsOrder) (err error) {
|
||||||
return sch.GetPurchasePlatformFromVendorID(order.VendorID).PickedUpGoods(order)
|
return sch.PickedUpGoods(order)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
model.OrderStatusFinishedPickup: &scheduler.StatusActionConfig{ // 尝试召唤更多物流
|
model.OrderStatusFinishedPickup: &scheduler.StatusActionConfig{ // 尝试召唤更多物流
|
||||||
@@ -128,7 +129,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill) (err error) {
|
|||||||
if savedOrderInfo.order.WaybillVendorID != model.VendorIDUnknown {
|
if savedOrderInfo.order.WaybillVendorID != model.VendorIDUnknown {
|
||||||
globals.SugarLogger.Infof("OnWaybillStatusChanged multiple waybill created, bill:%v", bill)
|
globals.SugarLogger.Infof("OnWaybillStatusChanged multiple waybill created, bill:%v", bill)
|
||||||
if bill.WaybillVendorID != bill.WaybillVendorID {
|
if bill.WaybillVendorID != bill.WaybillVendorID {
|
||||||
s.GetDeliveryPlatformFromVendorID(bill.WaybillVendorID).CancelWaybill(bill)
|
s.CancelWaybill(bill)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -161,12 +162,12 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill) (err error) {
|
|||||||
}
|
}
|
||||||
case model.WaybillStatusDelivering:
|
case model.WaybillStatusDelivering:
|
||||||
if savedOrderInfo.order.VendorID != bill.WaybillVendorID {
|
if savedOrderInfo.order.VendorID != bill.WaybillVendorID {
|
||||||
s.GetPurchasePlatformFromVendorID(bill.OrderVendorID).SelfDeliverDelievering(savedOrderInfo.order)
|
s.SelfDeliverDelievering(savedOrderInfo.order)
|
||||||
}
|
}
|
||||||
case model.WaybillStatusDelivered:
|
case model.WaybillStatusDelivered:
|
||||||
s.removeWaybillFromMap(savedOrderInfo, bill)
|
s.removeWaybillFromMap(savedOrderInfo, bill)
|
||||||
if savedOrderInfo.order.VendorID != bill.WaybillVendorID {
|
if savedOrderInfo.order.VendorID != bill.WaybillVendorID {
|
||||||
s.GetPurchasePlatformFromVendorID(bill.OrderVendorID).SelfDeliverDelievered(savedOrderInfo.order)
|
s.SelfDeliverDelievered(savedOrderInfo.order)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -198,11 +199,11 @@ func (s *DefScheduler) removeWaybillFromMap(savedOrderInfo *WatchOrderInfo, bill
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *DefScheduler) createWaybillOn3rdProviders(order *model.GoodsOrder, excludeBill *model.Waybill) (err error) {
|
func (s *DefScheduler) createWaybillOn3rdProviders(order *model.GoodsOrder, excludeBill *model.Waybill) (err error) {
|
||||||
globals.SugarLogger.Debugf("createWaybillOn3rdProviders, order:%v", order)
|
globals.SugarLogger.Debugf("createWaybillOn3rdProviders, orderID:%s, excludeBill:%v", order.VendorOrderID, excludeBill)
|
||||||
successCount := 0
|
successCount := 0
|
||||||
for k, v := range s.DeliveryPlatformHandlers {
|
for vendorID := range s.DeliveryPlatformHandlers {
|
||||||
if excludeBill == nil || k != excludeBill.WaybillVendorID {
|
if excludeBill == nil || vendorID != excludeBill.WaybillVendorID {
|
||||||
if err = v.CreateWaybill(order); err == nil {
|
if err = s.CreateWaybill(vendorID, order); err == nil {
|
||||||
successCount++
|
successCount++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -210,28 +211,35 @@ func (s *DefScheduler) createWaybillOn3rdProviders(order *model.GoodsOrder, excl
|
|||||||
if successCount != 0 {
|
if successCount != 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
globals.SugarLogger.Warnf("createWaybillOn3rdProviders, orderID:%s all failed", order.VendorOrderID)
|
||||||
return scheduler.ErrCanNotCreateAtLeastOneWaybill
|
return scheduler.ErrCanNotCreateAtLeastOneWaybill
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *DefScheduler) cancelOtherWaybills(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
|
func (s *DefScheduler) cancelOtherWaybills(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
|
||||||
globals.SugarLogger.Debugf("cancelOtherWaybills, order:%v, bill:%v", savedOrderInfo.order, bill)
|
globals.SugarLogger.Debugf("cancelOtherWaybills, orderID:%s, bill:%v", savedOrderInfo.order.VendorOrderID, bill)
|
||||||
for _, v := range savedOrderInfo.waybills {
|
for _, v := range savedOrderInfo.waybills {
|
||||||
if (v.OrderVendorID != v.WaybillVendorID) && (bill == nil || !(v.WaybillVendorID == bill.WaybillVendorID && v.VendorWaybillID == bill.VendorWaybillID)) {
|
if (v.OrderVendorID != v.WaybillVendorID) && (bill == nil || !(v.WaybillVendorID == bill.WaybillVendorID && v.VendorWaybillID == bill.VendorWaybillID)) {
|
||||||
_ = s.GetDeliveryPlatformFromVendorID(v.WaybillVendorID).CancelWaybill(v)
|
s.CancelWaybill(v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if bill != nil && bill.WaybillVendorID != bill.OrderVendorID {
|
if bill != nil && bill.WaybillVendorID != bill.OrderVendorID {
|
||||||
s.swtich2SelfDeliverWithRetry(bill, 2, 10*time.Second)
|
s.swtich2SelfDeliverWithRetry(savedOrderInfo.order, bill, 2, 10*time.Second)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *DefScheduler) swtich2SelfDeliverWithRetry(bill *model.Waybill, retryCount int, duration time.Duration) {
|
// todo 这个函数也可能有线程安全问题
|
||||||
|
func (s *DefScheduler) swtich2SelfDeliverWithRetry(order *model.GoodsOrder, bill *model.Waybill, retryCount int, duration time.Duration) {
|
||||||
|
globals.SugarLogger.Debugf("Swtich2SelfDeliver orderID:%s", order.VendorOrderID)
|
||||||
utils.CallFuncRetryAsync(func(index int) error {
|
utils.CallFuncRetryAsync(func(index int) error {
|
||||||
err := s.GetPurchasePlatformFromVendorID(bill.OrderVendorID).Swtich2SelfDeliver(bill.VendorOrderID)
|
err := s.Swtich2SelfDeliver(order)
|
||||||
|
if err != nil {
|
||||||
|
globals.SugarLogger.Infof("Swtich2SelfDeliver failed, orderID:%s, error:%v", order.VendorOrderID, err)
|
||||||
if err != nil && index == 0 {
|
if err != nil && index == 0 {
|
||||||
|
globals.SugarLogger.Warnf("Swtich2SelfDeliver finally failed, orderID:%s, error:%v, have to cancel bill:%v", order.VendorOrderID, err, bill)
|
||||||
// 如果购买平台转商家自送失败,最终还是要取消3方物流
|
// 如果购买平台转商家自送失败,最终还是要取消3方物流
|
||||||
s.GetDeliveryPlatformFromVendorID(bill.WaybillVendorID).CancelWaybill(bill)
|
s.CancelWaybill(bill)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}, duration, retryCount)
|
}, duration, retryCount)
|
||||||
@@ -250,7 +258,7 @@ func (s *DefScheduler) loadSavedOrderFromMap(status *model.OrderStatus) *WatchOr
|
|||||||
s.orderMap.Store(universalOrderID, realSavedInfo)
|
s.orderMap.Store(universalOrderID, realSavedInfo)
|
||||||
} else {
|
} else {
|
||||||
realSavedInfo.dirty = 0
|
realSavedInfo.dirty = 0
|
||||||
globals.SugarLogger.Infof("order is dirty, vendorOrderID:%s, vendorID:%d, load it", status.VendorOrderID, status.VendorID)
|
globals.SugarLogger.Infof("order is dirty, orderID:%s, load it", status.VendorOrderID)
|
||||||
}
|
}
|
||||||
if order, err := s.CurOrderManager.LoadOrder(status.VendorOrderID, status.VendorID); err == nil {
|
if order, err := s.CurOrderManager.LoadOrder(status.VendorOrderID, status.VendorID); err == nil {
|
||||||
realSavedInfo.order = order
|
realSavedInfo.order = order
|
||||||
@@ -264,7 +272,7 @@ func (s *DefScheduler) loadSavedOrderFromMap(status *model.OrderStatus) *WatchOr
|
|||||||
WaybillVendorID: model.VendorIDUnknown,
|
WaybillVendorID: model.VendorIDUnknown,
|
||||||
}
|
}
|
||||||
realSavedInfo.dirty = 1
|
realSavedInfo.dirty = 1
|
||||||
globals.SugarLogger.Infof("can not load order vendorOrderID:%s, vendorID:%d", status.VendorOrderID, status.VendorID)
|
globals.SugarLogger.Infof("can not load order orderID:%s", status.VendorOrderID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return realSavedInfo
|
return realSavedInfo
|
||||||
@@ -285,13 +293,13 @@ func (s *DefScheduler) stopTimer(savedOrderInfo *WatchOrderInfo) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *DefScheduler) resetTimer(savedOrderInfo *WatchOrderInfo, status int, beginTime time.Time, gap time.Duration) {
|
func (s *DefScheduler) resetTimer(savedOrderInfo *WatchOrderInfo, status int, beginTime time.Time, gap time.Duration) {
|
||||||
globals.SugarLogger.Debugf("resetTimer status:%v, orderid:%v", status, savedOrderInfo.order.VendorOrderID)
|
globals.SugarLogger.Debugf("resetTimer status:%v, orderID:%s", status, savedOrderInfo.order.VendorOrderID)
|
||||||
if status >= savedOrderInfo.timerStatus { // 新设置的TIMER不能覆盖状态在其后的TIMER
|
if status >= savedOrderInfo.timerStatus { // 新设置的TIMER不能覆盖状态在其后的TIMER
|
||||||
s.stopTimer(savedOrderInfo)
|
s.stopTimer(savedOrderInfo)
|
||||||
config := s.mergeOrderStatusConfig(status, s.GetPurchasePlatformFromVendorID(savedOrderInfo.order.VendorID).GetStatusActionConfig(status))
|
config := s.mergeOrderStatusConfig(status, s.GetPurchasePlatformFromVendorID(savedOrderInfo.order.VendorID).GetStatusActionConfig(status))
|
||||||
if config != nil && config.TimeoutAction != nil {
|
if config != nil && config.TimeoutAction != nil {
|
||||||
timeout := jxutils.GetRealTimeout(beginTime, config.Timeout, minTimeout) + gap
|
timeout := jxutils.GetRealTimeout(beginTime, config.Timeout, minTimeout) + gap
|
||||||
globals.SugarLogger.Debugf("resetTimer timeout:%v, orderid:%v", timeout, savedOrderInfo.order.VendorOrderID)
|
globals.SugarLogger.Debugf("resetTimer timeout:%v, orderID:%s", timeout, savedOrderInfo.order.VendorOrderID)
|
||||||
savedOrderInfo.timerStatus = status
|
savedOrderInfo.timerStatus = status
|
||||||
savedOrderInfo.timer = time.AfterFunc(timeout, func() {
|
savedOrderInfo.timer = time.AfterFunc(timeout, func() {
|
||||||
config.TimeoutAction(savedOrderInfo.order)
|
config.TimeoutAction(savedOrderInfo.order)
|
||||||
@@ -299,7 +307,7 @@ func (s *DefScheduler) resetTimer(savedOrderInfo *WatchOrderInfo, status int, be
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
globals.SugarLogger.Infof("resetTimer status revert, orderid:%s, current timer status:%d, status:%d", savedOrderInfo.order.VendorOrderID, savedOrderInfo.timerStatus, status)
|
globals.SugarLogger.Infof("resetTimer status revert, orderID:%s, current timer status:%d, status:%d", savedOrderInfo.order.VendorOrderID, savedOrderInfo.timerStatus, status)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,9 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -25,15 +27,15 @@ type StatusActionConfig struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type PurchasePlatformHandler interface {
|
type PurchasePlatformHandler interface {
|
||||||
|
GetOrder(vendorOrderID string) (order *model.GoodsOrder, err error)
|
||||||
|
GetStatusActionConfig(status int) *StatusActionConfig
|
||||||
|
|
||||||
AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error)
|
AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error)
|
||||||
PickedUpGoods(order *model.GoodsOrder) (err error)
|
PickedUpGoods(order *model.GoodsOrder) (err error)
|
||||||
|
|
||||||
Swtich2SelfDeliver(vendorOrderID string) (err error)
|
Swtich2SelfDeliver(order *model.GoodsOrder) (err error)
|
||||||
|
|
||||||
SelfDeliverDelievering(order *model.GoodsOrder) (err error)
|
SelfDeliverDelievering(order *model.GoodsOrder) (err error)
|
||||||
SelfDeliverDelievered(order *model.GoodsOrder) (err error)
|
SelfDeliverDelievered(order *model.GoodsOrder) (err error)
|
||||||
|
|
||||||
GetStatusActionConfig(status int) *StatusActionConfig
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type DeliveryPlatformHandler interface {
|
type DeliveryPlatformHandler interface {
|
||||||
@@ -43,7 +45,7 @@ type DeliveryPlatformHandler interface {
|
|||||||
|
|
||||||
type OrderManager interface {
|
type OrderManager interface {
|
||||||
LoadOrder(vendorOrderID string, vendorID int) (order *model.GoodsOrder, err error)
|
LoadOrder(vendorOrderID string, vendorID int) (order *model.GoodsOrder, err error)
|
||||||
OnOrderStatusChanged(status *model.OrderStatus) (err error) // 此消息是否使用还不确定
|
// OnOrderStatusChanged(status *model.OrderStatus) (err error) // 此消息是否使用还不确定
|
||||||
UpdateWaybillVendorID(bill *model.Waybill) (err error)
|
UpdateWaybillVendorID(bill *model.Waybill) (err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,6 +66,7 @@ type BaseScheduler struct {
|
|||||||
CurOrderManager OrderManager
|
CurOrderManager OrderManager
|
||||||
PurchasePlatformHandlers map[int]PurchasePlatformHandler
|
PurchasePlatformHandlers map[int]PurchasePlatformHandler
|
||||||
DeliveryPlatformHandlers map[int]DeliveryPlatformHandler
|
DeliveryPlatformHandlers map[int]DeliveryPlatformHandler
|
||||||
|
IsReallyCallPlatformAPI bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *BaseScheduler) Init() {
|
func (c *BaseScheduler) Init() {
|
||||||
@@ -103,6 +106,75 @@ func (c *BaseScheduler) GetDeliveryPlatformFromVendorID(vendorID int) DeliveryPl
|
|||||||
return c.DeliveryPlatformHandlers[vendorID]
|
return c.DeliveryPlatformHandlers[vendorID]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *BaseScheduler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) {
|
||||||
|
globals.SugarLogger.Infof("AcceptOrRefuseOrder orderID:%s, isAcceptIt:%t", order.VendorOrderID, isAcceptIt)
|
||||||
|
if c.IsReallyCallPlatformAPI {
|
||||||
|
err = utils.CallFuncLogError(func() error {
|
||||||
|
return c.GetPurchasePlatformFromVendorID(order.VendorID).AcceptOrRefuseOrder(order, isAcceptIt)
|
||||||
|
}, "AcceptOrRefuseOrder orderID:%s, isAcceptIt:%t", order.VendorOrderID, isAcceptIt)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
func (c *BaseScheduler) PickedUpGoods(order *model.GoodsOrder) (err error) {
|
||||||
|
globals.SugarLogger.Infof("PickedUpGoods orderID:%s", order.VendorOrderID)
|
||||||
|
if c.IsReallyCallPlatformAPI {
|
||||||
|
err = utils.CallFuncLogError(func() error {
|
||||||
|
return c.GetPurchasePlatformFromVendorID(order.VendorID).PickedUpGoods(order)
|
||||||
|
}, "PickedUpGoods orderID:%s", order.VendorOrderID)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *BaseScheduler) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) {
|
||||||
|
globals.SugarLogger.Infof("Swtich2SelfDeliver orderID:%s", order.VendorOrderID)
|
||||||
|
if c.IsReallyCallPlatformAPI {
|
||||||
|
err = utils.CallFuncLogError(func() error {
|
||||||
|
return c.GetPurchasePlatformFromVendorID(order.VendorID).Swtich2SelfDeliver(order)
|
||||||
|
}, "Swtich2SelfDeliver orderID:%s", order.VendorOrderID)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *BaseScheduler) SelfDeliverDelievering(order *model.GoodsOrder) (err error) {
|
||||||
|
globals.SugarLogger.Infof("SelfDeliverDelievering orderID:%s", order.VendorOrderID)
|
||||||
|
if c.IsReallyCallPlatformAPI {
|
||||||
|
err = utils.CallFuncLogError(func() error {
|
||||||
|
return c.GetPurchasePlatformFromVendorID(order.VendorID).SelfDeliverDelievering(order)
|
||||||
|
}, "SelfDeliverDelievering orderID:%s", order.VendorOrderID)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *BaseScheduler) SelfDeliverDelievered(order *model.GoodsOrder) (err error) {
|
||||||
|
globals.SugarLogger.Infof("SelfDeliverDelievered orderID:%s", order.VendorOrderID)
|
||||||
|
if c.IsReallyCallPlatformAPI {
|
||||||
|
err = utils.CallFuncLogError(func() error {
|
||||||
|
return c.GetPurchasePlatformFromVendorID(order.VendorID).SelfDeliverDelievered(order)
|
||||||
|
}, "SelfDeliverDelievered orderID:%s", order.VendorOrderID)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *BaseScheduler) CreateWaybill(platformVendorID int, order *model.GoodsOrder) (err error) {
|
||||||
|
globals.SugarLogger.Infof("CreateWaybill orderID:%s, vendorID:%d", order.VendorOrderID, platformVendorID)
|
||||||
|
if c.IsReallyCallPlatformAPI {
|
||||||
|
err = utils.CallFuncLogError(func() error {
|
||||||
|
return c.GetDeliveryPlatformFromVendorID(platformVendorID).CreateWaybill(order)
|
||||||
|
}, "CreateWaybill orderID:%s, vendorID:%d", order.VendorOrderID, platformVendorID)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *BaseScheduler) CancelWaybill(bill *model.Waybill) (err error) {
|
||||||
|
globals.SugarLogger.Infof("CancelWaybill bill:%v", bill)
|
||||||
|
if c.IsReallyCallPlatformAPI {
|
||||||
|
err = utils.CallFuncLogError(func() error {
|
||||||
|
return c.GetDeliveryPlatformFromVendorID(bill.WaybillVendorID).CancelWaybill(bill)
|
||||||
|
}, "CancelWaybill bill:%v", bill)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
type BasePurchasePlatform struct {
|
type BasePurchasePlatform struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ dadaAppSecret = "30c2abbfe8a8780ad5aace46300c64b9"
|
|||||||
|
|
||||||
autonaviKey = "4427170f870af2110becb8852d36ab08"
|
autonaviKey = "4427170f870af2110becb8852d36ab08"
|
||||||
|
|
||||||
callLegacy = true
|
callLegacyMsgHandler = true
|
||||||
callNew = true
|
callNewMsgHandler = true
|
||||||
handleLegacyJxOrder = true
|
generateLegacyJxOrder = true
|
||||||
|
|
||||||
[dev]
|
[dev]
|
||||||
freshFoodServerURL = "http://portal.beta.jxc4.com"
|
freshFoodServerURL = "http://portal.beta.jxc4.com"
|
||||||
@@ -90,4 +90,4 @@ weixinSecret = "6bbbed1443cc062c20a015a64c07a531"
|
|||||||
|
|
||||||
dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8&loc=Local"
|
dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8&loc=Local"
|
||||||
|
|
||||||
callLegacy = false
|
callLegacyMsgHandler = false
|
||||||
|
|||||||
@@ -26,15 +26,19 @@ func (c *DadaOrderController) URLMapping() {
|
|||||||
func (c *DadaOrderController) OrderStatusChanged() {
|
func (c *DadaOrderController) OrderStatusChanged() {
|
||||||
obj, callbackResponse := api.DadaAPI.GetOrderCallbackMsg(c.Ctx.Input.RequestBody)
|
obj, callbackResponse := api.DadaAPI.GetOrderCallbackMsg(c.Ctx.Input.RequestBody)
|
||||||
if callbackResponse == nil {
|
if callbackResponse == nil {
|
||||||
if globals.CallLegacy {
|
if globals.CallLegacyMsgHandler {
|
||||||
cc := &controller.OrderController{}
|
cc := &controller.OrderController{}
|
||||||
callbackResponse = cc.OrderStatusChanged(obj)
|
callbackResponse = cc.OrderStatusChanged(obj)
|
||||||
}
|
}
|
||||||
if globals.CallNew {
|
if globals.CallNewMsgHandler {
|
||||||
utils.CallFuncAsync(func() {
|
|
||||||
cc2 := &dada.WaybillController{}
|
cc2 := &dada.WaybillController{}
|
||||||
|
if globals.CallLegacyMsgHandler {
|
||||||
|
utils.CallFuncAsync(func() {
|
||||||
cc2.OnWaybillMsg(obj)
|
cc2.OnWaybillMsg(obj)
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
callbackResponse = cc2.OnWaybillMsg(obj)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if callbackResponse != nil && callbackResponse.Code != 200 {
|
if callbackResponse != nil && callbackResponse.Code != 200 {
|
||||||
|
|||||||
@@ -28,15 +28,19 @@ func (c *ELMOrderController) URLMapping() {
|
|||||||
func (c *ELMOrderController) MsgPost() {
|
func (c *ELMOrderController) MsgPost() {
|
||||||
obj, callbackResponse := api.ElmAPI.GetCallbackMsg(c.Ctx.Input.RequestBody)
|
obj, callbackResponse := api.ElmAPI.GetCallbackMsg(c.Ctx.Input.RequestBody)
|
||||||
if callbackResponse == nil {
|
if callbackResponse == nil {
|
||||||
if globals.CallLegacy {
|
if globals.CallLegacyMsgHandler {
|
||||||
cc := &controller.OrderController{}
|
cc := &controller.OrderController{}
|
||||||
callbackResponse = cc.OrderMessage(obj)
|
callbackResponse = cc.OrderMessage(obj)
|
||||||
}
|
}
|
||||||
if globals.CallNew {
|
if globals.CallNewMsgHandler {
|
||||||
utils.CallFuncAsync(func() {
|
|
||||||
cc2 := &elm.Controller{}
|
cc2 := &elm.Controller{}
|
||||||
|
if globals.CallLegacyMsgHandler {
|
||||||
|
utils.CallFuncAsync(func() {
|
||||||
cc2.OnCallbackMsg(obj)
|
cc2.OnCallbackMsg(obj)
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
callbackResponse = cc2.OnCallbackMsg(obj)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c.Data["json"] = callbackResponse
|
c.Data["json"] = callbackResponse
|
||||||
|
|||||||
@@ -37,15 +37,19 @@ func (c *JDOrderController) orderStatus(isCancelOrder bool) {
|
|||||||
obj, callbackResponse = api.JdAPI.GetOrderCallbackMsg(c.Ctx.Input.RequestBody)
|
obj, callbackResponse = api.JdAPI.GetOrderCallbackMsg(c.Ctx.Input.RequestBody)
|
||||||
}
|
}
|
||||||
if callbackResponse == nil {
|
if callbackResponse == nil {
|
||||||
if globals.CallLegacy {
|
if globals.CallLegacyMsgHandler {
|
||||||
cc := controller.OrderController{}
|
cc := controller.OrderController{}
|
||||||
callbackResponse = cc.OrderStatus(obj)
|
callbackResponse = cc.OrderStatus(obj)
|
||||||
}
|
}
|
||||||
if globals.CallNew {
|
if globals.CallNewMsgHandler {
|
||||||
utils.CallFuncAsync(func() {
|
|
||||||
cc2 := &jd.OrderController{}
|
cc2 := &jd.OrderController{}
|
||||||
|
if globals.CallLegacyMsgHandler {
|
||||||
|
utils.CallFuncAsync(func() {
|
||||||
cc2.OnOrderMsg(obj)
|
cc2.OnOrderMsg(obj)
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
callbackResponse = cc2.OnOrderMsg(obj)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c.Data["json"] = callbackResponse
|
c.Data["json"] = callbackResponse
|
||||||
@@ -151,15 +155,19 @@ func (c *JDOrderController) ApplyCancelOrder() {
|
|||||||
func (c *JDOrderController) PushDeliveryStatus() {
|
func (c *JDOrderController) PushDeliveryStatus() {
|
||||||
obj, callbackResponse := api.JdAPI.GetOrderDeliveryCallbackMsg(c.Ctx.Input.RequestBody)
|
obj, callbackResponse := api.JdAPI.GetOrderDeliveryCallbackMsg(c.Ctx.Input.RequestBody)
|
||||||
if callbackResponse == nil {
|
if callbackResponse == nil {
|
||||||
if globals.CallLegacy {
|
if globals.CallLegacyMsgHandler {
|
||||||
cc := controller.OrderController{}
|
cc := controller.OrderController{}
|
||||||
callbackResponse = cc.OrderDeliveryStatus(obj)
|
callbackResponse = cc.OrderDeliveryStatus(obj)
|
||||||
}
|
}
|
||||||
if globals.CallNew {
|
if globals.CallNewMsgHandler {
|
||||||
utils.CallFuncAsync(func() {
|
|
||||||
cc2 := &jd.WaybillController{}
|
cc2 := &jd.WaybillController{}
|
||||||
|
if globals.CallLegacyMsgHandler {
|
||||||
|
utils.CallFuncAsync(func() {
|
||||||
cc2.OnWaybillMsg(obj)
|
cc2.OnWaybillMsg(obj)
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
callbackResponse = cc2.OnWaybillMsg(obj)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c.Data["json"] = callbackResponse
|
c.Data["json"] = callbackResponse
|
||||||
|
|||||||
@@ -27,15 +27,19 @@ func (c *MTPSOrderController) URLMapping() {
|
|||||||
func (c *MTPSOrderController) Status() {
|
func (c *MTPSOrderController) Status() {
|
||||||
obj, callbackResponse := api.MtpsAPI.GetOrderCallbackMsg(c.Ctx.Request)
|
obj, callbackResponse := api.MtpsAPI.GetOrderCallbackMsg(c.Ctx.Request)
|
||||||
if callbackResponse == nil {
|
if callbackResponse == nil {
|
||||||
if globals.CallLegacy {
|
if globals.CallLegacyMsgHandler {
|
||||||
cc := &controller.OrderController{}
|
cc := &controller.OrderController{}
|
||||||
callbackResponse = cc.OrderStatusChanged(obj)
|
callbackResponse = cc.OrderStatusChanged(obj)
|
||||||
}
|
}
|
||||||
if globals.CallNew {
|
if globals.CallNewMsgHandler {
|
||||||
utils.CallFuncAsync(func() {
|
|
||||||
cc2 := &mtps.WaybillController{}
|
cc2 := &mtps.WaybillController{}
|
||||||
|
if globals.CallLegacyMsgHandler {
|
||||||
|
utils.CallFuncAsync(func() {
|
||||||
cc2.OnWaybillMsg(obj)
|
cc2.OnWaybillMsg(obj)
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
callbackResponse = cc2.OnWaybillMsg(obj)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c.Data["json"] = callbackResponse
|
c.Data["json"] = callbackResponse
|
||||||
@@ -50,15 +54,19 @@ func (c *MTPSOrderController) Status() {
|
|||||||
func (c *MTPSOrderController) Except() {
|
func (c *MTPSOrderController) Except() {
|
||||||
obj, callbackResponse := api.MtpsAPI.GetOrderExceptionCallbackMsg(c.Ctx.Request)
|
obj, callbackResponse := api.MtpsAPI.GetOrderExceptionCallbackMsg(c.Ctx.Request)
|
||||||
if callbackResponse == nil {
|
if callbackResponse == nil {
|
||||||
if globals.CallLegacy {
|
if globals.CallLegacyMsgHandler {
|
||||||
cc := &controller.OrderController{}
|
cc := &controller.OrderController{}
|
||||||
callbackResponse = cc.OrderException(obj)
|
callbackResponse = cc.OrderException(obj)
|
||||||
}
|
}
|
||||||
if globals.CallNew {
|
if globals.CallNewMsgHandler {
|
||||||
utils.CallFuncAsync(func() {
|
|
||||||
cc2 := &mtps.WaybillController{}
|
cc2 := &mtps.WaybillController{}
|
||||||
|
if globals.CallLegacyMsgHandler {
|
||||||
|
utils.CallFuncAsync(func() {
|
||||||
cc2.OnWaybillExcept(obj)
|
cc2.OnWaybillExcept(obj)
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
callbackResponse = cc2.OnWaybillExcept(obj)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c.Data["json"] = callbackResponse
|
c.Data["json"] = callbackResponse
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ func init() {
|
|||||||
// set default database
|
// set default database
|
||||||
orm.RegisterDataBase("default", "mysql", beego.AppConfig.String("dbConnectStr"), 30)
|
orm.RegisterDataBase("default", "mysql", beego.AppConfig.String("dbConnectStr"), 30)
|
||||||
models.RegisterModels()
|
models.RegisterModels()
|
||||||
if globals.CallNew {
|
if globals.CallNewMsgHandler {
|
||||||
orm.RegisterModel(new(model.GoodsOrder))
|
orm.RegisterModel(new(model.GoodsOrder))
|
||||||
orm.RegisterModel(new(model.OrderSku))
|
orm.RegisterModel(new(model.OrderSku))
|
||||||
orm.RegisterModel(new(model.Waybill))
|
orm.RegisterModel(new(model.Waybill))
|
||||||
|
|||||||
@@ -12,21 +12,23 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
CallLegacy bool
|
CallLegacyMsgHandler bool
|
||||||
CallNew bool
|
CallNewMsgHandler bool
|
||||||
HandleLegacyJxOrder bool
|
GenerateLegacyJxOrder bool
|
||||||
|
ReallyCallPlatformAPI bool
|
||||||
|
|
||||||
SugarLogger *zap.SugaredLogger
|
SugarLogger *zap.SugaredLogger
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
CallLegacy = beego.AppConfig.DefaultBool("callLegacy", true)
|
|
||||||
CallNew = beego.AppConfig.DefaultBool("callNew", false)
|
|
||||||
HandleLegacyJxOrder = beego.AppConfig.DefaultBool("handleLegacyJxOrder", false)
|
|
||||||
|
|
||||||
logs.SetLogFuncCallDepth(3)
|
logs.SetLogFuncCallDepth(3)
|
||||||
beego.BConfig.Log.AccessLogs = true
|
beego.BConfig.Log.AccessLogs = true
|
||||||
|
|
||||||
|
CallLegacyMsgHandler = beego.AppConfig.DefaultBool("callLegacyMsgHandler", true)
|
||||||
|
CallNewMsgHandler = beego.AppConfig.DefaultBool("callNewMsgHandler", false)
|
||||||
|
GenerateLegacyJxOrder = beego.AppConfig.DefaultBool("generateLegacyJxOrder", false)
|
||||||
|
ReallyCallPlatformAPI = !CallLegacyMsgHandler
|
||||||
|
|
||||||
logger, _ := zap.NewDevelopment()
|
logger, _ := zap.NewDevelopment()
|
||||||
SugarLogger = logger.Sugar()
|
SugarLogger = logger.Sugar()
|
||||||
baseapi.Init(SugarLogger)
|
baseapi.Init(SugarLogger)
|
||||||
|
|||||||
Reference in New Issue
Block a user