From 2550c4bbff05d30fa9207d30bfa2efca2c167a83 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期五, 09 八月 2024 16:48:59 +0800
Subject: [PATCH] 站点详情

---
 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml                  |    4 +
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteDetailVO.java          |   17 ++++
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/GeodesyUtil.java               |   75 ++++++++++++++++++
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/SiteDetailQuery.java    |   27 ++++++
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/ChargingGunCountVO.java    |   17 ++++
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java    |   11 ++
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java            |    8 ++
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java |   10 ++
 ruoyi-common/ruoyi-common-core/pom.xml                                                                  |    5 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java         |   15 +++
 10 files changed, 186 insertions(+), 3 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/SiteDetailQuery.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/SiteDetailQuery.java
new file mode 100644
index 0000000..cad843c
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/SiteDetailQuery.java
@@ -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;
+
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/ChargingGunCountVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/ChargingGunCountVO.java
new file mode 100644
index 0000000..a5e9f48
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/ChargingGunCountVO.java
@@ -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;
+
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteDetailVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteDetailVO.java
new file mode 100644
index 0000000..8edc9bd
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteDetailVO.java
@@ -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;
+
+}
diff --git a/ruoyi-common/ruoyi-common-core/pom.xml b/ruoyi-common/ruoyi-common-core/pom.xml
index d5c10c8..09938de 100644
--- a/ruoyi-common/ruoyi-common-core/pom.xml
+++ b/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>
 
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/GeodesyUtil.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/GeodesyUtil.java
new file mode 100644
index 0000000..759e585
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/GeodesyUtil.java
@@ -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);
+    }
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
index a6334e3..fa4d7b9 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
+++ b/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")
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java
index 7fae91b..a066725 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java
+++ b/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);
+
 }
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java
index 722b578..857b0c5 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java
+++ b/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);
 }
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
index 98220eb..f28ee2c 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
+++ b/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
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml
index ba0802e..ece5148 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml
+++ b/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>
\ No newline at end of file

--
Gitblit v1.7.1