From f1ba120c486048373505acfa74c3943c19be55ca Mon Sep 17 00:00:00 2001
From: wanglizhong <wlz>
Date: 星期三, 14 五月 2025 15:23:20 +0800
Subject: [PATCH] feat:优化查看历史轨迹
---
ruoyi-system/src/main/resources/mapper/system/VehicleGpsMapper.xml | 9
ruoyi-system/src/main/java/com/ruoyi/system/domain/VehicleGps.java | 12
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java | 88 +++++
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CleanVehicleGpsTask.java | 31 ++
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CmsVehicleSyncTask.java | 43 +-
ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsTrackQueryRequest.java | 40 ++
ruoyi-system/src/main/java/com/ruoyi/system/service/IVehicleGpsService.java | 7
ruoyi-system/src/main/java/com/ruoyi/system/mapper/VehicleGpsMapper.java | 7
ruoyi-system/src/main/java/com/ruoyi/system/service/ICmsGpsCollectService.java | 19 +
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CmsGpsCollectServiceImpl.java | 80 +++++
ruoyi-system/src/main/java/com/ruoyi/system/domain/CmsTrackDetailResponse.java | 74 ++++
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleGpsServiceImpl.java | 8
ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsTrackQueryResponse.java | 42 ++
ruoyi-quartz/src/main/resources/sql/vehicle_gps_job.sql | 2
ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsTrackPoint.java | 45 +++
sql/clean_gps.sql | 27 +
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java | 243 ++++++++++++++-
ruoyi-system/src/main/java/com/ruoyi/system/domain/CmsVehicleDeviceListResponse.java | 64 +--
ruoyi-system/src/main/java/com/ruoyi/system/service/IGpsCollectService.java | 8
19 files changed, 762 insertions(+), 87 deletions(-)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java
index e54c9f9..f966940 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java
@@ -1,13 +1,11 @@
package com.ruoyi.web.controller.system;
import java.util.*;
+import java.text.SimpleDateFormat;
+import java.text.ParseException;
-import com.ruoyi.system.domain.DispatchOrd;
-import com.ruoyi.system.domain.TbOrders;
-import com.ruoyi.system.domain.TbVehicleOrder;
-import com.ruoyi.system.service.IDispatchOrdService;
-import com.ruoyi.system.service.ITbOrdersService;
-import com.ruoyi.system.service.ITbVehicleOrderService;
+import com.ruoyi.system.domain.*;
+import com.ruoyi.system.service.*;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@@ -24,8 +22,6 @@
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
-import com.ruoyi.system.domain.VehicleGps;
-import com.ruoyi.system.service.IVehicleGpsService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
@@ -47,6 +43,15 @@
@Autowired
private ITbOrdersService tbOrdersService;
+ @Autowired
+ private IGpsCollectService gpsCollectService;
+
+ @Autowired
+ private IVehicleInfoService vehicleInfoService;
+
+ @Autowired
+ private ICmsGpsCollectService cmsGpsCollectService;
+
/**
* 鏌ヨ杞﹁締GPS鍧愭爣鍒楄〃
*/
@@ -55,7 +60,12 @@
public TableDataInfo list(VehicleGps vehicleGps) {
startPage();
- // 璁剧疆鎸夋椂闂村�掑簭鎺掑簭
+// String vehicleNo=vehicleGps.getVehicleNo();
+// String beginTime=vehicleGps.getBeginTime();
+// String endTime=vehicleGps.getEndTime();
+// return this.getAnonymousTracks(vehicleNo,beginTime,endTime);
+//
+// // 璁剧疆鎸夋椂闂村�掑簭鎺掑簭
vehicleGps.setOrderByColumn("collect_time");
vehicleGps.setIsAsc("desc");
List<VehicleGps> list = vehicleGpsService.selectVehicleGpsList(vehicleGps);
@@ -92,32 +102,53 @@
return getDataTable(new ArrayList<>());
}
- Map<String, Object> params = new HashMap<>();
- params.put("beginTime", dispatchOrd.getDispatchOrdStartDate());
- params.put("endTime", dispatchOrd.getDispatchOrdUpdateTime());
+ String vehicleNo = tbVehicleOrder.getVehicle();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String beginTime= sdf.format(dispatchOrd.getDispatchOrdStartDate());
+ String endTime= sdf.format(dispatchOrd.getDispatchOrdUpdateTime());
+ //濡傛灉璁㈠崟娌″畬鎴愶紝 endTime涓哄綋鍓嶆椂闂达紱濡備綍璁㈠崟宸茬粡瀹屾垚浜嗭紝鐢ㄨ鍗曠殑缁撴潫鏃堕棿銆�
- vehicleGps.setVehicleNo(tbVehicleOrder.getVehicle());
- startPage();
- // 璁剧疆鎸夋椂闂村�掑簭鎺掑簭
- vehicleGps.setOrderByColumn("collect_time");
- vehicleGps.setIsAsc("desc");
- List<VehicleGps> list = vehicleGpsService.selectVehicleGpsList(vehicleGps);
- return getDataTable(list);
+ return this.getAnonymousTracks(vehicleNo,beginTime,endTime);
+// Map<String, Object> params = new HashMap<>();
+// params.put("beginTime", dispatchOrd.getDispatchOrdStartDate());
+// params.put("endTime", dispatchOrd.getDispatchOrdUpdateTime());
+//
+// vehicleGps.setVehicleNo(tbVehicleOrder.getVehicle());
+// startPage();
+// // 璁剧疆鎸夋椂闂村�掑簭鎺掑簭
+// vehicleGps.setOrderByColumn("collect_time");
+// vehicleGps.setIsAsc("desc");
+// List<VehicleGps> list = vehicleGpsService.selectVehicleGpsList(vehicleGps);
+// return getDataTable(list);
}
catch (Exception ex)
{
logger.error("宸插畬鎴愮殑璁㈠崟鏌ヨ鍦板浘寮傚父锛歿}",ex.getMessage());
return getDataTable(new ArrayList<>());
}
+ }else{
+ TbOrders tbOrders = tbOrdersService.selectTbOrdersByOrderID(vehicleGps.getOrderId());
+ if (tbOrders == null) {
+ return getDataTable(new ArrayList<>());
+ }
+ DispatchOrd dispatchOrd = dispatchOrdService.selectDispatchOrdByServiceOrdIDDt(tbOrders.getServiceOrdID());
+ if (dispatchOrd == null) {
+ return getDataTable(new ArrayList<>());
+ }
+ String vehicleNo = tbVehicleOrder.getVehicle();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String beginTime= sdf.format(dispatchOrd.getDispatchOrdStartDate());
+ String endTime= sdf.format(new Date());
+ return this.getAnonymousTracks(vehicleNo,beginTime,endTime);
+//
+// vehicleGps.setVehicleNo(tbVehicleOrder.getVehicle());
+// startPage();
+// // 璁剧疆鎸夋椂闂村�掑簭鎺掑簭
+// vehicleGps.setOrderByColumn("collect_time");
+// vehicleGps.setIsAsc("desc");
+// List<VehicleGps> list = vehicleGpsService.selectVehicleGpsList(vehicleGps);
+// return getDataTable(list);
}
-
- vehicleGps.setVehicleNo(tbVehicleOrder.getVehicle());
- startPage();
- // 璁剧疆鎸夋椂闂村�掑簭鎺掑簭
- vehicleGps.setOrderByColumn("collect_time");
- vehicleGps.setIsAsc("desc");
- List<VehicleGps> list = vehicleGpsService.selectVehicleGpsList(vehicleGps);
- return getDataTable(list);
}
/**
@@ -173,4 +204,162 @@
public AjaxResult remove(@PathVariable Long[] gpsIds) {
return toAjax(vehicleGpsService.deleteVehicleGpsByIds(gpsIds));
}
+
+ /**
+ * 鏌ヨ杞﹁締鍘嗗彶杞ㄨ抗
+ */
+ @PreAuthorize("@ss.hasPermi('system:gps:query')")
+ @GetMapping("/tracks")
+ public TableDataInfo getTracks(String vehicleNo, String beginTime, String endTime) {
+ return getAnonymousTracks(vehicleNo, beginTime, endTime);
+ }
+
+
+ /**
+ * 鍖垮悕鏌ヨ杞﹁締鍘嗗彶杞ㄨ抗
+ */
+ @Anonymous()
+ @GetMapping("/anonymousTracks")
+ public TableDataInfo getAnonymousTracks(String vehicleNo, String beginTime, String endTime) {
+ try {
+ // 閫氳繃杞︾墝鍙疯幏鍙栬澶嘔D
+ VehicleInfo vehicleInfo = vehicleInfoService.selectVehicleInfoByPlateNumber(vehicleNo);
+ if (vehicleInfo == null) {
+ throw new Error("鏈壘鍒拌杞﹁締瀵瑰簲鐨凣PS璁惧");
+ }
+
+ // 澶勭悊寮�濮嬫椂闂�
+ beginTime = beginTime.replace("T", " ").replace(" ","%20");
+ if (beginTime.split(":").length == 2) { // 鍙湁灏忔椂鍜屽垎閽�
+ beginTime += ":00";
+ }
+
+ // 澶勭悊缁撴潫鏃堕棿
+ endTime = endTime.replace("T", " ").replace(" ","%20");
+ if (endTime.split(":").length == 2) { // 鍙湁灏忔椂鍜屽垎閽�
+ endTime += ":59";
+ }
+
+ List<GpsTrackPoint> trackPoints = new ArrayList<>();
+
+ //濡傛灉骞冲彴鏄痗ms锛屽垯璋冪敤cms鐨勬帴鍙�
+ if(vehicleInfo.getPlatformCode().equals("CMS"))
+ {
+
+ CmsTrackDetailResponse response = cmsGpsCollectService.queryTrackDetail(
+ vehicleInfo.getDeviceId(), // 璁惧鍙�
+ beginTime, // 寮�濮嬫椂闂�
+ endTime, // 缁撴潫鏃堕棿
+ null, // 璺濈锛堝彲閫夛級
+ null, // 鍋滆溅鏃堕暱锛堝彲閫夛級
+ 1, // 瑙f瀽鍦扮悊浣嶇疆
+ null, // 褰撳墠椤电爜锛堝彲閫夛級
+ null, // 姣忛〉璁板綍鏁帮紙鍙�夛級
+ 2 // 鍦板浘绫诲瀷锛�2锛氱櫨搴﹀湴鍥撅級
+ );
+
+ if (response.getResult() != 0) {
+ throw new Error("鏌ヨCMS杞ㄨ抗澶辫触");
+ }
+
+ // 杞崲CMS杞ㄨ抗鐐逛负缁熶竴鏍煎紡
+ if (response.getTracks() != null) {
+ for (CmsTrackDetailResponse.CmsTrackPoint point : response.getTracks()) {
+ GpsTrackPoint trackPoint = new GpsTrackPoint();
+ trackPoint.setVehicleNo(point.getVid());
+ trackPoint.setDeviceId(point.getId());
+
+ //缁忓害绾害涓虹┖鏃讹紝璺宠繃
+ if(point.getMlng()==null || point.getMlat()==null)
+ {
+ continue;
+ }
+
+ // 缁忓害锛屼娇鐢ㄤ笁鍏冭繍绠楃
+ trackPoint.setLongitude(point.getMlng() != null ? Double.parseDouble(point.getMlng()) : 0.0);
+
+ // 绾害锛屼娇鐢ㄤ笁鍏冭繍绠楃
+ trackPoint.setLatitude(point.getMlat() != null ? Double.parseDouble(point.getMlat()) : 0.0);
+
+ // 閫熷害锛岀洿鎺ヤ娇鐢╥nt杞琩ouble
+ trackPoint.setSpeed(point.getSp() > 0 ? (double)point.getSp() : 0.0);
+
+ // 鏂瑰悜锛屼娇鐢ㄤ笁鍏冭繍绠楃澶勭悊
+ trackPoint.setCourse(point.getFt() > 0 ? point.getFt() : 0);
+
+ // ACC鐘舵�侊紝浣跨敤涓夊厓杩愮畻绗﹀鐞�
+ trackPoint.setAccStatus(point.getAc() > 0 ? point.getAc() : 0);
+
+ // 鍦ㄧ嚎鐘舵�侊紝浣跨敤涓夊厓杩愮畻绗﹀鐞�
+ trackPoint.setOnlineStatus(point.getNet() > 0 ? point.getNet() : 0);
+ trackPoint.setAddress(point.getPs());
+
+ // 涓婃姤鏃堕棿锛岀洿鎺ヤ娇鐢ㄥ瓧绗︿覆
+ trackPoint.setReportTime(point.getGt() != null ? point.getGt() : new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+
+ trackPoints.add(trackPoint);
+ }
+ }
+ }
+ else {
+
+ // 鏋勫缓鏌ヨ璇锋眰
+ GpsTrackQueryRequest request = new GpsTrackQueryRequest();
+ request.setDeviceid(vehicleInfo.getDeviceId());
+ request.setBegintime(beginTime);
+ request.setEndtime(endTime);
+ request.setTimezone(8); // 涓浗鏃跺尯
+
+ // 鏌ヨ杞ㄨ抗
+ GpsTrackQueryResponse response = gpsCollectService.queryTracks(request);
+ if (response.getStatus() != 0) {
+ throw new Error("鏌ヨ杞ㄨ抗澶辫触锛�" + response.getCause());
+ }
+
+ // 杞崲GPS51杞ㄨ抗鐐逛负缁熶竴鏍煎紡
+ if (response.getRecords() != null) {
+ for (GpsTrackPoint point : response.getRecords()) {
+ GpsTrackPoint trackPoint = new GpsTrackPoint();
+ trackPoint.setVehicleNo(vehicleNo);
+ trackPoint.setDeviceId(vehicleInfo.getDeviceId());
+ trackPoint.setLongitude(point.getLongitude()); // 缁忓害
+ trackPoint.setLatitude(point.getLatitude()); // 绾害
+ trackPoint.setSpeed(point.getSpeed()); // 閫熷害
+ trackPoint.setCourse(point.getCourse()); // 鏂瑰悜
+ trackPoint.setReportTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(point.getUpdatetime()))); // 涓婃姤鏃堕棿
+ trackPoints.add(trackPoint);
+ }
+ }
+ }
+ //杞崲鎴怢ist<VehicleGps>
+ List<VehicleGps> vehicleGpsList = new ArrayList<>();
+ for(GpsTrackPoint trackPoint : trackPoints)
+ {
+ VehicleGps vehicleGps = new VehicleGps();
+ vehicleGps.setVehicleNo(trackPoint.getVehicleNo());
+ vehicleGps.setDeviceId(trackPoint.getDeviceId());
+ vehicleGps.setLongitude(trackPoint.getLongitude());
+ vehicleGps.setLatitude(trackPoint.getLatitude());
+ vehicleGps.setSpeed(trackPoint.getSpeed());
+ //鏂瑰悜
+ vehicleGps.setDirection(Double.valueOf(trackPoint.getCourse()));
+ //鍦板潃
+ vehicleGps.setAddress(trackPoint.getAddress());
+ vehicleGps.setCollectTime(trackPoint.getReportTime());
+ //GPS骞冲彴澶勭悊鏃堕棿
+ vehicleGps.setPlatformProcessTime(trackPoint.getReportTime());
+ vehicleGps.setDeviceReportTime(trackPoint.getReportTime());
+ vehicleGpsList.add(vehicleGps);
+ }
+ //鏃堕棿鍊掑簭鎺掑簭
+ vehicleGpsList.sort(Comparator.comparing(VehicleGps::getDeviceReportTime).reversed());
+
+ //杩斿洖杞﹁締Gps鍒楄〃
+ return getDataTable(vehicleGpsList);
+ // return success(vehicleGpsList);
+ } catch (Exception e) {
+ logger.error("鏌ヨ杞﹁締杞ㄨ抗寮傚父", e);
+ throw new Error("鏌ヨ杞﹁締杞ㄨ抗澶辫触锛�" + e.getMessage());
+ }
+ }
}
\ No newline at end of file
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CleanVehicleGpsTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CleanVehicleGpsTask.java
new file mode 100644
index 0000000..321d326
--- /dev/null
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CleanVehicleGpsTask.java
@@ -0,0 +1,31 @@
+package com.ruoyi.quartz.task;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import com.ruoyi.system.service.IVehicleGpsService;
+
+/**
+ * 娓呯悊杞﹁締GPS鍘嗗彶鏁版嵁浠诲姟
+ */
+@Component("cleanVehicleGpsTask")
+public class CleanVehicleGpsTask {
+ private static final Logger log = LoggerFactory.getLogger(CleanVehicleGpsTask.class);
+
+ @Autowired
+ private IVehicleGpsService vehicleGpsService;
+
+ /**
+ * 娓呯悊杞﹁締GPS鍘嗗彶鏁版嵁
+ */
+ public void cleanVehicleGpsData() {
+ try {
+ log.info("寮�濮嬫竻鐞嗚溅杈咷PS鍘嗗彶鏁版嵁");
+ int count = vehicleGpsService.deleteVehicleGpsBeforeDate();
+ log.info("娓呯悊杞﹁締GPS鍘嗗彶鏁版嵁瀹屾垚锛屽叡娓呯悊{}鏉¤褰�", count);
+ } catch (Exception e) {
+ log.error("娓呯悊杞﹁締GPS鍘嗗彶鏁版嵁寮傚父", e);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CmsVehicleSyncTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CmsVehicleSyncTask.java
index 6bd3d87..c5abe54 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CmsVehicleSyncTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CmsVehicleSyncTask.java
@@ -6,16 +6,13 @@
import java.util.List;
import java.util.stream.Collectors;
+import com.ruoyi.system.domain.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.system.domain.CmsVehicleDeviceResponse;
-import com.ruoyi.system.domain.CmsVehicleLocationResponse;
-import com.ruoyi.system.domain.VehicleGps;
-import com.ruoyi.system.domain.VehicleInfo;
import com.ruoyi.system.service.ICmsGpsCollectService;
import com.ruoyi.system.service.IVehicleGpsService;
import com.ruoyi.system.service.IVehicleInfoService;
@@ -42,7 +39,7 @@
log.info("寮�濮嬪悓姝MS杞﹁締淇℃伅");
try {
// 鑾峰彇CMS鎵�鏈夎溅杈嗕俊鎭�
- CmsVehicleDeviceResponse response = cmsGpsCollectService.queryVehicleDevices();
+ CmsVehicleDeviceListResponse response = cmsGpsCollectService.getDeviceByVehicle(null);
if (response.getResult() != 0) {
log.error("鑾峰彇CMS杞﹁締淇℃伅澶辫触");
return;
@@ -50,10 +47,10 @@
// 鑾峰彇鎵�鏈塁MS杞﹁締鐨勮溅鐗屽彿
List<String> cmsPlateNos = new ArrayList<>();
- response.getVehicles().forEach(vehicle -> {
- if (StringUtils.isNotEmpty(vehicle.getNm())) {
+ response.getDevices().forEach(vehicle -> {
+ if (StringUtils.isNotEmpty(vehicle.getVid())) {
// 浠庤溅杈嗗悕绉颁腑鎻愬彇杞︾墝鍙凤紙鍋囪鏍煎紡涓�"鈽呰溅鐗屽彿锛堝湴鍖猴級"锛�
- String plateNo =this.getPlateNo(vehicle.getNm());
+ String plateNo =this.getPlateNo(vehicle.getVid());
cmsPlateNos.add(plateNo);
}
});
@@ -70,17 +67,29 @@
List<String> onlyCms=cmsPlateNos.stream().filter(e->!notCmsVehicles.contains(e)).collect((Collectors.toList()));
Integer syncCarCount=0;
- for(String e:onlyCms){
- VehicleInfo vehicleInfo = new VehicleInfo();
- vehicleInfo.setVehicleNo(e);
- vehicleInfo.setPlatformCode("CMS");
- vehicleInfo.setStatus("0");
- //濡傛灉杞﹁締涓嶅瓨鍦紝鍒欐彃鍏�
- if (vehicleInfoService.selectVehicleInfoList(vehicleInfo).size()==0) {
+ response.getDevices().stream().filter(e->onlyCms.contains(this.getPlateNo(e.getVid()))).forEach(vehicle->{
+ String plateNo =this.getPlateNo(vehicle.getVid());
+
+ VehicleInfo vehicleInfo= vehicleInfoService.selectVehicleInfoByPlateNumber(plateNo);
+ if (vehicleInfo==null) {
+ vehicleInfo = new VehicleInfo();
+ vehicleInfo.setVehicleNo(plateNo);
+ vehicleInfo.setDeviceId(vehicle.getDid());
+ vehicleInfo.setPlatformCode("CMS");
+ vehicleInfo.setStatus("0");
vehicleInfoService.insertVehicleInfo(vehicleInfo);
- syncCarCount++;
}
- }
+ else{
+ vehicleInfo.setVehicleNo(plateNo);
+ vehicleInfo.setDeviceId(vehicle.getDid());
+ vehicleInfo.setPlatformCode("CMS");
+ vehicleInfo.setStatus("0");
+ vehicleInfoService.updateVehicleInfo(vehicleInfo);
+ }
+
+ });
+
+
log.info("鎴愬姛鍚屾{}涓狢MS杞﹁締淇℃伅", syncCarCount);
diff --git a/ruoyi-quartz/src/main/resources/sql/vehicle_gps_job.sql b/ruoyi-quartz/src/main/resources/sql/vehicle_gps_job.sql
index 7d2de38..0f3f944 100644
--- a/ruoyi-quartz/src/main/resources/sql/vehicle_gps_job.sql
+++ b/ruoyi-quartz/src/main/resources/sql/vehicle_gps_job.sql
@@ -1,7 +1,7 @@
-- 杞﹁締鍚屾瀹氭椂浠诲姟
INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, update_by, update_time, remark)
VALUES ('杞﹁締鍚屾浠诲姟', 'DEFAULT', 'vehicleSyncTask.syncVehicleInfo()', '0 0 */1 * * ?', '3', '1', '1', 'admin', sysdate(), 'admin', sysdate(), '姣忓皬鏃跺悓姝ヤ竴娆¤溅杈嗕俊鎭�');
-
+
-- GPS鍚屾瀹氭椂浠诲姟
INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, update_by, update_time, remark)
VALUES ('GPS鍚屾浠诲姟', 'DEFAULT', 'gpsSyncTask.syncGpsData()', '0 */5 * * * ?', '3', '1', '1', 'admin', sysdate(), 'admin', sysdate(), '姣�5鍒嗛挓鍚屾涓�娆PS浣嶇疆淇℃伅');
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/CmsTrackDetailResponse.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/CmsTrackDetailResponse.java
new file mode 100644
index 0000000..bf33338
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/CmsTrackDetailResponse.java
@@ -0,0 +1,74 @@
+package com.ruoyi.system.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * CMS杞ㄨ抗鏌ヨ鍝嶅簲
+ */
+@Data
+public class CmsTrackDetailResponse implements Serializable{
+ private int result;
+ private List<CmsTrackPoint> tracks;
+ private CmsPagination pagination;
+
+
+ /**
+ * CMS杞ㄨ抗鐐�
+ */
+ @Data
+ public static class CmsTrackPoint implements Serializable{
+ private String id; // 璁惧ID
+ private int lng; // 缁忓害
+ private int lat; // 绾害
+ private int ft; // 鏂瑰悜
+ private int sp; // 閫熷害
+ private String ol; // 娌归噺
+ private String gt; // GPS鏃堕棿
+ private int pt; // 瀹氫綅绫诲瀷
+ private int dt; // 鏁版嵁绫诲瀷
+ private int ac; // ACC鐘舵��
+ private int fdt; // 鐤插姵椹鹃┒
+ private int net; // 缃戠粶绫诲瀷
+ private String gw; // 缃戝叧
+ private String vid; // 杞﹁締杞︾墝
+ private long s1; // 鐘舵��1
+ private int s2; // 鐘舵��2
+ private int s3; // 鐘舵��3
+ private int s4; // 鐘舵��4
+ private int t1; // 娓╁害1
+ private int t2; // 娓╁害2
+ private int t3; // 娓╁害3
+ private int t4; // 娓╁害4
+ private int hx; // 婀垮害
+ private String mlng; // 鍦板浘缁忓害
+ private String mlat; // 鍦板浘绾害
+ private int pk; // 鍋滆溅鐘舵��
+ private long lc; // 閲岀▼
+ private int yl; // 娌归噺
+ private String ps; // 浣嶇疆
+
+ }
+
+ /**
+ * CMS鍒嗛〉淇℃伅
+ */
+ @Data
+ public static class CmsPagination implements Serializable {
+ private int totalPages; // 鎬婚〉鏁�
+ private int currentPage; // 褰撳墠椤�
+ private int pageRecords; // 姣忛〉璁板綍鏁�
+ private int totalRecords; // 鎬昏褰曟暟
+ private String sortParams; // 鎺掑簭鍙傛暟
+ private boolean hasNextPage; // 鏄惁鏈変笅涓�椤�
+ private boolean hasPreviousPage; // 鏄惁鏈変笂涓�椤�
+ private int nextPage; // 涓嬩竴椤�
+ private int previousPage; // 涓婁竴椤�
+ private int startRecord; // 寮�濮嬭褰�
+
+
+
+ }
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/CmsVehicleDeviceListResponse.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/CmsVehicleDeviceListResponse.java
index df25b7e..120754e 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/CmsVehicleDeviceListResponse.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/CmsVehicleDeviceListResponse.java
@@ -1,74 +1,60 @@
package com.ruoyi.system.domain;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import java.io.Serializable;
import java.util.List;
/**
- * CMS杞﹁締璁惧鍒楄〃鏌ヨ鍝嶅簲
+ * CMS杞﹁締璁惧鍒楄〃鍝嶅簲
*/
-public class CmsVehicleDeviceListResponse implements Serializable {
- private static final long serialVersionUID = 1L;
+public class CmsVehicleDeviceListResponse {
+ private int result;
+ private List<CmsVehicleDevice> devices;
- /** 缁撴灉鐮� */
- @JsonProperty("result")
- private Integer result;
-
- /** 璁惧鍒楄〃 */
- @JsonProperty("devices")
- private List<VehicleDevice> devices;
-
- public Integer getResult() {
+ public int getResult() {
return result;
}
- public void setResult(Integer result) {
+ public void setResult(int result) {
this.result = result;
}
- public List<VehicleDevice> getDevices() {
+ public List<CmsVehicleDevice> getDevices() {
return devices;
}
- public void setDevices(List<VehicleDevice> devices) {
+ public void setDevices(List<CmsVehicleDevice> devices) {
this.devices = devices;
}
- public static class VehicleDevice {
- /** 杞︾墝鍙� */
- @JsonProperty("vid")
- private String vehicleId;
+ /**
+ * CMS杞﹁締璁惧淇℃伅
+ */
+ public static class CmsVehicleDevice {
+ private String vid; // 杞︾墝鍙�
+ private int type; // 璁惧绫诲瀷锛�1锛氳棰戣澶囷紝0锛欸PS璁惧锛�
+ private String did; // 璁惧鍙�
- /** 璁惧绫诲瀷 */
- @JsonProperty("type")
- private Integer type;
-
- /** 璁惧鍙� */
- @JsonProperty("did")
- private String deviceId;
-
- public String getVehicleId() {
- return vehicleId;
+ public String getVid() {
+ return vid;
}
- public void setVehicleId(String vehicleId) {
- this.vehicleId = vehicleId;
+ public void setVid(String vid) {
+ this.vid = vid;
}
- public Integer getType() {
+ public int getType() {
return type;
}
- public void setType(Integer type) {
+ public void setType(int type) {
this.type = type;
}
- public String getDeviceId() {
- return deviceId;
+ public String getDid() {
+ return did;
}
- public void setDeviceId(String deviceId) {
- this.deviceId = deviceId;
+ public void setDid(String did) {
+ this.did = did;
}
}
}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsTrackPoint.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsTrackPoint.java
new file mode 100644
index 0000000..0e19c30
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsTrackPoint.java
@@ -0,0 +1,45 @@
+package com.ruoyi.system.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * GPS杞ㄨ抗鐐圭粺涓�鍝嶅簲鏍煎紡
+ */
+@Data
+public class GpsTrackPoint implements Serializable {
+ private String vehicleNo; // 杞︾墝鍙�
+ private Double longitude; // 缁忓害
+ private Double latitude; // 绾害
+ private Double speed; // 閫熷害
+ private Integer direction; // 鏂瑰悜
+ private String address; // 鍦扮悊浣嶇疆
+ private String reportTime; // 涓婃姤鏃堕棿
+ private String deviceId; // 璁惧ID
+ private Integer accStatus; // ACC鐘舵��
+ private Integer onlineStatus; // 鍦ㄧ嚎鐘舵��
+ private Integer powerStatus; // 鐢垫簮鐘舵��
+ private Integer signalStrength;// 淇″彿寮哄害
+ private Integer trackCount; // 杞ㄨ抗鐐规暟閲�
+ private Long starttime; // 寮�濮嬫椂闂�
+ private Long endtime; // 缁撴潫鏃堕棿
+ private Integer trackid; // 杞ㄨ抗ID
+ private Long arrivedtime; // 鍒拌揪鏃堕棿
+ private Long updatetime; // 鏇存柊鏃堕棿
+ private Double altitude; // 娴锋嫈
+ private Integer radius; // 鍗婂緞
+ private Double recorderspeed; // 璁板綍浠�熷害
+ private Integer totaldistance; // 鎬昏窛绂�
+ private Integer course; // 鏂瑰悜
+ private Long status; // 鐘舵��
+ private String strstatus; // 鐘舵�佹弿杩�
+ private String strstatusen; // 鐘舵�佽嫳鏂囨弿杩�
+ private String gotsrc; // 鏁版嵁鏉ユ簮
+ private Integer rxlevel; // 淇″彿寮哄害
+ private Integer gpsvalidnum; // GPS鏈夋晥鍗槦鏁�
+
+ private Short reportmode; // 涓婃姤妯″紡
+
+
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsTrackQueryRequest.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsTrackQueryRequest.java
new file mode 100644
index 0000000..0286ddf
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsTrackQueryRequest.java
@@ -0,0 +1,40 @@
+package com.ruoyi.system.domain;
+
+public class GpsTrackQueryRequest {
+ private String deviceid;
+ private String begintime;
+ private String endtime;
+ private Integer timezone;
+
+ public String getDeviceid() {
+ return deviceid;
+ }
+
+ public void setDeviceid(String deviceid) {
+ this.deviceid = deviceid;
+ }
+
+ public String getBegintime() {
+ return begintime;
+ }
+
+ public void setBegintime(String begintime) {
+ this.begintime = begintime;
+ }
+
+ public String getEndtime() {
+ return endtime;
+ }
+
+ public void setEndtime(String endtime) {
+ this.endtime = endtime;
+ }
+
+ public Integer getTimezone() {
+ return timezone;
+ }
+
+ public void setTimezone(Integer timezone) {
+ this.timezone = timezone;
+ }
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsTrackQueryResponse.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsTrackQueryResponse.java
new file mode 100644
index 0000000..62e2011
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsTrackQueryResponse.java
@@ -0,0 +1,42 @@
+package com.ruoyi.system.domain;
+
+import java.util.List;
+
+public class GpsTrackQueryResponse {
+ private int status;
+ private String cause;
+ private String deviceid;
+ private List<GpsTrackPoint> records;
+
+ public int getStatus() {
+ return status;
+ }
+
+ public void setStatus(int status) {
+ this.status = status;
+ }
+
+ public String getCause() {
+ return cause;
+ }
+
+ public void setCause(String cause) {
+ this.cause = cause;
+ }
+
+ public String getDeviceid() {
+ return deviceid;
+ }
+
+ public void setDeviceid(String deviceid) {
+ this.deviceid = deviceid;
+ }
+
+ public List<GpsTrackPoint> getRecords() {
+ return records;
+ }
+
+ public void setRecords(List<GpsTrackPoint> records) {
+ this.records = records;
+ }
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/VehicleGps.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/VehicleGps.java
index a2b492b..daf5d6e 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/VehicleGps.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/VehicleGps.java
@@ -67,6 +67,9 @@
/** 鎺掑簭鍒� */
private String orderByColumn;
+ /** 鍦板潃 */
+ private String address;
+
/** 鎺掑簭鐨勬柟鍚慸esc鎴栬�卆sc */
private String isAsc;
@@ -211,6 +214,14 @@
return this.orderId;
}
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
@@ -227,6 +238,7 @@
.append("deviceReportTime", getDeviceReportTime())
.append("platformProcessTime", getPlatformProcessTime())
.append("createTime", getCreateTime())
+ .append("address", getAddress())
.toString();
}
}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/VehicleGpsMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/VehicleGpsMapper.java
index fb1310c..52f64bd 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/VehicleGpsMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/VehicleGpsMapper.java
@@ -41,4 +41,11 @@
* 鏍规嵁杞︾墝鍙疯幏鍙栬溅杈咺D
*/
public Long getVehicleIdByNo(String vehicleNo);
+
+ /**
+ * 鍒犻櫎鎸囧畾鏃ユ湡涔嬪墠鐨勮溅杈咷PS鏁版嵁
+ *
+ * @return 鍒犻櫎鐨勮褰曟暟
+ */
+ public int deleteVehicleGpsBeforeDate();
}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ICmsGpsCollectService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ICmsGpsCollectService.java
index 782d0b0..131acd2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ICmsGpsCollectService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ICmsGpsCollectService.java
@@ -4,6 +4,7 @@
import com.ruoyi.system.domain.CmsVehicleDeviceResponse;
import com.ruoyi.system.domain.CmsVehicleDeviceListResponse;
import com.ruoyi.system.domain.CmsVehicleLocationResponse;
+import com.ruoyi.system.domain.CmsTrackDetailResponse;
/**
* CMS GPS閲囬泦鏈嶅姟鎺ュ彛
@@ -44,4 +45,22 @@
* @return 杞﹁締浣嶇疆淇℃伅鍝嶅簲
*/
CmsVehicleLocationResponse getVehicleLocation(String vehicleId, Integer toMap, Integer geoAddress, Integer currentPage, Integer pageRecords);
+
+ /**
+ * 鑾峰彇璁惧鍘嗗彶杞ㄨ抗
+ *
+ * @param devIdno 璁惧鍙�
+ * @param begintime 寮�濮嬫椂闂达紙鏍煎紡锛歽yyy-MM-dd HH:mm:ss锛�
+ * @param endtime 缁撴潫鏃堕棿锛堟牸寮忥細yyyy-MM-dd HH:mm:ss锛�
+ * @param distance 璺濈锛堝崟浣嶏細KM锛屽彲閫夛級
+ * @param parkTime 鍋滆溅鏃堕暱锛堝崟浣嶏細绉掞紝鍙�夛級
+ * @param geoaddress 鏄惁瑙f瀽鍦扮悊浣嶇疆锛�1锛氭槸锛屽彲閫夛級
+ * @param currentPage 褰撳墠鏌ヨ椤电爜锛堝彲閫夛級
+ * @param pageRecords 姣忛〉鏉℃暟锛堝彲閫夛級
+ * @param toMap 鍦板浘缁忕含搴﹁浆鎹紙1锛氳胺姝屽湴鍥撅紝2锛氱櫨搴﹀湴鍥撅紝鍙�夛級
+ * @return 鍘嗗彶杞ㄨ抗鍝嶅簲
+ */
+ CmsTrackDetailResponse queryTrackDetail(String devIdno, String begintime, String endtime,
+ Double distance, Integer parkTime, Integer geoaddress, Integer currentPage,
+ Integer pageRecords, Integer toMap);
}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IGpsCollectService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IGpsCollectService.java
index f89c320..d0512fa 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/IGpsCollectService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IGpsCollectService.java
@@ -32,4 +32,12 @@
* @return 璁惧鍙凤紝濡傛灉鏈壘鍒板垯杩斿洖null
*/
String getDeviceIdByPlateNumber(String plateNumber);
+
+ /**
+ * 鎸夋椂闂存煡璇㈠巻鍙茶建杩�
+ *
+ * @param request 鏌ヨ璇锋眰
+ * @return 杞ㄨ抗鏌ヨ鍝嶅簲
+ */
+ GpsTrackQueryResponse queryTracks(GpsTrackQueryRequest request);
}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IVehicleGpsService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IVehicleGpsService.java
index 061954d..970c3ac 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/IVehicleGpsService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IVehicleGpsService.java
@@ -36,4 +36,11 @@
* 鍒犻櫎杞﹁締GPS鍧愭爣淇℃伅
*/
public int deleteVehicleGpsById(Long gpsId);
+
+ /**
+ * 鍒犻櫎鎸囧畾鏃ユ湡涔嬪墠鐨勮溅杈咷PS鏁版嵁
+ *
+ * @return 鍒犻櫎鐨勮褰曟暟
+ */
+ public int deleteVehicleGpsBeforeDate();
}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CmsGpsCollectServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CmsGpsCollectServiceImpl.java
index 493f47d..2c6b036 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CmsGpsCollectServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CmsGpsCollectServiceImpl.java
@@ -6,6 +6,7 @@
import com.ruoyi.system.domain.CmsVehicleDeviceResponse;
import com.ruoyi.system.domain.CmsVehicleDeviceListResponse;
import com.ruoyi.system.domain.CmsVehicleLocationResponse;
+import com.ruoyi.system.domain.CmsTrackDetailResponse;
import com.ruoyi.system.domain.SysGpsConfig;
import com.ruoyi.system.service.ICmsGpsCollectService;
import com.ruoyi.system.service.IGpsConfigService;
@@ -15,6 +16,8 @@
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONObject;
import java.util.Date;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
/**
* CMS GPS閲囬泦鏈嶅姟瀹炵幇
@@ -115,13 +118,17 @@
}
// 鏋勫缓璇锋眰URL
- String url = baseUrlConfig.getDomain() + "/StandardApiAction_getDeviceByVehicle.action?jsession=" + baseUrlConfig.getToken();
+ StringBuilder url = new StringBuilder();
+ url.append(baseUrlConfig.getDomain())
+ .append("/StandardApiAction_getDeviceByVehicle.action?jsession=")
+ .append(baseUrlConfig.getToken());
+
if (vehicleId != null && !vehicleId.isEmpty()) {
- url += "&vehiIdno=" + vehicleId;
+ url.append("&vehiIdno=").append(vehicleId);
}
// 鍙戦�佹煡璇㈣姹�
- String response = HttpUtil.get(url,null);
+ String response = HttpUtils.sendGet(url.toString());
// 瑙f瀽鍝嶅簲
CmsVehicleDeviceListResponse deviceListResponse = JSONObject.parseObject(response, CmsVehicleDeviceListResponse.class);
@@ -196,4 +203,71 @@
throw new RuntimeException("鑾峰彇杞﹁締浣嶇疆淇℃伅寮傚父锛�" + e.getMessage());
}
}
+
+ @Override
+ public CmsTrackDetailResponse queryTrackDetail(String devIdno, String begintime, String endtime,
+ Double distance, Integer parkTime, Integer geoaddress, Integer currentPage,
+ Integer pageRecords, Integer toMap) {
+
+ try {
+ // 浠庢暟鎹簱鑾峰彇CMS閰嶇疆
+ SysGpsConfig baseUrlConfig = gpsConfigService.selectGpsConfigByKey("gpscms");
+ if (baseUrlConfig == null) {
+ throw new RuntimeException("鏈厤缃瓹MS绯荤粺鍦板潃");
+ }
+
+ // 妫�鏌oken鏄惁杩囨湡
+ if (baseUrlConfig.getTokenExpireTime() == null ||
+ baseUrlConfig.getTokenExpireTime().before(new Date())) {
+ // token杩囨湡锛岄噸鏂扮櫥褰�
+ login(baseUrlConfig.getUsername(), baseUrlConfig.getPassword());
+ baseUrlConfig = gpsConfigService.selectGpsConfigByKey("gpscms");
+ }
+
+ // 鏋勫缓璇锋眰URL
+ StringBuilder url = new StringBuilder(baseUrlConfig.getDomain())
+ .append("/StandardApiAction_queryTrackDetail.action?jsession=")
+ .append(baseUrlConfig.getToken())
+ .append("&devIdno=").append(devIdno)
+ .append("&begintime=").append(begintime)
+ .append("&endtime=").append(endtime);
+
+ // 娣诲姞鍙�夊弬鏁�
+ if (distance != null) {
+ url.append("&distance=").append(distance);
+ }
+ if (parkTime != null) {
+ url.append("&parkTime=").append(parkTime);
+ }
+ if (geoaddress != null) {
+ url.append("&geoaddress=").append(geoaddress);
+ }
+ if (currentPage != null) {
+ url.append("¤tPage=").append(currentPage);
+ }
+ if (pageRecords != null) {
+ url.append("&pageRecords=").append(pageRecords);
+ }
+ if (toMap != null) {
+ url.append("&toMap=").append(toMap);
+ }
+
+ // 鍙戦�佹煡璇㈣姹�
+ String response = HttpUtils.sendGet(url.toString());
+
+ // 瑙f瀽鍝嶅簲
+ CmsTrackDetailResponse trackResponse = JSONObject.parseObject(response, CmsTrackDetailResponse.class);
+
+ if (trackResponse.getResult() == 0) {
+ log.info("鑾峰彇璁惧鍘嗗彶杞ㄨ抗鎴愬姛锛岃澶囧彿锛歿}", devIdno);
+ } else {
+ log.error("鑾峰彇璁惧鍘嗗彶杞ㄨ抗澶辫触锛岃澶囧彿锛歿}", devIdno);
+ }
+
+ return trackResponse;
+ } catch (Exception e) {
+ log.error("鑾峰彇璁惧鍘嗗彶杞ㄨ抗寮傚父锛岃澶囧彿锛歿}", devIdno, e);
+ throw new RuntimeException("鑾峰彇璁惧鍘嗗彶杞ㄨ抗寮傚父锛�" + e.getMessage());
+ }
+ }
}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java
index f456c36..7c20adb 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java
@@ -510,4 +510,92 @@
return null;
}
+
+ @Override
+ public GpsTrackQueryResponse queryTracks(GpsTrackQueryRequest request) {
+ // 鑾峰彇GPS閰嶇疆淇℃伅
+ SysGpsConfig config = gpsConfigService.selectGpsConfigByKey("gps51");
+ if (config == null) {
+ GpsTrackQueryResponse response = new GpsTrackQueryResponse();
+ response.setStatus(-1);
+ response.setCause("鏈壘鍒癎PS閰嶇疆淇℃伅");
+ return response;
+ }
+
+ // 鑾峰彇鏈夋晥鐨則oken锛屽鏋滄棤鏁堝垯鑷姩鐧诲綍
+ String token = getValidTokenWithAutoLogin();
+ if (token == null) {
+ GpsTrackQueryResponse response = new GpsTrackQueryResponse();
+ response.setStatus(-1);
+ response.setCause("鑾峰彇token澶辫触");
+ return response;
+ }
+
+ // 鏋勫缓璇锋眰URL
+ String url = config.getDomain() + "/webapi?action=querytracks&token=" + token;
+
+ // 鏋勫缓璇锋眰鍙傛暟
+ Map<String, String> params = new HashMap<>();
+ params.put("deviceid", request.getDeviceid());
+ params.put("begintime", request.getBegintime());
+ params.put("endtime", request.getEndtime());
+ if (request.getTimezone() != null) {
+ params.put("timezone", String.valueOf(request.getTimezone()));
+ }
+
+ try {
+ // 鍙戦�丠TTP璇锋眰
+ String result = HttpUtil.post(url, params);
+ JSONObject jsonResult = JSON.parseObject(result);
+
+ // 瑙f瀽鍝嶅簲
+ GpsTrackQueryResponse response = new GpsTrackQueryResponse();
+ response.setStatus(jsonResult.getInteger("status"));
+ response.setCause(jsonResult.getString("cause"));
+ response.setDeviceid(jsonResult.getString("deviceid"));
+
+ if (response.getStatus() == 0) {
+ // 瑙f瀽杞ㄨ抗璁板綍鍒楄〃
+ JSONArray recordsArray = jsonResult.getJSONArray("records");
+ List<GpsTrackPoint> records = new ArrayList<>();
+
+ for (int i = 0; i < recordsArray.size(); i++) {
+ JSONObject recordJson = recordsArray.getJSONObject(i);
+ GpsTrackPoint record = new GpsTrackPoint();
+ record.setTrackCount(recordJson.getInteger("trackCount"));
+ record.setStarttime(recordJson.getLong("starttime"));
+ record.setEndtime(recordJson.getLong("endtime"));
+ record.setTrackid(recordJson.getInteger("trackid"));
+ record.setArrivedtime(recordJson.getLong("arrivedtime"));
+ record.setUpdatetime(recordJson.getLong("updatetime"));
+ record.setLatitude(recordJson.getDouble("callat"));
+ record.setLongitude(recordJson.getDouble("callon"));
+ record.setAltitude(recordJson.getDouble("altitude"));
+ record.setRadius(recordJson.getInteger("radius"));
+ record.setSpeed(recordJson.getDouble("speed"));
+ record.setRecorderspeed(recordJson.getDouble("recorderspeed"));
+ record.setTotaldistance(recordJson.getInteger("totaldistance"));
+ record.setCourse(recordJson.getInteger("course"));
+ record.setStatus(recordJson.getLong("status"));
+ record.setStrstatus(recordJson.getString("strstatus"));
+ record.setStrstatusen(recordJson.getString("strstatusen"));
+ record.setGotsrc(recordJson.getString("gotsrc"));
+ record.setRxlevel(recordJson.getInteger("rxlevel"));
+ record.setGpsvalidnum(recordJson.getInteger("gpsvalidnum"));
+ record.setReportmode(recordJson.getShort("reportmode"));
+
+ records.add(record);
+ }
+
+ response.setRecords(records);
+ }
+
+ return response;
+ } catch (Exception e) {
+ GpsTrackQueryResponse response = new GpsTrackQueryResponse();
+ response.setStatus(-1);
+ response.setCause("鏌ヨ鍘嗗彶杞ㄨ抗澶辫触锛�" + e.getMessage());
+ return response;
+ }
+ }
}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleGpsServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleGpsServiceImpl.java
index 8697cbe..ad9eb5a 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleGpsServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleGpsServiceImpl.java
@@ -71,4 +71,12 @@
public int deleteVehicleGpsById(Long gpsId) {
return vehicleGpsMapper.deleteVehicleGpsById(gpsId);
}
+
+ /**
+ * 鍒犻櫎鎸囧畾鏃ユ湡涔嬪墠鐨勮溅杈咷PS鏁版嵁
+ */
+ @Override
+ public int deleteVehicleGpsBeforeDate() {
+ return vehicleGpsMapper.deleteVehicleGpsBeforeDate();
+ }
}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/resources/mapper/system/VehicleGpsMapper.xml b/ruoyi-system/src/main/resources/mapper/system/VehicleGpsMapper.xml
index 98a65fe..9e01aae 100644
--- a/ruoyi-system/src/main/resources/mapper/system/VehicleGpsMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/VehicleGpsMapper.xml
@@ -110,4 +110,13 @@
<select id="getVehicleIdByNo" parameterType="String" resultType="Long">
select vehicle_id from tb_vehicle_info where vehicle_no = #{vehicleNo}
</select>
+
+ <delete id="deleteVehicleGpsBeforeDate">
+ delete g from tb_vehicle_gps g
+ where g.collect_time < (
+ select date_sub(max(collect_time), interval 2 day)
+ from tb_vehicle_gps g2
+ where g2.vehicle_id = g.vehicle_id
+ )
+ </delete>
</mapper>
\ No newline at end of file
diff --git a/sql/clean_gps.sql b/sql/clean_gps.sql
new file mode 100644
index 0000000..692b8e8
--- /dev/null
+++ b/sql/clean_gps.sql
@@ -0,0 +1,27 @@
+INSERT INTO sys_job (
+ job_name,
+ job_group,
+ invoke_target,
+ cron_expression,
+ misfire_policy,
+ concurrent,
+ status,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+ remark
+) VALUES (
+ '娓呯悊杞﹁締GPS鍘嗗彶鏁版嵁',
+ 'DEFAULT',
+ 'cleanVehicleGpsTask.cleanVehicleGpsData()',
+ '0 0 1 * * ?',
+ '1',
+ '1',
+ '0',
+ 'admin',
+ sysdate(),
+ 'admin',
+ sysdate(),
+ '姣忓ぉ鍑屾櫒1鐐规竻鐞嗚溅杈咷PS鍘嗗彶鏁版嵁锛屽彧淇濈暀姣忓彴杞︽渶鍚�2澶╃殑鏁版嵁'
+);
\ No newline at end of file
--
Gitblit v1.9.1