新零售-用户收货地没有商品库存时,计算有库存的最近仓库进行发货

一、前言

因为新零售系统,一般在全国各地都会分散着多个仓库,因此用户下订单时,就存在一个很实际的问题,如果用户的收货地没有新零售的仓库,我们就需要从最近的外地仓库来发货。

另外还有一种情况,用户购买商品A,但收货地新零售仓库没有该商品的库存,也需要从外地的仓库来发货。那我们就必须计算出哪一个仓库距离用户收获地址是最近的。

二、将用户收货地址转化为经纬度坐标

1、注册高德地图开发者账号

https://console.amap.com/

2、创建地图应用

我们需要先创建一个应用,获取到key,才能使用高德地图api服务

3、地理/逆地理编码 开发文档

根据该接口,我们可以将用户的收货地址转化为经纬度坐标

https://lbs.amap.com/api/webservice/guide/api/georegeo/

三、计算两点之间距离

1、利用MySQL计算两点之间距离

st_distance 函数可以计算两个坐标之间相差的度数

SELECT st_distance (
    point(116.397477,39.908692),
    point(121.499740,31.239853)
)

注:上面得到的是度数,将度数转化为米,只要 度数 * 111195 就可以了

2、实际应用,计算所有仓库和用户的距离(单位为千米)

3、获取最终应该哪个仓库发货

假设用户收货地址转化为经纬度是(118.79,32.02),要买两件sku_sn为10001的商品

SELECT t.id,t.address
FROM
    (SELECT id, address, st_distance(point(118.79,32.02),point(lng,lat)) as distance FROM warehouse ORDER BY distance) as t
JOIN
    warehouse_sku_inventory as ws 
ON t.id = ws.warehouse_id AND ws.sku_sn = 10001 AND ws.inventory >= 2
LIMIT 1