bihuisong hace 1 año
padre
commit
65d776c61a

+ 205 - 0
songhua-admin/src/main/java/com/songhua/web/controller/gps/gpsController.java

@@ -0,0 +1,205 @@
+package com.songhua.web.controller.gps;
+
+
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.songhua.common.core.domain.AjaxResult;
+import com.songhua.system.domain.GPSEquipment;
+import com.songhua.system.domain.dto.ShipSaveDTO;
+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 java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.songhua.common.core.domain.AjaxResult.error;
+
+
+@Slf4j
+@RestController
+@RequestMapping("/gps")
+public class gpsController {
+
+    @Autowired
+    private ICruiseShipMappingService cruiseShipMappingService;
+    @Autowired
+    private ISysConfigService configService;
+
+    private List<String> keys = Arrays.asList("gps_address", "app_key", "method", "app_secret","account","password");
+    /**
+     * 获取访问令牌
+     */
+    @GetMapping("/ship")
+    public String getToken() {
+        Date date = new Date();
+        String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
+        String dateStr = format.replace(" ", "%20");
+        Map<String, String> configMap = getStringStringMap();
+        String password = MD5Encryptor.md5EncryptToLowercase(configMap.get("password"));
+        String sign = MD5Encryptor.md5EncryptToUppercase(configMap.get("app_secret") +
+                "account" + configMap.get("account") +
+                "app_key" + configMap.get("app_key") +
+                "formatjsonmethodwicare.user.access_token" +
+                "password" + password +
+                "sign_methodmd5" +
+                "timestamp" + dateStr +
+                "type2v2.0" +
+                configMap.get("app_secret"));
+        String apiUrl = configMap.get("gps_address") +
+                "account=" + configMap.get("account") +
+                "&app_key=" + configMap.get("app_key") +
+                "&format=json&method=wicare.user.access_token&" +
+                "password=" + password +
+                "&sign_method=md5&" +
+                "timestamp=" + dateStr +
+                "&type=2&v=2.0&" +
+                "sign=" + sign;
+        try {
+            // 创建 URL 对象
+            URL url = new URL(apiUrl);
+            // 打开连接
+            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+            // 设置请求方法
+            connection.setRequestMethod("GET");
+            // 获取响应状态码
+            int responseCode = connection.getResponseCode();
+            if (responseCode == HttpURLConnection.HTTP_OK) {
+                // 读取响应内容
+                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+                String line;
+                StringBuilder response = new StringBuilder();
+                while ((line = reader.readLine()) != null) {
+                    response.append(line);
+                }
+                reader.close();
+                // 打印响应内容
+                System.out.println(JSONObject.parseObject(response.toString()));
+                return JSONObject.parseObject(response.toString()).getString("access_token");
+            } else {
+                log.error("获取访问令牌接口返回错误代码:{}", responseCode);
+            }
+            // 关闭连接
+            connection.disconnect();
+        } catch (Exception e) {
+            log.error("获取访问令牌接口失败:{}", e);
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
+    /**
+     * 获取单个设备或多个设备的信息
+     */
+    @GetMapping("/shipRoute")
+    public AjaxResult getEquipment() {
+        String token = getToken();
+        Date date = new Date();
+        String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
+        Map<String, String> configMap = getStringStringMap();
+        String dateStr = format.replace(" ", "%20");
+        String sign = MD5Encryptor.md5EncryptToUppercase(configMap.get("app_secret") +
+                "access_token" + token +
+                "app_key" + configMap.get("app_key") +
+                "dev_key59346d400236ab95e95193f35f3df6a4" +
+                "fieldsdid,activeGpsDataformatjsonlimit-1mapBAIDU" +
+                "method" + configMap.get("method") +
+                "pagedidpage_no1sign_methodmd5sortsdid" +
+                "timestamp" + dateStr +
+                "v2.0" +
+                configMap.get("app_secret"));
+        String apiUrl = configMap.get("gps_address") +
+                "timestamp=" + dateStr +
+                "&format=json&" +
+                "app_key=" +
+                configMap.get("app_key") +
+                "&v=2.0&sign_method=md5&method=" +
+                configMap.get("method") +
+                "&dev_key=59346d400236ab95e95193f35f3df6a4&access_token=" + token +
+                "&map=BAIDU&fields=did,activeGpsData&sorts=did&page=did&page_no=1&limit=-1&sign=" +
+                sign;
+        try {
+            // 创建 URL 对象
+            URL url = new URL(apiUrl);
+            // 打开连接
+            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+            // 设置请求方法
+            connection.setRequestMethod("GET");
+            // 获取响应状态码
+            int responseCode = connection.getResponseCode();
+            if (responseCode == HttpURLConnection.HTTP_OK) {
+                // 读取响应内容
+                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+                String line;
+                StringBuilder response = new StringBuilder();
+                while ((line = reader.readLine()) != null) {
+                    response.append(line);
+                }
+                reader.close();
+                List<GPSEquipment> objectList = JSONArray.parseArray(JSONObject.parseObject(response.toString()).getString("data").toString(), GPSEquipment.class);
+                List<ShipSaveDTO> saveList = new ArrayList<>();
+                for (GPSEquipment var : objectList) {
+                    ShipSaveDTO saveEntity = new ShipSaveDTO();
+                    saveEntity.setDid(var.getDid());
+                    saveEntity.setLongitude(String.valueOf(var.getActiveGpsData().getLon()));
+                    saveEntity.setLatitude(String.valueOf(var.getActiveGpsData().getLat()));
+                    saveEntity.setGpsFlag(var.getActiveGpsData().getGpsFlag());
+                    saveEntity.setLon(var.getActiveGpsData().get_lon());
+                    saveEntity.setLat(var.getActiveGpsData().get_lat());
+                    saveEntity.setSignal(var.getActiveGpsData().getSignal());
+                    saveEntity.setSpeed(var.getActiveGpsData().getSpeed());
+                    saveEntity.setDirect(var.getActiveGpsData().getDirect());
+                    saveEntity.setMileage(var.getActiveGpsData().getMileage());
+                    saveEntity.setBattery(var.getActiveGpsData().getBattery());
+                    saveEntity.setPower(var.getActiveGpsData().getPower());
+                    saveEntity.setStatus(String.join(",", var.getActiveGpsData().getStatus().stream().map(String::valueOf).collect(Collectors.toList())));
+                    saveEntity.setAlerts(String.join(",", var.getActiveGpsData().getAlerts().stream().map(String::valueOf).collect(Collectors.toList())));
+                    saveEntity.setGpsTime(var.getActiveGpsData().getGpsTime());
+                    saveEntity.setRcvTime(var.getActiveGpsData().getRcvTime());
+                    saveList.add(saveEntity);
+                }
+                if (!saveList.isEmpty()) {
+                    cruiseShipMappingService.saveCruiseShipMapping(saveList);
+                }
+                return AjaxResult.success();
+            } else {
+                log.error("获取单个设备或多个设备的信息返回错误代码:{}", responseCode);
+            }
+            // 关闭连接
+            connection.disconnect();
+        } catch (Exception e) {
+            log.error("获取单个设备或多个设备的信息接口失败:{}", e);
+            e.printStackTrace();
+        }
+        return error("获取单个设备或多个设备的信息接口失败");
+    }
+
+
+
+
+
+
+
+    /**
+     * 根据参数编号获取详细信息
+     * @return
+     */
+    private Map<String, String> getStringStringMap() {
+        Map<String, String> configMap = configService.getConfigMap(keys);
+        return configMap;
+    }
+
+
+}

+ 90 - 0
songhua-system/src/main/java/com/songhua/system/domain/ActiveGpsData.java

@@ -0,0 +1,90 @@
+package com.songhua.system.domain;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+
+
+@Data
+public class ActiveGpsData {
+    /**
+     * 定位标志:
+     * 1: 非精确定位
+     * 2:GPS 精确定位
+     * 3:基站定位
+     */
+    private int gpsFlag;
+    /**
+     * 原始经度
+     */
+    private double lon;
+    /**
+     * 原始纬度
+     */
+    private double lat;
+    /**
+     * 百度修正经度
+     */
+    private double _lon;
+    /**
+     * 百度修正纬度
+     */
+    private double _lat;
+    /**
+     * 通讯信号:
+     * <15:信号弱
+     * 15– 25:信号良
+     * >25:	 信号强
+     */
+    private int signal;
+    /**
+     * 速度(单位:km/h)
+     */
+    private int speed;
+    /**
+     * 方向(正北为 0)
+     */
+    private int direct;
+    /**
+     * 累计里程
+     */
+    private double mileage;
+    /**
+     *
+     */
+    private double battery;
+    /**
+     *
+     */
+    private double power;
+    /**
+     * 车辆状态:
+     * 0x2001:	 设防状态
+     * 0x2004:	 车辆启动状态
+     * 0x2005:	 设备进入省电状态
+     */
+    private List<Integer> status;
+    /**
+     * 车辆报警:
+     * 0x3001:	 紧急报警
+     * 0x3002:	 超速报警
+     * 0x3003:	 震动报警
+     * 0x3004:	 移位报警
+     * 0x3007:	 进区域报警
+     * 0x3008:	 出区域报警
+     * 0x3009:	 断电报警
+     * 0x300A:	 电瓶电压低报警
+     */
+    private List<String> alerts;
+    /**
+     * 定位时间
+     */
+    private Date gpsTime;
+    /**
+     * 接收时间
+     */
+    private Date rcvTime;
+
+}

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

@@ -2,6 +2,7 @@ package com.songhua.system.domain;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.songhua.common.annotation.Excel;
+import com.songhua.common.annotation.Log;
 import com.songhua.common.core.domain.BaseEntity;
 import lombok.Data;
 
@@ -13,7 +14,7 @@ public  class CruiseShipMapping extends BaseEntity {
     private static final long serialVersionUID = 1L;
 
     /** 主键ID */
-    private String id;
+    private Long id;
     /** 游船id */
     private String shipId;
     /** 经度 */

+ 19 - 0
songhua-system/src/main/java/com/songhua/system/domain/GPSEquipment.java

@@ -0,0 +1,19 @@
+package com.songhua.system.domain;
+
+
+import lombok.Data;
+
+@Data
+public class GPSEquipment {
+
+    /**
+     * 设备 ID
+     */
+    private Long did;
+    /**
+     * 定位及空气数据
+     */
+
+    private ActiveGpsData activeGpsData;
+
+}

+ 96 - 0
songhua-system/src/main/java/com/songhua/system/domain/dto/ShipSaveDTO.java

@@ -0,0 +1,96 @@
+package com.songhua.system.domain.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+
+@Data
+public class ShipSaveDTO {
+
+    /**
+     * 车船标识id
+     */
+    private Long did;
+
+    /**
+     * 经度
+     */
+    private String longitude;
+
+    /**
+     * 纬度
+     */
+    private String latitude;
+
+    /**
+     * 定位标志:
+     * 1: 非精确定位
+     * 2:GPS 精确定位
+     * 3:基站定位
+     */
+    private int gpsFlag;
+
+    /**
+     * 百度修正经度
+     */
+    private double lon;
+    /**
+     * 百度修正纬度
+     */
+    private double lat;
+    /**
+     * 通讯信号:
+     * <15:信号弱
+     * 15– 25:信号良
+     * >25:	 信号强
+     */
+    private int signal;
+    /**
+     * 速度(单位:km/h)
+     */
+    private int speed;
+    /**
+     * 方向(正北为 0)
+     */
+    private int direct;
+    /**
+     * 累计里程
+     */
+    private double mileage;
+    /**
+     *
+     */
+    private double battery;
+    /**
+     *
+     */
+    private double power;
+    /**
+     * 车辆状态:
+     * 0x2001:	 设防状态
+     * 0x2004:	 车辆启动状态
+     * 0x2005:	 设备进入省电状态
+     */
+    private String status;
+    /**
+     * 车辆报警:
+     * 0x3001:	 紧急报警
+     * 0x3002:	 超速报警
+     * 0x3003:	 震动报警
+     * 0x3004:	 移位报警
+     * 0x3007:	 进区域报警
+     * 0x3008:	 出区域报警
+     * 0x3009:	 断电报警
+     * 0x300A:	 电瓶电压低报警
+     */
+    private String alerts;
+    /**
+     * 定位时间
+     */
+    private Date gpsTime;
+    /**
+     * 接收时间
+     */
+    private Date rcvTime;
+}

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

@@ -1,18 +1,17 @@
 package com.songhua.system.mapper;
 
-import java.util.List;
-
-import com.songhua.system.domain.BasicCruiseShip;
 import com.songhua.system.domain.CruiseShipMapping;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * Mapper接口
- * 
+ *
  * @author ruoyi
  * @date 2024-04-23
  */
-public interface CruiseShipMappingMapper 
-{
+public interface CruiseShipMappingMapper {
     /**
      * 查询
      */
@@ -44,4 +43,6 @@ public interface CruiseShipMappingMapper
     public int deleteCruiseShipMappingByIds(String[] ids);
 
     List<CruiseShipMapping> getShipRouteData();
+
+    void saveCruiseShipMapping(@Param("list") List list);
 }

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

@@ -6,6 +6,7 @@ import java.util.Map;
 
 import com.songhua.system.domain.BasicCruiseShip;
 import com.songhua.system.domain.CruiseShipMapping;
+import com.songhua.system.domain.GPSEquipment;
 import io.lettuce.core.dynamic.annotation.Param;
 
 /**
@@ -45,4 +46,6 @@ public interface ICruiseShipMappingService
 
 
     List<Map<String, Object>> getShipRouteData();
+
+    void saveCruiseShipMapping(List objectList);
 }

+ 4 - 0
songhua-system/src/main/java/com/songhua/system/service/ISysConfigService.java

@@ -1,6 +1,8 @@
 package com.songhua.system.service;
 
 import java.util.List;
+import java.util.Map;
+
 import com.songhua.system.domain.SysConfig;
 
 /**
@@ -86,4 +88,6 @@ public interface ISysConfigService
      * @return 结果
      */
     public boolean checkConfigKeyUnique(SysConfig config);
+
+    Map<String, String>  getConfigMap(List<String> keys);
 }

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

@@ -49,7 +49,6 @@ public class CruiseShipMappingServiceImpl implements ICruiseShipMappingService
     @Override
     public int insertCruiseShipMapping(CruiseShipMapping cruiseShipMapping)
     {
-        cruiseShipMapping.setId(IdUtils.simpleUUID());
         cruiseShipMapping.setShipTime(DateUtils.getNowDate());
         return cruiseShipMappingMapper.insertCruiseShipMapping(cruiseShipMapping);
     }
@@ -113,4 +112,9 @@ public class CruiseShipMappingServiceImpl implements ICruiseShipMappingService
         }
         return combinedData;
     }
+
+    @Override
+    public void saveCruiseShipMapping(List objectList) {
+        cruiseShipMappingMapper.saveCruiseShipMapping(objectList);
+    }
 }

