From b75739d6c25c3ba762d918b2b0f25f14026b026c Mon Sep 17 00:00:00 2001 From: gazebo Date: Mon, 16 Jul 2018 17:14:17 +0800 Subject: [PATCH] - jxorder, only waybill status related left, other info saved. --- business/controller/controller.go | 13 +++- business/controller/elm/order.go | 3 +- business/controller/jd/order.go | 7 ++- business/controller/mtps/waybill.go | 5 +- business/controller/order.go | 14 ++--- business/controller/order_legacy.go | 93 +++++++++++++++++++++++++++-- business/model/order.go | 3 +- conf/app.conf | 1 + 8 files changed, 118 insertions(+), 21 deletions(-) diff --git a/business/controller/controller.go b/business/controller/controller.go index e60231336..7bf82cbdb 100644 --- a/business/controller/controller.go +++ b/business/controller/controller.go @@ -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 +} diff --git a/business/controller/elm/order.go b/business/controller/elm/order.go index 752c4c69e..09f090e3b 100644 --- a/business/controller/elm/order.go +++ b/business/controller/elm/order.go @@ -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{}, diff --git a/business/controller/jd/order.go b/business/controller/jd/order.go index fc1c07af9..d9de05bd1 100644 --- a/business/controller/jd/order.go +++ b/business/controller/jd/order.go @@ -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) { diff --git a/business/controller/mtps/waybill.go b/business/controller/mtps/waybill.go index c58623c5d..71e20b4ea 100644 --- a/business/controller/mtps/waybill.go +++ b/business/controller/mtps/waybill.go @@ -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 } diff --git a/business/controller/order.go b/business/controller/order.go index 0582758e0..e60b299c8 100644 --- a/business/controller/order.go +++ b/business/controller/order.go @@ -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 { diff --git a/business/controller/order_legacy.go b/business/controller/order_legacy.go index c64fb6309..b12e95869 100644 --- a/business/controller/order_legacy.go +++ b/business/controller/order_legacy.go @@ -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 } diff --git a/business/model/order.go b/business/model/order.go index 2f12eb7ad..fd1f338de 100644 --- a/business/model/order.go +++ b/business/model/order.go @@ -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"` // 分区考虑 } diff --git a/conf/app.conf b/conf/app.conf index 245537992..f2627e3a7 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -16,6 +16,7 @@ autonaviKey = "4427170f870af2110becb8852d36ab08" callLegacy = true callNew = false +handleLegacyJxOrder = true [dev] freshFoodServerURL = "http://portal.beta.jxc4.com"