package com.ruoyi.system.service.impl; import com.ruoyi.common.utils.HttpUtil; import com.ruoyi.common.utils.http.HttpUtils; import com.ruoyi.system.domain.CmsGpsLoginResponse; 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; 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; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; /** * 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()); } } }