- jxorder, only waybill status related left, other info saved.

This commit is contained in:
gazebo
2018-07-16 17:14:17 +08:00
parent ea3aec81a4
commit b75739d6c2
8 changed files with 118 additions and 21 deletions

View File

@@ -80,11 +80,11 @@ func ComposeUniversalOrderID(orderID string, vendorID int) string {
} }
func StandardCoordinate2Int(value float64) int { func StandardCoordinate2Int(value float64) int {
return int(value * 1000000) return int(math.Round(value * 1000000))
} }
func IntCoordinate2Standard(value int) float64 { func IntCoordinate2Standard(value int) float64 {
return float64(value / 1000000) return float64(value) / 1000000
} }
func IntCoordinate2MarsStandard(gpsLng, gpsLat int, coordinateType int) (marsLng, marsLat float64, err error) { func IntCoordinate2MarsStandard(gpsLng, gpsLat int, coordinateType int) (marsLng, marsLat float64, err error) {
@@ -111,7 +111,7 @@ func IntPrice2Standard(value int64) float64 {
} }
func StandardPrice2Int(value float64) int64 { func StandardPrice2Int(value float64) int64 {
return int64(math.Round(value) * 100) return int64(math.Round(value * 100))
} }
func addOrderOrWaybillStatus(status *model.OrderStatus, db orm.Ormer) (isDuplicated bool, err error) { func addOrderOrWaybillStatus(status *model.OrderStatus, db orm.Ormer) (isDuplicated bool, err error) {
@@ -170,3 +170,10 @@ func GetDataCityCodeFromOrder(order *model.GoodsOrder) (retVal string, err error
} }
return retVal, err return retVal, err
} }
func GetJxStoreIDFromOrder(order *model.GoodsOrder) (retVal int) {
if order.JxStoreID != 0 {
return order.JxStoreID
}
return order.StoreID
}

View File

