diff --git a/business/model/dao/store.go b/business/model/dao/store.go index a1414a280..b7ec25c0a 100644 --- a/business/model/dao/store.go +++ b/business/model/dao/store.go @@ -29,7 +29,7 @@ type StoreDetail2 struct { CityName string } -func GetStoreDetail(db *DaoDB, storeID, vendorID int) (storeDetail *StoreDetail, err error) { +func getStoreDetail(db *DaoDB, storeID, vendorID int, vendorStoreID string) (storeDetail *StoreDetail, err error) { sql := ` SELECT t1.*, t2.vendor_store_id, t2.status vendor_status, t2.delivery_fee, t2.sync_status, @@ -38,15 +38,36 @@ func GetStoreDetail(db *DaoDB, storeID, vendorID int) (storeDetail *StoreDetail, FROM store t1 JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? AND t2.deleted_at = ? LEFT JOIN place district ON t1.district_code = district.code - WHERE t1.id = ? AND t1.deleted_at = ? + WHERE t1.deleted_at = ? ` + sqlParams := []interface{}{ + vendorID, + utils.DefaultTimeValue, + utils.DefaultTimeValue, + } + if storeID > 0 { + sql += " AND t1.id = ?" + sqlParams = append(sqlParams, storeID) + } + if vendorStoreID != "" { + sql += " AND t2.vendor_store_id = ?" + sqlParams = append(sqlParams, vendorStoreID) + } storeDetail = &StoreDetail{} - if err = GetRow(db, storeDetail, sql, vendorID, utils.DefaultTimeValue, storeID, utils.DefaultTimeValue); err == nil { + if err = GetRow(db, storeDetail, sql, sqlParams...); err == nil { return storeDetail, nil } return nil, err } +func GetStoreDetail(db *DaoDB, storeID, vendorID int) (storeDetail *StoreDetail, err error) { + return getStoreDetail(db, storeID, vendorID, "") +} + +func GetStoreDetailByVendorStoreID(db *DaoDB, vendorStoreID string, vendorID int) (storeDetail *StoreDetail, err error) { + return getStoreDetail(db, 0, vendorID, vendorStoreID) +} + func GetPossibleStoresByPlaceName(db *DaoDB, cityName, provinceName string) (storeList []*StoreDetail2, err error) { sqlList := []string{ ` diff --git a/business/partner/purchase/mtwm/order.go b/business/partner/purchase/mtwm/order.go index 4b8760e33..3453fd152 100644 --- a/business/partner/purchase/mtwm/order.go +++ b/business/partner/purchase/mtwm/order.go @@ -62,7 +62,7 @@ func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *mo // VendorOrderID2: utils.Int64ToStr(utils.MustInterface2Int64(result["wm_order_id_view"])), VendorID: model.VendorIDMTWM, VendorStoreID: result["app_poi_code"].(string), - StoreID: int(utils.Str2Int64(result["app_poi_code"].(string))), + StoreID: int(utils.Str2Int64WithDefault(utils.Interface2String(result["app_poi_code"]), 0)), StoreName: result["wm_poi_name"].(string), ConsigneeName: result["recipient_name"].(string), ConsigneeMobile: result["recipient_phone"].(string), diff --git a/business/partner/purchase/weimob/wsc/order.go b/business/partner/purchase/weimob/wsc/order.go index b553f0e31..d52587cde 100644 --- a/business/partner/purchase/weimob/wsc/order.go +++ b/business/partner/purchase/weimob/wsc/order.go @@ -122,7 +122,7 @@ func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *mo VendorID: model.VendorIDWSC, VendorStoreID: utils.Int64ToStr(utils.MustInterface2Int64(result["processStoreId"])), // 这个不是通常意义上的vendor store id // StoreID - // StoreName + StoreName: utils.Interface2String(logisticsDeliveryDetail["processStoreTitle"]), ConsigneeName: utils.Interface2String(logisticsDeliveryDetail["receiverName"]), ConsigneeMobile: utils.Interface2String(logisticsDeliveryDetail["receiverMobile"]), ConsigneeAddress: utils.Interface2String(logisticsDeliveryDetail["receiverAddress"]), @@ -254,55 +254,61 @@ func (p *PurchaseHandler) arrangeSaleStore(order *model.GoodsOrder, cityName, pr maxTryStoreWhenArrange = 5 ) db := dao.GetDB() - storeList, err := dao.GetPossibleStoresByPlaceName(db, cityName, provinceName) - if err != nil { - globals.SugarLogger.Errorf("arrangeSaleStore failed with error:%v", err) - } - globals.SugarLogger.Debugf("arrangeSaleStore possible stores orderID:%s", order.VendorOrderID) - for _, store := range storeList { - globals.SugarLogger.Debugf("orderID:%s %s:%d", order.VendorOrderID, store.Name, store.ID) - } var selectedStore *model.Store - if len(storeList) > 0 { - distanceList := make(utils.SortList, 0) - userLng := jxutils.IntCoordinate2Standard(order.ConsigneeLng) - userLat := jxutils.IntCoordinate2Standard(order.ConsigneeLat) - for k, store := range storeList { - // 展示门店自身不参与派单 - if store.VendorStoreID != order.VendorStoreID { - sortItem := &utils.SortItem{ - CompareValue: int64(jxutils.EarthDistance(userLng, userLat, jxutils.IntCoordinate2Standard(store.Lng), jxutils.IntCoordinate2Standard(store.Lat)) * 1000), - Index: k, - } - distanceList = append(distanceList, sortItem) - } + if true { + if storeDetail, err := dao.GetStoreDetailByVendorStoreID(db, order.VendorStoreID, model.VendorIDWSC); err == nil { + selectedStore = &storeDetail.Store } - sort.Sort(distanceList) - globals.SugarLogger.Debugf("arrangeSaleStore distance list orderID:%s", order.VendorOrderID) - for _, dist := range distanceList { - globals.SugarLogger.Debugf("orderID:%s %s:%d, distance:%d", order.VendorOrderID, storeList[dist.Index].Name, storeList[dist.Index].ID, dist.CompareValue) + } else { + storeList, err := dao.GetPossibleStoresByPlaceName(db, cityName, provinceName) + if err != nil { + globals.SugarLogger.Errorf("arrangeSaleStore failed with error:%v", err) } - if len(distanceList) > maxTryStoreWhenArrange { - distanceList = distanceList[:maxTryStoreWhenArrange] + globals.SugarLogger.Debugf("arrangeSaleStore possible stores orderID:%s", order.VendorOrderID) + for _, store := range storeList { + globals.SugarLogger.Debugf("orderID:%s %s:%d", order.VendorOrderID, store.Name, store.ID) } - for _, v := range distanceList { - selectedStore = &storeList[v.Index].Store - if selectedStore.DeliveryRangeType == model.DeliveryRangeTypeRadius { - distance := v.CompareValue - if distance < utils.Str2Int64(selectedStore.DeliveryRange) { - break - } else { - globals.SugarLogger.Debugf("arrangeSaleStore orderID:%s distance:%d, deliveryRange:%d", order.VendorOrderID, distance, utils.Str2Int64(selectedStore.DeliveryRange)) - } - } else { - points := jxutils.CoordinateStr2Points(selectedStore.DeliveryRange) - if utils.IsPointInPolygon(userLng, userLat, points) { - break - } else { - globals.SugarLogger.Debugf("arrangeSaleStore orderID:%s userLng:%f, userLat:%f, deliveryRange:%s", order.VendorOrderID, userLng, userLat, selectedStore.DeliveryRange) + if len(storeList) > 0 { + distanceList := make(utils.SortList, 0) + userLng := jxutils.IntCoordinate2Standard(order.ConsigneeLng) + userLat := jxutils.IntCoordinate2Standard(order.ConsigneeLat) + for k, store := range storeList { + // 展示门店自身不参与派单 + if store.VendorStoreID != order.VendorStoreID { + sortItem := &utils.SortItem{ + CompareValue: int64(jxutils.EarthDistance(userLng, userLat, jxutils.IntCoordinate2Standard(store.Lng), jxutils.IntCoordinate2Standard(store.Lat)) * 1000), + Index: k, + } + distanceList = append(distanceList, sortItem) } } - selectedStore = nil + sort.Sort(distanceList) + globals.SugarLogger.Debugf("arrangeSaleStore distance list orderID:%s", order.VendorOrderID) + for _, dist := range distanceList { + globals.SugarLogger.Debugf("orderID:%s %s:%d, distance:%d", order.VendorOrderID, storeList[dist.Index].Name, storeList[dist.Index].ID, dist.CompareValue) + } + if len(distanceList) > maxTryStoreWhenArrange { + distanceList = distanceList[:maxTryStoreWhenArrange] + } + for _, v := range distanceList { + selectedStore = &storeList[v.Index].Store + if selectedStore.DeliveryRangeType == model.DeliveryRangeTypeRadius { + distance := v.CompareValue + if distance < utils.Str2Int64(selectedStore.DeliveryRange) { + break + } else { + globals.SugarLogger.Debugf("arrangeSaleStore orderID:%s distance:%d, deliveryRange:%d", order.VendorOrderID, distance, utils.Str2Int64(selectedStore.DeliveryRange)) + } + } else { + points := jxutils.CoordinateStr2Points(selectedStore.DeliveryRange) + if utils.IsPointInPolygon(userLng, userLat, points) { + break + } else { + globals.SugarLogger.Debugf("arrangeSaleStore orderID:%s userLng:%f, userLat:%f, deliveryRange:%s", order.VendorOrderID, userLng, userLat, selectedStore.DeliveryRange) + } + } + selectedStore = nil + } } } if selectedStore != nil {