- record order ok.
This commit is contained in:
@@ -2,8 +2,10 @@ package elm
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/elmapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
@@ -15,10 +17,6 @@ type OrderController struct {
|
||||
controller.OrderController
|
||||
}
|
||||
|
||||
var (
|
||||
api *elmapi.API
|
||||
)
|
||||
|
||||
func (c *OrderController) OnOrderStatusMsg(msg *elmapi.CallbackOrderStatusMsg) (retVal *elmapi.CallbackResponse) {
|
||||
controller.RoutinePool.CallFun(func() {
|
||||
retVal = c.onOrderStatusMsg(msg)
|
||||
@@ -94,37 +92,41 @@ func (c *OrderController) onOrderCancelRefundMsg(msg *elmapi.CallbackOrderCancel
|
||||
return retVal
|
||||
}
|
||||
|
||||
func (c *OrderController) getOrderInfo(msg *elmapi.CallbackOrderStatusMsg) (order *model.Order, orderSkus []*model.OrderSku, err error) {
|
||||
result, err := api.GetOrder(msg.OrderID)
|
||||
func (c *OrderController) getOrderInfo(msg *elmapi.CallbackOrderStatusMsg) (order *model.GoodsOrder, orderSkus []*model.OrderSku, err error) {
|
||||
result, err := api.ElmAPI.GetOrder(msg.OrderID)
|
||||
if err == nil {
|
||||
phoneList := result["phoneList"].([]interface{})
|
||||
consigneeMobile := ""
|
||||
if len(phoneList) > 0 {
|
||||
consigneeMobile = phoneList[0].(string)
|
||||
}
|
||||
order = &model.Order{
|
||||
// globals.SugarLogger.Debug(result)
|
||||
order = &model.GoodsOrder{
|
||||
VendorOrderID: msg.OrderID,
|
||||
VendorID: controller.VendorIDELM,
|
||||
VendorStoreID: result["shopId"].(string),
|
||||
StoreID: int(utils.Str2Int64(result["openId"].(string))),
|
||||
VendorStoreID: utils.Int64ToStr(utils.MustInterface2Int64(result["shopId"])),
|
||||
StoreID: int(utils.Str2Int64WithDefault(utils.Interface2String(result["openId"]), 0)),
|
||||
StoreName: result["shopName"].(string),
|
||||
ConsigneeName: result["consignee"].(string),
|
||||
ConsigneeMobile: consigneeMobile,
|
||||
VendorStatus: msg.State,
|
||||
OrderCreatedAt: utils.Str2Time(result["createdAt"].(string)),
|
||||
OriginalData: string(utils.MustMarshal(result)),
|
||||
}
|
||||
|
||||
orderSkus = []*model.OrderSku{}
|
||||
for _, group := range result["groups"].([]map[string]interface{}) {
|
||||
for _, product := range group["items"].([]map[string]interface{}) {
|
||||
for _, group2 := range result["groups"].([]interface{}) {
|
||||
group := group2.(map[string]interface{})
|
||||
for _, product2 := range group["items"].([]interface{}) {
|
||||
product := product2.(map[string]interface{})
|
||||
sku := &model.OrderSku{
|
||||
VendorOrderID: msg.OrderID,
|
||||
VendorID: controller.VendorIDJD,
|
||||
Count: int(utils.MustInterface2Int64(product["quantity"])),
|
||||
SkuID: int(utils.Str2Int64(product["extendCode"].(string))),
|
||||
VendorSkuID: product["skuId"].(string),
|
||||
SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(product["extendCode"]), 0)),
|
||||
VendorSkuID: utils.Int64ToStr(utils.MustInterface2Int64(product["skuId"])),
|
||||
SkuName: product["name"].(string),
|
||||
SalePrice: utils.MustInterface2Int64(product["userPrice"]),
|
||||
SalePrice: int64(math.Round(utils.MustInterface2Float64(product["userPrice"]) * 100)),
|
||||
OrderCreatedAt: order.OrderCreatedAt,
|
||||
}
|
||||
orderSkus = append(orderSkus, sku)
|
||||
@@ -202,10 +204,10 @@ func (c *OrderController) onOrderOtherCancelRefundStatus(msg *elmapi.CallbackOrd
|
||||
}
|
||||
|
||||
// PurchasePlatformHandler
|
||||
func (c *OrderController) AcceptOrRefuseOrder(order *model.Order, isAcceptIt bool) {
|
||||
func (c *OrderController) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) {
|
||||
if isAcceptIt {
|
||||
api.ConfirmOrder(order.VendorOrderID)
|
||||
api.ElmAPI.ConfirmOrder(order.VendorOrderID)
|
||||
} else {
|
||||
api.CancelOrder(order.VendorOrderID, elmapi.CancelOrderTypeOthers, "")
|
||||
api.ElmAPI.CancelOrder(order.VendorOrderID, elmapi.CancelOrderTypeOthers, "")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,16 +5,14 @@ import (
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/controller"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
)
|
||||
|
||||
type OrderController struct {
|
||||
controller.OrderController
|
||||
}
|
||||
|
||||
var (
|
||||
api *jdapi.API
|
||||
)
|
||||
|
||||
func (c *OrderController) OnOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
||||
controller.RoutinePool.CallFun(func() {
|
||||
retVal = c.onOrderMsg(msg)
|
||||
@@ -57,29 +55,32 @@ func (c *OrderController) onOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi
|
||||
return retVal
|
||||
}
|
||||
|
||||
func (c *OrderController) getOrderInfo(msg *jdapi.CallbackOrderMsg) (order *model.Order, orderSkus []*model.OrderSku, err error) {
|
||||
result, err := api.QuerySingleOrder(msg.BillID)
|
||||
func (c *OrderController) getOrderInfo(msg *jdapi.CallbackOrderMsg) (order *model.GoodsOrder, orderSkus []*model.OrderSku, err error) {
|
||||
result, err := api.JdAPI.QuerySingleOrder(msg.BillID)
|
||||
// globals.SugarLogger.Info(result)
|
||||
if err == nil {
|
||||
order = &model.Order{
|
||||
order = &model.GoodsOrder{
|
||||
VendorOrderID: msg.BillID,
|
||||
VendorID: controller.VendorIDJD,
|
||||
VendorStoreID: result["produceStationNo"].(string),
|
||||
StoreID: int(utils.MustInterface2Int64(result["produceStationNoIsv"])),
|
||||
StoreID: int(utils.Str2Int64WithDefault(utils.Interface2String(result["produceStationNoIsv"]), 0)),
|
||||
StoreName: result["produceStationName"].(string),
|
||||
ConsigneeName: result["buyerFullName"].(string),
|
||||
ConsigneeMobile: result["buyerMobile"].(string),
|
||||
VendorStatus: msg.StatusID,
|
||||
OrderCreatedAt: utils.Str2Time(result["orderPurchaseTime"].(string)),
|
||||
OriginalData: string(utils.MustMarshal(result)),
|
||||
}
|
||||
// discounts := result["discount"].(map[string]interface{})
|
||||
orderSkus = []*model.OrderSku{}
|
||||
for _, product := range result["product"].([]map[string]interface{}) {
|
||||
for _, product2 := range result["product"].([]interface{}) {
|
||||
product := product2.(map[string]interface{})
|
||||
sku := &model.OrderSku{
|
||||
VendorOrderID: msg.BillID,
|
||||
VendorID: controller.VendorIDJD,
|
||||
Count: int(utils.MustInterface2Int64(product["skuCount"])),
|
||||
SkuID: int(utils.Str2Int64(product["skuIdIsv"].(string))),
|
||||
VendorSkuID: product["skuId"].(string),
|
||||
SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(product["skuIdIsv"]), 0)),
|
||||
VendorSkuID: utils.Int64ToStr(utils.MustInterface2Int64(product["skuId"])),
|
||||
SkuName: product["skuName"].(string),
|
||||
SalePrice: utils.MustInterface2Int64(product["skuJdPrice"]),
|
||||
OrderCreatedAt: order.OrderCreatedAt,
|
||||
@@ -98,6 +99,8 @@ func (c *OrderController) onOrderNew(msg *jdapi.CallbackOrderMsg) (response *jda
|
||||
order, orderSkus, err := c.getOrderInfo(msg)
|
||||
if err == nil {
|
||||
err = c.OnOrderNew(c, order, orderSkus)
|
||||
} else {
|
||||
globals.SugarLogger.Debugf("get order error:%v", err)
|
||||
}
|
||||
return jdapi.Err2CallbackResponse(err, "jd onOrderNew")
|
||||
}
|
||||
@@ -139,6 +142,6 @@ func (c *OrderController) onOrderOtherStatus(msg *jdapi.CallbackOrderMsg) *jdapi
|
||||
}
|
||||
|
||||
// PurchasePlatformHandler
|
||||
func (c *OrderController) AcceptOrRefuseOrder(order *model.Order, isAcceptIt bool) {
|
||||
api.OrderAcceptOperate(order.VendorOrderID, isAcceptIt)
|
||||
func (c *OrderController) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) {
|
||||
api.JdAPI.OrderAcceptOperate(order.VendorOrderID, isAcceptIt)
|
||||
}
|
||||
|
||||
@@ -19,15 +19,29 @@ func (c *WaybillController) OnWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal
|
||||
return retVal
|
||||
}
|
||||
|
||||
func (c *WaybillController) OnWaybillExcept(msg *mtpsapi.CallbackOrderExceptionMsg) (retVal *mtpsapi.CallbackResponse) {
|
||||
controller.RoutinePool.CallFun(func() {
|
||||
status := &model.OrderStatus{
|
||||
VendorOrderID: msg.MtPeisongID,
|
||||
VendorID: controller.VendorIDMTPS,
|
||||
OrderType: controller.OrderTypeWaybill,
|
||||
VendorStatus: utils.Int2Str(msg.ExceptionCode),
|
||||
StatusTime: utils.Timestamp2Time(int64(msg.Timestamp)),
|
||||
}
|
||||
retVal = mtpsapi.Err2CallbackResponse(c.OnWaybillFailed(status), "mtps OnWaybillExcept")
|
||||
}, msg.MtPeisongID)
|
||||
return retVal
|
||||
}
|
||||
|
||||
func (c *WaybillController) callbackMsg2Status(msg *mtpsapi.CallbackOrderMsg) *model.OrderStatus {
|
||||
orderStatus := &model.OrderStatus{
|
||||
status := &model.OrderStatus{
|
||||
VendorOrderID: msg.MtPeisongID,
|
||||
VendorID: controller.VendorIDMTPS,
|
||||
OrderType: controller.OrderTypeWaybill,
|
||||
VendorStatus: utils.Int2Str(msg.Status),
|
||||
StatusTime: utils.Timestamp2Time(int64(msg.Timestamp)),
|
||||
}
|
||||
return orderStatus
|
||||
return status
|
||||
}
|
||||
|
||||
func (c *WaybillController) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *mtpsapi.CallbackResponse) {
|
||||
|
||||
@@ -32,7 +32,7 @@ const (
|
||||
)
|
||||
|
||||
type PurchasePlatformHandler interface {
|
||||
AcceptOrRefuseOrder(order *model.Order, isAcceptIt bool)
|
||||
AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool)
|
||||
}
|
||||
|
||||
var (
|
||||
@@ -46,7 +46,7 @@ func init() {
|
||||
type OrderController struct {
|
||||
}
|
||||
|
||||
func (c *OrderController) OnOrderNew(purchasePlatform PurchasePlatformHandler, order *model.Order, orderSkus []*model.OrderSku) (err error) {
|
||||
func (c *OrderController) OnOrderNew(purchasePlatform PurchasePlatformHandler, order *model.GoodsOrder, orderSkus []*model.OrderSku) (err error) {
|
||||
db := orm.NewOrm()
|
||||
c.handleAutoAcceptOrder(order.VendorOrderID, order.VendorID, order.ConsigneeMobile, order.StoreID, db, func(isAccept bool) {
|
||||
// purchasePlatform.AcceptOrRefuseOrder(order, isAccept)
|
||||
@@ -62,6 +62,7 @@ func (c *OrderController) OnOrderNew(purchasePlatform PurchasePlatformHandler, o
|
||||
err = c.updateOrderSkuOtherInfo(orderSkus, db)
|
||||
if err == nil {
|
||||
db.Begin()
|
||||
// globals.SugarLogger.Debugf("new order:%v", order)
|
||||
created, _, err2 := db.ReadOrCreate(order, "VendorOrderID", "VendorID")
|
||||
err = err2
|
||||
if err == nil {
|
||||
@@ -71,17 +72,18 @@ func (c *OrderController) OnOrderNew(purchasePlatform PurchasePlatformHandler, o
|
||||
params := []interface{}{}
|
||||
for _, sku := range orderSkus {
|
||||
if sql == "" {
|
||||
sql = "INSERT INTO order_sku(vendor_order_id, vendor_id, count, sku_id, vendor_sku_id, sku_name, shop_price, sale_price) VALUES(?, ?, ?, ?, ?, ?, ?, ?)"
|
||||
sql = "INSERT INTO order_sku(vendor_order_id, vendor_id, count, sku_id, vendor_sku_id, sku_name, shop_price, sale_price, order_created_at) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)"
|
||||
|
||||
} else {
|
||||
sql += ",(?, ?, ?, ?, ?, ?, ?, ?)"
|
||||
sql += ",(?, ?, ?, ?, ?, ?, ?, ?, ?)"
|
||||
}
|
||||
params = append(params, sku.VendorOrderID, sku.VendorID, sku.Count, sku.SkuID, sku.VendorSkuID, sku.SkuName, sku.ShopPrice, sku.SalePrice)
|
||||
params = append(params, sku.VendorOrderID, sku.VendorID, sku.Count, sku.SkuID, sku.VendorSkuID, sku.SkuName, sku.ShopPrice, sku.SalePrice, order.OrderCreatedAt)
|
||||
}
|
||||
sql += ";"
|
||||
_, err = db.Raw(sql, params...).Exec()
|
||||
if err != nil {
|
||||
db.Rollback()
|
||||
baseapi.SugarLogger.Infof("insert order_sku error:%v", err)
|
||||
} else {
|
||||
db.Commit()
|
||||
}
|
||||
@@ -91,26 +93,28 @@ func (c *OrderController) OnOrderNew(purchasePlatform PurchasePlatformHandler, o
|
||||
}
|
||||
} else {
|
||||
db.Rollback()
|
||||
globals.SugarLogger.Warnf("create order:%v, error:%v", order, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *OrderController) OnOrderAdjust(purchasePlatform PurchasePlatformHandler, order *model.Order, orderSkus []*model.OrderSku) (err error) {
|
||||
func (c *OrderController) OnOrderAdjust(purchasePlatform PurchasePlatformHandler, order *model.GoodsOrder, orderSkus []*model.OrderSku) (err error) {
|
||||
db := orm.NewOrm()
|
||||
|
||||
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
|
||||
}, "OnAdjustOrder delete order_sku")
|
||||
}, "OnAdjustOrder delete order")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = utils.CallFuncLogError(func() error {
|
||||
_, err := db.Raw("DELETE FROM 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
|
||||
}, "OnAdjustOrder delete order")
|
||||
}, "OnAdjustOrder delete order_sku")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -175,7 +179,7 @@ func (c *OrderController) updateOrderSkuOtherInfo(orderSkus []*model.OrderSku, d
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *OrderController) updateOrderOtherInfo(order *model.Order, db orm.Ormer) (err error) {
|
||||
func (c *OrderController) updateOrderOtherInfo(order *model.GoodsOrder, db orm.Ormer) (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -214,14 +218,14 @@ func (c *OrderController) handleAutoAcceptOrder(orderID string, vendorID int, us
|
||||
}
|
||||
|
||||
func (c *OrderController) addOrderStatus(msg *model.OrderStatus) (err error) {
|
||||
order := &model.Order{
|
||||
order := &model.GoodsOrder{
|
||||
VendorOrderID: msg.VendorOrderID,
|
||||
VendorID: msg.VendorID,
|
||||
}
|
||||
db := orm.NewOrm()
|
||||
value, ok := OrderMap.Load(ComposeUniversalOrderID(msg.VendorOrderID, msg.VendorID))
|
||||
if !ok {
|
||||
globals.SugarLogger.Warnf("can not get order:%v, from cache", order)
|
||||
// globals.SugarLogger.Infof("can not get order:%v, from cache", order)
|
||||
err = db.Read(order, "VendorOrderID", "VendorID")
|
||||
} else {
|
||||
order.ID = value.(int64)
|
||||
|
||||
@@ -21,6 +21,7 @@ const (
|
||||
)
|
||||
|
||||
type WaybillController struct {
|
||||
OrderController
|
||||
}
|
||||
|
||||
var (
|
||||
@@ -36,6 +37,8 @@ func (w *WaybillController) OnWaybillNew(bill *model.Waybill) (err error) {
|
||||
if !created {
|
||||
baseapi.SugarLogger.Warnf("duplicated waybill:%v msg received", bill)
|
||||
}
|
||||
} else {
|
||||
globals.SugarLogger.Warnf("create bill:%v, error:%v", bill, err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
@@ -83,7 +86,7 @@ func (w *WaybillController) addWaybillStatus(msg *model.OrderStatus) (err error)
|
||||
db := orm.NewOrm()
|
||||
value, ok := OrderMap.Load(ComposeUniversalOrderID(msg.VendorOrderID, msg.VendorID))
|
||||
if !ok {
|
||||
globals.SugarLogger.Warnf("can not get order:%v, from cache", order)
|
||||
// globals.SugarLogger.Infof("can not get order:%v, from cache", order)
|
||||
err = db.Read(order, "VendorWaybillID", "WaybillVendorID")
|
||||
} else {
|
||||
order.ID = value.(int64)
|
||||
|
||||
@@ -7,7 +7,7 @@ type ModelTimeInfo struct {
|
||||
UpdatedAt time.Time `orm:"auto_now;type(datetime)"`
|
||||
}
|
||||
|
||||
type Order struct {
|
||||
type GoodsOrder struct {
|
||||
ID int64 `orm:"column(id)"`
|
||||
VendorOrderID string `orm:"column(vendor_order_id);size(48)"`
|
||||
VendorID int `orm:"column(vendor_id)"`
|
||||
@@ -26,14 +26,14 @@ type Order struct {
|
||||
VendorStatus string `orm:"size(16)"`
|
||||
LockStatus int
|
||||
CancelApplyReason string `orm:"size(255);null;default(null)"` // null表示没有申请,不为null表示用户正在取消申请
|
||||
WaybillVendorID int `orm:"column(waybill_vendor_id)"`
|
||||
WaybillVendorID int `orm:"column(waybill_vendor_id);default(-1)"`
|
||||
OriginalData string `orm:"type(text)"`
|
||||
OrderCreatedAt time.Time `orm:"type(datetime);index"`
|
||||
OrderFinishedAt time.Time `orm:"type(datetime)"`
|
||||
OrderFinishedAt time.Time `orm:"type(datetime);null;default(null)"`
|
||||
ModelTimeInfo
|
||||
}
|
||||
|
||||
func (o *Order) TableUnique() [][]string {
|
||||
func (o *GoodsOrder) TableUnique() [][]string {
|
||||
return [][]string{
|
||||
[]string{"VendorOrderID", "VendorID"},
|
||||
}
|
||||
@@ -44,7 +44,7 @@ type OrderSku struct {
|
||||
VendorOrderID string `orm:"column(vendor_order_id);size(48)"`
|
||||
VendorID int `orm:"column(vendor_id)"`
|
||||
Count int
|
||||
VendorSkuID string `orm:"column(vendor_sku_id),size(48)"`
|
||||
VendorSkuID string `orm:"column(vendor_sku_id);size(48)"`
|
||||
SkuID int `orm:"column(sku_id)"` // 外部系统里记录的 jxskuid
|
||||
JxSkuID int `orm:"column(jx_sku_id)"` // 根据VendorSkuID在本地系统里查询出来的 jxskuid
|
||||
SkuName string `orm:"size(255)"`
|
||||
@@ -53,7 +53,9 @@ type OrderSku struct {
|
||||
OrderCreatedAt time.Time `orm:"type(datetime);index"`
|
||||
}
|
||||
|
||||
func (o *OrderSku) TableUnique() [][]string {
|
||||
// 同样商品在一个定单中可能重复出现(比如搞活动时,相同商品价格不一样,第一个有优惠)
|
||||
// 所以这里不能用唯一索引
|
||||
func (o *OrderSku) TableIndex() [][]string {
|
||||
return [][]string{
|
||||
[]string{"VendorOrderID", "SkuID", "VendorID"},
|
||||
}
|
||||
@@ -72,7 +74,7 @@ type Waybill struct {
|
||||
VendorStatus string `orm:"size(16)"`
|
||||
ActualFee int64
|
||||
WaybillCreatedAt time.Time `orm:"type(datetime);index"`
|
||||
WaybillFinishedAt time.Time `orm:"type(datetime)"`
|
||||
WaybillFinishedAt time.Time `orm:"type(datetime);null;default(null)"`
|
||||
ModelTimeInfo
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user