diff --git a/electripper-admin/src/main/java/com/ruoyi/web/controller/iot/receive/ReceiveController.java b/electripper-admin/src/main/java/com/ruoyi/web/controller/iot/receive/ReceiveController.java index 7fb480d..b555a38 100644 --- a/electripper-admin/src/main/java/com/ruoyi/web/controller/iot/receive/ReceiveController.java +++ b/electripper-admin/src/main/java/com/ruoyi/web/controller/iot/receive/ReceiveController.java @@ -160,33 +160,36 @@ public class ReceiveController { Integer status = value.getStatus(); if(status == 1){//上电运行 log.info("上电运行:" +logEntry.getDevName()); - //获取当前正在骑行中的订单 - EtOrder etOrder = etOrderService.getCurrentOrder(device.getSn()); - JSONArray jsonArray; - if(StrUtil.isNotBlank(etOrder.getTripRouteStr())){ - jsonArray = JSON.parseArray(etOrder.getTripRouteStr()); - }else{ - jsonArray = new JSONArray(); - } - JSONArray newPoint = new JSONArray(); - newPoint.add(value.getLon()); - newPoint.add(value.getLat()); - jsonArray.add(newPoint); - jsonArray.toJSONString(); + String lon = value.getLon(); + String lat = value.getLat(); + if(StrUtil.isNotBlank(lon) && StrUtil.isNotBlank(lat)){ + //获取当前正在骑行中的订单 + EtOrder etOrder = etOrderService.getCurrentOrder(device.getSn()); + JSONArray jsonArray; + if(StrUtil.isNotBlank(etOrder.getTripRouteStr())){ + jsonArray = JSON.parseArray(etOrder.getTripRouteStr()); + }else{ + jsonArray = new JSONArray(); + } + JSONArray newPoint = new JSONArray(); + newPoint.add(new BigDecimal(lon)); + newPoint.add(new BigDecimal(lat)); + jsonArray.add(newPoint); + jsonArray.toJSONString(); - log.info("更新行程jsonArray:" +jsonArray.toJSONString()); - etOrder.setTripRouteStr(jsonArray.toJSONString()); - Geometry geometry = GeoUtils.toGeometry(jsonArray.toJSONString()); - String wkt = GeoUtils.wkt(geometry); - etOrder.setTripRoute(wkt); - int updateEtOrder = etOrderService.updateEtOrder(etOrder); - if (updateEtOrder > 0) { - log.info("更新行程线路成功==========================>" +logEntry.getDevName()); - }else{ - log.info("更新行程线路失败==========================>" +logEntry.getDevName()); + log.info("更新行程jsonArray:" +jsonArray.toJSONString()); + etOrder.setTripRouteStr(jsonArray.toJSONString()); + Geometry geometry = GeoUtils.toGeometryByLinearRing(jsonArray.toJSONString()); + String wkt = GeoUtils.wkt(geometry); + etOrder.setTripRoute(wkt); + int updateEtOrder = etOrderService.updateEtOrder(etOrder); + if (updateEtOrder > 0) { + log.info("更新行程线路成功==========================>" +logEntry.getDevName()); + }else{ + log.info("更新行程线路失败==========================>" +logEntry.getDevName()); + } } } - /** 5.低于电量(%)不得骑行,声音播报 */ if(electricQuantity <= model.getLowBatteryReminder()){ //发送低电量播报指令 diff --git a/electripper-common/src/main/java/com/ruoyi/common/utils/map/GeoUtils.java b/electripper-common/src/main/java/com/ruoyi/common/utils/map/GeoUtils.java index 87c8afa..95a0fa4 100644 --- a/electripper-common/src/main/java/com/ruoyi/common/utils/map/GeoUtils.java +++ b/electripper-common/src/main/java/com/ruoyi/common/utils/map/GeoUtils.java @@ -125,6 +125,34 @@ public class GeoUtils { } } + /** + * json转Geometry对象 直线 + * 格式:[[120.356267,26.941506],[120.357168,26.941262],[120.35697,26.940564]] + * */ + public Geometry toGeometryByLinearRing(String json) { + if (StringUtils.isBlank(json)) { + return null; + } + try { + // 将json转成二位数组 + double[][] coordinates = transform(json); + log.info("coordinates:{}", JSON.toJSONString(coordinates)); + // 构建坐标数组 + Coordinate[] points = new Coordinate[coordinates.length]; + for (int i = 0; i < coordinates.length; i++) { + double lon = coordinates[i][0]; + double lat = coordinates[i][1]; + points[i] = new Coordinate(lon, lat); + } + // 创建LineString对象 + LineString lineString = GEOMETRY_FACTORY.createLineString(points); + return lineString; + } catch (Exception e) { + log.warn(e.getMessage(), e); + return null; + } + } + /** * 将json转成二位数组 * */ diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtOrderServiceImpl.java b/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtOrderServiceImpl.java index 5f1a1c1..10a142c 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtOrderServiceImpl.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtOrderServiceImpl.java @@ -267,7 +267,7 @@ public class EtOrderServiceImpl implements IEtOrderService */ @Override public EtOrder getCurrentOrder(String sn) { - if(ObjectUtil.isNotNull(asDeviceService.selectAsDeviceBySn(sn))){ + if(ObjectUtil.isNotNull(asDeviceMapper.selectAsDeviceBySn(sn))){ EtOrder etOrder = new EtOrder(); etOrder.setSn(sn); etOrder.setStatus(ServiceConstants.ORDER_STATUS_RIDING); diff --git a/electripper-system/src/main/resources/mapper/system/EtOrderMapper.xml b/electripper-system/src/main/resources/mapper/system/EtOrderMapper.xml index c74b61f..894fcbe 100644 --- a/electripper-system/src/main/resources/mapper/system/EtOrderMapper.xml +++ b/electripper-system/src/main/resources/mapper/system/EtOrderMapper.xml @@ -76,7 +76,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" o.unlock_time, o.return_time, o.rule_end_time, - o.return_type + o.return_type, + AsText(o.trip_route), + o.trip_route_str FROM et_order o LEFT JOIN