提交 af55c66e 作者: zhenjie

加盟商距离计算

上级 277a8cbb
...@@ -17,12 +17,15 @@ import com.mmc.iuav.user.model.vo.*; ...@@ -17,12 +17,15 @@ import com.mmc.iuav.user.model.vo.*;
import com.mmc.iuav.user.service.BackUserAccountService; import com.mmc.iuav.user.service.BackUserAccountService;
import com.mmc.iuav.user.service.CooperationService; import com.mmc.iuav.user.service.CooperationService;
import com.mmc.iuav.user.service.UserAccountService; import com.mmc.iuav.user.service.UserAccountService;
import com.mmc.iuav.user.util.LocationUtils;
import com.mmc.iuav.user.util.SmsUtil; import com.mmc.iuav.user.util.SmsUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -317,6 +320,19 @@ public class CooperationServiceImpl implements CooperationService { ...@@ -317,6 +320,19 @@ public class CooperationServiceImpl implements CooperationService {
} }
List<CompanyInfoVO> list = cooperationDao.listCompanyInfoByCoopId(coopId, lon, lat, (pageNo - 1) * pageSize, pageSize) List<CompanyInfoVO> list = cooperationDao.listCompanyInfoByCoopId(coopId, lon, lat, (pageNo - 1) * pageSize, pageSize)
.stream().map(CompanyInfoDO::buildCompanyInfoVO).collect(Collectors.toList()); .stream().map(CompanyInfoDO::buildCompanyInfoVO).collect(Collectors.toList());
this.computerDistance(list, lon, lat);
return PageResult.buildPage(pageNo, pageSize, count, list); return PageResult.buildPage(pageNo, pageSize, count, list);
} }
private List<CompanyInfoVO> computerDistance(List<CompanyInfoVO> companyInfoVOS, Double lon, Double lat) {
for (CompanyInfoVO d : companyInfoVOS) {
double distance = 0;
if (d.getLon() != null && d.getLon() != 0 && d.getLat() != null && d.getLat() != 0) {
distance = LocationUtils.getDistance(d.getLat(), d.getLon(), lat, lon);
}
d.setDistance(distance);
}
Collections.sort(companyInfoVOS, Comparator.comparing(CompanyInfoVO::getDistance));// 升序
return companyInfoVOS;
}
} }
package com.mmc.iuav.user.util;
/**
* @author 作者 geDuo
* @version 创建时间:2021年11月5日 下午5:48:59
* @explain 高德地图对应经纬度计算距离
*/
public class LocationUtils {
// 地球赤道半径
private static double EARTH_RADIUS = 6378.137;
private static double rad(double d) {
return d * Math.PI / 180.0;
}
/**
* @描述 经纬度获取距离,单位为KM
* @参数 [lat1, lon1, lat2, lon2]
* @返回值 double
* @创建人 Young
* @创建时间 2019/3/13 20:33
**/
public static double getDistance(double lat1, double lon1, double lat2, double lon2) {
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lon1) - rad(lon2);
double s = 2 * Math.asin(Math.sqrt(
Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
s = s * EARTH_RADIUS;
s = Math.round(s * 10000d) / 10000d;
return s;
}
public static double getDistanceByM(double lat1, double lon1, double lat2, double lon2) {
double s = LocationUtils.getDistance(lat1, lon1, lat2, lon2) * 1000;
return s;
}
public static void main(String[] args) {
double distance = getDistance(34.810487, 117.323725, 22.576802, 113.94059);
System.out.println("距离" + distance + "KM");
}
}
...@@ -453,8 +453,7 @@ ...@@ -453,8 +453,7 @@
ci.score, ci.score,
ci.brand_name, ci.brand_name,
ci.brand_logo, ci.brand_logo,
cbu.back_user_account_id, cbu.back_user_account_id
round(st_distance_sphere(point(ci.lon, ci.lat),point(#{lon}, #{lat}))/1000, 2) AS distance
FROM user_apply_tag uat FROM user_apply_tag uat
INNER JOIN cooperation_tag ct ON uat.cooperation_tag_id = ct.id INNER JOIN cooperation_tag ct ON uat.cooperation_tag_id = ct.id
INNER JOIN company_member cm ON cm.user_account_id = uat.user_account_id INNER JOIN company_member cm ON cm.user_account_id = uat.user_account_id
...@@ -462,7 +461,6 @@ ...@@ -462,7 +461,6 @@
INNER JOIN company_back_user cbu ON cbu.company_info_id = ci.id INNER JOIN company_back_user cbu ON cbu.company_info_id = ci.id
WHERE ct.id = #{coopId} WHERE ct.id = #{coopId}
and uat.is_deleted = 0 and uat.apply_status = 1 and ci.is_deleted = 0 and uat.is_deleted = 0 and uat.apply_status = 1 and ci.is_deleted = 0
ORDER BY distance ASC
LIMIT #{pageNo}, #{pageSize} LIMIT #{pageNo}, #{pageSize}
</select> </select>
</mapper> </mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论