+ 10 - 2
songhua-system/src/main/java/com/songhua/system/service/impl/SysConfigServiceImpl.java

@@ -1,7 +1,6 @@
 package com.songhua.system.service.impl;
 
-import java.util.Collection;
-import java.util.List;
+import java.util.*;
 import javax.annotation.PostConstruct;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -219,6 +218,15 @@ public class SysConfigServiceImpl implements ISysConfigService
         return UserConstants.UNIQUE;
     }
 
+    @Override
+    public Map<String, String> getConfigMap(List<String> keys) {
+        Map<String, String> resultMap = new HashMap<>();
+        for (String key : keys) {
+            resultMap.put(key, selectConfigByKey(key));
+        }
+        return resultMap;
+    }
+
     /**
      * 设置cache key
      * 

+ 10 - 0
songhua-system/src/main/resources/mapper/system/CruiseShipMappingMapper.xml

@@ -106,4 +106,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ORDER BY
             a.ship_time DESC;
     </select>
+    <insert id="saveCruiseShipMapping" parameterType="List">
+        insert into cruise_ship_mapping ( did,
+        longitude,latitude,gps_flag,lon,lat,`signal`,speed,direct,mileage,battery,power,`status`,alerts,gps_time,rcv_time,ship_time)
+        values
+        <foreach collection="list" item="item" separator=",">
+            (#{item.did}, #{item.longitude}, #{item.latitude}, #{item.gpsFlag},#{item.lon}, #{item.lat},
+            #{item.signal}, #{item.speed}, #{item.direct},#{item.mileage}, #{item.battery}, #{item.power},
+            #{item.status},#{item.alerts},#{item.gpsTime},#{item.rcvTime}, NOW())
+        </foreach>
+    </insert>
 </mapper>