- elm callback basic.

This commit is contained in:
gazebo
2018-06-14 17:50:58 +08:00
parent 4854395ef3
commit ad1a6ab5c4
12 changed files with 273 additions and 48 deletions

View File

@@ -0,0 +1,40 @@
package controller
import (
"git.rosy.net.cn/baseapi/platform/elmapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/globals"
"github.com/astaxie/beego/orm"
"go.uber.org/zap"
)
const (
elmToken = "" //"bab2a27f99562f394b411dbb9a6214da"
elmAppKey = "KLRDcOZGrk"
elmSecret = "1fc221f8265506531da36fb613d5f5ad673f2e9a"
)
var (
gElmAPI *elmapi.ELMAPI
sugarLogger *zap.SugaredLogger
)
func init() {
sugarLogger = globals.SugarLogger
token := elmToken
if token == "" {
db := orm.NewOrm()
var tokenInfo []orm.Params
num, err := db.Raw("SELECT * FROM thirdpartytoken WHERE thirdparty='eleme'").Values(&tokenInfo)
if err != nil || num != 1 {
panic(err.Error())
}
var tokenInfo2 map[string]interface{}
if err := utils.UnmarshalUseNumber([]byte(tokenInfo[0]["token"].(string)), &tokenInfo2); err != nil {
panic(err.Error())
}
token = tokenInfo2["accessToken"].(string)
}
gElmAPI = elmapi.NewELMAPI(token, elmAppKey, elmSecret, sugarLogger, true)
}

View File

@@ -0,0 +1,86 @@
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 {
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.ELMResponseOK
}
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 {
sugarLogger.Warnf("error when calling ReadOrCreate, error:%v", err)
return errResponseDBError
}
if created || rec.Type != msg.Type {
result, err := gElmAPI.GetOrder(orderId)
if err != nil {
sugarLogger.Warnf("call GetOrder error:%v", err)
return errResponseCallELMAPIError
}
err = globals.FreshFoodAPI.NewELMOrder(result)
if err != nil {
sugarLogger.Warnf("internal error:%v", err)
return errResponseInternal
}
} else {
sugarLogger.Infof("duplicate elm msg received:%v", msg)
}
return elmapi.ELMResponseOK
}
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 {
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 {
sugarLogger.Warnf("internal error:%v", err)
return errResponseInternal
}
} else {
sugarLogger.Infof("duplicate elm msg received:%v", msg)
}
return elmapi.ELMResponseOK
}