- 将微商场当成一个单一商场,不再根据lbs来派单

This commit is contained in:
gazebo
2019-03-20 22:02:30 +08:00
parent 712f311bed
commit 120e0dde6c
3 changed files with 75 additions and 48 deletions

View File

@@ -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),

View File

@@ -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 {