ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/SiteDetailQuery.java
New file @@ -0,0 +1,27 @@ package com.ruoyi.chargingPile.api.query; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.io.Serializable; @Data @ApiModel(value = "SiteDetailQuery对象",description = "站点详情查询条件") public class SiteDetailQuery implements Serializable { @ApiModelProperty(value = "站点id") @NotNull(message = "站点id不能为空") private Integer siteId; @ApiModelProperty(value = "经度") @NotBlank(message = "地址经度不能为空") private String lon; @ApiModelProperty(value = "纬度") @NotBlank(message = "地址纬度不能为空") private String lat; } ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/ChargingGunCountVO.java
New file @@ -0,0 +1,17 @@ package com.ruoyi.chargingPile.api.vo; import com.ruoyi.chargingPile.api.model.Site; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "ChargingGunCountVO对象",description = "充电枪数量VO") public class ChargingGunCountVO extends Site { @ApiModelProperty(value = "充电枪在线数量") private Integer onlineCount; @ApiModelProperty(value = "充电枪总数数量") private Integer totalCount; } ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteDetailVO.java
New file @@ -0,0 +1,17 @@ package com.ruoyi.chargingPile.api.vo; import com.ruoyi.chargingPile.api.model.Site; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "SiteDetailVO对象",description = "站点详情VO") public class SiteDetailVO extends Site { @ApiModelProperty(value = "绑定车牌提示文案") private String bindCarTips; @ApiModelProperty(value = "距离") private double distance; } ruoyi-common/ruoyi-common-core/pom.xml
@@ -140,6 +140,11 @@ <version>2.8.0</version> </dependency> <dependency> <groupId>org.gavaghan</groupId> <artifactId>geodesy</artifactId> <version>1.1.3</version> </dependency> </dependencies> ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/GeodesyUtil.java
New file @@ -0,0 +1,75 @@ package com.ruoyi.common.core.utils; import org.gavaghan.geodesy.Ellipsoid; import org.gavaghan.geodesy.GeodeticCalculator; import org.gavaghan.geodesy.GeodeticCurve; import org.gavaghan.geodesy.GlobalCoordinates; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; /** * 计算两个金纬度坐标之间的直线距离 */ @Component public class GeodesyUtil { /** * 获取直线距离 * @param fromLonLat * @param toLonLat * @return */ public Map<String, Double> getDistance(String fromLonLat, String toLonLat){ Map<String, Double> map = null; if(StringUtils.isNotEmpty(fromLonLat) && StringUtils.isNotEmpty(toLonLat)){ map = new HashMap<>(); String[] from = fromLonLat.split(","); String[] to = toLonLat.split(","); GlobalCoordinates source = new GlobalCoordinates(Double.valueOf(from[1]), Double.valueOf(from[0])); GlobalCoordinates target = new GlobalCoordinates(Double.valueOf(to[1]), Double.valueOf(to[0])); double Sphere = getDistanceMeter(source, target, Ellipsoid.Sphere); double WGS84 = getDistanceMeter(source, target, Ellipsoid.WGS84); double GRS80 = getDistanceMeter(source, target, Ellipsoid.GRS80); double GRS67 = getDistanceMeter(source, target, Ellipsoid.GRS67); double ANS = getDistanceMeter(source, target, Ellipsoid.ANS); double WGS72 = getDistanceMeter(source, target, Ellipsoid.WGS72); double Clarke1858 = getDistanceMeter(source, target, Ellipsoid.Clarke1858); double Clarke1880 = getDistanceMeter(source, target, Ellipsoid.Clarke1880); // System.out.println("Sphere坐标系计算结果:"+Sphere + "米"); // System.out.println("WGS84坐标系计算结果:"+WGS84 + "米"); // System.out.println("GRS80坐标系计算结果:"+GRS80 + "米"); // System.out.println("GRS67坐标系计算结果:"+GRS67 + "米"); // System.out.println("ANS坐标系计算结果:"+ANS + "米"); // System.out.println("WGS72坐标系计算结果:"+WGS72 + "米"); // System.out.println("Clarke1858坐标系计算结果:"+Clarke1858 + "米"); // System.out.println("Clarke1880坐标系计算结果:"+Clarke1880 + "米"); map.put("Sphere", Sphere); map.put("WGS84", WGS84); map.put("GRS80", GRS80); map.put("GRS67", GRS67); map.put("ANS", ANS); map.put("WGS72", WGS72); map.put("Clarke1858", Clarke1858); map.put("Clarke1880", Clarke1880); } return map; } private double getDistanceMeter(GlobalCoordinates gpsFrom, GlobalCoordinates gpsTo, Ellipsoid ellipsoid){ //创建GeodeticCalculator,调用计算方法,传入坐标系、经纬度用于计算距离 GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(ellipsoid, gpsFrom, gpsTo); return geoCurve.getEllipsoidalDistance(); } public static void main(String[] ages){ GeodesyUtil geodesyUtil = new GeodesyUtil(); Map<String, Double> distance = geodesyUtil.getDistance("115.481028,39.989643", "114.465302,40.004717"); System.err.println(distance); } } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -4,7 +4,9 @@ import com.ruoyi.chargingPile.api.dto.GetSiteListDTO; import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.query.GetSiteList; import com.ruoyi.chargingPile.api.query.SiteDetailQuery; import com.ruoyi.chargingPile.api.query.SiteQuery; import com.ruoyi.chargingPile.api.vo.SiteDetailVO; import com.ruoyi.chargingPile.api.vo.SiteVO; import com.ruoyi.chargingPile.service.ISiteService; import com.ruoyi.common.core.web.domain.AjaxResult; @@ -44,6 +46,15 @@ return AjaxResult.success(siteService.pageList(query)); } @ApiOperation(value = "获取站点详细信息", tags = {"小程序-站点管理"}) @GetMapping("/getDetailById") public AjaxResult<SiteDetailVO> getDetailById(@Validated @RequestBody SiteDetailQuery query){ SiteDetailVO siteDetailVO = siteService.getDetailById(query.getSiteId()); // TODO 查询绑定车牌提示文案 return AjaxResult.success(siteDetailVO); } @ResponseBody @PostMapping("/getSiteList") ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java
@@ -5,6 +5,7 @@ import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.query.GetSiteList; import com.ruoyi.chargingPile.api.query.SiteQuery; import com.ruoyi.chargingPile.api.vo.SiteDetailVO; import com.ruoyi.chargingPile.api.vo.SiteVO; import com.ruoyi.common.core.web.page.PageInfo; import org.apache.ibatis.annotations.Param; @@ -32,4 +33,11 @@ */ List<SiteVO> pageList(@Param("query")SiteQuery query,@Param("pageInfo")PageInfo<SiteVO> pageInfo); /** * 获取站点详情 * @param siteId * @return */ SiteDetailVO getDetailById(@Param("siteId")Integer siteId); } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java
@@ -5,6 +5,7 @@ import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.query.GetSiteList; import com.ruoyi.chargingPile.api.query.SiteQuery; import com.ruoyi.chargingPile.api.vo.SiteDetailVO; import com.ruoyi.chargingPile.api.vo.SiteVO; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; @@ -57,7 +58,19 @@ * @param accountingStrategyId 计费策略id */ void setAccountingStrategy(Integer id, Integer accountingStrategyId); /** * 获取站点分页列表 * @param query * @return */ PageInfo<SiteVO> pageList(SiteQuery query); /** * 获取站点详情 * @param siteId * @return */ SiteDetailVO getDetailById(Integer siteId); } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
@@ -7,6 +7,7 @@ import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.query.GetSiteList; import com.ruoyi.chargingPile.api.query.SiteQuery; import com.ruoyi.chargingPile.api.vo.SiteDetailVO; import com.ruoyi.chargingPile.api.vo.SiteVO; import com.ruoyi.chargingPile.api.vo.TAccountingStrategyVO; import com.ruoyi.chargingPile.mapper.SiteMapper; @@ -162,8 +163,13 @@ pageInfo.setRecords(list); return pageInfo; } @Override public SiteDetailVO getDetailById(Integer siteId) { return this.baseMapper.getDetailById(siteId); } /** * 设置站点计费策略 * @param id 站点id ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml
@@ -168,4 +168,8 @@ </choose> </if> </select> <select id="getDetailById" resultType="com.ruoyi.chargingPile.api.vo.SiteDetailVO"> SELECT <include refid="Base_Column_List"></include> FROM t_site WHERE id = #{siteId} AND del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} </select> </mapper>