一、前言
因为新零售系统,一般在全国各地都会分散着多个仓库,因此用户下订单时,就存在一个很实际的问题,如果用户的收货地没有新零售的仓库,我们就需要从最近的外地仓库来发货。
另外还有一种情况,用户购买商品A,但收货地新零售仓库没有该商品的库存,也需要从外地的仓库来发货。那我们就必须计算出哪一个仓库距离用户收获地址是最近的。
二、将用户收货地址转化为经纬度坐标
1、注册高德地图开发者账号
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