فهرست منبع

修改对接gps

bihuisong 1 سال پیش
والد
کامیت
29fe4695b2

+ 5 - 0
songhua-admin/src/main/java/com/songhua/web/controller/ship/CruiseShipMappingController.java

@@ -94,4 +94,9 @@ public class CruiseShipMappingController extends BaseController
     public AjaxResult getCombinedCruiseData() {
         return success(cruiseShipMappingService.getShipRouteData());
     }
+
+    @GetMapping("/getGpsByDid/{did}")
+    public AjaxResult getGpsByDid(@PathVariable Long did) {
+        return success(cruiseShipMappingService.getGpsByDid(did));
+    }
 }

+ 9 - 10
songhua-admin/src/main/java/com/songhua/web/controller/gps/gpsController.java

@@ -1,4 +1,4 @@
-package com.songhua.web.controller.gps;
+package com.songhua.web.quzrtz;
 
 
 import com.alibaba.fastjson2.JSONArray;
@@ -10,11 +10,9 @@ import com.songhua.system.service.ICruiseShipMappingService;
 import com.songhua.system.service.ISysConfigService;
 import com.songhua.web.controller.utils.MD5Encryptor;
 import lombok.extern.slf4j.Slf4j;
-import org.aspectj.weaver.loadtime.Aj;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
 
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
@@ -29,9 +27,8 @@ import static com.songhua.common.core.domain.AjaxResult.success;
 
 
 @Slf4j
