- jxorder, only waybill status related left, other info saved.
This commit is contained in:
@@ -80,11 +80,11 @@ func ComposeUniversalOrderID(orderID string, vendorID int) string {
|
||||
}
|
||||
|
||||
func StandardCoordinate2Int(value float64) int {
|
||||
return int(value * 1000000)
|
||||
return int(math.Round(value * 1000000))
|
||||
}
|
||||
|
||||
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) {
|
||||
@@ -111,7 +111,7 @@ func IntPrice2Standard(value int64) float64 {
|
||||
}
|
||||
|
||||
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) {
|
||||
@@ -170,3 +170,10 @@ func GetDataCityCodeFromOrder(order *model.GoodsOrder) (retVal string, err error
|
||||
}
|
||||
return retVal, err
|
||||
}
|
||||
|
||||
func GetJxStoreIDFromOrder(order *model.GoodsOrder) (retVal int) {
|
||||
if order.JxStoreID != 0 {
|
||||
return order.JxStoreID
|
||||
}
|
||||
return order.StoreID
|
||||
}
|
||||
|
||||
@@ -117,10 +117,11 @@ func (c *OrderController) getOrderInfo(orderID string) (order *model.GoodsOrder,
|
||||
ConsigneeName: result["consignee"].(string),
|
||||
ConsigneeMobile: consigneeMobile,
|
||||
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),
|
||||
// 取订单的原始status,不合并消息类型(因为当前消息类型没有意义)
|
||||
VendorStatus: utils.Interface2String(result["status"]),
|
||||
OrderSeq: int(utils.MustInterface2Int64(result["daySn"])),
|
||||
OrderCreatedAt: utils.Str2Time(result["createdAt"].(string)),
|
||||
OriginalData: string(utils.MustMarshal(result)),
|
||||
Skus: []*model.OrderSku{},
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package jd
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/autonavi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/jdapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
@@ -70,9 +72,10 @@ func (c *OrderController) getOrderInfo(msg *jdapi.CallbackOrderMsg) (order *mode
|
||||
ConsigneeMobile: result["buyerMobile"].(string),
|
||||
ConsigneeAddress: result["buyerFullAddress"].(string),
|
||||
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),
|
||||
VendorStatus: msg.StatusID,
|
||||
OrderSeq: int(utils.MustInterface2Int64(result["orderNum"])),
|
||||
OrderCreatedAt: utils.Str2Time(result["orderStartTime"].(string)),
|
||||
OriginalData: string(utils.MustMarshal(result)),
|
||||
Skus: []*model.OrderSku{},
|
||||
@@ -104,7 +107,7 @@ func (c *OrderController) getOrderInfo(msg *jdapi.CallbackOrderMsg) (order *mode
|
||||
SkuName: product["skuName"].(string),
|
||||
Weight: int(utils.MustInterface2Float64(product["skuWeight"]) * 1000),
|
||||
SalePrice: utils.MustInterface2Int64(product["skuJdPrice"]),
|
||||
PromotionType: int(utils.MustInterface2Int64(product["skuJdPrice"])),
|
||||
PromotionType: int(utils.MustInterface2Int64(product["promotionType"])),
|
||||
OrderCreatedAt: order.OrderCreatedAt,
|
||||
}
|
||||
if product["isGift"].(bool) {
|
||||
|
||||
@@ -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) {
|
||||
sql := "SELECT zs_store_id FROM jx_to_zs_store_map WHERE jx_store_id = ?"
|
||||
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 {
|
||||
retVal = lists[0][0].(string)
|
||||
} 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
|
||||
}
|
||||
|
||||
@@ -115,9 +115,9 @@ func (c *OrderController) updateOrderSkuOtherInfo(orderSkus []*model.OrderSku, d
|
||||
var sql string
|
||||
if orderSkus[0].VendorID == model.VendorIDJD {
|
||||
sql = `
|
||||
SELECT t1.jdskuid, t2.id
|
||||
SELECT t1.jdskuid, t1.skuid
|
||||
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 (
|
||||
`
|
||||
} 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 {
|
||||
v.JxSkuID = int(utils.Str2Int64(jxskuid))
|
||||
} else {
|
||||
globals.SugarLogger.Infof("can not find %v", jxskuid)
|
||||
globals.SugarLogger.Infof("can not find sku map:%v", v.VendorSkuID)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -157,16 +157,16 @@ func (c *OrderController) updateOrderOtherInfo(order *model.GoodsOrder, db orm.O
|
||||
var sql string
|
||||
if order.VendorID == model.VendorIDJD {
|
||||
sql = `
|
||||
SELECT t2.storeid
|
||||
SELECT t1.jxstoreid
|
||||
FROM jxstoremap t1
|
||||
JOIN jxstore t2 ON t1.jxstoreid = t2.storeid
|
||||
/* JOIN jxstore t2 ON t1.jxstoreid = t2.storeid */
|
||||
WHERE t1.jdstoreid = ?
|
||||
`
|
||||
} else if order.VendorID == model.VendorIDELM {
|
||||
sql = `
|
||||
SELECT t2.storeid
|
||||
SELECT t1.jx_store_id
|
||||
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 = ?
|
||||
`
|
||||
} else {
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"git.rosy.net.cn/baseapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/legacyorder"
|
||||
@@ -33,6 +36,32 @@ const (
|
||||
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) {
|
||||
switch orderStatus {
|
||||
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) {
|
||||
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()
|
||||
if isDelFirst {
|
||||
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{
|
||||
VenderId: int8(order.VendorID),
|
||||
OrderId: utils.Str2Int64(order.VendorOrderID),
|
||||
JxStoreId: utils.Int2Str(order.JxStoreID),
|
||||
JxStoreId: utils.Int2Str(GetJxStoreIDFromOrder(order)),
|
||||
JxStoreName: order.StoreName,
|
||||
OrderNum: order.SkuCount,
|
||||
OrderNum: order.OrderSeq,
|
||||
OrderStatus: c.legacyMapOrderStatus(order.Status),
|
||||
OrderStatusTime: utils.Time2Str(order.OrderCreatedAt),
|
||||
BusinessTag: "",
|
||||
BusinessTag: businessTags,
|
||||
SkuCount: order.SkuCount,
|
||||
OrderBuyerRemark: order.BuyerComment,
|
||||
BuyerFullName: order.ConsigneeName,
|
||||
@@ -75,18 +117,20 @@ func (c *OrderController) legacyWriteJxOrder(order *model.GoodsOrder, db orm.Orm
|
||||
BuyerCoordType: order.CoordinateType,
|
||||
BuyerLng: IntCoordinate2Standard(order.ConsigneeLng),
|
||||
BuyerLat: IntCoordinate2Standard(order.ConsigneeLat),
|
||||
// DeliveryPackageWeight: float64(order.Weight) / 1000,
|
||||
}
|
||||
|
||||
_, err = db.Insert(jxorder)
|
||||
if err != nil {
|
||||
db.Rollback()
|
||||
globals.SugarLogger.Infof("insert jxorder error:%v", 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"
|
||||
params := []interface{}{}
|
||||
for _, sku := range order.Skus {
|
||||
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] + ";"
|
||||
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)
|
||||
} else {
|
||||
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
|
||||
}
|
||||
|
||||
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) {
|
||||
if db == nil {
|
||||
db = orm.NewOrm()
|
||||
@@ -113,7 +196,7 @@ func (c *OrderController) legacyJxOrderStatusChanged(status *model.OrderStatus,
|
||||
return err
|
||||
}, "legacyJxOrderStatusChanged")
|
||||
} else {
|
||||
globals.SugarLogger.Infof("read legacyJxOrder error:%v", err)
|
||||
globals.SugarLogger.Infof("read legacyJxOrder error:%v, orderID:%d", err, jxorder.OrderId)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -31,6 +31,7 @@ type GoodsOrder struct {
|
||||
Status int // 参见OrderStatus*相关的常量定义
|
||||
VendorStatus string `orm:"size(16)"`
|
||||
LockStatus int
|
||||
OrderSeq int // 门店订单序号
|
||||
BuyerComment string `orm:"size(255)"`
|
||||
ExpectedDeliveredTime time.Time `orm:"type(datetime)"` // 预期送达时间
|
||||
CancelApplyReason string `orm:"size(255)"` // ""表示没有申请,不为null表示用户正在取消申请
|
||||
@@ -64,7 +65,7 @@ type OrderSku struct {
|
||||
SalePrice int64
|
||||
Weight int // 单位为克
|
||||
SkuType int
|
||||
PromotionType int
|
||||
PromotionType int // todo 当前是用于记录京东的PromotionType(生成jxorder用),没有做转换
|
||||
OrderCreatedAt time.Time `orm:"type(datetime);index"` // 分区考虑
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ autonaviKey = "4427170f870af2110becb8852d36ab08"
|
||||
|
||||
callLegacy = true
|
||||
callNew = false
|
||||
handleLegacyJxOrder = true
|
||||
|
||||
[dev]
|
||||
freshFoodServerURL = "http://portal.beta.jxc4.com"
|
||||
|
||||
Reference in New Issue
Block a user