- 将微商场当成一个单一商场,不再根据lbs来派单
This commit is contained in:
@@ -29,7 +29,7 @@ type StoreDetail2 struct {
|
|||||||
CityName string
|
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 := `
|
sql := `
|
||||||
SELECT t1.*,
|
SELECT t1.*,
|
||||||
t2.vendor_store_id, t2.status vendor_status, t2.delivery_fee, t2.sync_status,
|
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
|
FROM store t1
|
||||||
JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? AND t2.deleted_at = ?
|
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
|
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{}
|
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 storeDetail, nil
|
||||||
}
|
}
|
||||||
return nil, err
|
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) {
|
func GetPossibleStoresByPlaceName(db *DaoDB, cityName, provinceName string) (storeList []*StoreDetail2, err error) {
|
||||||
sqlList := []string{
|
sqlList := []string{
|
||||||
`
|
`
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *mo
|
|||||||
// VendorOrderID2: utils.Int64ToStr(utils.MustInterface2Int64(result["wm_order_id_view"])),
|
// VendorOrderID2: utils.Int64ToStr(utils.MustInterface2Int64(result["wm_order_id_view"])),
|
||||||
VendorID: model.VendorIDMTWM,
|
VendorID: model.VendorIDMTWM,
|
||||||
VendorStoreID: result["app_poi_code"].(string),
|
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),
|
StoreName: result["wm_poi_name"].(string),
|
||||||
ConsigneeName: result["recipient_name"].(string),
|
ConsigneeName: result["recipient_name"].(string),
|
||||||
ConsigneeMobile: result["recipient_phone"].(string),
|
ConsigneeMobile: result["recipient_phone"].(string),
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *mo
|
|||||||
VendorID: model.VendorIDWSC,
|
VendorID: model.VendorIDWSC,
|
||||||
VendorStoreID: utils.Int64ToStr(utils.MustInterface2Int64(result["processStoreId"])), // 这个不是通常意义上的vendor store id
|
VendorStoreID: utils.Int64ToStr(utils.MustInterface2Int64(result["processStoreId"])), // 这个不是通常意义上的vendor store id
|
||||||
// StoreID
|
// StoreID
|
||||||
// StoreName
|
StoreName: utils.Interface2String(logisticsDeliveryDetail["processStoreTitle"]),
|
||||||
ConsigneeName: utils.Interface2String(logisticsDeliveryDetail["receiverName"]),
|
ConsigneeName: utils.Interface2String(logisticsDeliveryDetail["receiverName"]),
|
||||||
ConsigneeMobile: utils.Interface2String(logisticsDeliveryDetail["receiverMobile"]),
|
ConsigneeMobile: utils.Interface2String(logisticsDeliveryDetail["receiverMobile"]),
|
||||||
ConsigneeAddress: utils.Interface2String(logisticsDeliveryDetail["receiverAddress"]),
|
ConsigneeAddress: utils.Interface2String(logisticsDeliveryDetail["receiverAddress"]),
|
||||||
@@ -254,55 +254,61 @@ func (p *PurchaseHandler) arrangeSaleStore(order *model.GoodsOrder, cityName, pr
|
|||||||
maxTryStoreWhenArrange = 5
|
maxTryStoreWhenArrange = 5
|
||||||
)
|
)
|
||||||
db := dao.GetDB()
|
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
|
var selectedStore *model.Store
|
||||||
if len(storeList) > 0 {
|
if true {
|
||||||
distanceList := make(utils.SortList, 0)
|
if storeDetail, err := dao.GetStoreDetailByVendorStoreID(db, order.VendorStoreID, model.VendorIDWSC); err == nil {
|
||||||
userLng := jxutils.IntCoordinate2Standard(order.ConsigneeLng)
|
selectedStore = &storeDetail.Store
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
sort.Sort(distanceList)
|
} else {
|
||||||
globals.SugarLogger.Debugf("arrangeSaleStore distance list orderID:%s", order.VendorOrderID)
|
storeList, err := dao.GetPossibleStoresByPlaceName(db, cityName, provinceName)
|
||||||
for _, dist := range distanceList {
|
if err != nil {
|
||||||
globals.SugarLogger.Debugf("orderID:%s %s:%d, distance:%d", order.VendorOrderID, storeList[dist.Index].Name, storeList[dist.Index].ID, dist.CompareValue)
|
globals.SugarLogger.Errorf("arrangeSaleStore failed with error:%v", err)
|
||||||
}
|
}
|
||||||
if len(distanceList) > maxTryStoreWhenArrange {
|
globals.SugarLogger.Debugf("arrangeSaleStore possible stores orderID:%s", order.VendorOrderID)
|
||||||
distanceList = distanceList[:maxTryStoreWhenArrange]
|
for _, store := range storeList {
|
||||||
|
globals.SugarLogger.Debugf("orderID:%s %s:%d", order.VendorOrderID, store.Name, store.ID)
|
||||||
}
|
}
|
||||||
for _, v := range distanceList {
|
if len(storeList) > 0 {
|
||||||
selectedStore = &storeList[v.Index].Store
|
distanceList := make(utils.SortList, 0)
|
||||||
if selectedStore.DeliveryRangeType == model.DeliveryRangeTypeRadius {
|
userLng := jxutils.IntCoordinate2Standard(order.ConsigneeLng)
|
||||||
distance := v.CompareValue
|
userLat := jxutils.IntCoordinate2Standard(order.ConsigneeLat)
|
||||||
if distance < utils.Str2Int64(selectedStore.DeliveryRange) {
|
for k, store := range storeList {
|
||||||
break
|
// 展示门店自身不参与派单
|
||||||
} else {
|
if store.VendorStoreID != order.VendorStoreID {
|
||||||
globals.SugarLogger.Debugf("arrangeSaleStore orderID:%s distance:%d, deliveryRange:%d", order.VendorOrderID, distance, utils.Str2Int64(selectedStore.DeliveryRange))
|
sortItem := &utils.SortItem{
|
||||||
}
|
CompareValue: int64(jxutils.EarthDistance(userLng, userLat, jxutils.IntCoordinate2Standard(store.Lng), jxutils.IntCoordinate2Standard(store.Lat)) * 1000),
|
||||||
} else {
|
Index: k,
|
||||||
points := jxutils.CoordinateStr2Points(selectedStore.DeliveryRange)
|
}
|
||||||
if utils.IsPointInPolygon(userLng, userLat, points) {
|
distanceList = append(distanceList, sortItem)
|
||||||
break
|
|
||||||
} else {
|
|
||||||
globals.SugarLogger.Debugf("arrangeSaleStore orderID:%s userLng:%f, userLat:%f, deliveryRange:%s", order.VendorOrderID, userLng, userLat, selectedStore.DeliveryRange)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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 {
|
if selectedStore != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user