提交 ae767e10 作者: xiaowang

全国网点

上级 2777ef8f
package com.mmc.csf.release.task.vo;
/**
* @Author LW
* @date 2023/5/19 20:26
* 概要:
*/
public class ImageInfoVO {
}
package com.mmc.csf.web.dto;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* Author: geDuo
* Date: 2022/5/24 15:18
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "com.mmc.csf.flyer.dto.DummyFlyerDTO", description = "飞手DTO")
public class DummyFlyerDTO implements Serializable {
private String flyerName;
private String phoneNum;
private Double lon;
private Double lat;
private Double distance;
}
package com.mmc.csf.web.dto;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* Author: geDuo
* Date: 2022/5/24 16:08
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "com.mmc.csf.repo.dto.DummyFlyerDTO", description = "无人机DTO")
public class DummyUavDTO implements Serializable {
private String ID;
private String uavName;
private Integer online;
private Double lon;
private Double lat;
private Double distance;
}
package com.mmc.csf.web.dto;
import com.alibaba.fastjson.JSONArray;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @Author LW
* @date 2022/4/21 19:56
* 概要:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "com.mmc.csf.model.dto.WebsiteDTO", description = "网点信息")
public class WebsiteDTO implements Serializable {
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "省编码")
private String adCode;
@ApiModelProperty(value = "省市")
private String province;
@ApiModelProperty(value = "地标信息")
private JSONArray location;
@ApiModelProperty(value = "创建时间")
private Date createTime;
}
package com.mmc.csf.web.dto;
import com.mmc.csf.web.vo.LocationVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* @Author LW
* @date 2022/4/22 10:02
* 概要:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WebsiteRangeDTO implements Serializable {
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "省编码")
private String adCode;
@ApiModelProperty(value = "省")
private String province;
@ApiModelProperty(value = "地址经纬度")
private List<LocationVO> locationList;
}
package com.mmc.csf.web.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @Author LW
* @date 2022/4/22 10:04
* 概要:
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LocationVO implements Serializable {
@ApiModelProperty(value = "地址")
private String dizhi;
@ApiModelProperty(value = "经度")
private Double jd;
@ApiModelProperty(value = "纬度")
private Double wd;
@ApiModelProperty(value = "距离")
private Double range;
}
package com.mmc.csf.web.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @Author LW
* @date 2022/4/22 10:12
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WebsiteVO implements Serializable {
@ApiModelProperty(value = "省份编码")
@NotNull(message = "省份编码不能为空")
private String adCode;
@ApiModelProperty(value = "经度")
@NotNull(message = "经度不能为空")
private Double lon;
@ApiModelProperty(value = "纬度")
@NotNull(message = "纬度不能为空")
private Double lat;
}
package com.mmc.csf.common.util.other;
/**
* @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");
}
}
......@@ -17,4 +17,4 @@ patches:
images:
- name: REGISTRY/NAMESPACE/IMAGE:TAG
newName: mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly/ims
newTag: a295653b2ae6d6cb06abca41414e411d1ddb600b
newTag: e808927275ea9039eb60fca038d88eee63183d9f
......@@ -3,7 +3,6 @@ package com.mmc.csf.release.controller;
import com.mmc.csf.common.util.group.Create;
import com.mmc.csf.common.util.web.ResultBody;
import com.mmc.csf.release.entity.AppTypeDO;
import com.mmc.csf.release.forum.vo.DynamicVO;
import com.mmc.csf.release.service.TaskService;
import com.mmc.csf.release.task.qo.TaskServiceQo;
import com.mmc.csf.release.task.vo.IndustryVO;
......@@ -15,7 +14,6 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
/**
* @Author LW
......
package com.mmc.csf.release.controller;
import com.mmc.csf.common.util.web.ResultBody;
import com.mmc.csf.release.service.FlyerDummyService;
import com.mmc.csf.release.service.UavDummyService;
import com.mmc.csf.release.service.WebsiteService;
import com.mmc.csf.web.dto.WebsiteDTO;
import com.mmc.csf.web.dto.WebsiteRangeDTO;
import com.mmc.csf.web.vo.WebsiteVO;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @Author LW
* @date 2022/4/21 19:13
* 概要:
*/
@Api(tags = {"全国网点-api"})
@RestController
@RequestMapping("/website/")
public class WebsiteController {
@Autowired
private WebsiteService websiteService;
@Autowired
private FlyerDummyService flyerDummyService;
@Autowired
private UavDummyService uavDummyService;
@ApiOperation(value = "小程序--获取本省网点")
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = WebsiteDTO.class)})
@GetMapping("getWebsiteByAdCode")
public ResultBody getWebsiteByAdCode(@ApiParam(value = "省编码")
@RequestParam(value = "code") String adCode) {
return websiteService.getWebsiteByAdCode(adCode);
}
@ApiOperation(value = "获取全国网点")
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = WebsiteRangeDTO.class)})
@GetMapping("getWebsiteList")
public ResultBody getWebsiteList(@ApiParam(value = "用户当前经度", required = true) @RequestParam(value = "lon") Double lon,
@ApiParam(value = "用户当前纬度", required = true) @RequestParam(value = "lat") Double lat) {
return websiteService.getWebsiteList(lon,lat);
}
@ApiOperation(value = "获取当前省份距离最近的网点")
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = WebsiteRangeDTO.class)})
@PostMapping("getProvinceWebsiteRange")
public ResultBody getProvinceWebsiteRange(@RequestBody WebsiteVO websiteVO) {
return websiteService.getProvinceWebsiteRange(websiteVO);
}
@ApiOperation(value = "全国飞手-海点数据-fake")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("/flyer/bitmap")
public ResultBody listFlyerDummyData(@RequestParam Integer pageNo, @RequestParam Integer pageSize, @RequestParam Double lon, @RequestParam Double lat) {
return ResultBody.success(flyerDummyService.listDummyFlyer(pageNo, pageSize, lon, lat));
}
@ApiOperation(value = "全国无人机-海点数据-fake")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("/uav/bitmap")
public ResultBody listUavDummys(@RequestParam Integer pageNo, @RequestParam Integer pageSize, @RequestParam Double lon, @RequestParam Double lat) {
return ResultBody.success(uavDummyService.listDummyUav(pageNo, pageSize, lon, lat));
}
}
package com.mmc.csf.release.dao;
import com.mmc.csf.release.entity.DummyFlyerDO;
import com.mmc.csf.release.entity.DummyUavDO;
import com.mmc.csf.release.entity.WebsiteInfoDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @Author LW
* @date 2022/4/21 19:21
* 概要:
*/
@Mapper
public interface WebsiteDao {
WebsiteInfoDO getWebsiteByAdCode(String adCode);
List<WebsiteInfoDO> getWebsiteList();
int countDummyFlyer();
List<DummyFlyerDO> listDummyFlyer(Double lon, Double lat, Integer pageNo, Integer pageSize);
int countDummyUav();
List<DummyUavDO> listDummyUav(Double lon, Double lat, Integer pageNo, Integer pageSize);
}
package com.mmc.csf.release.entity;
import com.mmc.csf.web.dto.DummyFlyerDTO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* Author: geDuo
* Date: 2022/5/27 17:50
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DummyFlyerDO implements Serializable {
private Integer id;
private String flyerName;
private String phoneNum;
private Double lon;
private Double lat;
private Double distance;
public DummyFlyerDO(DummyFlyerDTO d) {
this.flyerName = d.getFlyerName();
this.phoneNum = d.getPhoneNum();
this.lon = d.getLon();
this.lat = d.getLat();
}
public DummyFlyerDTO buildDummyFlyerDTO() {
this.distance = this.distance == null ? 0 : (BigDecimal.valueOf(this.distance).setScale(2, BigDecimal.ROUND_HALF_DOWN)).doubleValue();
return DummyFlyerDTO.builder().flyerName(this.flyerName).phoneNum(this.phoneNum).lon(this.lon).lat(this.lat).distance(this.distance / 1000).build();
}
}
package com.mmc.csf.release.entity;
import com.mmc.csf.web.dto.DummyUavDTO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* Author: geDuo
* Date: 2022/5/27 17:52
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DummyUavDO implements Serializable {
private Integer id;
private String uavName;
private String code;
private Integer online;
private Double lon;
private Double lat;
private Double distance;
public DummyUavDO(DummyUavDTO d) {
this.uavName = d.getUavName();
this.code = d.getID();
this.online = d.getOnline();
this.lon = d.getLon();
this.lat = d.getLat();
}
public DummyUavDTO buildDummyUavDTO() {
this.distance = this.distance == null ? 0 : (BigDecimal.valueOf(this.distance).setScale(2, BigDecimal.ROUND_HALF_DOWN)).doubleValue();
return DummyUavDTO.builder().uavName(this.uavName).ID(this.code).online(this.online).lon(this.lon).lat(this.lat).distance(this.distance / 1000).build();
}
}
package com.mmc.csf.release.entity;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.mmc.csf.web.dto.WebsiteDTO;
import com.mmc.csf.web.dto.WebsiteRangeDTO;
import com.mmc.csf.web.vo.LocationVO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* @Author LW
* @date 2022/4/21 20:09
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WebsiteInfoDO implements Serializable {
private Integer id;
private String adCode;
private String province;
private String location;
private Date createTime;
private Date updateTime;
public WebsiteDTO buildWebsiteDTO() {
JSONArray json = (JSONArray)JSONObject.parse(this.location);
return WebsiteDTO.builder()
.id(this.id)
.adCode(this.adCode)
.province(this.province)
.location(json)
.createTime(this.createTime)
.build();
}
public WebsiteRangeDTO buildWebsiteRangeDTO() {
List<LocationVO> list = JSONArray.parseArray(this.location, LocationVO.class);
return WebsiteRangeDTO.builder()
.id(this.id)
.province(this.province)
.adCode(this.adCode)
.locationList(list)
.build();
}
}
package com.mmc.csf.release.service;
import com.mmc.csf.common.util.page.PageResult;
public interface FlyerDummyService {
PageResult listDummyFlyer(Integer pageNo, Integer pageSize, Double lon, Double lat);
}
package com.mmc.csf.release.service;
import com.mmc.csf.common.util.page.PageResult;
/**
* Author: geDuo
* Date: 2022/5/24 16:05
*/
public interface UavDummyService {
PageResult listDummyUav(Integer pageNo, Integer pageSize, Double lon, Double lat);
}
package com.mmc.csf.release.service;
import com.mmc.csf.common.util.web.ResultBody;
import com.mmc.csf.web.vo.WebsiteVO;
/**
* @Author LW
* @date 2022/4/21 19:18
* 概要:
*/
public interface WebsiteService {
ResultBody getWebsiteByAdCode(String adCode);
ResultBody getWebsiteList(Double lon,Double lat);
ResultBody getProvinceWebsiteRange(WebsiteVO websiteVO);
}
package com.mmc.csf.release.service.impl;
import com.mmc.csf.common.util.page.PageResult;
import com.mmc.csf.release.dao.WebsiteDao;
import com.mmc.csf.release.service.FlyerDummyService;
import com.mmc.csf.web.dto.DummyFlyerDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* Author: geDuo
* Date: 2022/5/24 15:21
*/
@Service
public class FlyerDummyServiceImpl implements FlyerDummyService {
@Autowired
private WebsiteDao websiteDao;
@Override
public PageResult listDummyFlyer(Integer pageNo, Integer pageSize, Double lon, Double lat) {
int count = websiteDao.countDummyFlyer();
if (count == 0) {
return PageResult.buildPage(pageNo, pageSize, count);
}
List<DummyFlyerDTO> list = websiteDao.listDummyFlyer(lon, lat, (pageNo - 1) * pageSize, pageSize).stream().map(d -> d.buildDummyFlyerDTO()).collect(Collectors.toList());
return PageResult.buildPage(pageNo, pageSize, count, list);
}
}
package com.mmc.csf.release.service.impl;
import com.mmc.csf.common.util.page.PageResult;
import com.mmc.csf.release.dao.WebsiteDao;
import com.mmc.csf.release.service.UavDummyService;
import com.mmc.csf.web.dto.DummyUavDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* Author: geDuo
* Date: 2022/5/24 16:13
*/
@Service
public class UavDummyServiceImpl implements UavDummyService {
@Autowired
private WebsiteDao websiteDao;
@Override
public PageResult listDummyUav(Integer pageNo, Integer pageSize, Double lon, Double lat) {
int count = websiteDao.countDummyUav();
if (count == 0) {
return PageResult.buildPage(pageNo, pageSize, count);
}
List<DummyUavDTO> list = websiteDao.listDummyUav(lon, lat, (pageNo - 1) * pageSize, pageSize).stream().map(d -> d.buildDummyUavDTO()).collect(Collectors.toList());
return PageResult.buildPage(pageNo, pageSize, count, list);
}
}
package com.mmc.csf.release.service.impl;
import com.mmc.csf.common.util.other.LocationUtils;
import com.mmc.csf.common.util.web.ResultBody;
import com.mmc.csf.release.dao.WebsiteDao;
import com.mmc.csf.release.entity.WebsiteInfoDO;
import com.mmc.csf.release.service.WebsiteService;
import com.mmc.csf.web.dto.WebsiteRangeDTO;
import com.mmc.csf.web.vo.LocationVO;
import com.mmc.csf.web.vo.WebsiteVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author LW
* @date 2022/4/21 19:19
* 概要:
*/
@Service
public class WebsiteServiceImpl implements WebsiteService {
@Autowired
private WebsiteDao websiteDao;
@Override
public ResultBody getWebsiteByAdCode(String adCode) {
WebsiteInfoDO websiteInfoDO = websiteDao.getWebsiteByAdCode(adCode);
return ResultBody.success(websiteInfoDO.buildWebsiteDTO());
}
@Override
public ResultBody getWebsiteList(Double lon, Double lat) {
List<WebsiteInfoDO> list = websiteDao.getWebsiteList();
List<WebsiteRangeDTO> rangeList = list.stream()
.map(WebsiteInfoDO::buildWebsiteRangeDTO)
.collect(Collectors.toList());
for (WebsiteRangeDTO websiteRangeDTO : rangeList) {
for (LocationVO d : websiteRangeDTO.getLocationList()) {
double distance = 0;
if (d.getJd() != null && d.getJd() != 0 && d.getWd() != null && d.getWd() != 0) {
distance = LocationUtils.getDistance(d.getWd(), d.getJd(), lat, lon);
}
d.setRange(distance);
}
websiteRangeDTO.getLocationList().sort(Comparator.comparing(LocationVO::getRange));
}
return ResultBody.success(rangeList);
}
@Override
public ResultBody getProvinceWebsiteRange(WebsiteVO websiteVO) {
WebsiteInfoDO website = websiteDao.getWebsiteByAdCode(websiteVO.getAdCode());
WebsiteRangeDTO websiteRangeDTO = website.buildWebsiteRangeDTO();
// 获取位置信息
List<LocationVO> locationList = websiteRangeDTO.getLocationList();
for (LocationVO d : locationList) {
double distance = 0;
if (d.getJd() != null && d.getJd() != 0 && d.getWd() != null && d.getWd() != 0) {
distance = LocationUtils.getDistance(d.getWd(), d.getJd(), websiteVO.getLat(), websiteVO.getLon());
}
d.setRange(distance);
}
locationList.sort(Comparator.comparing(LocationVO::getRange));
return ResultBody.success(locationList);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mmc.csf.release.dao.WebsiteDao">
<resultMap id="dummyFlyerResultMap" type="com.mmc.csf.release.entity.DummyFlyerDO">
<id property="id" column="id"/>
<result property="flyerName" column="flyer_name"/>
<result property="phoneNum" column="phone_num"/>
<result property="lon" column="lon"/>
<result property="lat" column="lat"/>
<result property="distance" column="distance"/>
</resultMap>
<resultMap id="dummyUavResultMap" type="com.mmc.csf.release.entity.DummyUavDO">
<id property="id" column="id"/>
<result property="code" column="code"/>
<result property="online" column="online"/>
<result property="lat" column="lat"/>
<result property="lon" column="lon"/>
<result property="uavName" column="uav_name"/>
<result property="distance" column="distance"/>
</resultMap>
<select id="getWebsiteByAdCode" resultType="com.mmc.csf.release.entity.WebsiteInfoDO">
select id, ad_code adCode, province, location, create_time createTime
from website_info
where ad_code = #{adCode}
</select>
<select id="getWebsiteList" resultType="com.mmc.csf.release.entity.WebsiteInfoDO">
select id, ad_code adCode, province, location, create_time createTime
from website_info
</select>
<select id="countDummyFlyer" resultType="Integer">
select count(*) from dummy_flyer
</select>
<select id="listDummyFlyer" resultMap="dummyFlyerResultMap">
SELECT id,flyer_name,phone_num,lon,lat,
st_distance_sphere(point(lon,lat),point(${lon},${lat})) as distance
FROM dummy_flyer
ORDER BY distance ASC
LIMIT #{pageNo},#{pageSize}
</select>
<select id="countDummyUav" resultType="Integer">
select count(*) from dummy_uav
</select>
<select id="listDummyUav" resultMap="dummyUavResultMap">
SELECT id,code,online,lon,lat,uav_name,
st_distance_sphere(point(lon,lat),point(${lon},${lat})) as distance
FROM dummy_uav
ORDER BY distance ASC
LIMIT #{pageNo},#{pageSize}
</select>
</mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论