-@RestController
-@RequestMapping("/gps")
-public class gpsController {
+@Component
+public class gpsJob {
 
     @Autowired
     private ICruiseShipMappingService cruiseShipMappingService;
@@ -96,15 +93,16 @@ public class gpsController {
             log.error("获取访问令牌接口失败:{}", e);
             e.printStackTrace();
         }
-        return null;
+        return error("获取访问令牌接口失败");
     }
 
 
     /**
      * 获取单个设备或多个设备的信息
      */
-    @GetMapping("/shipRoute")
+    @Scheduled(cron = "0 0/2 * * * ?")
     public AjaxResult getEquipment() {
+        log.info("获取单个设备或多个设备的信息开始");
         AjaxResult result = getToken();
         Date date = new Date();
         String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
@@ -170,6 +168,7 @@ public class gpsController {
                 if (!saveList.isEmpty()) {
                     cruiseShipMappingService.saveCruiseShipMapping(saveList);
                 }
+                log.info("获取单个设备或多个设备的信息结束");
                 return AjaxResult.success();
             } else {
                 log.error("获取单个设备或多个设备的信息返回错误代码:{}", responseCode);

+ 2 - 0
songhua-system/src/main/java/com/songhua/system/domain/CruiseShipMapping.java

@@ -57,4 +57,6 @@ public  class CruiseShipMapping extends BaseEntity {
     /** 乘客容量 */
     @Excel(name = "安全设备")
     private String safetyEquipment;
+
+    private Long did;
 }

+ 1 - 1
songhua-system/src/main/java/com/songhua/system/mapper/CruiseShipMappingMapper.java

@@ -42,7 +42,7 @@ public interface CruiseShipMappingMapper {
      */
     public int deleteCruiseShipMappingByIds(String[] ids);
 
-    List<CruiseShipMapping> getShipRouteData();
+    List<CruiseShipMapping> getShipRouteData(Long did);
 
     void saveCruiseShipMapping(@Param("list") List list);
 }

+ 3 - 0
songhua-system/src/main/java/com/songhua/system/service/ICruiseShipMappingService.java

@@ -48,4 +48,7 @@ public interface ICruiseShipMappingService
     List<Map<String, Object>> getShipRouteData();
 
     void saveCruiseShipMapping(List objectList);
+
+    List<Map<String, Object>> getGpsByDid(Long did);
+
 }

+ 35 - 1
songhua-system/src/main/java/com/songhua/system/service/impl/CruiseShipMappingServiceImpl.java

@@ -85,7 +85,7 @@ public class CruiseShipMappingServiceImpl implements ICruiseShipMappingService
     public List<Map<String, Object>> getShipRouteData() {
         List<Map<String, Object>> combinedData = new ArrayList<>();
         // 获取近一小时的经纬度信息
-        List<CruiseShipMapping> recentLocations = cruiseShipMappingMapper.getShipRouteData();
+        List<CruiseShipMapping> recentLocations = cruiseShipMappingMapper.getShipRouteData(null);
         for (int i = 0; i <  recentLocations.size(); i++) {
             Map<String, Object> data = new HashMap<>();
             String[] lon = recentLocations.get(i).getLongitude().split(",");
@@ -108,6 +108,7 @@ public class CruiseShipMappingServiceImpl implements ICruiseShipMappingService
             data.put("propulsion", recentLocations.get(i).getPropulsion());
             data.put("passengerCapacity", recentLocations.get(i).getPassengerCapacity());
             data.put("safetyEquipment", recentLocations.get(i).getSafetyEquipment());
+            data.put("did", recentLocations.get(i).getDid());
             combinedData.add(data);
         }
         return combinedData;
@@ -117,4 +118,37 @@ public class CruiseShipMappingServiceImpl implements ICruiseShipMappingService
     public void saveCruiseShipMapping(List objectList) {
         cruiseShipMappingMapper.saveCruiseShipMapping(objectList);
     }
+
+    @Override
+    public List<Map<String, Object>> getGpsByDid(Long did) {
+        List<Map<String, Object>> combinedData = new ArrayList<>();
+        // 获取近一小时的经纬度信息
+        List<CruiseShipMapping> recentLocations = cruiseShipMappingMapper.getShipRouteData(did);
+        for (int i = 0; i <  recentLocations.size(); i++) {
+            Map<String, Object> data = new HashMap<>();
+            String[] lon = recentLocations.get(i).getLongitude().split(",");
+            String[] lat = recentLocations.get(i).getLatitude().split(",");
+            List<Map> data1 = new ArrayList<>();
+            for (int j = 0; j <  lon.length; j++) {
+                Map<String, Object> map = new HashMap<>();
+                map.put("lng", lon[j]);
+                map.put("lat", lat[j]);
+                data1.add(map);
+            }
+            data.put("id", recentLocations.get(i).getId());
+            data.put("polylinePath",data1);
+            data.put("color", color.get(i));
+            data.put("shipName", recentLocations.get(i).getShipName());
+            data.put("shipType", recentLocations.get(i).getShipType());
+            data.put("lengthOverall", recentLocations.get(i).getLengthOverall());
+            data.put("registrationNumber", recentLocations.get(i).getRegistrationNumber());
+            data.put("quantity", recentLocations.get(i).getQuantity());
+            data.put("propulsion", recentLocations.get(i).getPropulsion());
+            data.put("passengerCapacity", recentLocations.get(i).getPassengerCapacity());
+            data.put("safetyEquipment", recentLocations.get(i).getSafetyEquipment());
+            data.put("did", recentLocations.get(i).getDid());
+            combinedData.add(data);
+        }
+        return combinedData;
+    }
 }

+ 3 - 2
songhua-system/src/main/resources/mapper/system/CruiseShipMappingMapper.xml

@@ -97,10 +97,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             GROUP_CONCAT(a.latitude) AS latitude
         FROM
             basic_cruise_ship b
-                LEFT JOIN
-            cruise_ship_mapping a ON b.id = a.ship_id
+                inner JOIN
+            cruise_ship_mapping a ON b.registration_number = a.did
         WHERE
             a.ship_time >= NOW() - INTERVAL 1 HOUR
+        <if test="did != null"> and b.registration_number = #{did}</if>
         GROUP BY
             b.ship_name
         ORDER BY

+ 9 - 1
songhua-ui/src/api/ship/shipMapping.js

@@ -43,10 +43,18 @@ export function delMapping(id) {
   })
 }
 
-// 查询详细
+// 查询在线船列表
 export function getShipRoute() {
   return request({
     url: '/shipMapping/shipRoute',
     method: 'get'
   })
 }
+
+// 查询在线船详情
+export function getGpsByDid(did) {
+  return request({
+    url: '/shipMapping/getGpsByDid/' + did,
+    method: 'get'
+  })
+}

+ 116 - 83
songhua-ui/src/views/index1/index.vue

@@ -2,69 +2,69 @@
   <div class="body shh_body">
     <div class="header">
       <h1 class="header_title">松花湖景区通</h1>
-      <span class="time">2024年4月23日 星期二 上午 9:51:54</span>
+      <span class="time">{{ currentTime }}</span>
     </div>
-      <div class="shh_part">
-        <div class="shh_part_div">
-          <img src="@/assets/images/shh_part1.png"/>
-          <div class="shh_txt">
-            <h1>一号松花湖停车场</h1>
-            <p>总车位数:100</p>
-            <p>当日营收:100</p>
-            <p>当月营收:100</p>
-          </div>
+    <div class="shh_part">
+      <div class="shh_part_div">
+        <img src="@/assets/images/shh_part1.png"/>
+        <div class="shh_txt">
+          <h1>一号松花湖停车场</h1>
+          <p>总车位数:100</p>
+          <p>当日营收:100</p>
+          <p>当月营收:100</p>
         </div>
