From 986808af9a428f2a7027847be8d2c4d38b84508f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com>
Date: Mon, 18 May 2026 16:13:04 +0800
Subject: [PATCH] =?UTF-8?q?BI=E8=BF=90=E8=BE=93=E8=BF=90=E8=90=A5=E4=B8=93?=
=?UTF-8?q?=E5=8C=BA=E6=8E=A5=E5=8F=A3=E6=9F=A5=E8=AF=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../BiReportSnapshotMapperSupport.java | 46 ++++-
.../mapper/BiSnapshotWriteMapper.java | 2 +
.../BiReportSnapshotSyncScheduler.java | 2 +-
.../service/BiReportSnapshotSyncService.java | 26 ++-
.../BiTransportOperationZoneReportMapper.java | 20 +++
...BiTransportOperationZoneReportService.java | 21 +++
.../TransportOperationZoneDemoData.java | 164 ++++++++++++++++++
.../WarehouseOperationZoneDemoData.java | 39 ++++-
.../facadeApi/biReport/BiReportApi.java | 19 +-
.../facadeApi/biReport/dto/BiApiResult.java | 2 +-
.../vo/transportZone/TrBarChartVO.java | 27 +++
.../vo/transportZone/TrCapacityCountVO.java | 28 +++
.../vo/transportZone/TrCapacityStatusVO.java | 26 +++
.../transportZone/TrCargoCategoryItemVO.java | 25 +++
.../vo/transportZone/TrCargoCategoryVO.java | 29 ++++
.../TrEnterpriseOperationVO.java | 27 +++
.../vo/transportZone/TrEnterpriseRowVO.java | 34 ++++
.../vo/transportZone/TrMapLegendVO.java | 22 +++
.../vo/transportZone/TrMapNodeDetailVO.java | 43 +++++
.../vo/transportZone/TrMapNodeVO.java | 33 ++++
.../vo/transportZone/TrMonthValuePointVO.java | 22 +++
.../vo/transportZone/TrOrderStatisticsVO.java | 25 +++
.../vo/transportZone/TrOrderTypeChartVO.java | 28 +++
.../transportZone/TrOrderTypeMonthItemVO.java | 27 +++
.../vo/transportZone/TrTransportStatsVO.java | 31 ++++
.../transportZone/TrTransportSummaryVO.java | 28 +++
.../vo/transportZone/TrTypedChartVO.java | 30 ++++
.../vo/transportZone/TrVehicleMapVO.java | 27 +++
.../TransportOperationZoneVO.java | 80 +++++++++
.../WarehouseOperationZoneVO.java | 5 +-
.../vo/warehouseZone/WhMapNodeVO.java | 30 ++++
.../vo/warehouseZone/WhWarehouseMapVO.java | 24 +++
.../biSnapshotSync/BiSnapshotWriteMapper.xml | 5 +
.../BiTransportOperationZoneReportMapper.xml | 13 ++
34 files changed, 992 insertions(+), 18 deletions(-)
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/domain/biTransportOperationZone/repository/mapper/BiTransportOperationZoneReportMapper.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/domain/biTransportOperationZone/service/BiTransportOperationZoneReportService.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/domain/biTransportOperationZone/support/TransportOperationZoneDemoData.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrBarChartVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCapacityCountVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCapacityStatusVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCargoCategoryItemVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCargoCategoryVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrEnterpriseOperationVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrEnterpriseRowVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrMapLegendVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrMapNodeDetailVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrMapNodeVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrMonthValuePointVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderStatisticsVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderTypeChartVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderTypeMonthItemVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrTransportStatsVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrTransportSummaryVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrTypedChartVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrVehicleMapVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TransportOperationZoneVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhMapNodeVO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhWarehouseMapVO.java
create mode 100644 mhd-bi/src/main/resources/mapper/biTransportOperationZone/BiTransportOperationZoneReportMapper.xml
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiReportSnapshotMapperSupport.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiReportSnapshotMapperSupport.java
index 6eab8296d..f9bbed264 100644
--- a/mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiReportSnapshotMapperSupport.java
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiReportSnapshotMapperSupport.java
@@ -6,6 +6,7 @@ import com.mhd.bi.interfaces.facadeApi.biReport.vo.CustomerContributionRankVO;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.WarehouseTransportSituationVO;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.overall.*;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.platform.*;
+import com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone.*;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.warehouseZone.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -161,9 +162,48 @@ public final class BiReportSnapshotMapperSupport {
.utilizationRate(WhRealTimeGaugeVO.builder().value("").comparison("").trend("").build())
.rentalRate(WhRealTimeGaugeVO.builder().value("").comparison("").trend("").build())
.build())
- .mapPopup(WhMapPopupVO.builder()
- .warehouseName("").totalArea("").totalSku(0).todayOrders(0)
- .utilizationRate("").rentalRate("").build())
+ .map(WhWarehouseMapVO.builder()
+ .legend("")
+ .nodes(Collections.emptyList())
+ .build())
+ .build();
+ }
+
+ public static TransportOperationZoneVO emptyTransportOperationZone() {
+ TrCapacityCountVO emptyCount = TrCapacityCountVO.builder()
+ .total(0).todayNew(0).yesterdayNew(0).build();
+ return TransportOperationZoneVO.builder()
+ .updateTime("")
+ .dashboardTitle("")
+ .activeTab("")
+ .orderStatistics(TrOrderStatisticsVO.builder().title("").total(0L).trend("").build())
+ .transportStats(TrTransportStatsVO.builder()
+ .title("").tripCount(0).volume(0d).volumeUnit("").build())
+ .orderTypeChart(TrOrderTypeChartVO.builder()
+ .title("").type("").data(Collections.emptyList()).build())
+ .tripCountTrend(TrTypedChartVO.builder()
+ .title("").type("").unit(null).data(Collections.emptyList()).build())
+ .orderTrend(TrTypedChartVO.builder()
+ .title("").type("").unit("").data(Collections.emptyList()).build())
+ .volumeTrend(TrTypedChartVO.builder()
+ .title("").type("").unit("").data(Collections.emptyList()).build())
+ .map(TrVehicleMapVO.builder()
+ .title("")
+ .legend(TrMapLegendVO.builder().idle(0).working(0).build())
+ .nodes(Collections.emptyList())
+ .build())
+ .enterpriseOperation(TrEnterpriseOperationVO.builder()
+ .title("").columns(Collections.emptyList()).list(Collections.emptyList()).build())
+ .capacityStatus(TrCapacityStatusVO.builder()
+ .title("").staff(emptyCount).vehicles(emptyCount).build())
+ .cargoCategory(TrCargoCategoryVO.builder()
+ .title("").totalOrders("").data(Collections.emptyList()).build())
+ .onTimeRate(TrTypedChartVO.builder()
+ .title("").type("").unit("").data(Collections.emptyList()).build())
+ .vehicleUtilization(TrBarChartVO.builder()
+ .title("").unit("").data(Collections.emptyList()).build())
+ .transportSummary(TrTransportSummaryVO.builder()
+ .title("").safeMileage("").avgDeliveryTime("").build())
.build();
}
}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/repository/mapper/BiSnapshotWriteMapper.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/repository/mapper/BiSnapshotWriteMapper.java
index 36113cafc..4624dbf5f 100644
--- a/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/repository/mapper/BiSnapshotWriteMapper.java
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/repository/mapper/BiSnapshotWriteMapper.java
@@ -16,4 +16,6 @@ public interface BiSnapshotWriteMapper {
int insertOverallOperationSnapshot(@Param("payloadJson") String payloadJson, @Param("remark") String remark);
int insertWarehouseOperationZoneSnapshot(@Param("payloadJson") String payloadJson, @Param("remark") String remark);
+
+ int insertTransportOperationZoneSnapshot(@Param("payloadJson") String payloadJson, @Param("remark") String remark);
}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/scheduler/BiReportSnapshotSyncScheduler.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/scheduler/BiReportSnapshotSyncScheduler.java
index 14d018aef..6c6bbf14d 100644
--- a/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/scheduler/BiReportSnapshotSyncScheduler.java
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/scheduler/BiReportSnapshotSyncScheduler.java
@@ -8,7 +8,7 @@ import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
- * 定时将业务快照写入 BI_COMPREHENSIVE_SNAPSHOT / BI_WAREHOUSE_TRANSPORT_SNAPSHOT / BI_PLATFORM_SURVEILLANCE_SNAPSHOT / BI_OVERALL_OPERATION_SNAPSHOT / BI_WAREHOUSE_OPERATION_ZONE_SNAPSHOT。
+ * 定时将业务快照写入 BI_COMPREHENSIVE_SNAPSHOT / BI_WAREHOUSE_TRANSPORT_SNAPSHOT / BI_PLATFORM_SURVEILLANCE_SNAPSHOT / BI_OVERALL_OPERATION_SNAPSHOT / BI_WAREHOUSE_OPERATION_ZONE_SNAPSHOT / BI_TRANSPORT_OPERATION_ZONE_SNAPSHOT。
*
默认关闭,需在配置中设置 {@code mhd.bi.snapshot-sync.enabled=true}。
*/
@Slf4j
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/service/BiReportSnapshotSyncService.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/service/BiReportSnapshotSyncService.java
index 52ab52f08..ad47fc137 100644
--- a/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/service/BiReportSnapshotSyncService.java
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/service/BiReportSnapshotSyncService.java
@@ -3,11 +3,13 @@ package com.mhd.bi.domain.biSnapshotSync.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mhd.bi.domain.biSnapshotSync.repository.mapper.BiSnapshotWriteMapper;
import com.mhd.bi.domain.biSnapshotSync.support.BiSnapshotWeeklyRandomDataBuilder;
+import com.mhd.bi.domain.biTransportOperationZone.support.TransportOperationZoneDemoData;
import com.mhd.bi.domain.biWarehouseOperationZone.support.WarehouseOperationZoneDemoData;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.ComprehensiveSituationVO;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.WarehouseTransportSituationVO;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.overall.OverallOperationSituationVO;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.platform.PlatformSurveillanceVO;
+import com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone.TransportOperationZoneVO;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.warehouseZone.WarehouseOperationZoneVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -16,7 +18,7 @@ import org.springframework.stereotype.Service;
import java.util.Random;
/**
- * BI 快照表定时同步(综合态势 / 仓储运输 / 月台监测 / 总体运营态势 / 仓储运营专区)。
+ * BI 快照表定时同步(综合态势 / 仓储运输 / 月台监测 / 总体运营态势 / 仓储运营专区 / 运输运营专区)。
* 当前(临时):{@code build*} 使用 {@link BiSnapshotWeeklyRandomDataBuilder},每次执行使用新的 {@link Random},
* 故同一天多次手动触发、以及每次定时任务执行,生成的模拟数据均不相同(仍在基准 ±20% 内)。
* 后续改造:在各 {@code build*} 中改为查库/Feign 聚合真实业务并组装 VO。
@@ -40,6 +42,7 @@ public class BiReportSnapshotSyncService {
syncPlatformSurveillanceSnapshot();
syncOverallOperationSnapshot();
syncWarehouseOperationZoneSnapshot();
+ syncTransportOperationZoneSnapshot();
}
public void syncComprehensiveSnapshot() {
@@ -142,4 +145,25 @@ public class BiReportSnapshotSyncService {
protected WarehouseOperationZoneVO buildWarehouseOperationZoneSnapshot() {
return WarehouseOperationZoneDemoData.build();
}
+
+ public void syncTransportOperationZoneSnapshot() {
+ try {
+ TransportOperationZoneVO vo = buildTransportOperationZoneSnapshot();
+ String json = objectMapper.writeValueAsString(vo);
+ int rows = biSnapshotWriteMapper.insertTransportOperationZoneSnapshot(json, REMARK_SYNC);
+ if (rows < 1) {
+ log.warn("BI 运输运营专区快照 INSERT 影响行数为 {},请确认 NGWL_TEST_BI.BI_TRANSPORT_OPERATION_ZONE_SNAPSHOT", rows);
+ }
+ log.info("BI 运输运营专区快照已写入, affectedRows={}", rows);
+ } catch (Exception e) {
+ log.error("BI 运输运营专区快照同步失败", e);
+ }
+ }
+
+ /**
+ * TODO 业务落地:改为查询真实数据组装 VO。当前为 {@link TransportOperationZoneDemoData} 静态示例。
+ */
+ protected TransportOperationZoneVO buildTransportOperationZoneSnapshot() {
+ return TransportOperationZoneDemoData.build();
+ }
}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biTransportOperationZone/repository/mapper/BiTransportOperationZoneReportMapper.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biTransportOperationZone/repository/mapper/BiTransportOperationZoneReportMapper.java
new file mode 100644
index 000000000..589f54e72
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biTransportOperationZone/repository/mapper/BiTransportOperationZoneReportMapper.java
@@ -0,0 +1,20 @@
+package com.mhd.bi.domain.biTransportOperationZone.repository.mapper;
+
+import com.mhd.bi.domain.biReport.support.BiReportSnapshotMapperSupport;
+import com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone.TransportOperationZoneVO;
+
+/**
+ * 运输运营专区:取 NGWL_TEST_BI.BI_TRANSPORT_OPERATION_ZONE_SNAPSHOT 最新 PAYLOAD_JSON 并解析。
+ */
+public interface BiTransportOperationZoneReportMapper {
+
+ String selectLatestPayloadJson();
+
+ default TransportOperationZoneVO loadLatestTransportOperationZone() {
+ return BiReportSnapshotMapperSupport.parsePayload(
+ selectLatestPayloadJson(),
+ TransportOperationZoneVO.class,
+ BiReportSnapshotMapperSupport::emptyTransportOperationZone,
+ "运输运营专区");
+ }
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biTransportOperationZone/service/BiTransportOperationZoneReportService.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biTransportOperationZone/service/BiTransportOperationZoneReportService.java
new file mode 100644
index 000000000..b9a72802b
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biTransportOperationZone/service/BiTransportOperationZoneReportService.java
@@ -0,0 +1,21 @@
+package com.mhd.bi.domain.biTransportOperationZone.service;
+
+import com.mhd.bi.domain.biTransportOperationZone.repository.mapper.BiTransportOperationZoneReportMapper;
+import com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone.TransportOperationZoneVO;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * 南光物流业务经营分析 · 运输运营专区
+ */
+@Service
+public class BiTransportOperationZoneReportService {
+
+ @Resource
+ private BiTransportOperationZoneReportMapper biTransportOperationZoneReportMapper;
+
+ public TransportOperationZoneVO loadLatestTransportOperationZone() {
+ return biTransportOperationZoneReportMapper.loadLatestTransportOperationZone();
+ }
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biTransportOperationZone/support/TransportOperationZoneDemoData.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biTransportOperationZone/support/TransportOperationZoneDemoData.java
new file mode 100644
index 000000000..c7f57ba9a
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biTransportOperationZone/support/TransportOperationZoneDemoData.java
@@ -0,0 +1,164 @@
+package com.mhd.bi.domain.biTransportOperationZone.support;
+
+import com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone.*;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 运输运营专区快照演示数据(对齐大屏示例 JSON;后续可改为真实聚合)。
+ */
+public final class TransportOperationZoneDemoData {
+
+ private static final DateTimeFormatter UPDATE_TIME_FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+ private TransportOperationZoneDemoData() {
+ }
+
+ public static TransportOperationZoneVO build() {
+ List orderTypeData = Arrays.asList(
+ TrOrderTypeMonthItemVO.builder().month("1月").crossBorder(30).domestic(25).build(),
+ TrOrderTypeMonthItemVO.builder().month("2月").crossBorder(40).domestic(35).build(),
+ TrOrderTypeMonthItemVO.builder().month("3月").crossBorder(20).domestic(30).build(),
+ TrOrderTypeMonthItemVO.builder().month("4月").crossBorder(35).domestic(40).build(),
+ TrOrderTypeMonthItemVO.builder().month("5月").crossBorder(50).domestic(45).build(),
+ TrOrderTypeMonthItemVO.builder().month("6月").crossBorder(60).domestic(55).build(),
+ TrOrderTypeMonthItemVO.builder().month("7月").crossBorder(70).domestic(65).build()
+ );
+
+ List tripTrend = Arrays.asList(
+ point("1月", 120), point("2月", 150), point("3月", 220),
+ point("4月", 100), point("5月", 140), point("6月", 180)
+ );
+
+ List orderTrend = Arrays.asList(
+ point("1月", 100), point("2月", 140), point("3月", 230),
+ point("4月", 100), point("5月", 140), point("6月", 190)
+ );
+
+ List volumeTrend = Arrays.asList(
+ point("1月", 95), point("2月", 90), point("3月", 80),
+ point("4月", 65), point("5月", 92), point("6月", 88)
+ );
+
+ List onTimeRate = Arrays.asList(
+ point("1月", 98), point("2月", 96), point("3月", 85),
+ point("4月", 70), point("5月", 92), point("6月", 90)
+ );
+
+ List vehicleUtil = Arrays.asList(
+ point("1月", 600), point("2月", 460), point("3月", 390),
+ point("4月", 470), point("5月", 450), point("6月", 620)
+ );
+
+ List enterpriseList = Arrays.asList(
+ row("NO.1", "供应商A", "268.25万", "2400单", 95),
+ row("NO.2", "供应商B", "258.15万", "1800单", 98),
+ row("NO.3", "供应商C", "242.32万", "1200单", 13),
+ row("NO.4", "供应商D", "231.54万", "800单", 12),
+ row("NO.5", "供应商E", "220.90万", "567单", 15)
+ );
+
+ List cargoItems = Arrays.asList(
+ TrCargoCategoryItemVO.builder().name("危化").value(25).color("green").build(),
+ TrCargoCategoryItemVO.builder().name("普货").value(25).color("blue").build(),
+ TrCargoCategoryItemVO.builder().name("冻品").value(50).color("orange").build()
+ );
+
+ TrMapNodeVO mapNode = TrMapNodeVO.builder()
+ .id(1L)
+ .name("通宇作业车辆")
+ .location(Arrays.asList(113.55, 22.25))
+ .status("working")
+ .detail(TrMapNodeDetailVO.builder()
+ .title("作业详情")
+ .licensePlate("粤A88888")
+ .businessUnit("通宇")
+ .loadingPlace("珠海")
+ .destination("澳门")
+ .currentLocation("珠海市")
+ .updateTime("2026年4月15日 17:52")
+ .build())
+ .build();
+
+ return TransportOperationZoneVO.builder()
+ .updateTime(LocalDateTime.now().format(UPDATE_TIME_FMT))
+ .dashboardTitle("南光物流业务经营分析")
+ .activeTab("运输运营专区")
+ .orderStatistics(TrOrderStatisticsVO.builder()
+ .title("订单统计")
+ .total(4361L)
+ .trend("+12.5%")
+ .build())
+ .transportStats(TrTransportStatsVO.builder()
+ .title("运输统计")
+ .tripCount(240)
+ .volume(2.6)
+ .volumeUnit("万吨")
+ .build())
+ .orderTypeChart(TrOrderTypeChartVO.builder()
+ .title("订单类型")
+ .type("area")
+ .data(orderTypeData)
+ .build())
+ .tripCountTrend(chart("车次趋势", "line", null, tripTrend))
+ .orderTrend(chart("订单趋势", "area", "单", orderTrend))
+ .volumeTrend(chart("货量趋势", "area", "%", volumeTrend))
+ .map(TrVehicleMapVO.builder()
+ .title("车辆实时监控")
+ .legend(TrMapLegendVO.builder().idle(80).working(200).build())
+ .nodes(Collections.singletonList(mapNode))
+ .build())
+ .enterpriseOperation(TrEnterpriseOperationVO.builder()
+ .title("企业运营")
+ .columns(Arrays.asList("序号", "企业名称", "货运量", "处理单量", "准时配送率"))
+ .list(enterpriseList)
+ .build())
+ .capacityStatus(TrCapacityStatusVO.builder()
+ .title("运力情况")
+ .staff(capacityCount(718, 0, 0))
+ .vehicles(capacityCount(507, 0, 0))
+ .build())
+ .cargoCategory(TrCargoCategoryVO.builder()
+ .title("货物品类")
+ .totalOrders("1000单")
+ .data(cargoItems)
+ .build())
+ .onTimeRate(chart("准时配送率", "line", "%", onTimeRate))
+ .vehicleUtilization(TrBarChartVO.builder()
+ .title("出车利用率")
+ .unit("车次/辆")
+ .data(vehicleUtil)
+ .build())
+ .transportSummary(TrTransportSummaryVO.builder()
+ .title("运输统计")
+ .safeMileage("240万公里")
+ .avgDeliveryTime("平均4小时送达")
+ .build())
+ .build();
+ }
+
+ private static TrMonthValuePointVO point(String month, int value) {
+ return TrMonthValuePointVO.builder().month(month).value(value).build();
+ }
+
+ private static TrTypedChartVO chart(String title, String type, String unit, List data) {
+ return TrTypedChartVO.builder().title(title).type(type).unit(unit).data(data).build();
+ }
+
+ private static TrCapacityCountVO capacityCount(int total, int todayNew, int yesterdayNew) {
+ return TrCapacityCountVO.builder()
+ .total(total).todayNew(todayNew).yesterdayNew(yesterdayNew).build();
+ }
+
+ private static TrEnterpriseRowVO row(String rank, String name, String volume,
+ String processedOrders, int onTimeRate) {
+ return TrEnterpriseRowVO.builder()
+ .rank(rank).name(name).volume(volume)
+ .processedOrders(processedOrders).onTimeRate(onTimeRate)
+ .build();
+ }
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biWarehouseOperationZone/support/WarehouseOperationZoneDemoData.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biWarehouseOperationZone/support/WarehouseOperationZoneDemoData.java
index 4861cb9b0..4e63389d9 100644
--- a/mhd-bi/src/main/java/com/mhd/bi/domain/biWarehouseOperationZone/support/WarehouseOperationZoneDemoData.java
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biWarehouseOperationZone/support/WarehouseOperationZoneDemoData.java
@@ -126,13 +126,38 @@ public final class WarehouseOperationZoneDemoData {
.trend("up")
.build())
.build())
- .mapPopup(WhMapPopupVO.builder()
- .warehouseName("通宇保税仓")
- .totalArea("2000m2")
- .totalSku(668)
- .todayOrders(237)
- .utilizationRate("85%")
- .rentalRate("37.1%")
+ .map(WhWarehouseMapVO.builder()
+ .legend("仓库")
+ .nodes(Arrays.asList(
+ mapNode(1L, "君华仓", 113.52, 22.30,
+ "君华保税仓", "12000m²", 520, 2400, "82%", "36.5%"),
+ mapNode(2L, "通宇仓", 113.55, 22.25,
+ "通宇保税仓", "2000m²", 668, 237, "85%", "37.1%"),
+ mapNode(3L, "横琴仓", 113.54, 22.12,
+ "横琴保税仓", "3500m²", 445, 1200, "78%", "42.0%"),
+ mapNode(4L, "新南仓", 113.58, 22.20,
+ "新南保税仓", "2800m²", 390, 800, "80%", "35.8%"),
+ mapNode(5L, "谷丰仓", 113.48, 22.22,
+ "谷丰保税仓", "4500m²", 512, 567, "76%", "33.2%")
+ ))
+ .build())
+ .build();
+ }
+
+ private static WhMapNodeVO mapNode(long id, String name, double lng, double lat,
+ String warehouseName, String totalArea, int totalSku,
+ int todayOrders, String utilizationRate, String rentalRate) {
+ return WhMapNodeVO.builder()
+ .id(id)
+ .name(name)
+ .location(Arrays.asList(lng, lat))
+ .detail(WhMapPopupVO.builder()
+ .warehouseName(warehouseName)
+ .totalArea(totalArea)
+ .totalSku(totalSku)
+ .todayOrders(todayOrders)
+ .utilizationRate(utilizationRate)
+ .rentalRate(rentalRate)
.build())
.build();
}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/BiReportApi.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/BiReportApi.java
index 5ac025e9c..f57922b21 100644
--- a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/BiReportApi.java
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/BiReportApi.java
@@ -4,6 +4,7 @@ import com.mhd.bi.domain.biSnapshotSync.service.BiReportSnapshotSyncService;
import com.mhd.bi.domain.biComprehensive.service.BiComprehensiveReportService;
import com.mhd.bi.domain.biPlatformSurveillance.service.BiPlatformSurveillanceReportService;
import com.mhd.bi.domain.biOverallOperation.service.BiOverallOperationReportService;
+import com.mhd.bi.domain.biTransportOperationZone.service.BiTransportOperationZoneReportService;
import com.mhd.bi.domain.biWarehouseOperationZone.service.BiWarehouseOperationZoneReportService;
import com.mhd.bi.domain.biWarehouseTransport.service.BiWarehouseTransportReportService;
import com.mhd.bi.interfaces.facadeApi.biReport.dto.BiApiResult;
@@ -11,6 +12,7 @@ import com.mhd.bi.interfaces.facadeApi.biReport.vo.ComprehensiveSituationVO;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.WarehouseTransportSituationVO;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.overall.OverallOperationSituationVO;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.platform.PlatformSurveillanceVO;
+import com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone.TransportOperationZoneVO;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.warehouseZone.WarehouseOperationZoneVO;
import com.mhd.common.core.web.controller.BaseController;
import io.swagger.annotations.Api;
@@ -48,11 +50,14 @@ public class BiReportApi extends BaseController {
@Autowired
private BiWarehouseOperationZoneReportService biWarehouseOperationZoneReportService;
+ @Autowired
+ private BiTransportOperationZoneReportService biTransportOperationZoneReportService;
+
@Autowired
private BiReportSnapshotSyncService biReportSnapshotSyncService;
- @ApiOperation(value = "手动触发快照同步", notes = "立即写入各 BI 快照表(综合、仓储运输、月台监测、总体运营、仓储运营专区);须带 X-BI-Access-Token")
+ @ApiOperation(value = "手动触发快照同步", notes = "立即写入各 BI 快照表(综合、仓储运输、月台监测、总体运营、仓储运营专区、运输运营专区);须带 X-BI-Access-Token")
@PostMapping("/snapshotSync/run")
public BiApiResult runSnapshotSyncOnce() {
biReportSnapshotSyncService.syncAllSnapshots();
@@ -88,7 +93,7 @@ public class BiReportApi extends BaseController {
PlatformSurveillanceVO data = biPlatformSurveillanceReportService.loadLatestPlatformSurveillance();
return BiApiResult.ok(data);
}
-
+//园区物流大屏接口----------------------------------------------------------------------
/**
* 总体运营态势
*/
@@ -108,4 +113,14 @@ public class BiReportApi extends BaseController {
WarehouseOperationZoneVO data = biWarehouseOperationZoneReportService.loadLatestWarehouseOperationZone();
return BiApiResult.ok(data);
}
+
+ /**
+ * 运输运营专区(大屏「运输运营专区」Tab)
+ */
+ @ApiOperation(value = "运输运营专区查询", notes = "返回 DEL_FLAG=1 且 CREATE_TIME 最新的一条整包 JSON 解析结果")
+ @GetMapping("/transportOperationZone")
+ public BiApiResult transportOperationZone() {
+ TransportOperationZoneVO data = biTransportOperationZoneReportService.loadLatestTransportOperationZone();
+ return BiApiResult.ok(data);
+ }
}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/dto/BiApiResult.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/dto/BiApiResult.java
index ce816be28..31fcbfd49 100644
--- a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/dto/BiApiResult.java
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/dto/BiApiResult.java
@@ -14,7 +14,7 @@ public class BiApiResult {
private int code = 200;
- private String msg = "操作成功";
+ private String message = "操作成功";
private T data;
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrBarChartVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrBarChartVO.java
new file mode 100644
index 000000000..92b9e1e50
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrBarChartVO.java
@@ -0,0 +1,27 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-运输运营专区-柱状图")
+public class TrBarChartVO {
+
+ @ApiModelProperty("标题")
+ private String title;
+
+ @ApiModelProperty("单位")
+ private String unit;
+
+ @ApiModelProperty("数据")
+ private List data;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCapacityCountVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCapacityCountVO.java
new file mode 100644
index 000000000..36ddc94f3
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCapacityCountVO.java
@@ -0,0 +1,28 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-运输运营专区-运力计数")
+public class TrCapacityCountVO {
+
+ @ApiModelProperty("总数")
+ private Integer total;
+
+ @JsonProperty("today_new")
+ @ApiModelProperty("今日新增")
+ private Integer todayNew;
+
+ @JsonProperty("yesterday_new")
+ @ApiModelProperty("昨日新增")
+ private Integer yesterdayNew;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCapacityStatusVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCapacityStatusVO.java
new file mode 100644
index 000000000..6b72c7c13
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCapacityStatusVO.java
@@ -0,0 +1,26 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-运输运营专区-运力情况")
+public class TrCapacityStatusVO {
+
+ @ApiModelProperty("标题")
+ private String title;
+
+ @ApiModelProperty("承运人")
+ private TrCapacityCountVO staff;
+
+ @ApiModelProperty("车辆")
+ private TrCapacityCountVO vehicles;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCargoCategoryItemVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCargoCategoryItemVO.java
new file mode 100644
index 000000000..524c37b2d
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCargoCategoryItemVO.java
@@ -0,0 +1,25 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-运输运营专区-货物品类项")
+public class TrCargoCategoryItemVO {
+
+ @ApiModelProperty("品类名称")
+ private String name;
+
+ @ApiModelProperty("占比")
+ private Integer value;
+
+ @ApiModelProperty("颜色标识")
+ private String color;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCargoCategoryVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCargoCategoryVO.java
new file mode 100644
index 000000000..eb227e479
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCargoCategoryVO.java
@@ -0,0 +1,29 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-运输运营专区-货物品类")
+public class TrCargoCategoryVO {
+
+ @ApiModelProperty("标题")
+ private String title;
+
+ @JsonProperty("total_orders")
+ @ApiModelProperty("订单总量展示")
+ private String totalOrders;
+
+ @ApiModelProperty("品类数据")
+ private List data;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrEnterpriseOperationVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrEnterpriseOperationVO.java
new file mode 100644
index 000000000..f40a719cf
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrEnterpriseOperationVO.java
@@ -0,0 +1,27 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-运输运营专区-企业运营")
+public class TrEnterpriseOperationVO {
+
+ @ApiModelProperty("标题")
+ private String title;
+
+ @ApiModelProperty("表头")
+ private List columns;
+
+ @ApiModelProperty("列表")
+ private List list;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrEnterpriseRowVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrEnterpriseRowVO.java
new file mode 100644
index 000000000..b0d660a52
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrEnterpriseRowVO.java
@@ -0,0 +1,34 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-运输运营专区-企业运营行")
+public class TrEnterpriseRowVO {
+
+ @ApiModelProperty("排名")
+ private String rank;
+
+ @ApiModelProperty("企业名称")
+ private String name;
+
+ @ApiModelProperty("货运量")
+ private String volume;
+
+ @JsonProperty("processed_orders")
+ @ApiModelProperty("处理单量")
+ private String processedOrders;
+
+ @JsonProperty("on_time_rate")
+ @ApiModelProperty("准时配送率")
+ private Integer onTimeRate;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrMapLegendVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrMapLegendVO.java
new file mode 100644
index 000000000..577f818e5
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrMapLegendVO.java
@@ -0,0 +1,22 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-运输运营专区-地图图例")
+public class TrMapLegendVO {
+
+ @ApiModelProperty("空闲车辆数")
+ private Integer idle;
+
+ @ApiModelProperty("作业车辆数")
+ private Integer working;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrMapNodeDetailVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrMapNodeDetailVO.java
new file mode 100644
index 000000000..3914d1f7f
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrMapNodeDetailVO.java
@@ -0,0 +1,43 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-运输运营专区-地图节点详情")
+public class TrMapNodeDetailVO {
+
+ @ApiModelProperty("标题")
+ private String title;
+
+ @JsonProperty("license_plate")
+ @ApiModelProperty("车牌")
+ private String licensePlate;
+
+ @JsonProperty("business_unit")
+ @ApiModelProperty("经营单位")
+ private String businessUnit;
+
+ @JsonProperty("loading_place")
+ @ApiModelProperty("装货地")
+ private String loadingPlace;
+
+ @ApiModelProperty("目的地")
+ private String destination;
+
+ @JsonProperty("current_location")
+ @ApiModelProperty("当前位置")
+ private String currentLocation;
+
+ @JsonProperty("update_time")
+ @ApiModelProperty("更新时间")
+ private String updateTime;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrMapNodeVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrMapNodeVO.java
new file mode 100644
index 000000000..7041d3abc
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrMapNodeVO.java
@@ -0,0 +1,33 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-运输运营专区-地图节点")
+public class TrMapNodeVO {
+
+ @ApiModelProperty("节点ID")
+ private Long id;
+
+ @ApiModelProperty("名称")
+ private String name;
+
+ @ApiModelProperty("坐标 [经度, 纬度]")
+ private List location;
+
+ @ApiModelProperty("状态:idle / working")
+ private String status;
+
+ @ApiModelProperty("详情")
+ private TrMapNodeDetailVO detail;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrMonthValuePointVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrMonthValuePointVO.java
new file mode 100644
index 000000000..3ae8afe2f
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrMonthValuePointVO.java
@@ -0,0 +1,22 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-运输运营专区-月度数值点")
+public class TrMonthValuePointVO {
+
+ @ApiModelProperty("月份")
+ private String month;
+
+ @ApiModelProperty("数值")
+ private Integer value;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderStatisticsVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderStatisticsVO.java
new file mode 100644
index 000000000..0eba9a94a
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderStatisticsVO.java
@@ -0,0 +1,25 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-运输运营专区-订单统计")
+public class TrOrderStatisticsVO {
+
+ @ApiModelProperty("标题")
+ private String title;
+
+ @ApiModelProperty("订单总数")
+ private Long total;
+
+ @ApiModelProperty("环比增长率")
+ private String trend;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderTypeChartVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderTypeChartVO.java
new file mode 100644
index 000000000..b6cd8770e
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderTypeChartVO.java
@@ -0,0 +1,28 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-运输运营专区-订单类型图")
+public class TrOrderTypeChartVO {
+
+ @ApiModelProperty("标题")
+ private String title;
+
+ @ApiModelProperty("图表类型")
+ private String type;
+
+ @ApiModelProperty("数据")
+ private List data;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderTypeMonthItemVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderTypeMonthItemVO.java
new file mode 100644
index 000000000..aa28cd802
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderTypeMonthItemVO.java
@@ -0,0 +1,27 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-运输运营专区-订单类型月度项")
+public class TrOrderTypeMonthItemVO {
+
+ @ApiModelProperty("月份")
+ private String month;
+
+ @JsonProperty("cross_border")
+ @ApiModelProperty("跨境")
+ private Integer crossBorder;
+
+ @ApiModelProperty("国内")
+ private Integer domestic;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrTransportStatsVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrTransportStatsVO.java
new file mode 100644
index 000000000..6271a43ae
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrTransportStatsVO.java
@@ -0,0 +1,31 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-运输运营专区-运输统计")
+public class TrTransportStatsVO {
+
+ @ApiModelProperty("标题")
+ private String title;
+
+ @JsonProperty("trip_count")
+ @ApiModelProperty("运输车次")
+ private Integer tripCount;
+
+ @ApiModelProperty("运输货量")
+ private Double volume;
+
+ @JsonProperty("volume_unit")
+ @ApiModelProperty("货量单位")
+ private String volumeUnit;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrTransportSummaryVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrTransportSummaryVO.java
new file mode 100644
index 000000000..d2b3f9489
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrTransportSummaryVO.java
@@ -0,0 +1,28 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-运输运营专区-运输统计总结")
+public class TrTransportSummaryVO {
+
+ @ApiModelProperty("标题")
+ private String title;
+
+ @JsonProperty("safe_mileage")
+ @ApiModelProperty("安全里程")
+ private String safeMileage;
+
+ @JsonProperty("avg_delivery_time")
+ @ApiModelProperty("平均送达时间")
+ private String avgDeliveryTime;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrTypedChartVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrTypedChartVO.java
new file mode 100644
index 000000000..f39268d00
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrTypedChartVO.java
@@ -0,0 +1,30 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-运输运营专区-带类型图表")
+public class TrTypedChartVO {
+
+ @ApiModelProperty("标题")
+ private String title;
+
+ @ApiModelProperty("图表类型")
+ private String type;
+
+ @ApiModelProperty("单位")
+ private String unit;
+
+ @ApiModelProperty("数据")
+ private List data;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrVehicleMapVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrVehicleMapVO.java
new file mode 100644
index 000000000..cac546be3
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrVehicleMapVO.java
@@ -0,0 +1,27 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-运输运营专区-车辆实时监控地图")
+public class TrVehicleMapVO {
+
+ @ApiModelProperty("标题")
+ private String title;
+
+ @ApiModelProperty("图例")
+ private TrMapLegendVO legend;
+
+ @ApiModelProperty("节点")
+ private List nodes;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TransportOperationZoneVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TransportOperationZoneVO.java
new file mode 100644
index 000000000..54c6b4a0e
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TransportOperationZoneVO.java
@@ -0,0 +1,80 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 南光物流业务经营分析 · 运输运营专区(整包 data 与快照 PAYLOAD_JSON 一致)
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-运输运营专区")
+public class TransportOperationZoneVO {
+
+ @ApiModelProperty("数据更新时间")
+ private String updateTime;
+
+ @ApiModelProperty("大屏标题")
+ private String dashboardTitle;
+
+ @ApiModelProperty("当前 Tab")
+ private String activeTab;
+
+ @JsonProperty("order_statistics")
+ @ApiModelProperty("订单统计")
+ private TrOrderStatisticsVO orderStatistics;
+
+ @JsonProperty("transport_stats")
+ @ApiModelProperty("运输统计")
+ private TrTransportStatsVO transportStats;
+
+ @JsonProperty("order_type_chart")
+ @ApiModelProperty("订单类型面积图")
+ private TrOrderTypeChartVO orderTypeChart;
+
+ @JsonProperty("trip_count_trend")
+ @ApiModelProperty("车次趋势折线图")
+ private TrTypedChartVO tripCountTrend;
+
+ @JsonProperty("order_trend")
+ @ApiModelProperty("订单趋势面积图")
+ private TrTypedChartVO orderTrend;
+
+ @JsonProperty("volume_trend")
+ @ApiModelProperty("货量趋势面积图")
+ private TrTypedChartVO volumeTrend;
+
+ @ApiModelProperty("车辆实时监控地图")
+ private TrVehicleMapVO map;
+
+ @JsonProperty("enterprise_operation")
+ @ApiModelProperty("企业运营表格")
+ private TrEnterpriseOperationVO enterpriseOperation;
+
+ @JsonProperty("capacity_status")
+ @ApiModelProperty("运力情况")
+ private TrCapacityStatusVO capacityStatus;
+
+ @JsonProperty("cargo_category")
+ @ApiModelProperty("货物品类环形图")
+ private TrCargoCategoryVO cargoCategory;
+
+ @JsonProperty("on_time_rate")
+ @ApiModelProperty("准时配送率折线图")
+ private TrTypedChartVO onTimeRate;
+
+ @JsonProperty("vehicle_utilization")
+ @ApiModelProperty("出车利用率柱状图")
+ private TrBarChartVO vehicleUtilization;
+
+ @JsonProperty("transport_summary")
+ @ApiModelProperty("运输统计总结")
+ private TrTransportSummaryVO transportSummary;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WarehouseOperationZoneVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WarehouseOperationZoneVO.java
index df93d65ed..01975022a 100644
--- a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WarehouseOperationZoneVO.java
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WarehouseOperationZoneVO.java
@@ -68,7 +68,6 @@ public class WarehouseOperationZoneVO {
@ApiModelProperty("实时分析")
private WhRealTimeAnalysisVO realTimeAnalysis;
- @JsonProperty("map_popup")
- @ApiModelProperty("地图弹窗示例数据")
- private WhMapPopupVO mapPopup;
+ @ApiModelProperty("中间地图仓库点位(nodes 为标注数组)")
+ private WhWarehouseMapVO map;
}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhMapNodeVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhMapNodeVO.java
new file mode 100644
index 000000000..ea0b2565a
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhMapNodeVO.java
@@ -0,0 +1,30 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.warehouseZone;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-仓储运营专区-地图点位")
+public class WhMapNodeVO {
+
+ @ApiModelProperty("点位ID")
+ private Long id;
+
+ @ApiModelProperty("地图标注名称(短名)")
+ private String name;
+
+ @ApiModelProperty("坐标 [经度, 纬度]")
+ private List location;
+
+ @ApiModelProperty("弹窗详情")
+ private WhMapPopupVO detail;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhWarehouseMapVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhWarehouseMapVO.java
new file mode 100644
index 000000000..97c021156
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhWarehouseMapVO.java
@@ -0,0 +1,24 @@
+package com.mhd.bi.interfaces.facadeApi.biReport.vo.warehouseZone;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("BI-仓储运营专区-地图")
+public class WhWarehouseMapVO {
+
+ @ApiModelProperty("图例说明")
+ private String legend;
+
+ @ApiModelProperty("仓库点位列表")
+ private List nodes;
+}
diff --git a/mhd-bi/src/main/resources/mapper/biSnapshotSync/BiSnapshotWriteMapper.xml b/mhd-bi/src/main/resources/mapper/biSnapshotSync/BiSnapshotWriteMapper.xml
index c377faa07..9292089ac 100644
--- a/mhd-bi/src/main/resources/mapper/biSnapshotSync/BiSnapshotWriteMapper.xml
+++ b/mhd-bi/src/main/resources/mapper/biSnapshotSync/BiSnapshotWriteMapper.xml
@@ -27,4 +27,9 @@
insert into NGWL_TEST_BI.BI_WAREHOUSE_OPERATION_ZONE_SNAPSHOT (PAYLOAD_JSON, CREATE_TIME, UPDATE_TIME, DEL_FLAG, REMARK)
values (#{payloadJson}, SYSDATE, SYSDATE, 1, #{remark})
+
+
+ insert into NGWL_TEST_BI.BI_TRANSPORT_OPERATION_ZONE_SNAPSHOT (PAYLOAD_JSON, CREATE_TIME, UPDATE_TIME, DEL_FLAG, REMARK)
+ values (#{payloadJson}, SYSDATE, SYSDATE, 1, #{remark})
+
diff --git a/mhd-bi/src/main/resources/mapper/biTransportOperationZone/BiTransportOperationZoneReportMapper.xml b/mhd-bi/src/main/resources/mapper/biTransportOperationZone/BiTransportOperationZoneReportMapper.xml
new file mode 100644
index 000000000..9a4dfda4f
--- /dev/null
+++ b/mhd-bi/src/main/resources/mapper/biTransportOperationZone/BiTransportOperationZoneReportMapper.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+