From b022cbf8f957aad335d965c83f23fee74895668f Mon Sep 17 00:00:00 2001 From: 19173159168 Date: Sat, 18 Oct 2025 22:01:02 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E8=BD=A8=E8=BF=B9=E5=9B=9E?= =?UTF-8?q?=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ruoyi/api/DataPushApi.java | 70 ++++ .../controller/ZcOrderMainController.java | 57 +++ .../com/ruoyi/orders/dto/TrajectoryPoint.java | 18 + .../orders/util/OrderTrajectoryResponse.java | 22 ++ .../src/main/resources/application-dev.yml | 3 + .../main/resources/static/img/model_taxi.png | Bin 0 -> 30290 bytes .../templates/orders/order/order.html | 30 ++ .../orders/order/orderTrajectory.html | 334 ++++++++++++++++++ 8 files changed, 534 insertions(+) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/orders/dto/TrajectoryPoint.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/orders/util/OrderTrajectoryResponse.java create mode 100644 ruoyi-admin/src/main/resources/static/img/model_taxi.png create mode 100644 ruoyi-admin/src/main/resources/templates/orders/order/orderTrajectory.html diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/DataPushApi.java b/ruoyi-admin/src/main/java/com/ruoyi/api/DataPushApi.java index 24ebcf6..7977428 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/DataPushApi.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/DataPushApi.java @@ -4,6 +4,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.orders.domain.ZcOrderSub; import com.ruoyi.orders.dto.PushItemRequest; import com.ruoyi.orders.dto.RefundRequest; +import com.ruoyi.orders.dto.TrajectoryPoint; +import com.ruoyi.orders.util.OrderTrajectoryResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -13,6 +15,8 @@ import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; import java.util.Map; @Service @@ -36,6 +40,10 @@ public class DataPushApi { @Value(value = "${dataPush.sendAddUserUrl}") private String sendAddUserUrl; + + @Value(value = "${dataPush.orderTrajectoryUrl}") + private String orderTrajectoryUrl; + /** * 发送添加运营商信息 * @param companyId @@ -219,4 +227,66 @@ public class DataPushApi { } } + + + /** + * 获取订单轨迹 + * @param clientId + * @param startTm + * @param endTm + * @return + */ + public List fetchOrderTrajectory(String clientId, String startTm, String endTm) { + try { + // 准备请求参数 + Map requestBody = new HashMap<>(); + requestBody.put("clientId", clientId); + requestBody.put("startTm", startTm); + requestBody.put("endTm", endTm); + + // 打印请求参数便于调试 + String jsonParams = objectMapper.writeValueAsString(requestBody); + logger.info("订单轨迹请求参数: {}", jsonParams); + + // 发送HTTP POST请求调用订单轨迹接口 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + HttpEntity> requestEntity = new HttpEntity<>(requestBody, headers); + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity response = restTemplate.postForEntity(orderTrajectoryUrl, requestEntity, String.class); + + // 处理订单轨迹接口响应 + if (response.getStatusCode() == HttpStatus.OK) { + String responseBody = response.getBody(); + if (responseBody != null) { + try { + // 使用ObjectMapper解析JSON响应 + OrderTrajectoryResponse result = objectMapper.readValue(responseBody, OrderTrajectoryResponse.class); + if (result.getCode() != null && result.getCode() == 200) { + logger.info("获取订单轨迹成功,客户端ID: {},轨迹点数量: {}", clientId, + result.getData() != null ? result.getData().size() : 0); + return result.getData(); + } else { + logger.error("获取订单轨迹失败,客户端ID: {},响应: {}", clientId, responseBody); + return null; + } + } catch (Exception jsonEx) { + logger.error("解析订单轨迹接口响应异常,客户端ID: {},响应: {}", clientId, responseBody, jsonEx); + return null; + } + } else { + logger.error("订单轨迹接口返回空响应,客户端ID: {}", clientId); + return null; + } + } else { + logger.error("获取订单轨迹失败,客户端ID: {},响应: {}", clientId, response.getBody()); + return null; + } + } catch (Exception e) { + logger.error("调用订单轨迹接口异常,客户端ID: " + clientId, e); + return null; + } + } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/orders/controller/ZcOrderMainController.java b/ruoyi-admin/src/main/java/com/ruoyi/orders/controller/ZcOrderMainController.java index 5895966..6413d04 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/orders/controller/ZcOrderMainController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/orders/controller/ZcOrderMainController.java @@ -4,16 +4,19 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import com.ruoyi.api.DataPushApi; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.operation.domain.Company; import com.ruoyi.operation.service.ICompanyService; import com.ruoyi.orders.domain.ZcOrderCarChange; import com.ruoyi.orders.dto.StatisticsHomeOrder; +import com.ruoyi.orders.dto.TrajectoryPoint; import com.ruoyi.orders.service.IZcOrderCarChangeService; import com.ruoyi.orders.util.OrderStatusEnum; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.GetMapping; @@ -48,6 +51,9 @@ public class ZcOrderMainController extends BaseController private IZcOrderCarChangeService zcOrderCarChangeService; @Autowired private ICompanyService companyService; + @Autowired + private DataPushApi dataPushApi; + @RequiresPermissions("orders:order:view") @GetMapping() @@ -166,6 +172,57 @@ public class ZcOrderMainController extends BaseController return toAjax(flag); } + /** + * 租车订单轨迹 + */ + @GetMapping("/orderTrajectory/{id}") + public String orderTrajectory(@PathVariable("id") Long id, ModelMap mmap) + { + // 调用 + List trajectoryPoints = dataPushApi.fetchOrderTrajectory("15135683068", "2025-10-10 08:08:80", "2025-10-10 16:80:00"); + + +// List trajectoryPoints = new ArrayList<>(); +// double[][] testData = { +// {112.925285, 27.900163}, {112.925285, 27.900163}, {112.925285, 27.900163}, +// {112.925285, 27.900163}, {112.925285, 27.900163}, {112.925285, 27.900163}, +// {112.925285, 27.900163}, {112.925285, 27.900163}, {112.925285, 27.900163}, +// {112.925285, 27.900163}, {112.925285, 27.900163}, {112.925285, 27.900163}, +// {112.925285, 27.900163}, {112.925285, 27.900163}, {112.925285, 27.900163}, +// {112.925285, 27.900163}, {112.925285, 27.900163}, {112.925855, 27.898977}, +// {112.925745, 27.898878}, {112.9261, 27.898802}, {112.926718, 27.898633}, +// {112.927295, 27.898673}, {112.92779, 27.898652}, {112.928342, 27.898685}, +// {112.928483, 27.89868}, {112.929135, 27.898667}, {112.9299, 27.898445}, +// {112.930225, 27.898263}, {112.93024, 27.898233}, {112.930213, 27.898052}, +// {112.929905, 27.897193}, {112.929437, 27.895972}, {112.929417, 27.895775}, +// {112.929483, 27.895702}, {112.929832, 27.895443}, {112.929875, 27.89528}, +// {112.930153, 27.894773}, {112.930123, 27.894712}, {112.929758, 27.894537}, +// {112.929558, 27.894395}, {112.929668, 27.894208}, {112.929712, 27.89416}, +// {112.930053, 27.893827}, {112.930018, 27.89383}, {112.930027, 27.893798}, +// {112.930027, 27.893798}, {112.930027, 27.893798}, {112.93002, 27.893797}, +// {112.93002, 27.893797}, {112.93002, 27.893797}, {112.929775, 27.89305}, +// {112.929775, 27.89305}, {112.92978, 27.893495}, {112.92978, 27.893495} +// }; +// // 创建轨迹点列表 +// for (int i = 0; i < testData.length; i++) { +// TrajectoryPoint point = new TrajectoryPoint(); +// point.setLng(testData[i][0]); // 经度 +// point.setLat(testData[i][1]); // 纬度 +// // 时间戳可以按需添加 +// // point.setTs("2025-10-17 14:" + String.format("%02d", (39 + i)) + ":36.0"); +// trajectoryPoints.add(point); +// } + + // 设置中心点和轨迹点列表 + if (!trajectoryPoints.isEmpty()) { + mmap.put("centerPoint", trajectoryPoints.get(0)); + mmap.put("orderTrajectoryPointList", trajectoryPoints); + mmap.put("orderTrajectoryPointLen", trajectoryPoints.size()-1); + } + return prefix + "/orderTrajectory"; + } + + @PostMapping("/statisticsHomeOrder") @ResponseBody public AjaxResult statisticsHomeOrder(String type) { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/orders/dto/TrajectoryPoint.java b/ruoyi-admin/src/main/java/com/ruoyi/orders/dto/TrajectoryPoint.java new file mode 100644 index 0000000..3cc6c03 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/orders/dto/TrajectoryPoint.java @@ -0,0 +1,18 @@ +package com.ruoyi.orders.dto; + +public class TrajectoryPoint { + + private Double lng; // 经度 + private Double lat; // 纬度 + private String ts; // 时间戳 + + // getter和setter方法 + public Double getLng() { return lng; } + public void setLng(Double lng) { this.lng = lng; } + + public Double getLat() { return lat; } + public void setLat(Double lat) { this.lat = lat; } + + public String getTs() { return ts; } + public void setTs(String ts) { this.ts = ts; } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/orders/util/OrderTrajectoryResponse.java b/ruoyi-admin/src/main/java/com/ruoyi/orders/util/OrderTrajectoryResponse.java new file mode 100644 index 0000000..77bfad9 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/orders/util/OrderTrajectoryResponse.java @@ -0,0 +1,22 @@ +package com.ruoyi.orders.util; + +import com.ruoyi.orders.dto.TrajectoryPoint; + +import java.util.List; + +public class OrderTrajectoryResponse { + + private Integer code; + private List data; + + // getter和setter方法 + public Integer getCode() { return code; } + public void setCode(Integer code) { this.code = code; } + + public List getData() { + return data; + } + public void setData(List data) { + this.data = data; + } +} diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index 3b72e11..35a615f 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -87,7 +87,10 @@ dataPush: refundUrl: http://115.190.8.52:8019/api/payment/refund alirefundUrl: http://115.190.8.52:8019/api/alipay/refund pushItemUrl: http://115.190.8.52:8019/item/sync/item + # 轨迹接口地址 + orderTrajectoryUrl: http://106.14.7.172:8100/device/getHistoryDeviceInfo sendAddCompanyUrl: http://sczx-sync-container:8016/send/companyinfo/ sendAddStoreUrl: http://sczx-sync-container:8016/send/storeinfo/ sendAddUserUrl: http://sczx-sync-container:8016/send/userinfo/ + diff --git a/ruoyi-admin/src/main/resources/static/img/model_taxi.png b/ruoyi-admin/src/main/resources/static/img/model_taxi.png new file mode 100644 index 0000000000000000000000000000000000000000..55488d96e9b11eec40de011aefc652d1e45331ca GIT binary patch literal 30290 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 F{{joWQgHwP literal 0 HcmV?d00001 diff --git a/ruoyi-admin/src/main/resources/templates/orders/order/order.html b/ruoyi-admin/src/main/resources/templates/orders/order/order.html index 433c6ea..1ce8d3b 100644 --- a/ruoyi-admin/src/main/resources/templates/orders/order/order.html +++ b/ruoyi-admin/src/main/resources/templates/orders/order/order.html @@ -263,11 +263,41 @@ field: 'startRentTime', title: '开始计费时间', width: '160px' + }, + { + title: '操作', + align: 'center', + width: '100px', + formatter: function(value, row, index) { + var actions = []; + actions.push('轨迹 '); + return actions.join(''); + } }] }; $.table.init(options); }); + function orderTrajectory(id){ + var url = prefix + "/orderTrajectory/" + id; + top.layer.open({ + type: 2, + area: ['1400px', '800px'], + fix: false, + //不固定 + maxmin: true, + shade: 0.3, + title: "订单轨迹回放", + content: url, + btn: ['关闭'], + // 弹层外区域关闭 + shadeClose: true, + cancel: function(index) { + return true; + } + }); + //$.modal.open("订单轨迹", prefix + "/orderTrajectory/" + id, '1400', '800', false); + } function manualClose(id){ var index = layer.open({ type: 2, // iframe模式 diff --git a/ruoyi-admin/src/main/resources/templates/orders/order/orderTrajectory.html b/ruoyi-admin/src/main/resources/templates/orders/order/orderTrajectory.html new file mode 100644 index 0000000..a627bc6 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/orders/order/orderTrajectory.html @@ -0,0 +1,334 @@ + + + + + + + marker轨迹回放-跟随模式 + + + + + + +
+ + + + + +
+

+

+

当前小车行驶距离:0米

+

+
+
+
+ + +