|
@@ -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;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+}
|