From 796567c364608d83b7c1110d39b2ea1612943b49 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 27 Feb 2019 10:31:04 +0800 Subject: [PATCH] - in GetOrders, if keyword looks like a orderID, then ignore other conditions. --- business/jxcallback/orderman/orderman_ext.go | 32 ++++--- business/jxutils/jxutils.go | 28 ++++-- business/jxutils/jxutils_test.go | 92 ++++++++++++++++++++ controllers/jx_order.go | 4 +- 4 files changed, 133 insertions(+), 23 deletions(-) diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index 2a102bfeb..81d1a75de 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -234,23 +234,10 @@ func (c *OrderManager) ExportMTWaybills(ctx *jxcontext.Context, fromDateStr, toD func (c *OrderManager) GetOrders(ctx *jxcontext.Context, fromDateStr, toDateStr string, params map[string]interface{}, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) { globals.SugarLogger.Debugf("GetOrders from:%s to:%s", fromDateStr, toDateStr) - fromDate, err := utils.TryStr2Time(fromDateStr) - if err != nil { - return nil, err - } - if toDateStr == "" { - toDateStr = fromDateStr - } - toDate, err := utils.TryStr2Time(toDateStr) - if err != nil { - return nil, err - } - toDate = toDate.Add(24 * time.Hour) pageSize = jxutils.FormalizePageSize(pageSize) if offset < 0 { offset = 0 } - sql := ` SELECT SQL_CALC_FOUND_ROWS t1.*, t2.status waybill_status, t2.courier_name, t2.courier_mobile, @@ -262,12 +249,31 @@ func (c *OrderManager) GetOrders(ctx *jxcontext.Context, fromDateStr, toDateStr sqlWhere string sqlParams []interface{} ) + // 如果搜索关键字可能为订单号,则当成订单号查询 + if params["keyword"] != nil { + if jxutils.GetPossibleVendorIDFromVendorOrderID(params["keyword"].(string)) > model.VendorIDUnknown { + params["orderID"] = params["keyword"] + } + } if params["orderID"] != nil { sqlWhere = " WHERE t1.vendor_order_id = ?" sqlParams = []interface{}{ params["orderID"].(string), } } else { + fromDate, err2 := utils.TryStr2Time(fromDateStr) + if err = err2; err != nil { + return nil, err + } + if toDateStr == "" { + toDateStr = fromDateStr + } + toDate, err2 := utils.TryStr2Time(toDateStr) + if err = err2; err != nil { + return nil, err + } + toDate = toDate.Add(24 * time.Hour) + sqlWhere = ` WHERE t1.order_created_at >= ? AND t1.order_created_at < ? ` diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go index 5ad2e77d6..47c0a74fd 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -81,11 +81,28 @@ func SplitUniversalOrderID(universalOrderID string) (orderID string, vendorID in index := strings.Index(universalOrderID, "|") if index != -1 { orderID = universalOrderID[:index] - vendorID = int(utils.Str2Int64(universalOrderID[index:])) + vendorID = int(utils.Str2Int64(universalOrderID[index+1:])) } else { + if vendorID = GetPossibleVendorIDFromVendorOrderID(universalOrderID); vendorID == model.VendorIDUnknown { + // globals.SugarLogger.Errorf("unkown order type:%v", universalOrderID) + panic(fmt.Sprintf("unkown order type, orderID:%s", universalOrderID)) + } + orderID = universalOrderID + } + return orderID, vendorID +} + +func GetPossibleVendorIDFromVendorOrderID(vendorOrderID string) (vendorID int) { + vendorID = model.VendorIDUnknown + if vendorOrderIDInt64 := utils.Str2Int64WithDefault(vendorOrderID, 0); vendorOrderIDInt64 > 0 { + orderIDLen := len(vendorOrderID) + // 5287873015048 13 + // 15380342248732 14 + // 800402581000221 15 + // 33437032333978492 17 + // 3022716176275221584 19 // 800402581000221 jd order // 3022716176275221584 elm order - orderIDLen := len(universalOrderID) if orderIDLen == len("800402581000221") { vendorID = model.VendorIDJD } else if orderIDLen == len("3022716176275221584") { @@ -96,14 +113,9 @@ func SplitUniversalOrderID(universalOrderID string) (orderID string, vendorID in vendorID = model.VendorIDMTWM } else if orderIDLen == len("5287873015048") { vendorID = model.VendorIDWSC - } else { - // globals.SugarLogger.Errorf("unkown order type:%v", universalOrderID) - panic(fmt.Sprintf("unkown order type:%v, orderIDLen:%d", universalOrderID, orderIDLen)) - vendorID = model.VendorIDUnknown } - orderID = universalOrderID } - return orderID, vendorID + return vendorID } func ComposeUniversalOrderID(orderID string, vendorID int) string { diff --git a/business/jxutils/jxutils_test.go b/business/jxutils/jxutils_test.go index eb48eee78..ec931fd5c 100644 --- a/business/jxutils/jxutils_test.go +++ b/business/jxutils/jxutils_test.go @@ -3,6 +3,9 @@ package jxutils import ( "fmt" "testing" + + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/model" ) func TestEarthDistance(t *testing.T) { @@ -66,3 +69,92 @@ func TestSplitSkuName(t *testing.T) { t.Fatalf("SplitSkuName wrong, name:%s, unit:%s", name, unit) } } + +func TestSplitUniversalOrderID(t *testing.T) { + testData := [][]interface{}{ + []interface{}{ + "800402581000221", + "800402581000221", + model.VendorIDJD, + }, + []interface{}{ + "3022716176275221584" + "|" + utils.Int2Str(model.VendorIDJD), + "3022716176275221584", + model.VendorIDJD, + }, + []interface{}{ + "3022716176275221584", + "3022716176275221584", + model.VendorIDELM, + }, + []interface{}{ + "15380342248732", + "15380342248732", + model.VendorIDEBAI, + }, + []interface{}{ + "33437032333978492", + "33437032333978492", + model.VendorIDMTWM, + }, + []interface{}{ + "5287873015048", + "5287873015048", + model.VendorIDWSC, + }, + } + for _, v := range testData { + universalOrderID := v[0].(string) + desiredOrderID := v[1].(string) + desiredVendorID := v[2].(int) + orderID, vendorID := SplitUniversalOrderID(universalOrderID) + if orderID != desiredOrderID || vendorID != desiredVendorID { + t.Fatalf("%s is not ok, orderID:%s, desiredOrderID:%s, vendorID:%d, desiredVendorID:%d", universalOrderID, orderID, desiredOrderID, vendorID, desiredVendorID) + } + } +} + +func TestGetPossibleVendorIDFromVendorOrderID(t *testing.T) { + testData := [][]interface{}{ + []interface{}{ + "800402581000221", + model.VendorIDJD, + }, + []interface{}{ + "X00402581000221", + model.VendorIDUnknown, + }, + []interface{}{ + "8004025810002210", + model.VendorIDUnknown, + }, + []interface{}{ + "3022716176275221584", + model.VendorIDELM, + }, + []interface{}{ + "302271617627522158X", + model.VendorIDUnknown, + }, + []interface{}{ + "15380342248732", + model.VendorIDEBAI, + }, + []interface{}{ + "33437032333978492", + model.VendorIDMTWM, + }, + []interface{}{ + "5287873015048", + model.VendorIDWSC, + }, + } + for _, v := range testData { + universalOrderID := v[0].(string) + desiredVendorID := v[1].(int) + vendorID := GetPossibleVendorIDFromVendorOrderID(universalOrderID) + if vendorID != desiredVendorID { + t.Fatalf("%s is not ok, should be:%d, but it's:%d", universalOrderID, desiredVendorID, vendorID) + } + } +} diff --git a/controllers/jx_order.go b/controllers/jx_order.go index 6b348c3dd..3d4db09c6 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -220,8 +220,8 @@ func (c *OrderController) ExportMTWaybills() { // @Param token header string true "认证token" // @Param orderID query string false "订单号,如果此项不为空,忽略其它所有查询条件" // @Param keyword query string false "查询关键字" -// @Param fromDate query string true "开始日期(包含),格式(2006-01-02)" -// @Param toDate query string false "结束日期(包含),格式(2006-01-02)" +// @Param fromDate query string false "开始日期(包含),格式(2006-01-02),如果订单号为空此项必须要求" +// @Param toDate query string false "结束日期(包含),格式(2006-01-02),如果订单号为空此项必须要求" // @Param vendorIDs query string false "订单所属厂商列表[1,2,3],缺省不限制" // @Param waybillVendorIDs query string false "承运人所属厂商列表[1,2,3],缺省不限制" // @Param storeIDs query string false "京西门店ID列表[1,2,3],缺省不限制"