-        <div class="shh_part_div">
-          <img src="@/assets/images/shh_part2.png"/>
-          <div class="shh_txt">
-            <h1>二号松花湖停车场</h1>
-            <p>总车位数:100</p>
-            <p>当日营收:100</p>
-            <p>当月营收:100</p>
-          </div>
-        </div>
-        <div class="shh_part_div">
-          <img src="@/assets/images/shh_part3.png"/>
-          <div class="shh_txt">
-            <h1>三号松花湖停车场</h1>
-            <p>总车位数:100</p>
-            <p>当日营收:100</p>
-            <p>当月营收:100</p>
-          </div>
+      </div>
+      <div class="shh_part_div">
+        <img src="@/assets/images/shh_part2.png"/>
+        <div class="shh_txt">
+          <h1>二号松花湖停车场</h1>
+          <p>总车位数:100</p>
+          <p>当日营收:100</p>
+          <p>当月营收:100</p>
         </div>
-        <div class="shh_part_div">
-          <img src="@/assets/images/shh_part4.png"/>
-          <div class="shh_txt">
-            <h1>四号松花湖停车场</h1>
-            <p>总车位数:100</p>
-            <p>当日营收:100</p>
-            <p>当月营收:100</p>
-          </div>
+      </div>
+      <div class="shh_part_div">
+        <img src="@/assets/images/shh_part3.png"/>
+        <div class="shh_txt">
+          <h1>三号松花湖停车场</h1>
+          <p>总车位数:100</p>
+          <p>当日营收:100</p>
+          <p>当月营收:100</p>
         </div>
-        <div class="shh_part_div">
-          <img src="@/assets/images/shh_part5.png"/>
-          <div class="shh_txt">
-            <h1>五号松花湖停车场</h1>
-            <p>总车位数:100</p>
-            <p>当日营收:100</p>
-            <p>当月营收:100</p>
-          </div>
+      </div>
+      <div class="shh_part_div">
+        <img src="@/assets/images/shh_part4.png"/>
+        <div class="shh_txt">
+          <h1>四号松花湖停车场</h1>
+          <p>总车位数:100</p>
+          <p>当日营收:100</p>
+          <p>当月营收:100</p>
         </div>
       </div>
-      <div class="selectDate">
-        <div class="_moreMenu" >
-          <ul id="myList">
-          </ul>
+      <div class="shh_part_div">
+        <img src="@/assets/images/shh_part5.png"/>
+        <div class="shh_txt">
+          <h1>五号松花湖停车场</h1>
+          <p>总车位数:100</p>
+          <p>当日营收:100</p>
+          <p>当月营收:100</p>
         </div>
       </div>
-      <!--游船视图页面-->
-       <div id="map"></div>
     </div>
+    <div class="selectDate">
+      <div class="_moreMenu">
+        <ul id="myList">
+        </ul>
+      </div>
+    </div>
+    <!--游船视图页面-->
+    <div id="map"></div>
+  </div>
 
 </template>
 <script>
 
