- new jd order handle ok, access jd api synchronously.
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -3,3 +3,4 @@ jx-callback
|
||||
commentsRouter_*
|
||||
swagger/
|
||||
debug
|
||||
.DS_Store
|
||||
17
business/jd/controller/controller.go
Normal file
17
business/jd/controller/controller.go
Normal file
@@ -0,0 +1,17 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/baseapi/platform/jdapi"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
var (
|
||||
gJdapi *jdapi.JDAPI
|
||||
sugarLogger *zap.SugaredLogger
|
||||
)
|
||||
|
||||
func init() {
|
||||
logger, _ := zap.NewDevelopment()
|
||||
sugarLogger = logger.Sugar()
|
||||
gJdapi = jdapi.NewJDAPI("91633f2a-c5f5-4982-a925-a220d19095c3", "1dba76d40cac446ca500c0391a0b6c9d", "a88d031a1e7b462cb1579f12e97fe7f4", logger)
|
||||
}
|
||||
71
business/jd/controller/order.go
Normal file
71
business/jd/controller/order.go
Normal file
@@ -0,0 +1,71 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"strconv"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/jd/models"
|
||||
"git.rosy.net.cn/jx-callback/compat/corm"
|
||||
"github.com/astaxie/beego/orm"
|
||||
_ "github.com/go-sql-driver/mysql" // import your used driver
|
||||
)
|
||||
|
||||
var errChecker corm.DBErrorChecker
|
||||
|
||||
func init() {
|
||||
errChecker = new(corm.MysqlErrorChecker)
|
||||
|
||||
// set default database
|
||||
orm.RegisterDataBase("default", "mysql", "root:WebServer@1@tcp(127.0.0.1:3306)/jx-callback?charset=utf8&loc=Local", 30)
|
||||
|
||||
// register model
|
||||
orm.RegisterModel(new(models.Jdorder))
|
||||
|
||||
// create table
|
||||
orm.RunSyncdb("default", false, true)
|
||||
}
|
||||
|
||||
type OrderControler struct {
|
||||
}
|
||||
|
||||
func (c *OrderControler) NewOrder(order *models.NewOrderMsg) *models.OrderMsgResponse {
|
||||
db := orm.NewOrm()
|
||||
jdorderid, _ := strconv.ParseInt(order.BillId, 10, 64)
|
||||
status, _ := strconv.Atoi(order.StatusId)
|
||||
rec := &models.Jdorder{
|
||||
JdOrderId: jdorderid,
|
||||
OrderStatus: status,
|
||||
}
|
||||
|
||||
if created, _, err := db.ReadOrCreate(rec, "Jdorderid"); err == nil {
|
||||
if created {
|
||||
c.AcceptOrder(order)
|
||||
result, err := gJdapi.LegacyQuerySingleOrder(order.BillId)
|
||||
if err != nil {
|
||||
sugarLogger.Warnf("error when query jd order:%s, error:%v", order.BillId, err)
|
||||
} else {
|
||||
rec.Code = result.Code
|
||||
rec.Msg = result.Msg
|
||||
rec.Success = 1
|
||||
rec.CityName = "all"
|
||||
rec.OrderStatus = result.OrderStatus
|
||||
rec.OrderStatusTime = result.OrderStatusTime
|
||||
result.Msg = "成功"
|
||||
resultByteArr, _ := json.Marshal(result)
|
||||
rec.Data = string(resultByteArr)
|
||||
db.Update(rec, "Data", "Code", "Msg", "Success", "CityName", "OrderStatus", "OrderStatusTime")
|
||||
}
|
||||
|
||||
} else {
|
||||
sugarLogger.Warnf("duplicated jd orderid:%s", order.BillId)
|
||||
sugarLogger.Debug(rec)
|
||||
}
|
||||
} else {
|
||||
sugarLogger.Errorf("error when calling ReadOrCreate:%v", err)
|
||||
}
|
||||
|
||||
return &models.OrderMsgResponse{"0", "success", ""}
|
||||
}
|
||||
|
||||
func (c *OrderControler) AcceptOrder(order *models.NewOrderMsg) {
|
||||
}
|
||||
33
business/jd/models/order.go
Normal file
33
business/jd/models/order.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package models
|
||||
|
||||
// type CommonCallbackMsgFields struct {
|
||||
// Id int
|
||||
// Status int `orm:default(0)`
|
||||
// Count int `orm:default(1)`
|
||||
// CreatedAt time.Time `orm:"auto_now_add;type(datetime)"`
|
||||
// UpdatedAt time.Time `orm:"auto_now;type(datetime)"`
|
||||
// }
|
||||
|
||||
type OrderMsgResponse struct {
|
||||
Code string
|
||||
Msg string
|
||||
Data string
|
||||
}
|
||||
|
||||
type NewOrderMsg struct {
|
||||
BillId string
|
||||
StatusId string
|
||||
Timestamp string
|
||||
}
|
||||
|
||||
type Jdorder struct {
|
||||
Id int
|
||||
Code string `orm:"size(2)"`
|
||||
Msg string `orm:"size(100)"`
|
||||
Data string `orm:"type(text)"`
|
||||
Success int8
|
||||
JdOrderId int64 `orm:"unique;column(jdorderid)"`
|
||||
CityName string `orm:"size(20);column(cityname)"`
|
||||
OrderStatus int `orm:"column(orderstatus)"`
|
||||
OrderStatusTime string `orm:"size(50);column(orderstatustime)"`
|
||||
}
|
||||
5
compat/corm/corm.go
Normal file
5
compat/corm/corm.go
Normal file
@@ -0,0 +1,5 @@
|
||||
package corm
|
||||
|
||||
type DBErrorChecker interface {
|
||||
ErrorIsDuplicate(error) bool
|
||||
}
|
||||
17
compat/corm/corm_mysql.go
Normal file
17
compat/corm/corm_mysql.go
Normal file
@@ -0,0 +1,17 @@
|
||||
package corm
|
||||
|
||||
import (
|
||||
"github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
type MysqlErrorChecker struct {
|
||||
}
|
||||
|
||||
func (c MysqlErrorChecker) ErrorIsDuplicate(err error) bool {
|
||||
if err == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
realErr := err.(*mysql.MySQLError)
|
||||
return realErr.Number == 1062
|
||||
}
|
||||
42
controllers/jd_order.go
Normal file
42
controllers/jd_order.go
Normal file
@@ -0,0 +1,42 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"github.com/astaxie/beego/logs"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/jd/controller"
|
||||
"git.rosy.net.cn/jx-callback/business/jd/models"
|
||||
"github.com/astaxie/beego"
|
||||
)
|
||||
|
||||
const JD_PARAM_JSON = "jd_param_json"
|
||||
|
||||
// Operations about JDOrder
|
||||
type JDOrderController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
func (c *JDOrderController) URLMapping() {
|
||||
c.Mapping("NewOrder", c.NewOrder)
|
||||
}
|
||||
|
||||
// @Title Create
|
||||
// @Description create object
|
||||
// @Param jd_param_json formData string true "应用级别输入参数"
|
||||
// @Success 200 {string} models.Object.Id
|
||||
// @Failure 403 body is empty
|
||||
// @router /NewOrder [post]
|
||||
func (c *JDOrderController) NewOrder() {
|
||||
var ob models.NewOrderMsg
|
||||
jd_param_json := c.GetString(JD_PARAM_JSON)
|
||||
err := json.Unmarshal([]byte(jd_param_json), &ob)
|
||||
if err != nil {
|
||||
logs.Error(err)
|
||||
c.Data["json"] = models.OrderMsgResponse{"10015", "jd_param_json format is wrong", jd_param_json}
|
||||
} else {
|
||||
cc := controller.OrderControler{}
|
||||
c.Data["json"] = cc.NewOrder(&ob)
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
@@ -25,6 +25,11 @@ func init() {
|
||||
&controllers.UserController{},
|
||||
),
|
||||
),
|
||||
beego.NSNamespace("/djsw",
|
||||
beego.NSInclude(
|
||||
&controllers.JDOrderController{},
|
||||
),
|
||||
),
|
||||
)
|
||||
beego.AddNamespace(ns)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user