Files
jx-callback/business/elm/controller/order.go
gazebo 03c7efbe1e - mtps added.
- refactor.
2018-06-18 12:03:53 +08:00

87 lines
2.7 KiB
Go

package controller
import (
"git.rosy.net.cn/baseapi/platform/elmapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/elm/models"
"git.rosy.net.cn/jx-callback/globals"
"github.com/astaxie/beego/orm"
)
var (
errResponseInternal = &elmapi.ELMCallbackResponse{Message: "internal error"}
errResponseDataError = &elmapi.ELMCallbackResponse{Message: "elm data error"}
errResponseDBError = &elmapi.ELMCallbackResponse{Message: "DB error"}
errResponseCallELMAPIError = &elmapi.ELMCallbackResponse{Message: "call ELM API error"}
)
type OrderController struct {
}
func (o *OrderController) OrderMessage(msg *elmapi.ELMCallbackMsg) *elmapi.ELMCallbackResponse {
var innerMsg map[string]interface{}
err := utils.UnmarshalUseNumber([]byte(msg.Message), &innerMsg)
if err != nil {
globals.SugarLogger.Warnf("OrderMessage unmarshal %v error:%v", msg, err)
return errResponseDataError
}
if msg.Type == elmapi.OrderValid {
return o.NewOrder(msg, innerMsg["id"].(string))
} else if msg.Type >= elmapi.MerchantValid && msg.Type <= elmapi.OrderFinished {
return o.OrderStatusChanged(msg, innerMsg["orderId"].(string))
}
return elmapi.SuccessResponse
}
func (o *OrderController) NewOrder(msg *elmapi.ELMCallbackMsg, orderId string) *elmapi.ELMCallbackResponse {
db := orm.NewOrm()
rec := &models.ELMOrder{
OrderId: orderId,
Type: msg.Type,
}
created, _, err := db.ReadOrCreate(rec, "OrderId")
if err != nil {
globals.SugarLogger.Warnf("error when calling ReadOrCreate, error:%v", err)
return errResponseDBError
}
if created || rec.Type != msg.Type {
result, err := globals.ElmAPI.GetOrder(orderId)
if err != nil {
globals.SugarLogger.Warnf("call GetOrder error:%v", err)
return errResponseCallELMAPIError
}
err = globals.FreshFoodAPI.NewELMOrder(result)
if err != nil {
globals.SugarLogger.Warnf("internal error:%v", err)
return errResponseInternal
}
} else {
globals.SugarLogger.Infof("duplicate elm msg received:%v", msg)
}
return elmapi.SuccessResponse
}
func (o *OrderController) OrderStatusChanged(msg *elmapi.ELMCallbackMsg, orderId string) *elmapi.ELMCallbackResponse {
db := orm.NewOrm()
rec := &models.ELMOrder{
OrderId: orderId,
}
err := db.Read(rec, "OrderId")
if err != nil {
globals.SugarLogger.Warnf("error when calling ReadOrCreate, error:%v", err)
return errResponseDBError
}
if rec.Type != msg.Type {
err = globals.FreshFoodAPI.ELMOrderStatus(orderId, msg.Type, utils.GetCurTimestamp())
if err != nil {
globals.SugarLogger.Warnf("internal error:%v", err)
return errResponseInternal
}
} else {
globals.SugarLogger.Infof("duplicate elm msg received:%v", msg)
}
return elmapi.SuccessResponse
}