- arrange weimob wsc order (to local store)
This commit is contained in:
@@ -1,12 +1,14 @@
|
||||
package wsc
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/weimobapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
"git.rosy.net.cn/jx-callback/business/partner"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
@@ -137,6 +139,7 @@ func (p *PurchaseHandler) GetOrder(vendorOrderID string) (order *model.GoodsOrde
|
||||
order.SalePrice += sku.SalePrice * int64(sku.Count)
|
||||
order.Weight += sku.Weight * sku.Count
|
||||
}
|
||||
p.arrangeSaleStore(order, utils.Interface2String(logisticsDeliveryDetail["receiverCity"]), utils.Interface2String(logisticsDeliveryDetail["receiverProvince"]))
|
||||
return order, err
|
||||
}
|
||||
|
||||
@@ -149,8 +152,12 @@ func (p *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI
|
||||
if !isAcceptIt {
|
||||
err = api.WeimobAPI.CancelOrder(utils.Str2Int64(order.VendorOrderID), "")
|
||||
} else {
|
||||
// 微商城没有确认,只有取消,模拟接受
|
||||
p.postFakeMsg(utils.Str2Int64(order.VendorOrderID), FakeOrderStatusAccepted)
|
||||
if jxutils.GetSaleStoreIDFromOrder(order) == 0 {
|
||||
// 微商城没有确认,只有取消,模拟接受
|
||||
p.postFakeMsg(utils.Str2Int64(order.VendorOrderID), FakeOrderStatusAccepted)
|
||||
} else {
|
||||
err = api.WeimobAPI.CancelOrder(utils.Str2Int64(order.VendorOrderID), "没有找到合适的配送店")
|
||||
}
|
||||
}
|
||||
}
|
||||
return err
|
||||
@@ -195,3 +202,56 @@ func (p *PurchaseHandler) postFakeMsg(orderNo int64, fakeStatus int) {
|
||||
OnCallbackMsg(msg)
|
||||
}()
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) arrangeSaleStore(order *model.GoodsOrder, cityName, provinceName string) {
|
||||
globals.SugarLogger.Debugf("arrangeSaleStore orderID:%s cityName:%s, provinceName:%s", order.VendorOrderID, cityName, provinceName)
|
||||
const (
|
||||
maxTryStoreWhenArrange = 5
|
||||
)
|
||||
db := dao.GetDB()
|
||||
storeList, err := dao.GetPossibleStoresByPlaceName(db, cityName, provinceName)
|
||||
if err != nil {
|
||||
globals.SugarLogger.Errorf("arrangeSaleStore failed with error:%v", err)
|
||||
}
|
||||
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)
|
||||
}
|
||||
}
|
||||
sort.Sort(distanceList)
|
||||
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 {
|
||||
points := jxutils.CoordinateStr2Points(selectedStore.DeliveryRange)
|
||||
if utils.IsPointInPolygon(userLng, userLat, points) {
|
||||
break
|
||||
}
|
||||
}
|
||||
selectedStore = nil
|
||||
}
|
||||
}
|
||||
if selectedStore != nil {
|
||||
order.StoreID = selectedStore.ID
|
||||
globals.SugarLogger.Debugf("arrangeSaleStore orderID:%s arranged to store:%d", order.VendorOrderID, selectedStore.ID)
|
||||
} else {
|
||||
globals.SugarLogger.Errorf("arrangeSaleStore orderID:%s 找不到门店", order.VendorOrderID)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user