- add black user .

This commit is contained in:
gazebo
2018-07-02 13:37:52 +08:00
parent 28921345e8
commit b82729709d
5 changed files with 89 additions and 19 deletions

View File

@@ -0,0 +1,24 @@
package controllers
import (
"git.rosy.net.cn/jx-callback/business/models"
"git.rosy.net.cn/jx-callback/globals"
"github.com/astaxie/beego/orm"
)
func IsAutoAcceptOrder(userMobile string, db orm.Ormer) bool {
if db == nil {
db = orm.NewOrm()
}
user := &models.BlackClient{
Mobile: userMobile,
}
if err := db.Read(user, "Mobile"); err != nil {
if err != orm.ErrNoRows {
globals.SugarLogger.Errorf("read data error:%v, data:%v", err, user)
}
// 在访问数据库出错的情况下,也需要自动接单
return true
}
return false
}

View File

@@ -1,8 +1,10 @@
package controller
import (
"git.rosy.net.cn/baseapi"
"git.rosy.net.cn/baseapi/platformapi/elmapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/controllers"
"git.rosy.net.cn/jx-callback/business/elm/models"
"git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/jx-callback/globals/globals2"
@@ -30,7 +32,13 @@ func (o *OrderController) OrderMessage(msg *elmapi.CallbackMsg) (retVal *elmapi.
orderID := innerMsg["orderId"].(string)
globals2.RoutinePool.CallFun(func() {
if msg.Type == elmapi.MsgTypeOrderValid {
retVal = o.NewOrder(msg, orderID)
userMobile := ""
if phoneList, ok := innerMsg["phoneList"].([]interface{}); ok && len(phoneList) > 1 {
userMobile = phoneList[0].(string)
} else {
baseapi.SugarLogger.Warnf("can not get mobile info from %v, error:%v", msg, err)
}
retVal = o.NewOrder(msg, orderID, userMobile)
} else if msg.Type >= elmapi.MsgTypeMerchantValid && msg.Type <= elmapi.MsgTypeOrderFinished {
retVal = o.OrderStatusChanged(msg, orderID)
}
@@ -38,32 +46,46 @@ func (o *OrderController) OrderMessage(msg *elmapi.CallbackMsg) (retVal *elmapi.
return retVal
}
func (o *OrderController) acceptOrder(orderID string, userMobile string) {
if controllers.IsAutoAcceptOrder(userMobile, nil) {
globals2.ElmAPI.ConfirmOrder(orderID)
if userMobile == "" {
globals.SugarLogger.Infof("elm order:%v force accepted, because userMobile is empty", orderID)
}
} else {
globals.SugarLogger.Infof("elm order:%v refused, userMobile:%s", orderID, userMobile)
}
}
func (o *OrderController) NewOrder(msg *elmapi.CallbackMsg, orderId string) *elmapi.CallbackResponse {
func (o *OrderController) NewOrder(msg *elmapi.CallbackMsg, orderId string, userMobile string) *elmapi.CallbackResponse {
db := orm.NewOrm()
rec := &models.ELMOrder{
OrderId: orderId,
Type: msg.Type,
}
retVal := elmapi.SuccessResponse
created, _, err := db.ReadOrCreate(rec, "OrderId")
if err != nil {
globals.SugarLogger.Warnf("error when calling ReadOrCreate, error:%v, rec:%v", err, rec)
return errResponseDBError
}
retVal = errResponseDBError
} else {
if created || rec.Type != msg.Type {
result, err := globals2.ElmAPI.GetOrder(orderId)
if err != nil {
return errResponseCallELMAPIError
}
retVal = errResponseCallELMAPIError
} else {
err = globals2.FreshFoodAPI.NewELMOrder(result)
if err != nil {
return errResponseInternal
retVal = errResponseInternal
}
}
} else {
globals.SugarLogger.Infof("duplicate elm msg received:%v", msg)
}
return elmapi.SuccessResponse
}
o.acceptOrder(orderId, userMobile)
return retVal
}
func (o *OrderController) OrderStatusChanged(msg *elmapi.CallbackMsg, orderId string) *elmapi.CallbackResponse {

View File

@@ -5,6 +5,7 @@ import (
"git.rosy.net.cn/baseapi/platformapi/jdapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/controllers"
"git.rosy.net.cn/jx-callback/business/jd/models"
"git.rosy.net.cn/jx-callback/compat/corm"
"git.rosy.net.cn/jx-callback/globals"
@@ -143,13 +144,21 @@ func (c *OrderController) OrderDeliveryStatus(jdOrderDeliveryStatusMsg *jdapi.Ca
}
//-----------
func acceptOrder(msg *jdapi.CallbackOrderMsg) {
func acceptOrder(msg *jdapi.CallbackOrderMsg, userMobile string, db orm.Ormer) {
if controllers.IsAutoAcceptOrder(userMobile, db) {
globals2.Jdapi.OrderAcceptOperate(msg.BillID, true)
if userMobile == "" {
globals.SugarLogger.Infof("jd order:%v force accepted, because userMobile is empty", msg)
}
} else {
globals.SugarLogger.Infof("jd order:%v refused, userMobile:%s", msg, userMobile)
}
}
func newOrder(msg *jdapi.CallbackOrderMsg) error {
result, err := globals2.Jdapi.LegacyQuerySingleOrder(msg.BillID)
acceptOrder(msg)
userMobile := ""
var db orm.Ormer
if err == nil {
rec := &models.Jdorder{
ID: msg.ID,
@@ -175,8 +184,9 @@ func newOrder(msg *jdapi.CallbackOrderMsg) error {
resultByteArr := utils.MustMarshal(data)
rec.Data = string(resultByteArr)
rec.Data4Json = data
userMobile = rec.Data4Json["buyerMobile"].(string)
err = utils.CallFuncLogError(func() error {
db := orm.NewOrm()
db = orm.NewOrm()
_, err := db.Update(rec, "Data", "Code", "Msg", "Success", "CityName", "OrderStatus", "OrderStatusTime")
return err
}, globals2.ErrStrAccessDB)
@@ -187,6 +197,7 @@ func newOrder(msg *jdapi.CallbackOrderMsg) error {
globals.SugarLogger.Errorf("can not get jdorder info:%v", msg.BillID)
}
}
acceptOrder(msg, userMobile, db)
return err
}

12
business/models/models.go Normal file
View File

@@ -0,0 +1,12 @@
package models
import (
"time"
)
type BlackClient struct {
ID int `orm:"column(id)"`
Mobile string `orm:"size(16);unique"`
CreatedAt time.Time `orm:"auto_now_add;type(datetime)`
UpdatedAt time.Time `orm:"auto_now;type(datetime)`
}

View File

@@ -72,6 +72,7 @@ func initDB() {
orm.RegisterModel(new(jdmodels.Jdorder))
orm.RegisterModel(new(elmmodels.ELMOrder))
orm.RegisterModel(new(models.Config))
orm.RegisterModel(new(models.BlackClient))
// create table
orm.RunSyncdb("default", false, true)