-import {getShipRoute} from "@/api/ship/shipMapping";
+import {getGpsByDid, getShipRoute} from "@/api/ship/shipMapping";
 
 
 export default {
@@ -72,32 +72,86 @@ export default {
   data() {
     return {
       dataSource: [],
-      map: []
+      map: [],
+      currentTime: ''
     }
   },
   mounted() {
+    // 初始加载时间
+    this.getCurrentTime();
+    // 每秒刷新时间
+    setInterval(() => {
+      this.getCurrentTime();
+    }, 1000);
   },
   created() {
     this.handler();
   },
   methods: {
+    getCurrentTime() {
+      const now = new Date();
+      const year = now.getFullYear();
+      const month = now.getMonth() + 1;
+      const date = now.getDate();
+      const day = now.getDay();
+      const weekDays = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
+      const hour = now.getHours();
+      const minute = now.getMinutes();
+      const second = now.getSeconds();
+
+      const formattedMonth = month < 10 ? `0${month}` : month;
+      const formattedDate = date < 10 ? `0${date}` : date;
+      const formattedHour = hour < 10 ? `0${hour}` : hour;
+      const formattedMinute = minute < 10 ? `0${minute}` : minute;
+      const formattedSecond = second < 10 ? `0${second}` : second;
+
+      this.currentTime = `${year}年${formattedMonth}月${formattedDate}日 ${weekDays[day]} ${formattedHour}:${formattedMinute}:${formattedSecond}`;
+    },
     //地图
     handler() {
       getShipRoute().then(res => {
+        let that = this
         if (res.code == 200) {
-          this.dataSource = res.data
-          this.map = new BMap.Map('map'); // 创建Map实例
-          this.map.centerAndZoom(new BMap.Point(126.997589, 43.582168), 11); // 初始化地图,设置中心点坐标和地图级别
-          this.map.enableScrollWheelZoom(true);
+          that.dataSource = res.data
+          let ul;
+          let dataList = that.dataSource
+          that.map = new BMap.Map('map'); // 创建Map实例
+          that.map.centerAndZoom(new BMap.Point(126.997589, 43.582168), 11); // 初始化地图,设置中心点坐标和地图级别
+          that.map.enableScrollWheelZoom(true);
           let mapStyle = {
             style: 'midnight',
           };
-          this.map.setMapStyle(mapStyle);
-          let marker;
-          let polyline;
-          let opts;
-          let ul;
-          let dataList = this.dataSource
+          that.map.setMapStyle(mapStyle);
+          ul = document.getElementById('myList');
+          // 循环数组中的每个项目
+          dataList.forEach(function (item) {
+            // 创建一个新的li元素
+            var li = document.createElement('li');
+            // 设置li元素的内容
+            li.textContent = item.shipName;
+            li.style.transform = 'translateX(22px)';
+            // 添加点击事件处理程序
+            li.addEventListener('click', function () {
+              // 在这里添加你想执行的点击事件代码
+              that.selectGpsByDid(item.registrationNumber)
+              // 可以进行其他操作,如触发其他函数或改变元素样式等
+            });
+            // 将li元素添加到ul中
+            ul.appendChild(li);
+          });
+        } else {
+          that.$modal.msgError("查询失败");
+        }
+      })
+    },
+    selectGpsByDid(val) {
+      this.map.clearOverlays();
+      let marker;
+      let polyline;
+      let opts;
+      getGpsByDid(val).then(res => {
+        if (res.code == 200) {
+          let dataList = res.data
           for (let i = 0; i < dataList.length; i++) {
             let pointArray = [];
             for (let j = 0; j < dataList[i].polylinePath.length; j++) {
@@ -107,11 +161,10 @@ export default {
               strokeColor: dataList[i].color,
               strokeWeight: 5,
               strokeOpacity: 0.5
-            });   //创建折线
+            });//创建折线
             // 创建小船图标
             var myIcon = new BMap.Icon(require("@/assets/images/ship.png"), new BMap.Size(52, 26));
             marker = new BMap.Marker(new BMap.Point(dataList[i].polylinePath[0].lng, dataList[i].polylinePath[0].lat), {icon: myIcon}); // 创建点
-
             opts = {
               width: 100,     // 信息窗口宽度
               height: 80,     // 信息窗口高度
@@ -126,31 +179,11 @@ export default {
             });
             this.map.addOverlay(polyline);
             this.map.addOverlay(marker);
-
           }
-          ul = document.getElementById('myList');
-          // 循环数组中的每个项目
-          dataList.forEach(function (item) {
-            // 创建一个新的li元素
-            var li = document.createElement('li');
-            // 设置li元素的内容
-            li.textContent = item.shipName;
-            li.style.transform = 'translateX(22px)';
-            // 将li元素添加到ul中
-            ul.appendChild(li);
-          });
         } else {
           this.$modal.msgError("查询失败");
         }
       })
-    },
-    tabClick() {
-      let that = this
-      setTimeout(that.taskJob(), 1000
-      )
-    },
-    taskJob() {
-      this.map.panTo(new BMap.Point(126.997590, 43.582169)); // 初始化地图,设置中心点坐标和地图级别
     }
   },
 

+ 9 - 0
songhua-ui/src/views/system/ships/index.vue

@@ -143,6 +143,7 @@
 
 <script>
 import { listShip, getShip, delShip, addShip, updateShip } from "@/api/system/ship";
+import {checkLat, checkLon} from "@/api/system/rules";
 
 export default {
   name: "Ship",
@@ -184,6 +185,14 @@ export default {
       form: {},
       // 表单校验
       rules: {
+        shipName: [
+          { required: true, message: "船名不能为空", trigger: "change" },
+          {validator: checkLon, trigger: 'blur'}
+        ],
+        registrationNumber: [
+          { required: true, message: "船舶注册号不能为空", trigger: "change" },
+          {validator: checkLat, trigger: 'blur'}
+        ],
       }
     };
   },