| | |
| | | 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; |
| | |
| | | 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; |
| | | |
| | |
| | | @Autowired |
| | | private ITbOrdersService tbOrdersService; |
| | | |
| | | @Autowired |
| | | private IGpsCollectService gpsCollectService; |
| | | |
| | | @Autowired |
| | | private IVehicleInfoService vehicleInfoService; |
| | | |
| | | @Autowired |
| | | private ICmsGpsCollectService cmsGpsCollectService; |
| | | |
| | | /** |
| | | * 查询车辆GPS坐标列表 |
| | | */ |
| | |
| | | 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); |
| | |
| | | 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); |
| | | } |
| | | |
| | | /** |
| | |
| | | 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 { |
| | | // 通过车牌号获取设备ID |
| | | VehicleInfo vehicleInfo = vehicleInfoService.selectVehicleInfoByPlateNumber(vehicleNo); |
| | | if (vehicleInfo == null) { |
| | | throw new Error("未找到该车辆对应的GPS设备"); |
| | | } |
| | | |
| | | // 处理开始时间 |
| | | 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<>(); |
| | | |
| | | //如果平台是cms,则调用cms的接口 |
| | | if(vehicleInfo.getPlatformCode().equals("CMS")) |
| | | { |
| | | |
| | | CmsTrackDetailResponse response = cmsGpsCollectService.queryTrackDetail( |
| | | vehicleInfo.getDeviceId(), // 设备号 |
| | | beginTime, // 开始时间 |
| | | endTime, // 结束时间 |
| | | null, // 距离(可选) |
| | | null, // 停车时长(可选) |
| | | 1, // 解析地理位置 |
| | | 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); |
| | | |
| | | // 速度,直接使用int转double |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | | //转换成List<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()); |
| | | } |
| | | } |
| | | } |