package com.ruoyi.gps.service.impl;
|
|
import com.ruoyi.common.utils.HttpUtil;
|
import com.ruoyi.common.utils.http.HttpUtils;
|
import com.ruoyi.gps.domain.CmsGpsLoginResponse;
|
import com.ruoyi.gps.domain.CmsVehicleDeviceResponse;
|
import com.ruoyi.gps.domain.CmsVehicleDeviceListResponse;
|
import com.ruoyi.gps.domain.CmsVehicleLocationResponse;
|
import com.ruoyi.gps.domain.CmsTrackDetailResponse;
|
import com.ruoyi.gps.domain.SysGpsConfig;
|
import com.ruoyi.gps.service.ICmsGpsCollectService;
|
import com.ruoyi.gps.service.IGpsConfigService;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import com.alibaba.fastjson.JSONObject;
|
import java.util.Date;
|
|
/**
|
* CMS GPS采集服务实现
|
*/
|
@Service
|
public class CmsGpsCollectServiceImpl implements ICmsGpsCollectService {
|
private static final Logger log = LoggerFactory.getLogger(CmsGpsCollectServiceImpl.class);
|
|
@Autowired
|
private IGpsConfigService gpsConfigService;
|
|
@Override
|
public CmsGpsLoginResponse login(String username, String password) {
|
try {
|
// 从数据库获取CMS配置
|
SysGpsConfig baseUrlConfig = gpsConfigService.selectGpsConfigByKey("gpscms");
|
if (baseUrlConfig == null) {
|
throw new RuntimeException("未配置CMS系统地址");
|
}
|
|
|
// 发送登录请求
|
String response = HttpUtil.get(baseUrlConfig.getDomain() + "/StandardApiAction_login.action?account=" + username + "&password=" + password,null);
|
|
// 解析响应
|
CmsGpsLoginResponse loginResponse = JSONObject.parseObject(response, CmsGpsLoginResponse.class);
|
|
if (loginResponse.getResult() == 0) {
|
log.info("CMS系统登录成功,用户:{}", username);
|
// 保存会话ID到配置表
|
baseUrlConfig.setToken(loginResponse.getJsession());
|
// 设置token过期时间为20小时
|
baseUrlConfig.setTokenExpireTime(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 20));
|
|
gpsConfigService.updateGpsConfig(baseUrlConfig);
|
} else {
|
log.error("CMS系统登录失败,url:{},user:{},password:{},response:{}", baseUrlConfig.getDomain(), username, password, response);
|
}
|
|
return loginResponse;
|
} catch (Exception e) {
|
log.error("CMS系统登录异常", e);
|
throw new RuntimeException("CMS系统登录异常:" + e.getMessage());
|
}
|
}
|
|
@Override
|
public CmsVehicleDeviceResponse queryVehicleDevices() {
|
try {
|
// 从数据库获取CMS配置
|
SysGpsConfig baseUrlConfig = gpsConfigService.selectGpsConfigByKey("gpscms");
|
if (baseUrlConfig == null) {
|
throw new RuntimeException("未配置CMS系统地址");
|
}
|
|
// 检查token是否过期
|
if (baseUrlConfig.getTokenExpireTime() == null ||
|
baseUrlConfig.getTokenExpireTime().before(new Date())) {
|
// token过期,重新登录
|
login(baseUrlConfig.getUsername(), baseUrlConfig.getPassword());
|
baseUrlConfig = gpsConfigService.selectGpsConfigByKey("gpscms");
|
}
|
|
// 发送查询请求
|
String response = HttpUtil.get(baseUrlConfig.getDomain() + "/StandardApiAction_queryUserVehicle.action?jsession=" + baseUrlConfig.getToken(),null);
|
|
// 解析响应
|
CmsVehicleDeviceResponse deviceResponse = JSONObject.parseObject(response, CmsVehicleDeviceResponse.class);
|
|
if (deviceResponse.getResult() == 0) {
|
log.info("查询车辆设备信息成功,共{}条记录", deviceResponse.getVehicles().size());
|
} else {
|
log.error("查询车辆设备信息失败");
|
}
|
|
return deviceResponse;
|
} catch (Exception e) {
|
log.error("查询车辆设备信息异常", e);
|
throw new RuntimeException("查询车辆设备信息异常:" + e.getMessage());
|
}
|
}
|
|
@Override
|
public CmsVehicleDeviceListResponse getDeviceByVehicle(String vehicleId) {
|
try {
|
// 从数据库获取CMS配置
|
SysGpsConfig baseUrlConfig = gpsConfigService.selectGpsConfigByKey("gpscms");
|
if (baseUrlConfig == null) {
|
throw new RuntimeException("未配置CMS系统地址");
|
}
|
|
// 检查token是否过期
|
if (baseUrlConfig.getTokenExpireTime() == null ||
|
baseUrlConfig.getTokenExpireTime().before(new Date())) {
|
// token过期,重新登录
|
login(baseUrlConfig.getUsername(), baseUrlConfig.getPassword());
|
baseUrlConfig = gpsConfigService.selectGpsConfigByKey("gpscms");
|
}
|
|
// 构建请求URL
|
StringBuilder url = new StringBuilder();
|
url.append(baseUrlConfig.getDomain())
|
.append("/StandardApiAction_getDeviceByVehicle.action?jsession=")
|
.append(baseUrlConfig.getToken());
|
|
if (vehicleId != null && !vehicleId.isEmpty()) {
|
url.append("&vehiIdno=").append(vehicleId);
|
}
|
|
// 发送查询请求
|
String response = HttpUtils.sendGet(url.toString());
|
|
// 解析响应
|
CmsVehicleDeviceListResponse deviceListResponse = JSONObject.parseObject(response, CmsVehicleDeviceListResponse.class);
|
|
if (deviceListResponse.getResult() == 0) {
|
log.info("获取车辆设备列表成功,车牌号:{}", vehicleId);
|
} else {
|
log.error("获取车辆设备列表失败,车牌号:{}", vehicleId);
|
}
|
|
return deviceListResponse;
|
} catch (Exception e) {
|
log.error("获取车辆设备列表异常,车牌号:{}", vehicleId, e);
|
throw new RuntimeException("获取车辆设备列表异常:" + e.getMessage());
|
}
|
}
|
|
@Override
|
public CmsVehicleLocationResponse getVehicleLocation(String vehicleId, Integer toMap, Integer geoAddress, Integer currentPage, Integer pageRecords) {
|
try {
|
// 从数据库获取CMS配置
|
SysGpsConfig baseUrlConfig = gpsConfigService.selectGpsConfigByKey("gpscms");
|
if (baseUrlConfig == null) {
|
throw new RuntimeException("未配置CMS系统地址");
|
}
|
|
// 检查token是否过期
|
if (baseUrlConfig.getTokenExpireTime() == null ||
|
baseUrlConfig.getTokenExpireTime().before(new Date())) {
|
// token过期,重新登录
|
login(baseUrlConfig.getUsername(), baseUrlConfig.getPassword());
|
baseUrlConfig = gpsConfigService.selectGpsConfigByKey("gpscms");
|
}
|
|
// 构建请求URL
|
StringBuilder url = new StringBuilder();
|
url.append(baseUrlConfig.getDomain())
|
.append("/StandardApiAction_vehicleStatus.action?jsession=")
|
.append(baseUrlConfig.getToken());
|
|
if (vehicleId != null && !vehicleId.isEmpty()) {
|
url.append("&vehiIdno=").append(vehicleId);
|
}
|
if (toMap != null) {
|
url.append("&toMap=").append(toMap);
|
}
|
if (geoAddress != null) {
|
url.append("&geoaddress=").append(geoAddress);
|
}
|
if (currentPage != null) {
|
url.append("¤tPage=").append(currentPage);
|
}
|
if (pageRecords != null) {
|
url.append("&pageRecords=").append(pageRecords);
|
}
|
|
// 发送查询请求
|
String response = HttpUtils.sendGet(url.toString());
|
|
// 解析响应
|
CmsVehicleLocationResponse locationResponse = JSONObject.parseObject(response, CmsVehicleLocationResponse.class);
|
|
if (locationResponse.getResult() == 0) {
|
log.info("获取车辆位置信息成功,车牌号:{}", vehicleId);
|
} else {
|
log.error("获取车辆位置信息失败,车牌号:{}", vehicleId);
|
}
|
|
return locationResponse;
|
} catch (Exception e) {
|
log.error("获取车辆位置信息异常,车牌号:{}", vehicleId, e);
|
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("未配置CMS系统地址");
|
}
|
|
// 检查token是否过期
|
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());
|
|
// 解析响应
|
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());
|
}
|
}
|
}
|