@@ -117,10 +117,11 @@ func (c *OrderController) getOrderInfo(orderID string) (order *model.GoodsOrder,
ConsigneeName: result["consignee"].(string), ConsigneeName: result["consignee"].(string),
ConsigneeMobile: consigneeMobile, ConsigneeMobile: consigneeMobile,
ConsigneeAddress: result["address"].(string), ConsigneeAddress: result["address"].(string),
BuyerComment: utils.Interface2String(result["description"]), BuyerComment: strings.Trim(utils.Interface2String(result["description"]), "\n\r\t "),
ExpectedDeliveredTime: utils.Str2TimeWithDefault(utils.Interface2String(result["deliverTime"]), utils.DefaultTimeValue), ExpectedDeliveredTime: utils.Str2TimeWithDefault(utils.Interface2String(result["deliverTime"]), utils.DefaultTimeValue),
// 取订单的原始status不合并消息类型因为当前消息类型没有意义 // 取订单的原始status不合并消息类型因为当前消息类型没有意义
VendorStatus: utils.Interface2String(result["status"]), VendorStatus: utils.Interface2String(result["status"]),
OrderSeq: int(utils.MustInterface2Int64(result["daySn"])),
OrderCreatedAt: utils.Str2Time(result["createdAt"].(string)), OrderCreatedAt: utils.Str2Time(result["createdAt"].(string)),
OriginalData: string(utils.MustMarshal(result)), OriginalData: string(utils.MustMarshal(result)),
Skus: []*model.OrderSku{}, Skus: []*model.OrderSku{},

View File

@@ -1,6 +1,8 @@
package jd package jd
import ( import (
"strings"
"git.rosy.net.cn/baseapi/platformapi/autonavi" "git.rosy.net.cn/baseapi/platformapi/autonavi"
"git.rosy.net.cn/baseapi/platformapi/jdapi" "git.rosy.net.cn/baseapi/platformapi/jdapi"
"git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils"
@@ -70,9 +72,10 @@ func (c *OrderController) getOrderInfo(msg *jdapi.CallbackOrderMsg) (order *mode
ConsigneeMobile: result["buyerMobile"].(string), ConsigneeMobile: result["buyerMobile"].(string),
ConsigneeAddress: result["buyerFullAddress"].(string), ConsigneeAddress: result["buyerFullAddress"].(string),
CoordinateType: model.CoordinateTypeMars, CoordinateType: model.CoordinateTypeMars,
BuyerComment: utils.Interface2String(result["orderBuyerRemark"]), BuyerComment: strings.Trim(utils.Interface2String(result["orderBuyerRemark"]), "\n\r\t "),
ExpectedDeliveredTime: utils.Str2TimeWithDefault(utils.Interface2String(result["orderPreEndDeliveryTime"]), utils.DefaultTimeValue), ExpectedDeliveredTime: utils.Str2TimeWithDefault(utils.Interface2String(result["orderPreEndDeliveryTime"]), utils.DefaultTimeValue),
VendorStatus: msg.StatusID, VendorStatus: msg.StatusID,
OrderSeq: int(utils.MustInterface2Int64(result["orderNum"])),
OrderCreatedAt: utils.Str2Time(result["orderStartTime"].(string)), OrderCreatedAt: utils.Str2Time(result["orderStartTime"].(string)),
OriginalData: string(utils.MustMarshal(result)), OriginalData: string(utils.MustMarshal(result)),
Skus: []*model.OrderSku{}, Skus: []*model.OrderSku{},
@@ -104,7 +107,7 @@ func (c *OrderController) getOrderInfo(msg *jdapi.CallbackOrderMsg) (order *mode
SkuName: product["skuName"].(string), SkuName: product["skuName"].(string),
Weight: int(utils.MustInterface2Float64(product["skuWeight"]) * 1000), Weight: int(utils.MustInterface2Float64(product["skuWeight"]) * 1000),
SalePrice: utils.MustInterface2Int64(product["skuJdPrice"]), SalePrice: utils.MustInterface2Int64(product["skuJdPrice"]),
PromotionType: int(utils.MustInterface2Int64(product["skuJdPrice"])), PromotionType: int(utils.MustInterface2Int64(product["promotionType"])),
OrderCreatedAt: order.OrderCreatedAt, OrderCreatedAt: order.OrderCreatedAt,
} }
if product["isGift"].(bool) { if product["isGift"].(bool) {

View File

@@ -148,11 +148,12 @@ func (c *WaybillController) getDeliveryID(order *model.GoodsOrder, db orm.Ormer)
func (c *WaybillController) getMTPSShopID(order *model.GoodsOrder, db orm.Ormer) (retVal string, err error) { func (c *WaybillController) getMTPSShopID(order *model.GoodsOrder, db orm.Ormer) (retVal string, err error) {
sql := "SELECT zs_store_id FROM jx_to_zs_store_map WHERE jx_store_id = ?" sql := "SELECT zs_store_id FROM jx_to_zs_store_map WHERE jx_store_id = ?"
var lists []orm.ParamsList var lists []orm.ParamsList
num, err := db.Raw(sql, utils.Str2Int64(order.VendorStoreID)).ValuesList(&lists) JxStoreID := controller.GetJxStoreIDFromOrder(order)
num, err := db.Raw(sql, JxStoreID).ValuesList(&lists)
if err != nil && num == 1 { if err != nil && num == 1 {
retVal = lists[0][0].(string) retVal = lists[0][0].(string)
} else { } else {
globals.SugarLogger.Errorf("can not find mtps store info for store:%d", order.JxStoreID) globals.SugarLogger.Errorf("can not find mtps store info for store:%d", JxStoreID)
} }
return retVal, err return retVal, err
} }

View File

@@ -115,9 +115,9 @@ func (c *OrderController) updateOrderSkuOtherInfo(orderSkus []*model.OrderSku, d
var sql string var sql string
if orderSkus[0].VendorID == model.VendorIDJD { if orderSkus[0].VendorID == model.VendorIDJD {
sql = ` sql = `
SELECT t1.jdskuid, t2.id SELECT t1.jdskuid, t1.skuid
FROM skumapper t1 FROM skumapper t1
JOIN jx_sku t2 ON t1.skuid = t2.id /* JOIN jx_sku t2 ON t1.skuid = t2.id */
WHERE t1.jdskuid IN ( WHERE t1.jdskuid IN (
` `
} else if orderSkus[0].VendorID == model.VendorIDELM { } else if orderSkus[0].VendorID == model.VendorIDELM {
@@ -144,7 +144,7 @@ func (c *OrderController) updateOrderSkuOtherInfo(orderSkus []*model.OrderSku, d
if jxskuid, ok := skumapper[v.VendorSkuID]; ok { if jxskuid, ok := skumapper[v.VendorSkuID]; ok {
v.JxSkuID = int(utils.Str2Int64(jxskuid)) v.JxSkuID = int(utils.Str2Int64(jxskuid))
} else { } else {
globals.SugarLogger.Infof("can not find %v", jxskuid) globals.SugarLogger.Infof("can not find sku map:%v", v.VendorSkuID)
} }
} }
} else { } else {
@@ -157,16 +157,16 @@ func (c *OrderController) updateOrderOtherInfo(order *model.GoodsOrder, db orm.O
var sql string var sql string
if order.VendorID == model.VendorIDJD { if order.VendorID == model.VendorIDJD {
sql = ` sql = `
SELECT t2.storeid SELECT t1.jxstoreid
FROM jxstoremap t1 FROM jxstoremap t1
JOIN jxstore t2 ON t1.jxstoreid = t2.storeid /* JOIN jxstore t2 ON t1.jxstoreid = t2.storeid */
WHERE t1.jdstoreid = ? WHERE t1.jdstoreid = ?
` `
} else if order.VendorID == model.VendorIDELM { } else if order.VendorID == model.VendorIDELM {
sql = ` sql = `
SELECT t2.storeid SELECT t1.jx_store_id
FROM jx_to_elm_store_map t1 FROM jx_to_elm_store_map t1
JOIN jxstore t2 ON t1.jx_store_id = t2.storeid /* JOIN jxstore t2 ON t1.jx_store_id = t2.storeid */
WHERE t1.elm_store_id = ? WHERE t1.elm_store_id = ?
` `
} else { } else {

View File

@@ -1,6 +1,9 @@
package controller package controller
import ( import (
"fmt"
"strings"
"git.rosy.net.cn/baseapi" "git.rosy.net.cn/baseapi"
"git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/legacyorder" "git.rosy.net.cn/jx-callback/business/legacyorder"
@@ -33,6 +36,32 @@ const (
JX_DELIVERY_STATUS_DELIVERY_CANCEL = 7 //已取消 JX_DELIVERY_STATUS_DELIVERY_CANCEL = 7 //已取消
) )
const (
DD_CARRIER_NO = "9966"
SELLER_CARRIER_NO = "2938"
MTPS_CARRIER_NO = "1123"
DDDELIVERY_CARRIER_NO = "3465"
EME_SELF_CARRIER_NO = "9999"
)
var (
CARRIERS_NAMES = map[string]string{
DD_CARRIER_NO: "达达专送",
SELLER_CARRIER_NO: "门店自送",
MTPS_CARRIER_NO: "美团配送",
DDDELIVERY_CARRIER_NO: "达达众包",
EME_SELF_CARRIER_NO: "饿了么蜂鸟",
}
BUSINESS_TAGS_MAP = map[string]string{
"one_dingshida": "0",
"dj_aging_nextday": "1",
"dj_aging_immediately": "2",
"lengcang": "3",
"lengdong": "3",
}
)
func (c *OrderController) legacyMapOrderStatus(orderStatus int) (retVal int8) { func (c *OrderController) legacyMapOrderStatus(orderStatus int) (retVal int8) {
switch orderStatus { switch orderStatus {
case model.OrderStatusNew: case model.OrderStatusNew:
@@ -52,6 +81,19 @@ func (c *OrderController) legacyMapOrderStatus(orderStatus int) (retVal int8) {
} }
func (c *OrderController) legacyWriteJxOrder(order *model.GoodsOrder, db orm.Ormer, isDelFirst bool) (err error) { func (c *OrderController) legacyWriteJxOrder(order *model.GoodsOrder, db orm.Ormer, isDelFirst bool) (err error) {
var result map[string]interface{}
businessTags := ""
if order.VendorID == model.VendorIDJD && utils.UnmarshalUseNumber([]byte(order.OriginalData), &result) == nil {
tagList := strings.Split(result["businessTag"].(string), ";")
list := []string{}
for _, v := range tagList {
if tag, ok := BUSINESS_TAGS_MAP[v]; ok {
list = append(list, tag)
}
}
businessTags = strings.Join(list, "|") + "|"
}
db.Begin() db.Begin()
if isDelFirst { if isDelFirst {
db.Raw("DELETE FROM jxorder2 WHERE order_id = ?", utils.Str2Int64(order.VendorOrderID)) db.Raw("DELETE FROM jxorder2 WHERE order_id = ?", utils.Str2Int64(order.VendorOrderID))
@@ -61,12 +103,12 @@ func (c *OrderController) legacyWriteJxOrder(order *model.GoodsOrder, db orm.Orm
jxorder := &legacyorder.Jxorder2{ jxorder := &legacyorder.Jxorder2{
VenderId: int8(order.VendorID), VenderId: int8(order.VendorID),
OrderId: utils.Str2Int64(order.VendorOrderID), OrderId: utils.Str2Int64(order.VendorOrderID),
JxStoreId: utils.Int2Str(order.JxStoreID), JxStoreId: utils.Int2Str(GetJxStoreIDFromOrder(order)),
JxStoreName: order.StoreName, JxStoreName: order.StoreName,
OrderNum: order.SkuCount, OrderNum: order.OrderSeq,
OrderStatus: c.legacyMapOrderStatus(order.Status), OrderStatus: c.legacyMapOrderStatus(order.Status),
OrderStatusTime: utils.Time2Str(order.OrderCreatedAt), OrderStatusTime: utils.Time2Str(order.OrderCreatedAt),
BusinessTag: "", BusinessTag: businessTags,
SkuCount: order.SkuCount, SkuCount: order.SkuCount,
OrderBuyerRemark: order.BuyerComment, OrderBuyerRemark: order.BuyerComment,
BuyerFullName: order.ConsigneeName, BuyerFullName: order.ConsigneeName,
@@ -75,18 +117,20 @@ func (c *OrderController) legacyWriteJxOrder(order *model.GoodsOrder, db orm.Orm
BuyerCoordType: order.CoordinateType, BuyerCoordType: order.CoordinateType,
BuyerLng: IntCoordinate2Standard(order.ConsigneeLng), BuyerLng: IntCoordinate2Standard(order.ConsigneeLng),
BuyerLat: IntCoordinate2Standard(order.ConsigneeLat), BuyerLat: IntCoordinate2Standard(order.ConsigneeLat),
// DeliveryPackageWeight: float64(order.Weight) / 1000,
} }
_, err = db.Insert(jxorder) _, err = db.Insert(jxorder)
if err != nil { if err != nil {
db.Rollback() db.Rollback()
globals.SugarLogger.Infof("insert jxorder error:%v", err)
return err return err
} }
sql := "INSERT INTO jxordersku2(vender_id, order_id, jx_sku_id, sku_name, jx_store_id, sku_price, sku_count, is_gift, promotion_type, sku_plat_discount, sku_vender_discount) VALUES" sql := "INSERT INTO jxordersku2(vender_id, order_id, jx_sku_id, sku_name, jx_store_id, sku_price, sku_count, is_gift, promotion_type, sku_plat_discount, sku_vender_discount) VALUES"
params := []interface{}{} params := []interface{}{}
for _, sku := range order.Skus { for _, sku := range order.Skus {
sql += "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)," sql += "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?),"
params = append(params, sku.VendorID, sku.VendorOrderID, sku.JxSkuID, sku.SkuName, order.JxStoreID, sku.SalePrice, sku.Count, sku.SkuType, sku.PromotionType, 0, 0) params = append(params, sku.VendorID, sku.VendorOrderID, sku.JxSkuID, sku.SkuName, GetJxStoreIDFromOrder(order), sku.SalePrice, sku.Count, sku.SkuType, sku.PromotionType, 0, 0)
} }
sql = sql[:len(sql)-1] + ";" sql = sql[:len(sql)-1] + ";"
if _, err = db.Raw(sql, params...).Exec(); err != nil { if _, err = db.Raw(sql, params...).Exec(); err != nil {
@@ -94,10 +138,49 @@ func (c *OrderController) legacyWriteJxOrder(order *model.GoodsOrder, db orm.Orm
baseapi.SugarLogger.Infof("insert jxordersku2 error:%v", err) baseapi.SugarLogger.Infof("insert jxordersku2 error:%v", err)
} else { } else {
db.Commit() db.Commit()
vendorOrderID := utils.Str2Int64(order.VendorOrderID)
utils.CallFuncLogError(func() error {
_, err = db.Raw(`
UPDATE jxorder2 t1
JOIN jxstore t2 ON t2.storeid = t1.jx_store_id
SET t1.store_lng = t2.lng,
t1.store_lat = t2.lat
WHERE t1.order_id = ?;
`, vendorOrderID /*, vendorOrderID*/).Exec()
return err
}, "update jxorder")
utils.CallFuncLogError(func() error {
_, err = db.Raw(`
UPDATE jxordersku2 t1
JOIN jx_sku t2 ON t2.id = t1.jx_sku_id
JOIN jx_sku_name t3 ON t3.id = t2.nameid
SET t1.sku_img = t3.img
WHERE t1.order_id = ?;
`, vendorOrderID /*, vendorOrderID*/).Exec()
return err
}, "update jxordersku")
} }
return err return err
} }
func (c *OrderController) legacyGetOrderDeliveryChannel(status *model.OrderStatus) (retVal string) {
switch status.VendorID {
case model.VendorIDJD:
retVal = DD_CARRIER_NO
case model.VendorIDELM:
retVal = EME_SELF_CARRIER_NO
case model.VendorIDDada:
retVal = DDDELIVERY_CARRIER_NO
case model.VendorIDMTPS:
retVal = MTPS_CARRIER_NO
default:
panic(fmt.Sprintf("unkown vendorID:%v", status.VendorID))
}
return retVal
}
func (c *OrderController) legacyJxOrderStatusChanged(status *model.OrderStatus, db orm.Ormer) (err error) { func (c *OrderController) legacyJxOrderStatusChanged(status *model.OrderStatus, db orm.Ormer) (err error) {
if db == nil { if db == nil {
db = orm.NewOrm() db = orm.NewOrm()
@@ -113,7 +196,7 @@ func (c *OrderController) legacyJxOrderStatusChanged(status *model.OrderStatus,
return err return err
}, "legacyJxOrderStatusChanged") }, "legacyJxOrderStatusChanged")
} else { } else {
globals.SugarLogger.Infof("read legacyJxOrder error:%v", err) globals.SugarLogger.Infof("read legacyJxOrder error:%v, orderID:%d", err, jxorder.OrderId)
} }
return err return err
} }

View File

@@ -31,6 +31,7 @@ type GoodsOrder struct {
Status int // 参见OrderStatus*相关的常量定义 Status int // 参见OrderStatus*相关的常量定义
VendorStatus string `orm:"size(16)"` VendorStatus string `orm:"size(16)"`
LockStatus int LockStatus int
OrderSeq int // 门店订单序号
BuyerComment string `orm:"size(255)"` BuyerComment string `orm:"size(255)"`
ExpectedDeliveredTime time.Time `orm:"type(datetime)"` // 预期送达时间 ExpectedDeliveredTime time.Time `orm:"type(datetime)"` // 预期送达时间
CancelApplyReason string `orm:"size(255)"` // ""表示没有申请不为null表示用户正在取消申请 CancelApplyReason string `orm:"size(255)"` // ""表示没有申请不为null表示用户正在取消申请
@@ -64,7 +65,7 @@ type OrderSku struct {
SalePrice int64 SalePrice int64
Weight int // 单位为克 Weight int // 单位为克
SkuType int SkuType int
PromotionType int PromotionType int // todo 当前是用于记录京东的PromotionType(生成jxorder用),没有做转换
OrderCreatedAt time.Time `orm:"type(datetime);index"` // 分区考虑 OrderCreatedAt time.Time `orm:"type(datetime);index"` // 分区考虑
} }

View File

@@ -16,6 +16,7 @@ autonaviKey = "4427170f870af2110becb8852d36ab08"
callLegacy = true callLegacy = true
callNew = false callNew = false
handleLegacyJxOrder = true
[dev] [dev]
freshFoodServerURL = "http://portal.beta.jxc4.com" freshFoodServerURL = "http://portal.beta.jxc4.com"