From 6b8fe67b7277ba031bf1cc0d8bf4bc3185865a26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Tue, 19 May 2026 09:39:45 +0800 Subject: [PATCH 01/11] =?UTF-8?q?BI=E6=B8=AF=E6=BE=B3=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E4=B8=93=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 --- .../BiHkMacaoServiceZoneReportMapper.java | 20 +++ .../BiHkMacaoServiceZoneReportService.java | 21 +++ .../support/HkMacaoServiceZoneDemoData.java | 150 ++++++++++++++++++ .../BiReportSnapshotMapperSupport.java | 27 ++++ .../mapper/BiSnapshotWriteMapper.java | 2 + .../service/BiReportSnapshotSyncService.java | 26 ++- .../facadeApi/biReport/BiReportApi.java | 17 +- .../hkMacaoZone/HkClientServiceStatsVO.java | 33 ++++ .../hkMacaoZone/HkDoorToDoorEfficiencyVO.java | 29 ++++ .../HkInventoryTurnoverTrendVO.java | 33 ++++ .../vo/hkMacaoZone/HkMacaoServiceZoneVO.java | 74 +++++++++ .../biReport/vo/hkMacaoZone/HkMapDataVO.java | 21 +++ .../vo/hkMacaoZone/HkMapLocationVO.java | 22 +++ .../biReport/vo/hkMacaoZone/HkMapPointVO.java | 37 +++++ .../vo/hkMacaoZone/HkMonthRatePointVO.java | 22 +++ .../vo/hkMacaoZone/HkMonthValuePointVO.java | 22 +++ .../vo/hkMacaoZone/HkOrderStatsVO.java | 31 ++++ .../vo/hkMacaoZone/HkOrderTrendMonthVO.java | 28 ++++ .../vo/hkMacaoZone/HkPercentageDetailVO.java | 22 +++ .../vo/hkMacaoZone/HkRingChartStatsVO.java | 26 +++ .../vo/hkMacaoZone/HkVehicleDetailsVO.java | 41 +++++ .../vo/hkMacaoZone/HkWarehouseMetricsVO.java | 25 +++ .../BiHkMacaoServiceZoneReportMapper.xml | 13 ++ .../biSnapshotSync/BiSnapshotWriteMapper.xml | 5 + 24 files changed, 745 insertions(+), 2 deletions(-) create mode 100644 mhd-bi/src/main/java/com/mhd/bi/domain/biHkMacaoServiceZone/repository/mapper/BiHkMacaoServiceZoneReportMapper.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/domain/biHkMacaoServiceZone/service/BiHkMacaoServiceZoneReportService.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/domain/biHkMacaoServiceZone/support/HkMacaoServiceZoneDemoData.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkClientServiceStatsVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkDoorToDoorEfficiencyVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkInventoryTurnoverTrendVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMacaoServiceZoneVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMapDataVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMapLocationVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMapPointVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMonthRatePointVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMonthValuePointVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkOrderStatsVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkOrderTrendMonthVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkPercentageDetailVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkRingChartStatsVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkVehicleDetailsVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkWarehouseMetricsVO.java create mode 100644 mhd-bi/src/main/resources/mapper/biHkMacaoServiceZone/BiHkMacaoServiceZoneReportMapper.xml diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biHkMacaoServiceZone/repository/mapper/BiHkMacaoServiceZoneReportMapper.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biHkMacaoServiceZone/repository/mapper/BiHkMacaoServiceZoneReportMapper.java new file mode 100644 index 000000000..4f8f78454 --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biHkMacaoServiceZone/repository/mapper/BiHkMacaoServiceZoneReportMapper.java @@ -0,0 +1,20 @@ +package com.mhd.bi.domain.biHkMacaoServiceZone.repository.mapper; + +import com.mhd.bi.domain.biReport.support.BiReportSnapshotMapperSupport; +import com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone.HkMacaoServiceZoneVO; + +/** + * 港澳服务专区:取 NGWL_TEST_BI.BI_HK_MACAO_SERVICE_ZONE_SNAPSHOT 最新 PAYLOAD_JSON 并解析。 + */ +public interface BiHkMacaoServiceZoneReportMapper { + + String selectLatestPayloadJson(); + + default HkMacaoServiceZoneVO loadLatestHkMacaoServiceZone() { + return BiReportSnapshotMapperSupport.parsePayload( + selectLatestPayloadJson(), + HkMacaoServiceZoneVO.class, + BiReportSnapshotMapperSupport::emptyHkMacaoServiceZone, + "港澳服务专区"); + } +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biHkMacaoServiceZone/service/BiHkMacaoServiceZoneReportService.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biHkMacaoServiceZone/service/BiHkMacaoServiceZoneReportService.java new file mode 100644 index 000000000..4f6f8d215 --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biHkMacaoServiceZone/service/BiHkMacaoServiceZoneReportService.java @@ -0,0 +1,21 @@ +package com.mhd.bi.domain.biHkMacaoServiceZone.service; + +import com.mhd.bi.domain.biHkMacaoServiceZone.repository.mapper.BiHkMacaoServiceZoneReportMapper; +import com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone.HkMacaoServiceZoneVO; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * 港澳服务专区 + */ +@Service +public class BiHkMacaoServiceZoneReportService { + + @Resource + private BiHkMacaoServiceZoneReportMapper biHkMacaoServiceZoneReportMapper; + + public HkMacaoServiceZoneVO loadLatestHkMacaoServiceZone() { + return biHkMacaoServiceZoneReportMapper.loadLatestHkMacaoServiceZone(); + } +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biHkMacaoServiceZone/support/HkMacaoServiceZoneDemoData.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biHkMacaoServiceZone/support/HkMacaoServiceZoneDemoData.java new file mode 100644 index 000000000..aa1a580f5 --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biHkMacaoServiceZone/support/HkMacaoServiceZoneDemoData.java @@ -0,0 +1,150 @@ +package com.mhd.bi.domain.biHkMacaoServiceZone.support; + +import com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone.*; + +import java.util.Arrays; +import java.util.List; + +/** + * 港澳服务专区快照演示数据(对齐大屏示例 JSON;后续可改为真实聚合)。 + */ +public final class HkMacaoServiceZoneDemoData { + + private HkMacaoServiceZoneDemoData() { + } + + public static HkMacaoServiceZoneVO build() { + HkOrderStatsVO orderStats = HkOrderStatsVO.builder() + .totalOrders(4361L) + .unit("单") + .momGrowth("+12.5%") + .trend("up") + .build(); + + List goodsDetails = Arrays.asList( + HkPercentageDetailVO.builder().name("广东").percentage("25%").build(), + HkPercentageDetailVO.builder().name("澳门").percentage("25%").build(), + HkPercentageDetailVO.builder().name("广西").percentage("50%").build() + ); + + List crossBorderDetails = Arrays.asList( + HkPercentageDetailVO.builder().name("出口订单").percentage("25.8%").build(), + HkPercentageDetailVO.builder().name("进口订单").percentage("16.8%").build() + ); + + List warehouseOrderTrend = Arrays.asList( + HkOrderTrendMonthVO.builder().month("1月").orderRatio(150).orderCount(400).build(), + HkOrderTrendMonthVO.builder().month("2月").orderRatio(200).orderCount(250).build(), + HkOrderTrendMonthVO.builder().month("3月").orderRatio(250).orderCount(300).build(), + HkOrderTrendMonthVO.builder().month("4月").orderRatio(200).orderCount(280).build(), + HkOrderTrendMonthVO.builder().month("5月").orderRatio(280).orderCount(320).build(), + HkOrderTrendMonthVO.builder().month("6月").orderRatio(220).orderCount(310).build(), + HkOrderTrendMonthVO.builder().month("7月").orderRatio(260).orderCount(330).build() + ); + + List turnoverData = Arrays.asList( + HkMonthRatePointVO.builder().month("11月").rate(10).build(), + HkMonthRatePointVO.builder().month("12月").rate(15).build(), + HkMonthRatePointVO.builder().month("1月").rate(22).build(), + HkMonthRatePointVO.builder().month("2月").rate(20).build(), + HkMonthRatePointVO.builder().month("3月").rate(12).build(), + HkMonthRatePointVO.builder().month("4月").rate(16).build() + ); + + List cargoVolumeTrend = Arrays.asList( + HkMonthValuePointVO.builder().month("1月").value(80).build(), + HkMonthValuePointVO.builder().month("2月").value(85).build(), + HkMonthValuePointVO.builder().month("3月").value(90).build(), + HkMonthValuePointVO.builder().month("4月").value(70).build(), + HkMonthValuePointVO.builder().month("5月").value(95).build(), + HkMonthValuePointVO.builder().month("6月").value(88).build() + ); + + List transportOrderTrend = Arrays.asList( + HkOrderTrendMonthVO.builder().month("1月").orderRatio(150).orderCount(400).build(), + HkOrderTrendMonthVO.builder().month("2月").orderRatio(200).orderCount(250).build(), + HkOrderTrendMonthVO.builder().month("3月").orderRatio(250).orderCount(300).build(), + HkOrderTrendMonthVO.builder().month("4月").orderRatio(200).orderCount(280).build(), + HkOrderTrendMonthVO.builder().month("5月").orderRatio(280).orderCount(320).build(), + HkOrderTrendMonthVO.builder().month("6月").orderRatio(220).orderCount(310).build(), + HkOrderTrendMonthVO.builder().month("7月").orderRatio(260).orderCount(330).build() + ); + + List onTimeDeliveryRate = Arrays.asList( + HkMonthRatePointVO.builder().month("1月").rate(90).build(), + HkMonthRatePointVO.builder().month("2月").rate(92).build(), + HkMonthRatePointVO.builder().month("3月").rate(88).build(), + HkMonthRatePointVO.builder().month("4月").rate(85).build(), + HkMonthRatePointVO.builder().month("5月").rate(95).build(), + HkMonthRatePointVO.builder().month("6月").rate(93).build() + ); + + List mapPoints = Arrays.asList( + HkMapPointVO.builder() + .id("wh_001") + .type("warehouse") + .name("通宇保税仓") + .status("normal") + .location(HkMapLocationVO.builder().lat(22.2800).lng(113.5600).build()) + .metrics(HkWarehouseMetricsVO.builder() + .inboundOperations(1) + .outboundOperations(1) + .build()) + .build(), + HkMapPointVO.builder() + .id("vehicle_88888") + .type("vehicle") + .name("粤A88888") + .status("in_transit") + .location(HkMapLocationVO.builder().lat(22.2500).lng(113.5500).build()) + .details(HkVehicleDetailsVO.builder() + .warehouseName("通宇") + .licensePlate("粤A88888") + .loadingAddress("珠海") + .destinationAddress("澳门") + .currentLocation("珠海市") + .updateTime("2026年4月15日 17:52") + .build()) + .build() + ); + + return HkMacaoServiceZoneVO.builder() + .warehouseOrderStats(orderStats) + .clientServiceStats(HkClientServiceStatsVO.builder() + .hkMacaoClients(26) + .clientRatio("10.5%") + .warehouseUsageArea("1688m2") + .areaRatio("1.5%") + .build()) + .goodsSourceStats(HkRingChartStatsVO.builder() + .totalOrders(1000) + .details(goodsDetails) + .build()) + .crossBorderOrderStats(HkRingChartStatsVO.builder() + .totalOrders(400) + .details(crossBorderDetails) + .build()) + .warehouseOrderTrend(warehouseOrderTrend) + .inventoryTurnoverTrend(HkInventoryTurnoverTrendVO.builder() + .currentMonthRate("3次") + .annualRate("4次") + .unit("次") + .data(turnoverData) + .build()) + .transportOrderStats(orderStats) + .doorToDoorEfficiency(HkDoorToDoorEfficiencyVO.builder() + .averageTime("28.6分") + .fastestTime("13.2分") + .momGrowth("+30%") + .build()) + .crossBorderTransportStats(HkRingChartStatsVO.builder() + .totalOrders(400) + .details(crossBorderDetails) + .build()) + .cargoVolumeTrend(cargoVolumeTrend) + .transportOrderTrend(transportOrderTrend) + .onTimeDeliveryRate(onTimeDeliveryRate) + .mapData(HkMapDataVO.builder().points(mapPoints).build()) + .build(); + } +} 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 f9bbed264..abf73d99a 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.hkMacaoZone.*; import com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone.*; import com.mhd.bi.interfaces.facadeApi.biReport.vo.warehouseZone.*; import lombok.extern.slf4j.Slf4j; @@ -206,4 +207,30 @@ public final class BiReportSnapshotMapperSupport { .title("").safeMileage("").avgDeliveryTime("").build()) .build(); } + + public static HkMacaoServiceZoneVO emptyHkMacaoServiceZone() { + HkOrderStatsVO emptyOrderStats = HkOrderStatsVO.builder() + .totalOrders(0L).unit("").momGrowth("").trend("").build(); + return HkMacaoServiceZoneVO.builder() + .warehouseOrderStats(emptyOrderStats) + .clientServiceStats(HkClientServiceStatsVO.builder() + .hkMacaoClients(0).clientRatio("").warehouseUsageArea("").areaRatio("").build()) + .goodsSourceStats(HkRingChartStatsVO.builder() + .totalOrders(0).details(Collections.emptyList()).build()) + .crossBorderOrderStats(HkRingChartStatsVO.builder() + .totalOrders(0).details(Collections.emptyList()).build()) + .warehouseOrderTrend(Collections.emptyList()) + .inventoryTurnoverTrend(HkInventoryTurnoverTrendVO.builder() + .currentMonthRate("").annualRate("").unit("").data(Collections.emptyList()).build()) + .transportOrderStats(emptyOrderStats) + .doorToDoorEfficiency(HkDoorToDoorEfficiencyVO.builder() + .averageTime("").fastestTime("").momGrowth("").build()) + .crossBorderTransportStats(HkRingChartStatsVO.builder() + .totalOrders(0).details(Collections.emptyList()).build()) + .cargoVolumeTrend(Collections.emptyList()) + .transportOrderTrend(Collections.emptyList()) + .onTimeDeliveryRate(Collections.emptyList()) + .mapData(HkMapDataVO.builder().points(Collections.emptyList()).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 4624dbf5f..10d4dfcfa 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 @@ -18,4 +18,6 @@ public interface BiSnapshotWriteMapper { int insertWarehouseOperationZoneSnapshot(@Param("payloadJson") String payloadJson, @Param("remark") String remark); int insertTransportOperationZoneSnapshot(@Param("payloadJson") String payloadJson, @Param("remark") String remark); + + int insertHkMacaoServiceZoneSnapshot(@Param("payloadJson") String payloadJson, @Param("remark") String remark); } 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 ad47fc137..2f42acdf8 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,12 +3,14 @@ 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.biHkMacaoServiceZone.support.HkMacaoServiceZoneDemoData; 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.hkMacaoZone.HkMacaoServiceZoneVO; import com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone.TransportOperationZoneVO; import com.mhd.bi.interfaces.facadeApi.biReport.vo.warehouseZone.WarehouseOperationZoneVO; import lombok.RequiredArgsConstructor; @@ -18,7 +20,7 @@ import org.springframework.stereotype.Service; import java.util.Random; /** - * BI 快照表定时同步(综合态势 / 仓储运输 / 月台监测 / 总体运营态势 / 仓储运营专区 / 运输运营专区)。 + * BI 快照表定时同步(综合态势 / 仓储运输 / 月台监测 / 总体运营态势 / 仓储运营专区 / 运输运营专区 / 港澳服务专区)。 *

当前(临时):{@code build*} 使用 {@link BiSnapshotWeeklyRandomDataBuilder},每次执行使用新的 {@link Random}, * 故同一天多次手动触发、以及每次定时任务执行,生成的模拟数据均不相同(仍在基准 ±20% 内)。

*

后续改造:在各 {@code build*} 中改为查库/Feign 聚合真实业务并组装 VO。

@@ -43,6 +45,7 @@ public class BiReportSnapshotSyncService { syncOverallOperationSnapshot(); syncWarehouseOperationZoneSnapshot(); syncTransportOperationZoneSnapshot(); + syncHkMacaoServiceZoneSnapshot(); } public void syncComprehensiveSnapshot() { @@ -166,4 +169,25 @@ public class BiReportSnapshotSyncService { protected TransportOperationZoneVO buildTransportOperationZoneSnapshot() { return TransportOperationZoneDemoData.build(); } + + public void syncHkMacaoServiceZoneSnapshot() { + try { + HkMacaoServiceZoneVO vo = buildHkMacaoServiceZoneSnapshot(); + String json = objectMapper.writeValueAsString(vo); + int rows = biSnapshotWriteMapper.insertHkMacaoServiceZoneSnapshot(json, REMARK_SYNC); + if (rows < 1) { + log.warn("BI 港澳服务专区快照 INSERT 影响行数为 {},请确认 NGWL_TEST_BI.BI_HK_MACAO_SERVICE_ZONE_SNAPSHOT", rows); + } + log.info("BI 港澳服务专区快照已写入, affectedRows={}", rows); + } catch (Exception e) { + log.error("BI 港澳服务专区快照同步失败", e); + } + } + + /** + * TODO 业务落地:改为查询真实数据组装 VO。当前为 {@link HkMacaoServiceZoneDemoData} 静态示例。 + */ + protected HkMacaoServiceZoneVO buildHkMacaoServiceZoneSnapshot() { + return HkMacaoServiceZoneDemoData.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 f57922b21..d75f1207c 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.biHkMacaoServiceZone.service.BiHkMacaoServiceZoneReportService; import com.mhd.bi.domain.biTransportOperationZone.service.BiTransportOperationZoneReportService; import com.mhd.bi.domain.biWarehouseOperationZone.service.BiWarehouseOperationZoneReportService; import com.mhd.bi.domain.biWarehouseTransport.service.BiWarehouseTransportReportService; @@ -12,6 +13,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.hkMacaoZone.HkMacaoServiceZoneVO; 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; @@ -53,11 +55,14 @@ public class BiReportApi extends BaseController { @Autowired private BiTransportOperationZoneReportService biTransportOperationZoneReportService; + @Autowired + private BiHkMacaoServiceZoneReportService biHkMacaoServiceZoneReportService; + @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(); @@ -123,4 +128,14 @@ public class BiReportApi extends BaseController { TransportOperationZoneVO data = biTransportOperationZoneReportService.loadLatestTransportOperationZone(); return BiApiResult.ok(data); } + + /** + * 港澳服务专区(大屏「港澳服务专区」) + */ + @ApiOperation(value = "港澳服务专区查询", notes = "返回 DEL_FLAG=1 且 CREATE_TIME 最新的一条整包 JSON 解析结果") + @GetMapping("/hkMacaoServiceZone") + public BiApiResult hkMacaoServiceZone() { + HkMacaoServiceZoneVO data = biHkMacaoServiceZoneReportService.loadLatestHkMacaoServiceZone(); + return BiApiResult.ok(data); + } } diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkClientServiceStatsVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkClientServiceStatsVO.java new file mode 100644 index 000000000..c0ec00153 --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkClientServiceStatsVO.java @@ -0,0 +1,33 @@ +package com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone; + +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 HkClientServiceStatsVO { + + @JsonProperty("hk_macao_clients") + @ApiModelProperty("港澳客户数") + private Integer hkMacaoClients; + + @JsonProperty("client_ratio") + @ApiModelProperty("客户占比") + private String clientRatio; + + @JsonProperty("warehouse_usage_area") + @ApiModelProperty("仓库使用面积") + private String warehouseUsageArea; + + @JsonProperty("area_ratio") + @ApiModelProperty("面积占比") + private String areaRatio; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkDoorToDoorEfficiencyVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkDoorToDoorEfficiencyVO.java new file mode 100644 index 000000000..c91b4fdce --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkDoorToDoorEfficiencyVO.java @@ -0,0 +1,29 @@ +package com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone; + +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 HkDoorToDoorEfficiencyVO { + + @JsonProperty("average_time") + @ApiModelProperty("平均时效") + private String averageTime; + + @JsonProperty("fastest_time") + @ApiModelProperty("最快时效") + private String fastestTime; + + @JsonProperty("mom_growth") + @ApiModelProperty("环比增幅") + private String momGrowth; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkInventoryTurnoverTrendVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkInventoryTurnoverTrendVO.java new file mode 100644 index 000000000..5583e0d7b --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkInventoryTurnoverTrendVO.java @@ -0,0 +1,33 @@ +package com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone; + +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 HkInventoryTurnoverTrendVO { + + @JsonProperty("current_month_rate") + @ApiModelProperty("本月周转率") + private String currentMonthRate; + + @JsonProperty("annual_rate") + @ApiModelProperty("年度周转率") + private String annualRate; + + @ApiModelProperty("单位") + private String unit; + + @ApiModelProperty("按月序列") + private List data; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMacaoServiceZoneVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMacaoServiceZoneVO.java new file mode 100644 index 000000000..a599232c9 --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMacaoServiceZoneVO.java @@ -0,0 +1,74 @@ +package com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone; + +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 与快照 PAYLOAD_JSON 一致) + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel("BI-港澳服务专区") +public class HkMacaoServiceZoneVO { + + @JsonProperty("warehouse_order_stats") + @ApiModelProperty("仓库订单统计") + private HkOrderStatsVO warehouseOrderStats; + + @JsonProperty("client_service_stats") + @ApiModelProperty("服务客户统计") + private HkClientServiceStatsVO clientServiceStats; + + @JsonProperty("goods_source_stats") + @ApiModelProperty("货物品类来源") + private HkRingChartStatsVO goodsSourceStats; + + @JsonProperty("cross_border_order_stats") + @ApiModelProperty("跨境订单统计") + private HkRingChartStatsVO crossBorderOrderStats; + + @JsonProperty("warehouse_order_trend") + @ApiModelProperty("仓库订单趋势") + private List warehouseOrderTrend; + + @JsonProperty("inventory_turnover_trend") + @ApiModelProperty("库存周转率趋势") + private HkInventoryTurnoverTrendVO inventoryTurnoverTrend; + + @JsonProperty("transport_order_stats") + @ApiModelProperty("运输订单统计") + private HkOrderStatsVO transportOrderStats; + + @JsonProperty("door_to_door_efficiency") + @ApiModelProperty("门到门时效") + private HkDoorToDoorEfficiencyVO doorToDoorEfficiency; + + @JsonProperty("cross_border_transport_stats") + @ApiModelProperty("跨境运输订单") + private HkRingChartStatsVO crossBorderTransportStats; + + @JsonProperty("cargo_volume_trend") + @ApiModelProperty("货量趋势") + private List cargoVolumeTrend; + + @JsonProperty("transport_order_trend") + @ApiModelProperty("运输订单趋势") + private List transportOrderTrend; + + @JsonProperty("on_time_delivery_rate") + @ApiModelProperty("准时交付率") + private List onTimeDeliveryRate; + + @JsonProperty("map_data") + @ApiModelProperty("地图点位") + private HkMapDataVO mapData; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMapDataVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMapDataVO.java new file mode 100644 index 000000000..ea5fc3f6f --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMapDataVO.java @@ -0,0 +1,21 @@ +package com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone; + +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 HkMapDataVO { + + @ApiModelProperty("点位列表") + private List points; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMapLocationVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMapLocationVO.java new file mode 100644 index 000000000..8c5d0bc8b --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMapLocationVO.java @@ -0,0 +1,22 @@ +package com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone; + +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 HkMapLocationVO { + + @ApiModelProperty("纬度") + private Double lat; + + @ApiModelProperty("经度") + private Double lng; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMapPointVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMapPointVO.java new file mode 100644 index 000000000..ea243f5d8 --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMapPointVO.java @@ -0,0 +1,37 @@ +package com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone; + +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 HkMapPointVO { + + @ApiModelProperty("点位ID") + private String id; + + @ApiModelProperty("类型 warehouse/vehicle") + private String type; + + @ApiModelProperty("名称") + private String name; + + @ApiModelProperty("状态") + private String status; + + @ApiModelProperty("坐标") + private HkMapLocationVO location; + + @ApiModelProperty("仓库指标(type=warehouse)") + private HkWarehouseMetricsVO metrics; + + @ApiModelProperty("车辆详情(type=vehicle)") + private HkVehicleDetailsVO details; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMonthRatePointVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMonthRatePointVO.java new file mode 100644 index 000000000..b98a35ced --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMonthRatePointVO.java @@ -0,0 +1,22 @@ +package com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone; + +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 HkMonthRatePointVO { + + @ApiModelProperty("月份") + private String month; + + @ApiModelProperty("比率或趋势值") + private Integer rate; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMonthValuePointVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMonthValuePointVO.java new file mode 100644 index 000000000..2f887953e --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkMonthValuePointVO.java @@ -0,0 +1,22 @@ +package com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone; + +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 HkMonthValuePointVO { + + @ApiModelProperty("月份") + private String month; + + @ApiModelProperty("数值") + private Integer value; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkOrderStatsVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkOrderStatsVO.java new file mode 100644 index 000000000..87134a9cb --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkOrderStatsVO.java @@ -0,0 +1,31 @@ +package com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone; + +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 HkOrderStatsVO { + + @JsonProperty("total_orders") + @ApiModelProperty("订单总量") + private Long totalOrders; + + @ApiModelProperty("单位") + private String unit; + + @JsonProperty("mom_growth") + @ApiModelProperty("环比增幅") + private String momGrowth; + + @ApiModelProperty("趋势 up/down") + private String trend; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkOrderTrendMonthVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkOrderTrendMonthVO.java new file mode 100644 index 000000000..efefb4e79 --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkOrderTrendMonthVO.java @@ -0,0 +1,28 @@ +package com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone; + +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 HkOrderTrendMonthVO { + + @ApiModelProperty("月份") + private String month; + + @JsonProperty("order_ratio") + @ApiModelProperty("订单比率/柱值") + private Integer orderRatio; + + @JsonProperty("order_count") + @ApiModelProperty("订单数") + private Integer orderCount; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkPercentageDetailVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkPercentageDetailVO.java new file mode 100644 index 000000000..cde6f4e92 --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkPercentageDetailVO.java @@ -0,0 +1,22 @@ +package com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone; + +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 HkPercentageDetailVO { + + @ApiModelProperty("名称") + private String name; + + @ApiModelProperty("占比") + private String percentage; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkRingChartStatsVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkRingChartStatsVO.java new file mode 100644 index 000000000..c3fa0d488 --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkRingChartStatsVO.java @@ -0,0 +1,26 @@ +package com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone; + +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 HkRingChartStatsVO { + + @JsonProperty("total_orders") + @ApiModelProperty("订单/统计总量") + private Integer totalOrders; + + @ApiModelProperty("明细") + private List details; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkVehicleDetailsVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkVehicleDetailsVO.java new file mode 100644 index 000000000..5a289efe3 --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkVehicleDetailsVO.java @@ -0,0 +1,41 @@ +package com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone; + +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 HkVehicleDetailsVO { + + @JsonProperty("warehouse_name") + @ApiModelProperty("关联仓库") + private String warehouseName; + + @JsonProperty("license_plate") + @ApiModelProperty("车牌号") + private String licensePlate; + + @JsonProperty("loading_address") + @ApiModelProperty("装货地址") + private String loadingAddress; + + @JsonProperty("destination_address") + @ApiModelProperty("目的地") + private String destinationAddress; + + @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/hkMacaoZone/HkWarehouseMetricsVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkWarehouseMetricsVO.java new file mode 100644 index 000000000..c66eaf29d --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/hkMacaoZone/HkWarehouseMetricsVO.java @@ -0,0 +1,25 @@ +package com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone; + +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 HkWarehouseMetricsVO { + + @JsonProperty("inbound_operations") + @ApiModelProperty("入库作业数") + private Integer inboundOperations; + + @JsonProperty("outbound_operations") + @ApiModelProperty("出库作业数") + private Integer outboundOperations; +} diff --git a/mhd-bi/src/main/resources/mapper/biHkMacaoServiceZone/BiHkMacaoServiceZoneReportMapper.xml b/mhd-bi/src/main/resources/mapper/biHkMacaoServiceZone/BiHkMacaoServiceZoneReportMapper.xml new file mode 100644 index 000000000..8d7934d03 --- /dev/null +++ b/mhd-bi/src/main/resources/mapper/biHkMacaoServiceZone/BiHkMacaoServiceZoneReportMapper.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/mhd-bi/src/main/resources/mapper/biSnapshotSync/BiSnapshotWriteMapper.xml b/mhd-bi/src/main/resources/mapper/biSnapshotSync/BiSnapshotWriteMapper.xml index 9292089ac..21529801a 100644 --- a/mhd-bi/src/main/resources/mapper/biSnapshotSync/BiSnapshotWriteMapper.xml +++ b/mhd-bi/src/main/resources/mapper/biSnapshotSync/BiSnapshotWriteMapper.xml @@ -32,4 +32,9 @@ 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}) + + + insert into NGWL_TEST_BI.BI_HK_MACAO_SERVICE_ZONE_SNAPSHOT (PAYLOAD_JSON, CREATE_TIME, UPDATE_TIME, DEL_FLAG, REMARK) + values (#{payloadJson}, SYSDATE, SYSDATE, 1, #{remark}) + From 95af50fe12c5724b24589212560e5cbe65e96bcb Mon Sep 17 00:00:00 2001 From: zhaoqing <1670883518@qq.com> Date: Tue, 19 May 2026 10:22:42 +0800 Subject: [PATCH 02/11] =?UTF-8?q?=E5=88=A0=E6=94=B9=E5=8D=95=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...sinessDocumentOrderApplicationService.java | 126 ++++++++++++++++++ .../OriginalImportExportDocumentApi.java | 13 ++ 2 files changed, 139 insertions(+) diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java index d7586ef8c..6cf459188 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java @@ -1,5 +1,6 @@ package com.mhd.oms.application.service.businessDocumentOrder; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.mhd.common.core.web.domain.AjaxResult; @@ -31,6 +32,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import javax.json.JsonObject; import java.io.IOException; import java.util.*; @@ -48,6 +50,9 @@ public class BusinessDocumentOrderApplicationService { private static final String API_NAME_I = "saveBill_i"; private static final String API_NAME_E = "saveBill_e"; private static final String VERIFY = "tjPZMT9fwhZRnv+eTXKF75QXmXzCn7phPagmoUQsvsh2ZTWDjuRxHAgcP0GZENHP"; + private static final String API_NAME = "billAppModify"; + + @Autowired private BusinessDocumentOrderDomainService businessDocumentOrderDomainService; @@ -297,4 +302,125 @@ public class BusinessDocumentOrderApplicationService { } + public AjaxResult batchPushForReviseApply(BusinessDocumentOrderDTO businessDocumentOrderDTO) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + Long pushBy = loginUser != null ? loginUser.getUserid() : null; + //String pushByName = loginUser != null ? loginUser.getUsername() : null; + Long organizationId = loginUser != null ? loginUser.getUserPo().getOrganizationId() : null; + Long topOrganizationId = loginUser != null ? loginUser.getUserPo().getTopOrganizationId() : null; + String organizationName = loginUser != null ? loginUser.getUserPo().getOrganizationName() : null; + + int successCount = 0; + int failCount = 0; + StringBuilder failMsg = new StringBuilder(); + + // 构建单个对象 + Map item = new HashMap<>(); + item.put("erpBillNo", String.valueOf(businessDocumentOrderDTO.getId())); + item.put("operateType", String.valueOf(businessDocumentOrderDTO.getReviseApplyType())); + item.put("appMan", businessDocumentOrderDTO.getReviseApplyBy()); + item.put("appMess", businessDocumentOrderDTO.getReviseApplyReason()); + + + + // 2. 记录日志 + GwLog gwLog = new GwLog(); + gwLog.setType("删改单申请"); + gwLog.setBusinessId(Long.valueOf(businessDocumentOrderDTO.getId())); + gwLog.setRequestBody(JSONObject.toJSONString(item)); + gwLog.setResponseBody(""); + gwLog.setStatus(1); + gwLog.setSendTime(new Date()); + gwLog.setOrganizationId(organizationId); + gwLog.setTopOrganizationId(topOrganizationId); + gwLog.setOrganizationName(organizationName); + gwLog.setCreateBy(pushBy); + gwLog.setCreateTime(new Date()); + gwLog.setDelFlag(1); + gwLogMapper.insert(gwLog); + + //updateReservationOrder(businessDocumentOrderDTO); + // 3. 调用推送接口 + try { + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost(PUSH_API_URL); + StringEntity postingString = new StringEntity(JSONObject.toJSONString(item), "UTF-8"); + httpPost.setEntity(postingString); + + httpPost.setHeader("Content-type", "application/json"); + httpPost.setHeader("verify", VERIFY); + httpPost.setHeader("apiName", API_NAME); + + CloseableHttpResponse response = httpClient.execute(httpPost); + String responseString = EntityUtils.toString(response.getEntity()); + gwLog.setResponseBody(responseString); + + if (response.getStatusLine().getStatusCode() == 200) { + JSONObject responseJson = JSONObject.parseObject(responseString); + JSONArray dataArray = responseJson.getJSONArray("data"); + if(dataArray != null && dataArray.size()>0){ + JSONObject dataObj = dataArray.getJSONObject(0); + + if("1".equals(String.valueOf(responseJson.get("data.code")))){ + gwLog.setStatus(2); + businessDocumentOrderDTO.setReviseApplyStatus(1); + updateReservationOrder(businessDocumentOrderDTO); + + successCount++; + }else { + gwLog.setStatus(3); + gwLog.setErrorMsg(responseString); + + failCount++; + failMsg.append("原始单证Id:").append(businessDocumentOrderDTO.getId()).append("失败:"); + } + } + + } else { + gwLog.setStatus(3); + gwLog.setErrorMsg(responseString); + + if (businessDocumentOrderDTO.getId() != null) { + businessDocumentOrderDTO.setReviseApplyStatus(2); + updateReservationOrder(businessDocumentOrderDTO); + } + failCount++; + failMsg.append("原始单证id:").append(businessDocumentOrderDTO.getId()).append("失败:"); + } + gwLogMapper.updateById(gwLog); + response.close(); + } catch (IOException e) { + gwLog.setStatus(3); + gwLog.setErrorMsg(e.getMessage()); + gwLog.setResponseBody("请求异常:" + e.getMessage()); + gwLogMapper.updateById(gwLog); + if (businessDocumentOrderDTO.getId() != null) { + businessDocumentOrderDTO.setReviseApplyStatus(2); + updateReservationOrder(businessDocumentOrderDTO); + } + failCount++; + failMsg.append("单证id:").append(businessDocumentOrderDTO.getId()).append("异常:").append(e.getMessage()); + log.error("GW推送异常:单证id={}, error={}", businessDocumentOrderDTO.getId(), e.getMessage()); + } + + + String resultMsg = "推送完成:成功" + successCount + "条,失败" + failCount + "条"; + if (failCount > 0) { + resultMsg += "[" + failMsg.toString() + "]"; + } + return AjaxResult.success(resultMsg); + + } + + private void updateReservationOrder(BusinessDocumentOrderDTO businessDocumentOrderDTO) { + try { + BusinessDocumentOrder businessDocumentOrder = new BusinessDocumentOrder(); + BeanUtils.copyProperties(businessDocumentOrderDTO,businessDocumentOrder); + + + businessDocumentOrderMapper.updateById(businessDocumentOrder); + } catch (Exception e) { + log.error("删改单申请更新状态失败失败: id={}, error={}", businessDocumentOrderDTO.getId(), e.getMessage()); + } + } } diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/originalImportExportDocument/OriginalImportExportDocumentApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/originalImportExportDocument/OriginalImportExportDocumentApi.java index b8f7f6add..800689980 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/originalImportExportDocument/OriginalImportExportDocumentApi.java +++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/originalImportExportDocument/OriginalImportExportDocumentApi.java @@ -171,4 +171,17 @@ public class OriginalImportExportDocumentApi extends BaseController { return resultList; } + + @ApiOperation("批量推送") + @PostMapping("/batchPushForReviseApply") + public AjaxResult batchPushForReviseApply(@RequestBody BusinessDocumentOrderDTO businessDocumentOrderDTO){ + if(businessDocumentOrderDTO == null){ + return AjaxResult.error("没有数据需要推送"); + } + return businessDocumentOrderApplicationService.batchPushForReviseApply(businessDocumentOrderDTO); + + + } + + } From bab277f2444946a00ba1afb9375cb4ee34de7544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Tue, 19 May 2026 14:18:20 +0800 Subject: [PATCH 03/11] =?UTF-8?q?BI=E4=BA=8C=E7=BA=A7=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BiReportSnapshotMapperSupport.java | 39 ++++++++++++++++ .../BiTransportOperationZoneReportMapper.java | 7 +-- ...BiTransportOperationZoneReportService.java | 8 +++- .../TransportOperationZoneDemoData.java | 40 ++++++++++++++++ .../BiWarehouseOperationZoneReportMapper.java | 7 +-- ...BiWarehouseOperationZoneReportService.java | 8 +++- .../WarehouseOperationZoneDemoData.java | 46 +++++++++++++++++++ .../facadeApi/biReport/BiReportApi.java | 18 +++++--- .../vo/transportZone/TrBrandOrderStatsVO.java | 41 +++++++++++++++++ .../transportZone/TrCapacityStatItemVO.java | 25 ++++++++++ .../vo/transportZone/TrCapacityStatsVO.java | 25 ++++++++++ .../vo/transportZone/TrCargoTypeDetailVO.java | 30 ++++++++++++ .../TrCargoTypeDistributionVO.java | 33 +++++++++++++ .../vo/transportZone/TrOrderStatMetricVO.java | 25 ++++++++++ .../TrOrderStatRateMetricVO.java | 25 ++++++++++ .../TrOrderStatTextMetricVO.java | 25 ++++++++++ .../TransportOperationZoneVO.java | 16 +++++++ .../WarehouseOperationZoneVO.java | 20 ++++++++ .../warehouseZone/WhColdStorageMetricVO.java | 22 +++++++++ .../warehouseZone/WhColdStorageStatsVO.java | 29 ++++++++++++ .../WhOrderSummaryCountItemVO.java | 22 +++++++++ .../vo/warehouseZone/WhOrderSummaryVO.java | 33 +++++++++++++ .../WhTemperatureExceptionVO.java | 40 ++++++++++++++++ .../BiTransportOperationZoneReportMapper.xml | 9 ++++ .../BiWarehouseOperationZoneReportMapper.xml | 9 ++++ 25 files changed, 586 insertions(+), 16 deletions(-) create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrBrandOrderStatsVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCapacityStatItemVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCapacityStatsVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCargoTypeDetailVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCargoTypeDistributionVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderStatMetricVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderStatRateMetricVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderStatTextMetricVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhColdStorageMetricVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhColdStorageStatsVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhOrderSummaryCountItemVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhOrderSummaryVO.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhTemperatureExceptionVO.java 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 abf73d99a..003f4f802 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 @@ -139,7 +139,22 @@ public final class BiReportSnapshotMapperSupport { } public static WarehouseOperationZoneVO emptyWarehouseOperationZone() { + WhColdStorageMetricVO emptyColdMetric = WhColdStorageMetricVO.builder().value("").trend("").build(); return WarehouseOperationZoneVO.builder() + .warehouseName("") + .updateTime("") + .orderSummary(WhOrderSummaryVO.builder() + .totalCount("") + .inboundOrders(WhOrderSummaryCountItemVO.builder().label("").value(0).build()) + .outboundOrders(WhOrderSummaryCountItemVO.builder().label("").value(0).build()) + .operationOrders(WhOrderSummaryCountItemVO.builder().label("").value(0).build()) + .build()) + .coldStorageStats(WhColdStorageStatsVO.builder() + .revenueShare(emptyColdMetric) + .utilizationRate(emptyColdMetric) + .damageRate(emptyColdMetric) + .build()) + .temperatureExceptions(Collections.emptyList()) .storageOverview(WhStorageOverviewVO.builder() .title("").value(0).unit("").subText("").build()) .operationStats(WhOperationStatsVO.builder() @@ -205,9 +220,33 @@ public final class BiReportSnapshotMapperSupport { .title("").unit("").data(Collections.emptyList()).build()) .transportSummary(TrTransportSummaryVO.builder() .title("").safeMileage("").avgDeliveryTime("").build()) + .capacityStats(TrCapacityStatsVO.builder() + .vehicles(emptyCapacityStatItem()) + .drivers(emptyCapacityStatItem()) + .escorts(emptyCapacityStatItem()) + .build()) + .cargoTypeDistribution(TrCargoTypeDistributionVO.builder() + .title("").totalOrders(0).totalUnit("").details(Collections.emptyList()).build()) + .freshOrderStats(emptyBrandOrderStats()) + .vitasoyOrderStats(emptyBrandOrderStats()) .build(); } + private static TrBrandOrderStatsVO emptyBrandOrderStats() { + return TrBrandOrderStatsVO.builder() + .plannedDelivery(TrOrderStatMetricVO.builder().value(0).unit("").label("").build()) + .orderQuantity(TrOrderStatMetricVO.builder().value(0).unit("").label("").build()) + .vehiclesInTransit(TrOrderStatMetricVO.builder().value(0).unit("").label("").build()) + .completedDelivery(TrOrderStatTextMetricVO.builder().value("").unit("").label("").build()) + .overtimeDelivery(TrOrderStatMetricVO.builder().value(0).unit("").label("").build()) + .onTimeRate(TrOrderStatRateMetricVO.builder().value("").trend("").label("").build()) + .build(); + } + + private static TrCapacityStatItemVO emptyCapacityStatItem() { + return TrCapacityStatItemVO.builder().value(0).unit("").label("").build(); + } + public static HkMacaoServiceZoneVO emptyHkMacaoServiceZone() { HkOrderStatsVO emptyOrderStats = HkOrderStatsVO.builder() .totalOrders(0L).unit("").momGrowth("").trend("").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 index 589f54e72..00fc66e2b 100644 --- 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 @@ -2,17 +2,18 @@ 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; +import org.apache.ibatis.annotations.Param; /** * 运输运营专区:取 NGWL_TEST_BI.BI_TRANSPORT_OPERATION_ZONE_SNAPSHOT 最新 PAYLOAD_JSON 并解析。 */ public interface BiTransportOperationZoneReportMapper { - String selectLatestPayloadJson(); + String selectLatestPayloadJson(@Param("organizationName") String organizationName); - default TransportOperationZoneVO loadLatestTransportOperationZone() { + default TransportOperationZoneVO loadTransportOperationZone(String organizationName) { return BiReportSnapshotMapperSupport.parsePayload( - selectLatestPayloadJson(), + selectLatestPayloadJson(organizationName), 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 index b9a72802b..0eb181a5e 100644 --- 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 @@ -2,6 +2,7 @@ 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.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -15,7 +16,10 @@ public class BiTransportOperationZoneReportService { @Resource private BiTransportOperationZoneReportMapper biTransportOperationZoneReportMapper; - public TransportOperationZoneVO loadLatestTransportOperationZone() { - return biTransportOperationZoneReportMapper.loadLatestTransportOperationZone(); + /** + * @param organizationName 企业运营/组织名称(模糊匹配),为空时取全表最新一条 + */ + public TransportOperationZoneVO loadTransportOperationZone(String organizationName) { + return biTransportOperationZoneReportMapper.loadTransportOperationZone(StringUtils.trimToNull(organizationName)); } } 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 index c7f57ba9a..069576cb9 100644 --- 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 @@ -68,6 +68,12 @@ public final class TransportOperationZoneDemoData { TrCargoCategoryItemVO.builder().name("冻品").value(50).color("orange").build() ); + List cargoTypeDetails = Arrays.asList( + TrCargoTypeDetailVO.builder().typeCode("2").name("第2类 气体").percentage("65%").color("#1890FF").build(), + TrCargoTypeDetailVO.builder().typeCode("3").name("第3类 易燃液体").percentage("25%").color("#52C41A").build(), + TrCargoTypeDetailVO.builder().typeCode("8").name("第8类 腐蚀性物质").percentage("15%").color("#FAAD14").build() + ); + TrMapNodeVO mapNode = TrMapNodeVO.builder() .id(1L) .name("通宇作业车辆") @@ -138,9 +144,43 @@ public final class TransportOperationZoneDemoData { .safeMileage("240万公里") .avgDeliveryTime("平均4小时送达") .build()) + .capacityStats(TrCapacityStatsVO.builder() + .vehicles(capacityStatItem(280, "辆", "车辆")) + .drivers(capacityStatItem(360, "人", "驾驶员")) + .escorts(capacityStatItem(56, "人", "押运员")) + .build()) + .cargoTypeDistribution(TrCargoTypeDistributionVO.builder() + .title("货物类型分布") + .totalOrders(1000) + .totalUnit("单") + .details(cargoTypeDetails) + .build()) + .freshOrderStats(sampleBrandOrderStats()) + .vitasoyOrderStats(sampleBrandOrderStats()) .build(); } + private static TrBrandOrderStatsVO sampleBrandOrderStats() { + return TrBrandOrderStatsVO.builder() + .plannedDelivery(orderStatMetric(2135, "单", "计划配送")) + .orderQuantity(orderStatMetric(228, "万吨", "订单数量")) + .vehiclesInTransit(orderStatMetric(84, "辆", "在途车辆")) + .completedDelivery(TrOrderStatTextMetricVO.builder() + .value("22.8%").unit("").label("完成配送").build()) + .overtimeDelivery(orderStatMetric(228, "单", "超时配送")) + .onTimeRate(TrOrderStatRateMetricVO.builder() + .value("85%").trend("+30%").label("准时配送率").build()) + .build(); + } + + private static TrOrderStatMetricVO orderStatMetric(int value, String unit, String label) { + return TrOrderStatMetricVO.builder().value(value).unit(unit).label(label).build(); + } + + private static TrCapacityStatItemVO capacityStatItem(int value, String unit, String label) { + return TrCapacityStatItemVO.builder().value(value).unit(unit).label(label).build(); + } + private static TrMonthValuePointVO point(String month, int value) { return TrMonthValuePointVO.builder().month(month).value(value).build(); } diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biWarehouseOperationZone/repository/mapper/BiWarehouseOperationZoneReportMapper.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biWarehouseOperationZone/repository/mapper/BiWarehouseOperationZoneReportMapper.java index 24b8a0f02..5ba495eae 100644 --- a/mhd-bi/src/main/java/com/mhd/bi/domain/biWarehouseOperationZone/repository/mapper/BiWarehouseOperationZoneReportMapper.java +++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biWarehouseOperationZone/repository/mapper/BiWarehouseOperationZoneReportMapper.java @@ -2,17 +2,18 @@ package com.mhd.bi.domain.biWarehouseOperationZone.repository.mapper; import com.mhd.bi.domain.biReport.support.BiReportSnapshotMapperSupport; import com.mhd.bi.interfaces.facadeApi.biReport.vo.warehouseZone.WarehouseOperationZoneVO; +import org.apache.ibatis.annotations.Param; /** * 仓储运营专区:取 NGWL_TEST_BI.BI_WAREHOUSE_OPERATION_ZONE_SNAPSHOT 最新 PAYLOAD_JSON 并解析。 */ public interface BiWarehouseOperationZoneReportMapper { - String selectLatestPayloadJson(); + String selectLatestPayloadJson(@Param("organizationName") String organizationName); - default WarehouseOperationZoneVO loadLatestWarehouseOperationZone() { + default WarehouseOperationZoneVO loadWarehouseOperationZone(String organizationName) { return BiReportSnapshotMapperSupport.parsePayload( - selectLatestPayloadJson(), + selectLatestPayloadJson(organizationName), WarehouseOperationZoneVO.class, BiReportSnapshotMapperSupport::emptyWarehouseOperationZone, "仓储运营专区"); diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biWarehouseOperationZone/service/BiWarehouseOperationZoneReportService.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biWarehouseOperationZone/service/BiWarehouseOperationZoneReportService.java index eebed5fd4..1a1d3fcc0 100644 --- a/mhd-bi/src/main/java/com/mhd/bi/domain/biWarehouseOperationZone/service/BiWarehouseOperationZoneReportService.java +++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biWarehouseOperationZone/service/BiWarehouseOperationZoneReportService.java @@ -2,6 +2,7 @@ package com.mhd.bi.domain.biWarehouseOperationZone.service; import com.mhd.bi.domain.biWarehouseOperationZone.repository.mapper.BiWarehouseOperationZoneReportMapper; import com.mhd.bi.interfaces.facadeApi.biReport.vo.warehouseZone.WarehouseOperationZoneVO; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -15,7 +16,10 @@ public class BiWarehouseOperationZoneReportService { @Resource private BiWarehouseOperationZoneReportMapper biWarehouseOperationZoneReportMapper; - public WarehouseOperationZoneVO loadLatestWarehouseOperationZone() { - return biWarehouseOperationZoneReportMapper.loadLatestWarehouseOperationZone(); + /** + * @param organizationName 企业运营/组织名称(模糊匹配),为空时取全表最新一条 + */ + public WarehouseOperationZoneVO loadWarehouseOperationZone(String organizationName) { + return biWarehouseOperationZoneReportMapper.loadWarehouseOperationZone(StringUtils.trimToNull(organizationName)); } } 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 4e63389d9..b4c4c1b37 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 @@ -68,6 +68,20 @@ public final class WarehouseOperationZoneDemoData { ); return WarehouseOperationZoneVO.builder() + .warehouseName("新南仓") + .updateTime("2026-04-16 18:41:00") + .orderSummary(WhOrderSummaryVO.builder() + .totalCount("03600") + .inboundOrders(orderSummaryItem("入库单", 2298)) + .outboundOrders(orderSummaryItem("出库单", 1129)) + .operationOrders(orderSummaryItem("作业单", 345)) + .build()) + .coldStorageStats(WhColdStorageStatsVO.builder() + .revenueShare(coldMetric("64.8%", "+30%")) + .utilizationRate(coldMetric("28.6%", "+30%")) + .damageRate(coldMetric("1.6%", "+30%")) + .build()) + .temperatureExceptions(sampleTemperatureExceptions()) .storageOverview(WhStorageOverviewVO.builder() .title("仓储面积") .value(10) @@ -144,6 +158,38 @@ public final class WarehouseOperationZoneDemoData { .build(); } + private static WhOrderSummaryCountItemVO orderSummaryItem(String label, int value) { + return WhOrderSummaryCountItemVO.builder().label(label).value(value).build(); + } + + private static WhColdStorageMetricVO coldMetric(String value, String trend) { + return WhColdStorageMetricVO.builder().value(value).trend(trend).build(); + } + + private static List sampleTemperatureExceptions() { + return Arrays.asList( + tempException(1, "I级"), + tempException(2, "II级"), + tempException(3, "II级"), + tempException(4, "II级"), + tempException(5, "IV级"), + tempException(6, "IV级"), + tempException(7, "IV级") + ); + } + + private static WhTemperatureExceptionVO tempException(int rank, String level) { + return WhTemperatureExceptionVO.builder() + .rank(rank) + .level(level) + .area("A1区") + .deviceId("01020304") + .temperature("-4°C") + .duration("持续0小时12分钟") + .occurTime("04-16 18:41") + .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) { 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 d75f1207c..6d6156940 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 @@ -19,12 +19,14 @@ import com.mhd.bi.interfaces.facadeApi.biReport.vo.warehouseZone.WarehouseOperat import com.mhd.common.core.web.controller.BaseController; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** @@ -112,20 +114,24 @@ public class BiReportApi extends BaseController { /** * 仓储运营专区(大屏「仓储运营专区」Tab) */ - @ApiOperation(value = "仓储运营专区查询", notes = "返回 DEL_FLAG=1 且 CREATE_TIME 最新的一条整包 JSON 解析结果") + @ApiOperation(value = "仓储运营专区查询", notes = "未传 organizationName 时返回全表最新一条;") @GetMapping("/warehouseOperationZone") - public BiApiResult warehouseOperationZone() { - WarehouseOperationZoneVO data = biWarehouseOperationZoneReportService.loadLatestWarehouseOperationZone(); + public BiApiResult warehouseOperationZone( + @ApiParam(value = "企业运营/组织名称") + @RequestParam(value = "organizationName", required = false) String organizationName) { + WarehouseOperationZoneVO data = biWarehouseOperationZoneReportService.loadWarehouseOperationZone(organizationName); return BiApiResult.ok(data); } /** * 运输运营专区(大屏「运输运营专区」Tab) */ - @ApiOperation(value = "运输运营专区查询", notes = "返回 DEL_FLAG=1 且 CREATE_TIME 最新的一条整包 JSON 解析结果") + @ApiOperation(value = "运输运营专区查询", notes = "未传 organizationName 时返回全表最新一条;传入时双向模糊匹配 ORGANIZATION_NAME(库名包含关键词,或关键词包含库名)") @GetMapping("/transportOperationZone") - public BiApiResult transportOperationZone() { - TransportOperationZoneVO data = biTransportOperationZoneReportService.loadLatestTransportOperationZone(); + public BiApiResult transportOperationZone( + @ApiParam(value = "企业运营/组织名称,与快照表 ORGANIZATION_NAME 双向模糊匹配") + @RequestParam(value = "organizationName", required = false) String organizationName) { + TransportOperationZoneVO data = biTransportOperationZoneReportService.loadTransportOperationZone(organizationName); return BiApiResult.ok(data); } diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrBrandOrderStatsVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrBrandOrderStatsVO.java new file mode 100644 index 000000000..828bf0f98 --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrBrandOrderStatsVO.java @@ -0,0 +1,41 @@ +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 TrBrandOrderStatsVO { + + @JsonProperty("planned_delivery") + @ApiModelProperty("计划配送") + private TrOrderStatMetricVO plannedDelivery; + + @JsonProperty("order_quantity") + @ApiModelProperty("订单数量") + private TrOrderStatMetricVO orderQuantity; + + @JsonProperty("vehicles_in_transit") + @ApiModelProperty("在途车辆") + private TrOrderStatMetricVO vehiclesInTransit; + + @JsonProperty("completed_delivery") + @ApiModelProperty("完成配送") + private TrOrderStatTextMetricVO completedDelivery; + + @JsonProperty("overtime_delivery") + @ApiModelProperty("超时配送") + private TrOrderStatMetricVO overtimeDelivery; + + @JsonProperty("on_time_rate") + @ApiModelProperty("准时配送率") + private TrOrderStatRateMetricVO onTimeRate; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCapacityStatItemVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCapacityStatItemVO.java new file mode 100644 index 000000000..e0aa878ad --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCapacityStatItemVO.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 TrCapacityStatItemVO { + + @ApiModelProperty("数值") + private Integer value; + + @ApiModelProperty("单位") + private String unit; + + @ApiModelProperty("标签") + private String label; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCapacityStatsVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCapacityStatsVO.java new file mode 100644 index 000000000..ecfc77724 --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCapacityStatsVO.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 TrCapacityStatsVO { + + @ApiModelProperty("车辆") + private TrCapacityStatItemVO vehicles; + + @ApiModelProperty("驾驶员") + private TrCapacityStatItemVO drivers; + + @ApiModelProperty("押运员") + private TrCapacityStatItemVO escorts; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCargoTypeDetailVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCargoTypeDetailVO.java new file mode 100644 index 000000000..17b5facfe --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCargoTypeDetailVO.java @@ -0,0 +1,30 @@ +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 TrCargoTypeDetailVO { + + @JsonProperty("type_code") + @ApiModelProperty("类型编码") + private String typeCode; + + @ApiModelProperty("类型名称") + private String name; + + @ApiModelProperty("占比") + private String percentage; + + @ApiModelProperty("图表颜色") + private String color; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCargoTypeDistributionVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCargoTypeDistributionVO.java new file mode 100644 index 000000000..66b163319 --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrCargoTypeDistributionVO.java @@ -0,0 +1,33 @@ +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 TrCargoTypeDistributionVO { + + @ApiModelProperty("标题") + private String title; + + @JsonProperty("total_orders") + @ApiModelProperty("订单总量") + private Integer totalOrders; + + @JsonProperty("total_unit") + @ApiModelProperty("总量单位") + private String totalUnit; + + @ApiModelProperty("明细") + private List details; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderStatMetricVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderStatMetricVO.java new file mode 100644 index 000000000..ba52f297a --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderStatMetricVO.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 TrOrderStatMetricVO { + + @ApiModelProperty("数值") + private Integer value; + + @ApiModelProperty("单位") + private String unit; + + @ApiModelProperty("标签") + private String label; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderStatRateMetricVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderStatRateMetricVO.java new file mode 100644 index 000000000..c3997b794 --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderStatRateMetricVO.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 TrOrderStatRateMetricVO { + + @ApiModelProperty("展示值") + private String value; + + @ApiModelProperty("环比/趋势") + private String trend; + + @ApiModelProperty("标签") + private String label; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderStatTextMetricVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderStatTextMetricVO.java new file mode 100644 index 000000000..058514f7d --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/transportZone/TrOrderStatTextMetricVO.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 TrOrderStatTextMetricVO { + + @ApiModelProperty("展示值") + private String value; + + @ApiModelProperty("单位") + private String unit; + + @ApiModelProperty("标签") + private String label; +} 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 index 54c6b4a0e..1cf2247b8 100644 --- 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 @@ -77,4 +77,20 @@ public class TransportOperationZoneVO { @JsonProperty("transport_summary") @ApiModelProperty("运输统计总结") private TrTransportSummaryVO transportSummary; + + @JsonProperty("capacity_stats") + @ApiModelProperty("企业运力统计") + private TrCapacityStatsVO capacityStats; + + @JsonProperty("cargo_type_distribution") + @ApiModelProperty("货物类型分布") + private TrCargoTypeDistributionVO cargoTypeDistribution; + + @JsonProperty("fresh_order_stats") + @ApiModelProperty("生鲜订单统计") + private TrBrandOrderStatsVO freshOrderStats; + + @JsonProperty("vitasoy_order_stats") + @ApiModelProperty("维他奶订单统计") + private TrBrandOrderStatsVO vitasoyOrderStats; } 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 01975022a..7eee37645 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 @@ -20,6 +20,26 @@ import java.util.List; @ApiModel("BI-仓储运营专区") public class WarehouseOperationZoneVO { + @JsonProperty("warehouse_name") + @ApiModelProperty("仓库名称") + private String warehouseName; + + @JsonProperty("update_time") + @ApiModelProperty("数据更新时间") + private String updateTime; + + @JsonProperty("order_summary") + @ApiModelProperty("仓库订单统计(顶部)") + private WhOrderSummaryVO orderSummary; + + @JsonProperty("cold_storage_stats") + @ApiModelProperty("冻仓数据统计") + private WhColdStorageStatsVO coldStorageStats; + + @JsonProperty("temperature_exceptions") + @ApiModelProperty("温度异常事件列表") + private List temperatureExceptions; + @JsonProperty("storage_overview") @ApiModelProperty("仓储面积") private WhStorageOverviewVO storageOverview; diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhColdStorageMetricVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhColdStorageMetricVO.java new file mode 100644 index 000000000..e1d94ec01 --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhColdStorageMetricVO.java @@ -0,0 +1,22 @@ +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; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel("BI-仓储运营专区-冻仓指标") +public class WhColdStorageMetricVO { + + @ApiModelProperty("展示值") + private String value; + + @ApiModelProperty("趋势") + private String trend; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhColdStorageStatsVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhColdStorageStatsVO.java new file mode 100644 index 000000000..94d6b1cab --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhColdStorageStatsVO.java @@ -0,0 +1,29 @@ +package com.mhd.bi.interfaces.facadeApi.biReport.vo.warehouseZone; + +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 WhColdStorageStatsVO { + + @JsonProperty("revenue_share") + @ApiModelProperty("收入占比") + private WhColdStorageMetricVO revenueShare; + + @JsonProperty("utilization_rate") + @ApiModelProperty("利用率") + private WhColdStorageMetricVO utilizationRate; + + @JsonProperty("damage_rate") + @ApiModelProperty("损耗率") + private WhColdStorageMetricVO damageRate; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhOrderSummaryCountItemVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhOrderSummaryCountItemVO.java new file mode 100644 index 000000000..01c02ebd8 --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhOrderSummaryCountItemVO.java @@ -0,0 +1,22 @@ +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; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel("BI-仓储运营专区-订单汇总项") +public class WhOrderSummaryCountItemVO { + + @ApiModelProperty("标签") + private String label; + + @ApiModelProperty("数量") + private Integer value; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhOrderSummaryVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhOrderSummaryVO.java new file mode 100644 index 000000000..89d5c392d --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhOrderSummaryVO.java @@ -0,0 +1,33 @@ +package com.mhd.bi.interfaces.facadeApi.biReport.vo.warehouseZone; + +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 WhOrderSummaryVO { + + @JsonProperty("total_count") + @ApiModelProperty("订单总量(翻牌器)") + private String totalCount; + + @JsonProperty("inbound_orders") + @ApiModelProperty("入库单") + private WhOrderSummaryCountItemVO inboundOrders; + + @JsonProperty("outbound_orders") + @ApiModelProperty("出库单") + private WhOrderSummaryCountItemVO outboundOrders; + + @JsonProperty("operation_orders") + @ApiModelProperty("作业单") + private WhOrderSummaryCountItemVO operationOrders; +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhTemperatureExceptionVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhTemperatureExceptionVO.java new file mode 100644 index 000000000..909beaaf6 --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/warehouseZone/WhTemperatureExceptionVO.java @@ -0,0 +1,40 @@ +package com.mhd.bi.interfaces.facadeApi.biReport.vo.warehouseZone; + +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 WhTemperatureExceptionVO { + + @ApiModelProperty("序号") + private Integer rank; + + @ApiModelProperty("等级") + private String level; + + @ApiModelProperty("区域") + private String area; + + @JsonProperty("device_id") + @ApiModelProperty("设备编号") + private String deviceId; + + @ApiModelProperty("温度") + private String temperature; + + @ApiModelProperty("持续时长") + private String duration; + + @JsonProperty("occur_time") + @ApiModelProperty("发生时间") + private String occurTime; +} diff --git a/mhd-bi/src/main/resources/mapper/biTransportOperationZone/BiTransportOperationZoneReportMapper.xml b/mhd-bi/src/main/resources/mapper/biTransportOperationZone/BiTransportOperationZoneReportMapper.xml index 9a4dfda4f..98a24dcf6 100644 --- a/mhd-bi/src/main/resources/mapper/biTransportOperationZone/BiTransportOperationZoneReportMapper.xml +++ b/mhd-bi/src/main/resources/mapper/biTransportOperationZone/BiTransportOperationZoneReportMapper.xml @@ -7,6 +7,15 @@ select PAYLOAD_JSON from NGWL_TEST_BI.BI_TRANSPORT_OPERATION_ZONE_SNAPSHOT where DEL_FLAG = 1 + + and ( + ORGANIZATION_NAME like '%' || #{organizationName} || '%' + or ( + ORGANIZATION_NAME is not null + and INSTR(#{organizationName}, ORGANIZATION_NAME) > 0 + ) + ) + order by CREATE_TIME desc nulls last, ID desc limit 1 diff --git a/mhd-bi/src/main/resources/mapper/biWarehouseOperationZone/BiWarehouseOperationZoneReportMapper.xml b/mhd-bi/src/main/resources/mapper/biWarehouseOperationZone/BiWarehouseOperationZoneReportMapper.xml index 8e20f8616..4bce04b54 100644 --- a/mhd-bi/src/main/resources/mapper/biWarehouseOperationZone/BiWarehouseOperationZoneReportMapper.xml +++ b/mhd-bi/src/main/resources/mapper/biWarehouseOperationZone/BiWarehouseOperationZoneReportMapper.xml @@ -7,6 +7,15 @@ select PAYLOAD_JSON from NGWL_TEST_BI.BI_WAREHOUSE_OPERATION_ZONE_SNAPSHOT where DEL_FLAG = 1 + + and ( + ORGANIZATION_NAME like '%' || #{organizationName} || '%' + or ( + ORGANIZATION_NAME is not null + and INSTR(#{organizationName}, ORGANIZATION_NAME) > 0 + ) + ) + order by CREATE_TIME desc nulls last, ID desc limit 1 From 3b12c6fe0ae2c1341f3f2daef977d0837430e5fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Tue, 19 May 2026 15:13:09 +0800 Subject: [PATCH 04/11] =?UTF-8?q?BI=E5=A4=A7=E5=B1=8F=E8=BF=90=E8=BE=93?= =?UTF-8?q?=E8=BF=90=E8=90=A5=E4=B8=93=E5=8C=BA=E6=9F=A5=E8=AF=A2=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../support/TransportOperationZoneDemoData.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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 index 069576cb9..b1dfb6ad9 100644 --- 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 @@ -55,11 +55,11 @@ public final class TransportOperationZoneDemoData { ); 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) + row("NO.1", "通宇", "268.25万", "2400单", 95), + row("NO.2", "南岐", "258.15万", "1800单", 98), + row("NO.3", "谷丰", "242.32万", "1200单", 13), + row("NO.4", "仓码", "231.54万", "800单", 12), + row("NO.5", "横琴", "220.90万", "567单", 15) ); List cargoItems = Arrays.asList( From cc8051b579734c79529153214d27b71ec7fb136e Mon Sep 17 00:00:00 2001 From: zhaoqing <1670883518@qq.com> Date: Tue, 19 May 2026 15:45:41 +0800 Subject: [PATCH 05/11] =?UTF-8?q?=E8=B4=B8=E6=98=93=E5=8D=95=E8=AF=81?= =?UTF-8?q?=E8=AF=A6=E6=83=85-=E4=BB=B6=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...sDocumentCargoMultiApplicationService.java | 27 +++++++++++++++++++ .../BusinessDocumentCargoMultiMapper.java | 5 ++++ .../po/BusinessDocumentCargoMultiPO.java | 4 +++ .../BusinessDocumentCargoMultiApi.java | 14 +++++----- .../BusinessDocumentCargoMultiMapper.xml | 13 +++++++++ 5 files changed, 55 insertions(+), 8 deletions(-) diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentCargoMulti/BusinessDocumentCargoMultiApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentCargoMulti/BusinessDocumentCargoMultiApplicationService.java index 0ba35bd8a..d0046c4bd 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentCargoMulti/BusinessDocumentCargoMultiApplicationService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentCargoMulti/BusinessDocumentCargoMultiApplicationService.java @@ -1,13 +1,19 @@ package com.mhd.oms.application.service.businessDocumentCargoMulti; +import com.mhd.common.core.web.page.TableDataInfo; +import com.mhd.oms.domain.businessDocumentCargoMulti.repository.mapper.BusinessDocumentCargoMultiMapper; import com.mhd.oms.domain.businessDocumentCargoMulti.repository.po.BusinessDocumentCargoMultiPO; import com.mhd.oms.domain.businessDocumentCargoMulti.repository.todo.BusinessDocumentCargoMultiDO; import com.mhd.oms.domain.businessDocumentCargoMulti.service.BusinessDocumentCargoMultiDomainService; import com.mhd.common.security.utils.SecurityUtils; +import com.mhd.oms.domain.businessDocumentOrder.repository.po.BusinessDocumentOrderPO; import com.mhd.system.api.model.LoginUser; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; /** * 【请填写功能名称】ApplicationService @@ -21,6 +27,9 @@ public class BusinessDocumentCargoMultiApplicationService { @Autowired private BusinessDocumentCargoMultiDomainService businessDocumentCargoMultiDomainService; + @Resource + private BusinessDocumentCargoMultiMapper businessDocumentCargoMultiMapper; + /** * 分页查询【请填写功能名称】列表 @@ -69,4 +78,22 @@ public class BusinessDocumentCargoMultiApplicationService { } + + public TableDataInfo getByOrderId(String orderId) { + if (orderId == null ) { + TableDataInfo tableDataInfo = new TableDataInfo(); + tableDataInfo.setData(new ArrayList<>()); + tableDataInfo.setTotal(0); + tableDataInfo.setCode(200); + return tableDataInfo; + } + + List list = businessDocumentCargoMultiMapper.selectBatchByOrderId(orderId); + + TableDataInfo tableDataInfo = new TableDataInfo(); + tableDataInfo.setData(list); + tableDataInfo.setTotal(list.size()); + tableDataInfo.setCode(200); + return tableDataInfo; + } } diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentCargoMulti/repository/mapper/BusinessDocumentCargoMultiMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentCargoMulti/repository/mapper/BusinessDocumentCargoMultiMapper.java index 61430fe50..6a2a7886c 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentCargoMulti/repository/mapper/BusinessDocumentCargoMultiMapper.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentCargoMulti/repository/mapper/BusinessDocumentCargoMultiMapper.java @@ -5,7 +5,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mhd.oms.domain.businessDocumentCargoMulti.entity.BusinessDocumentCargoMulti; import com.mhd.oms.domain.businessDocumentCargoMulti.repository.po.BusinessDocumentCargoMultiPO; import com.mhd.oms.domain.businessDocumentCargoMulti.repository.todo.BusinessDocumentCargoMultiDO; +import com.mhd.oms.domain.businessDocumentOrder.repository.po.BusinessDocumentOrderPO; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + /** * 【请填写功能名称】Mapper接口 * @@ -19,4 +22,6 @@ public interface BusinessDocumentCargoMultiMapper extends BaseMapper queryList(BusinessDocumentCargoMultiDO businessDocumentCargoMultiDO); + + List selectBatchByOrderId(@Param("orderId") String orderId); } diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentCargoMulti/repository/po/BusinessDocumentCargoMultiPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentCargoMulti/repository/po/BusinessDocumentCargoMultiPO.java index 8335fac62..c2b01b4b9 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentCargoMulti/repository/po/BusinessDocumentCargoMultiPO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentCargoMulti/repository/po/BusinessDocumentCargoMultiPO.java @@ -67,5 +67,9 @@ public class BusinessDocumentCargoMultiPO extends BaseVOEntity{ @ApiModelProperty("物料id") private Long materialBaseInfoId; + @ApiModelProperty("订单id") + private String OrderId; + @ApiModelProperty("货物信息-件数") + private BigDecimal CargoNum; } diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/businessDocumentCargoMulti/BusinessDocumentCargoMultiApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/businessDocumentCargoMulti/BusinessDocumentCargoMultiApi.java index d5b43d562..ecc9d396a 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/businessDocumentCargoMulti/BusinessDocumentCargoMultiApi.java +++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/businessDocumentCargoMulti/BusinessDocumentCargoMultiApi.java @@ -4,13 +4,7 @@ import java.util.List; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import com.mhd.oms.interfaces.dto.businessDocumentCargoMulti.BusinessDocumentCargoMultiDTO; import com.mhd.oms.domain.businessDocumentCargoMulti.repository.todo.BusinessDocumentCargoMultiDO; import com.mhd.oms.domain.businessDocumentCargoMulti.repository.po.BusinessDocumentCargoMultiPO; @@ -89,7 +83,11 @@ public class BusinessDocumentCargoMultiApi extends BaseController{ - + @ApiOperation("根据物料ID列表批量查询物料") + @GetMapping("/getBatchByOrderId") + public TableDataInfo getBatchByIds(@RequestParam("orderId") String orderId) { + return businessDocumentCargoMultiApplicationService.getByOrderId(orderId); + } diff --git a/mhd_oms/src/main/resources/mapper/businessDocumentCargoMulti/BusinessDocumentCargoMultiMapper.xml b/mhd_oms/src/main/resources/mapper/businessDocumentCargoMulti/BusinessDocumentCargoMultiMapper.xml index 56b88b1b0..dee932f53 100644 --- a/mhd_oms/src/main/resources/mapper/businessDocumentCargoMulti/BusinessDocumentCargoMultiMapper.xml +++ b/mhd_oms/src/main/resources/mapper/businessDocumentCargoMulti/BusinessDocumentCargoMultiMapper.xml @@ -22,6 +22,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + @@ -89,4 +92,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + + \ No newline at end of file From 5d81c89de7a828cf5239e30eed19843f93b7cb57 Mon Sep 17 00:00:00 2001 From: zhaoqing <1670883518@qq.com> Date: Tue, 19 May 2026 16:01:40 +0800 Subject: [PATCH 06/11] =?UTF-8?q?=E5=88=A0=E6=94=B9=E5=8D=95=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessDocumentOrderApplicationService.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java index 6cf459188..182e05e6d 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java @@ -321,8 +321,6 @@ public class BusinessDocumentOrderApplicationService { item.put("appMan", businessDocumentOrderDTO.getReviseApplyBy()); item.put("appMess", businessDocumentOrderDTO.getReviseApplyReason()); - - // 2. 记录日志 GwLog gwLog = new GwLog(); gwLog.setType("删改单申请"); @@ -361,7 +359,7 @@ public class BusinessDocumentOrderApplicationService { if(dataArray != null && dataArray.size()>0){ JSONObject dataObj = dataArray.getJSONObject(0); - if("1".equals(String.valueOf(responseJson.get("data.code")))){ + if("1".equals(String.valueOf(dataObj.get("code")))){ gwLog.setStatus(2); businessDocumentOrderDTO.setReviseApplyStatus(1); updateReservationOrder(businessDocumentOrderDTO); From 1f08d86746348903c8820c125224f05cadcf8c9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Tue, 19 May 2026 17:02:51 +0800 Subject: [PATCH 07/11] =?UTF-8?q?BI=E5=A4=A7=E5=B1=8F=E6=80=BB=E4=BD=93?= =?UTF-8?q?=E8=BF=90=E8=90=A5=E6=80=81=E5=8A=BF=E6=9F=A5=E8=AF=A2=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BiOverallOperationReportMapper.java | 7 +++-- .../BiReportSnapshotMapperSupport.java | 5 +-- .../BiSnapshotWeeklyRandomDataBuilder.java | 21 +++---------- .../OverallTransportEnterpriseRankVO.java | 31 ------------------- .../overall/OverallTransportOperationVO.java | 9 ++++-- .../OverallWarehouseCapabilityRankVO.java | 10 +++--- .../overall/OverallWarehouseOperationVO.java | 4 ++- 7 files changed, 28 insertions(+), 59 deletions(-) delete mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallTransportEnterpriseRankVO.java diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biOverallOperation/repository/mapper/BiOverallOperationReportMapper.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biOverallOperation/repository/mapper/BiOverallOperationReportMapper.java index 219e77540..0487d3e99 100644 --- a/mhd-bi/src/main/java/com/mhd/bi/domain/biOverallOperation/repository/mapper/BiOverallOperationReportMapper.java +++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biOverallOperation/repository/mapper/BiOverallOperationReportMapper.java @@ -1,5 +1,6 @@ package com.mhd.bi.domain.biOverallOperation.repository.mapper; +import com.mhd.bi.domain.biOverallOperation.support.OverallOperationPayloadNormalizer; import com.mhd.bi.domain.biReport.support.BiReportSnapshotMapperSupport; import com.mhd.bi.interfaces.facadeApi.biReport.vo.overall.OverallOperationSituationVO; @@ -11,10 +12,12 @@ public interface BiOverallOperationReportMapper { String selectLatestPayloadJson(); default OverallOperationSituationVO loadLatestOverallOperation() { - return BiReportSnapshotMapperSupport.parsePayload( - selectLatestPayloadJson(), + String json = OverallOperationPayloadNormalizer.normalizeJson(selectLatestPayloadJson()); + OverallOperationSituationVO vo = BiReportSnapshotMapperSupport.parsePayload( + json, OverallOperationSituationVO.class, BiReportSnapshotMapperSupport::emptyOverallOperationSituation, "总体运营态势"); + return OverallOperationPayloadNormalizer.ensureDefaults(vo); } } 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 003f4f802..3bef7d528 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 @@ -5,6 +5,7 @@ import com.mhd.bi.interfaces.facadeApi.biReport.vo.ComprehensiveSituationVO; 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.transportZone.TrTypedChartVO; import com.mhd.bi.interfaces.facadeApi.biReport.vo.platform.*; import com.mhd.bi.interfaces.facadeApi.biReport.vo.hkMacaoZone.*; import com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone.*; @@ -117,7 +118,7 @@ public final class BiReportSnapshotMapperSupport { .customerCount(0L).coverageArea("") .annualThroughput(0).throughputUnit("").throughputGrowth(0d) .build()) - .capabilityRanking(Collections.emptyList()) + .capabilityRanking(BiWarehouseCapabilityRankingSupport.defaultRanking()) .build()) .map(OverallMapSectionVO.builder().nodes(Collections.emptyList()).build()) .transport(OverallTransportOperationVO.builder() @@ -133,7 +134,7 @@ public final class BiReportSnapshotMapperSupport { .freightTrendByMonth(Collections.emptyList()) .orderDistribution(OverallTransportModeDistributionVO.builder() .crossBorder(0L).domestic(0L).build()) - .enterpriseRanking(Collections.emptyList()) + .onTimeRate(BiOnTimeDeliveryRateChartSupport.emptyChartShell()) .build()) .build(); } diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/support/BiSnapshotWeeklyRandomDataBuilder.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/support/BiSnapshotWeeklyRandomDataBuilder.java index 28e341915..9b2ad91b2 100644 --- a/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/support/BiSnapshotWeeklyRandomDataBuilder.java +++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/support/BiSnapshotWeeklyRandomDataBuilder.java @@ -1,11 +1,12 @@ package com.mhd.bi.domain.biSnapshotSync.support; +import com.mhd.bi.domain.biReport.support.BiOnTimeDeliveryRateChartSupport; +import com.mhd.bi.domain.biReport.support.BiWarehouseCapabilityRankingSupport; import com.mhd.bi.interfaces.facadeApi.biReport.vo.ComprehensiveSituationVO; 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 java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; @@ -242,7 +243,7 @@ public final class BiSnapshotWeeklyRandomDataBuilder { /** * 与产品约定返回值示例一致,供快照同步与联调。 - * {@code warehouse.capabilityRanking}、{@code transport.enterpriseRanking} 的 {@code name} 为固定展示名,不参与随机抖动。 + * 左侧 {@code warehouse.capabilityRanking} 仓储运营能力表;右下角 {@code transport.on_time_rate} 准时配送率。 */ public static OverallOperationSituationVO overallReferenceDashboard() { return OverallOperationSituationVO.builder() @@ -284,13 +285,7 @@ public final class BiSnapshotWeeklyRandomDataBuilder { .throughputUnit("万吨") .throughputGrowth(8.5) .build()) - .capabilityRanking(Arrays.asList( - OverallWarehouseCapabilityRankVO.builder().rank(1).name("君华仓").processedVolume("2,400单").throughput("5.2万吨").utilizationRate("85%").build(), - OverallWarehouseCapabilityRankVO.builder().rank(2).name("通宇仓").processedVolume("1,800单").throughput("4.1万吨").utilizationRate("78%").build(), - OverallWarehouseCapabilityRankVO.builder().rank(3).name("横琴仓").processedVolume("1,200单").throughput("3.5万吨").utilizationRate("92%").build(), - OverallWarehouseCapabilityRankVO.builder().rank(4).name("新南仓").processedVolume("800单").throughput("2.2万吨").utilizationRate("65%").build(), - OverallWarehouseCapabilityRankVO.builder().rank(5).name("谷丰仓").processedVolume("567单").throughput("1.8万吨").utilizationRate("45%").build() - )) + .capabilityRanking(BiWarehouseCapabilityRankingSupport.defaultRanking()) .build()) .map(OverallMapSectionVO.builder() .nodes(Arrays.asList( @@ -361,13 +356,7 @@ public final class BiSnapshotWeeklyRandomDataBuilder { .crossBorder(2400L) .domestic(2300L) .build()) - .enterpriseRanking(Arrays.asList( - OverallTransportEnterpriseRankVO.builder().rank(1).name("通宇").processedVolume("2,400单").freight("5.2万吨").onTimeRate("85%").build(), - OverallTransportEnterpriseRankVO.builder().rank(2).name("南岐").processedVolume("1,800单").freight("4.1万吨").onTimeRate("78%").build(), - OverallTransportEnterpriseRankVO.builder().rank(3).name("谷丰").processedVolume("1,200单").freight("3.5万吨").onTimeRate("92%").build(), - OverallTransportEnterpriseRankVO.builder().rank(4).name("仓码").processedVolume("800单").freight("2.2万吨").onTimeRate("65%").build(), - OverallTransportEnterpriseRankVO.builder().rank(5).name("横琴").processedVolume("567单").freight("1.8万吨").onTimeRate("45%").build() - )) + .onTimeRate(BiOnTimeDeliveryRateChartSupport.defaultChart()) .build()) .build(); } diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallTransportEnterpriseRankVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallTransportEnterpriseRankVO.java deleted file mode 100644 index 5936ee887..000000000 --- a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallTransportEnterpriseRankVO.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.mhd.bi.interfaces.facadeApi.biReport.vo.overall; - -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("运输-企业排行榜行") -public class OverallTransportEnterpriseRankVO { - - @ApiModelProperty("排名") - private Integer rank; - - @ApiModelProperty("企业名称") - private String name; - - @ApiModelProperty("处理量文案") - private String processedVolume; - - @ApiModelProperty("货运量文案") - private String freight; - - @ApiModelProperty("准时率文案") - private String onTimeRate; -} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallTransportOperationVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallTransportOperationVO.java index 08308c6d9..a0aeb2948 100644 --- a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallTransportOperationVO.java +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallTransportOperationVO.java @@ -1,5 +1,8 @@ package com.mhd.bi.interfaces.facadeApi.biReport.vo.overall; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone.TrTypedChartVO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; @@ -14,6 +17,7 @@ import java.util.List; @NoArgsConstructor @AllArgsConstructor @ApiModel("总体运营态势-运输运营") +@JsonIgnoreProperties(ignoreUnknown = true) public class OverallTransportOperationVO { @ApiModelProperty("运输订单摘要") @@ -31,6 +35,7 @@ public class OverallTransportOperationVO { @ApiModelProperty("运输订单分布") private OverallTransportModeDistributionVO orderDistribution; - @ApiModelProperty("企业运营能力排名") - private List enterpriseRanking; + @JsonProperty("on_time_rate") + @ApiModelProperty("准时配送率(右下角,与运输运营专区 on_time_rate 结构一致)") + private TrTypedChartVO onTimeRate; } diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallWarehouseCapabilityRankVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallWarehouseCapabilityRankVO.java index 080e932a5..ee8193835 100644 --- a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallWarehouseCapabilityRankVO.java +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallWarehouseCapabilityRankVO.java @@ -11,21 +11,21 @@ import lombok.NoArgsConstructor; @Builder @NoArgsConstructor @AllArgsConstructor -@ApiModel("仓储-运营能力排行行") +@ApiModel("总体运营态势-左侧仓储运营能力排行行") public class OverallWarehouseCapabilityRankVO { @ApiModelProperty("排名") private Integer rank; - @ApiModelProperty("仓库名称") + @ApiModelProperty("仓库/业务名称") private String name; - @ApiModelProperty("处理量展示文案,如 2,400单") + @ApiModelProperty("处理单量展示,如 2,400单") private String processedVolume; - @ApiModelProperty("吞吐量展示文案,如 5.2万吨") + @ApiModelProperty("吞吐量展示,如 5.2万吨") private String throughput; - @ApiModelProperty("利用率/周转等展示文案,如 85%") + @ApiModelProperty("周转率/利用率展示,如 85%") private String utilizationRate; } diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallWarehouseOperationVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallWarehouseOperationVO.java index eeb427d81..9946378a6 100644 --- a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallWarehouseOperationVO.java +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallWarehouseOperationVO.java @@ -1,5 +1,6 @@ package com.mhd.bi.interfaces.facadeApi.biReport.vo.overall; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; @@ -14,6 +15,7 @@ import java.util.List; @NoArgsConstructor @AllArgsConstructor @ApiModel("总体运营态势-仓储运营") +@JsonIgnoreProperties(ignoreUnknown = true) public class OverallWarehouseOperationVO { @ApiModelProperty("仓库订单统计") @@ -31,6 +33,6 @@ public class OverallWarehouseOperationVO { @ApiModelProperty("仓库运营统计") private OverallWarehouseBizStatisticVO bizStatistics; - @ApiModelProperty("仓库运营能力排名") + @ApiModelProperty("左侧仓储运营能力排名表") private List capabilityRanking; } From cd42d6be05b7e8067eedc0c540a93a6d2fae07f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Tue, 19 May 2026 17:06:58 +0800 Subject: [PATCH 08/11] =?UTF-8?q?BI=E5=A4=A7=E5=B1=8F=E6=80=BB=E4=BD=93?= =?UTF-8?q?=E8=BF=90=E8=90=A5=E6=80=81=E5=8A=BF=E6=9F=A5=E8=AF=A2=E4=BF=AE?= =?UTF-8?q?=E6=94=B91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OverallOperationPayloadNormalizer.java | 78 +++++++++++++++++++ .../BiOnTimeDeliveryRateChartSupport.java | 50 ++++++++++++ .../BiWarehouseCapabilityRankingSupport.java | 28 +++++++ 3 files changed, 156 insertions(+) create mode 100644 mhd-bi/src/main/java/com/mhd/bi/domain/biOverallOperation/support/OverallOperationPayloadNormalizer.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiOnTimeDeliveryRateChartSupport.java create mode 100644 mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiWarehouseCapabilityRankingSupport.java diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biOverallOperation/support/OverallOperationPayloadNormalizer.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biOverallOperation/support/OverallOperationPayloadNormalizer.java new file mode 100644 index 000000000..542bdd75b --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biOverallOperation/support/OverallOperationPayloadNormalizer.java @@ -0,0 +1,78 @@ +package com.mhd.bi.domain.biOverallOperation.support; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.mhd.bi.domain.biReport.support.BiOnTimeDeliveryRateChartSupport; +import com.mhd.bi.domain.biReport.support.BiWarehouseCapabilityRankingSupport; +import com.mhd.bi.interfaces.facadeApi.biReport.vo.overall.OverallOperationSituationVO; +import com.mhd.bi.interfaces.facadeApi.biReport.vo.overall.OverallTransportOperationVO; +import com.mhd.bi.interfaces.facadeApi.biReport.vo.overall.OverallWarehouseOperationVO; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +/** + * 总体运营态势:左侧保留 warehouse.capabilityRanking;右下角 transport.on_time_rate 替代 enterpriseRanking。 + */ +@Slf4j +public final class OverallOperationPayloadNormalizer { + + private static final ObjectMapper MAPPER = new ObjectMapper(); + + private OverallOperationPayloadNormalizer() { + } + + public static String normalizeJson(String json) { + if (StringUtils.isBlank(json)) { + return json; + } + try { + JsonNode root = MAPPER.readTree(json.trim()); + boolean changed = false; + + JsonNode warehouse = root.path("warehouse"); + if (warehouse.isObject()) { + ObjectNode warehouseObj = (ObjectNode) warehouse; + if (warehouseObj.has("on_time_rate")) { + warehouseObj.remove("on_time_rate"); + changed = true; + } + } + + JsonNode transport = root.path("transport"); + if (transport.isObject()) { + ObjectNode transportObj = (ObjectNode) transport; + if (transportObj.has("enterpriseRanking")) { + transportObj.remove("enterpriseRanking"); + changed = true; + } + if (!transportObj.has("on_time_rate")) { + transportObj.set("on_time_rate", + MAPPER.valueToTree(BiOnTimeDeliveryRateChartSupport.defaultChart())); + changed = true; + } + } + + return changed ? MAPPER.writeValueAsString(root) : json; + } catch (Exception e) { + log.warn("总体运营态势 PAYLOAD_JSON 规范化失败,按原 JSON 解析", e); + return json; + } + } + + public static OverallOperationSituationVO ensureDefaults(OverallOperationSituationVO vo) { + if (vo == null) { + return null; + } + OverallWarehouseOperationVO warehouse = vo.getWarehouse(); + if (warehouse != null + && (warehouse.getCapabilityRanking() == null || warehouse.getCapabilityRanking().isEmpty())) { + warehouse.setCapabilityRanking(BiWarehouseCapabilityRankingSupport.defaultRanking()); + } + OverallTransportOperationVO transport = vo.getTransport(); + if (transport != null && BiOnTimeDeliveryRateChartSupport.isChartEmpty(transport.getOnTimeRate())) { + transport.setOnTimeRate(BiOnTimeDeliveryRateChartSupport.defaultChart()); + } + return vo; + } +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiOnTimeDeliveryRateChartSupport.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiOnTimeDeliveryRateChartSupport.java new file mode 100644 index 000000000..ef83b438c --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiOnTimeDeliveryRateChartSupport.java @@ -0,0 +1,50 @@ +package com.mhd.bi.domain.biReport.support; + +import com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone.TrMonthValuePointVO; +import com.mhd.bi.interfaces.facadeApi.biReport.vo.transportZone.TrTypedChartVO; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +/** + * 准时配送率折线图(总体运营 transport.on_time_rate、运输运营专区 on_time_rate 共用) + */ +public final class BiOnTimeDeliveryRateChartSupport { + + private BiOnTimeDeliveryRateChartSupport() { + } + + public static TrTypedChartVO defaultChart() { + return TrTypedChartVO.builder() + .title("准时配送率") + .type("line") + .unit("%") + .data(defaultMonthPoints()) + .build(); + } + + public static List defaultMonthPoints() { + return Arrays.asList( + TrMonthValuePointVO.builder().month("1月").value(98).build(), + TrMonthValuePointVO.builder().month("2月").value(96).build(), + TrMonthValuePointVO.builder().month("3月").value(85).build(), + TrMonthValuePointVO.builder().month("4月").value(70).build(), + TrMonthValuePointVO.builder().month("5月").value(92).build(), + TrMonthValuePointVO.builder().month("6月").value(90).build() + ); + } + + public static boolean isChartEmpty(TrTypedChartVO chart) { + return chart == null || chart.getData() == null || chart.getData().isEmpty(); + } + + public static TrTypedChartVO emptyChartShell() { + return TrTypedChartVO.builder() + .title("") + .type("") + .unit("") + .data(Collections.emptyList()) + .build(); + } +} diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiWarehouseCapabilityRankingSupport.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiWarehouseCapabilityRankingSupport.java new file mode 100644 index 000000000..ed7ef2a13 --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiWarehouseCapabilityRankingSupport.java @@ -0,0 +1,28 @@ +package com.mhd.bi.domain.biReport.support; + +import com.mhd.bi.interfaces.facadeApi.biReport.vo.overall.OverallWarehouseCapabilityRankVO; + +import java.util.Arrays; +import java.util.List; + +/** + * 总体运营态势左侧「仓储运营能力」表格默认数据 + */ +public final class BiWarehouseCapabilityRankingSupport { + + private BiWarehouseCapabilityRankingSupport() { + } + + public static List defaultRanking() { + return Arrays.asList( + OverallWarehouseCapabilityRankVO.builder().rank(1).name("横琴仓") + .processedVolume("2,400单").throughput("5.2万吨").utilizationRate("85%").build(), + OverallWarehouseCapabilityRankVO.builder().rank(2).name("陆路仓") + .processedVolume("1,800单").throughput("4.1万吨").utilizationRate("78%").build(), + OverallWarehouseCapabilityRankVO.builder().rank(3).name("联丰仓") + .processedVolume("1,200单").throughput("3.5万吨").utilizationRate("92%").build(), + OverallWarehouseCapabilityRankVO.builder().rank(4).name("香港仓") + .processedVolume("800单").throughput("2.2万吨").utilizationRate("65%").build() + ); + } +} From b01e66c4a4646e434d0f02dbca351763e7c6ae01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Tue, 19 May 2026 18:58:37 +0800 Subject: [PATCH 09/11] =?UTF-8?q?BI=E5=A4=A7=E5=B1=8F=E6=80=BB=E4=BD=93?= =?UTF-8?q?=E8=BF=90=E8=90=A5=E6=80=81=E5=8A=BF=E6=9F=A5=E8=AF=A2=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OverallOperationPayloadNormalizer.java | 27 +++++++++--- .../BiInventoryTurnoverTrendSupport.java | 42 +++++++++++++++++++ .../BiReportSnapshotMapperSupport.java | 2 +- .../BiWarehouseCapabilityRankingSupport.java | 28 ------------- .../BiSnapshotWeeklyRandomDataBuilder.java | 6 +-- .../OverallWarehouseCapabilityRankVO.java | 31 -------------- .../overall/OverallWarehouseOperationVO.java | 7 +++- 7 files changed, 73 insertions(+), 70 deletions(-) create mode 100644 mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiInventoryTurnoverTrendSupport.java delete mode 100644 mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiWarehouseCapabilityRankingSupport.java delete mode 100644 mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallWarehouseCapabilityRankVO.java diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biOverallOperation/support/OverallOperationPayloadNormalizer.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biOverallOperation/support/OverallOperationPayloadNormalizer.java index 542bdd75b..f8862e8e2 100644 --- a/mhd-bi/src/main/java/com/mhd/bi/domain/biOverallOperation/support/OverallOperationPayloadNormalizer.java +++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biOverallOperation/support/OverallOperationPayloadNormalizer.java @@ -3,8 +3,8 @@ package com.mhd.bi.domain.biOverallOperation.support; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; +import com.mhd.bi.domain.biReport.support.BiInventoryTurnoverTrendSupport; import com.mhd.bi.domain.biReport.support.BiOnTimeDeliveryRateChartSupport; -import com.mhd.bi.domain.biReport.support.BiWarehouseCapabilityRankingSupport; import com.mhd.bi.interfaces.facadeApi.biReport.vo.overall.OverallOperationSituationVO; import com.mhd.bi.interfaces.facadeApi.biReport.vo.overall.OverallTransportOperationVO; import com.mhd.bi.interfaces.facadeApi.biReport.vo.overall.OverallWarehouseOperationVO; @@ -12,7 +12,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; /** - * 总体运营态势:左侧保留 warehouse.capabilityRanking;右下角 transport.on_time_rate 替代 enterpriseRanking。 + * 总体运营态势:左侧 warehouse.turnover_rate_trend;右下角 transport.on_time_rate。 */ @Slf4j public final class OverallOperationPayloadNormalizer { @@ -30,13 +30,31 @@ public final class OverallOperationPayloadNormalizer { JsonNode root = MAPPER.readTree(json.trim()); boolean changed = false; + ObjectNode rootObj = (ObjectNode) root; JsonNode warehouse = root.path("warehouse"); if (warehouse.isObject()) { ObjectNode warehouseObj = (ObjectNode) warehouse; + if (warehouseObj.has("map") && !rootObj.has("map")) { + rootObj.set("map", warehouseObj.remove("map")); + changed = true; + } + if (warehouseObj.has("transport") && !rootObj.has("transport")) { + rootObj.set("transport", warehouseObj.remove("transport")); + changed = true; + } + if (warehouseObj.has("capabilityRanking")) { + warehouseObj.remove("capabilityRanking"); + changed = true; + } if (warehouseObj.has("on_time_rate")) { warehouseObj.remove("on_time_rate"); changed = true; } + if (!warehouseObj.has("turnover_rate_trend")) { + warehouseObj.set("turnover_rate_trend", + MAPPER.valueToTree(BiInventoryTurnoverTrendSupport.defaultTrend())); + changed = true; + } } JsonNode transport = root.path("transport"); @@ -65,9 +83,8 @@ public final class OverallOperationPayloadNormalizer { return null; } OverallWarehouseOperationVO warehouse = vo.getWarehouse(); - if (warehouse != null - && (warehouse.getCapabilityRanking() == null || warehouse.getCapabilityRanking().isEmpty())) { - warehouse.setCapabilityRanking(BiWarehouseCapabilityRankingSupport.defaultRanking()); + if (warehouse != null && BiInventoryTurnoverTrendSupport.isEmpty(warehouse.getTurnoverRateTrend())) { + warehouse.setTurnoverRateTrend(BiInventoryTurnoverTrendSupport.defaultTrend()); } OverallTransportOperationVO transport = vo.getTransport(); if (transport != null && BiOnTimeDeliveryRateChartSupport.isChartEmpty(transport.getOnTimeRate())) { diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiInventoryTurnoverTrendSupport.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiInventoryTurnoverTrendSupport.java new file mode 100644 index 000000000..a938d1a49 --- /dev/null +++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiInventoryTurnoverTrendSupport.java @@ -0,0 +1,42 @@ +package com.mhd.bi.domain.biReport.support; + +import com.mhd.bi.interfaces.facadeApi.biReport.vo.warehouseZone.WhMonthRatePointVO; +import com.mhd.bi.interfaces.facadeApi.biReport.vo.warehouseZone.WhTurnoverRateTrendVO; + +import java.util.Arrays; + +/** + * 总体运营态势左侧「库存周转率趋势」默认数据(与仓储运营专区 turnover_rate_trend 结构一致) + */ +public final class BiInventoryTurnoverTrendSupport { + + private BiInventoryTurnoverTrendSupport() { + } + + public static WhTurnoverRateTrendVO defaultTrend() { + return WhTurnoverRateTrendVO.builder() + .currentMonth("3次") + .annual("4次") + .data(Arrays.asList( + WhMonthRatePointVO.builder().month("11月").rate(10).build(), + WhMonthRatePointVO.builder().month("12月").rate(15).build(), + WhMonthRatePointVO.builder().month("1月").rate(22).build(), + WhMonthRatePointVO.builder().month("2月").rate(20).build(), + WhMonthRatePointVO.builder().month("3月").rate(12).build(), + WhMonthRatePointVO.builder().month("4月").rate(16).build() + )) + .build(); + } + + public static boolean isEmpty(WhTurnoverRateTrendVO trend) { + return trend == null || trend.getData() == null || trend.getData().isEmpty(); + } + + public static WhTurnoverRateTrendVO emptyShell() { + return WhTurnoverRateTrendVO.builder() + .currentMonth("") + .annual("") + .data(java.util.Collections.emptyList()) + .build(); + } +} 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 3bef7d528..435c6108f 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 @@ -118,7 +118,7 @@ public final class BiReportSnapshotMapperSupport { .customerCount(0L).coverageArea("") .annualThroughput(0).throughputUnit("").throughputGrowth(0d) .build()) - .capabilityRanking(BiWarehouseCapabilityRankingSupport.defaultRanking()) + .turnoverRateTrend(BiInventoryTurnoverTrendSupport.defaultTrend()) .build()) .map(OverallMapSectionVO.builder().nodes(Collections.emptyList()).build()) .transport(OverallTransportOperationVO.builder() diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiWarehouseCapabilityRankingSupport.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiWarehouseCapabilityRankingSupport.java deleted file mode 100644 index ed7ef2a13..000000000 --- a/mhd-bi/src/main/java/com/mhd/bi/domain/biReport/support/BiWarehouseCapabilityRankingSupport.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.mhd.bi.domain.biReport.support; - -import com.mhd.bi.interfaces.facadeApi.biReport.vo.overall.OverallWarehouseCapabilityRankVO; - -import java.util.Arrays; -import java.util.List; - -/** - * 总体运营态势左侧「仓储运营能力」表格默认数据 - */ -public final class BiWarehouseCapabilityRankingSupport { - - private BiWarehouseCapabilityRankingSupport() { - } - - public static List defaultRanking() { - return Arrays.asList( - OverallWarehouseCapabilityRankVO.builder().rank(1).name("横琴仓") - .processedVolume("2,400单").throughput("5.2万吨").utilizationRate("85%").build(), - OverallWarehouseCapabilityRankVO.builder().rank(2).name("陆路仓") - .processedVolume("1,800单").throughput("4.1万吨").utilizationRate("78%").build(), - OverallWarehouseCapabilityRankVO.builder().rank(3).name("联丰仓") - .processedVolume("1,200单").throughput("3.5万吨").utilizationRate("92%").build(), - OverallWarehouseCapabilityRankVO.builder().rank(4).name("香港仓") - .processedVolume("800单").throughput("2.2万吨").utilizationRate("65%").build() - ); - } -} diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/support/BiSnapshotWeeklyRandomDataBuilder.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/support/BiSnapshotWeeklyRandomDataBuilder.java index 9b2ad91b2..87fa51ff1 100644 --- a/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/support/BiSnapshotWeeklyRandomDataBuilder.java +++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/support/BiSnapshotWeeklyRandomDataBuilder.java @@ -1,7 +1,7 @@ package com.mhd.bi.domain.biSnapshotSync.support; import com.mhd.bi.domain.biReport.support.BiOnTimeDeliveryRateChartSupport; -import com.mhd.bi.domain.biReport.support.BiWarehouseCapabilityRankingSupport; +import com.mhd.bi.domain.biReport.support.BiInventoryTurnoverTrendSupport; import com.mhd.bi.interfaces.facadeApi.biReport.vo.ComprehensiveSituationVO; import com.mhd.bi.interfaces.facadeApi.biReport.vo.CustomerContributionRankVO; import com.mhd.bi.interfaces.facadeApi.biReport.vo.WarehouseTransportSituationVO; @@ -243,7 +243,7 @@ public final class BiSnapshotWeeklyRandomDataBuilder { /** * 与产品约定返回值示例一致,供快照同步与联调。 - * 左侧 {@code warehouse.capabilityRanking} 仓储运营能力表;右下角 {@code transport.on_time_rate} 准时配送率。 + * 左侧 {@code warehouse.turnover_rate_trend} 库存周转率趋势;右下角 {@code transport.on_time_rate} 准时配送率。 */ public static OverallOperationSituationVO overallReferenceDashboard() { return OverallOperationSituationVO.builder() @@ -285,7 +285,7 @@ public final class BiSnapshotWeeklyRandomDataBuilder { .throughputUnit("万吨") .throughputGrowth(8.5) .build()) - .capabilityRanking(BiWarehouseCapabilityRankingSupport.defaultRanking()) + .turnoverRateTrend(BiInventoryTurnoverTrendSupport.defaultTrend()) .build()) .map(OverallMapSectionVO.builder() .nodes(Arrays.asList( diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallWarehouseCapabilityRankVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallWarehouseCapabilityRankVO.java deleted file mode 100644 index ee8193835..000000000 --- a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallWarehouseCapabilityRankVO.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.mhd.bi.interfaces.facadeApi.biReport.vo.overall; - -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("总体运营态势-左侧仓储运营能力排行行") -public class OverallWarehouseCapabilityRankVO { - - @ApiModelProperty("排名") - private Integer rank; - - @ApiModelProperty("仓库/业务名称") - private String name; - - @ApiModelProperty("处理单量展示,如 2,400单") - private String processedVolume; - - @ApiModelProperty("吞吐量展示,如 5.2万吨") - private String throughput; - - @ApiModelProperty("周转率/利用率展示,如 85%") - private String utilizationRate; -} diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallWarehouseOperationVO.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallWarehouseOperationVO.java index 9946378a6..304842626 100644 --- a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallWarehouseOperationVO.java +++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/vo/overall/OverallWarehouseOperationVO.java @@ -1,6 +1,8 @@ package com.mhd.bi.interfaces.facadeApi.biReport.vo.overall; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.mhd.bi.interfaces.facadeApi.biReport.vo.warehouseZone.WhTurnoverRateTrendVO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; @@ -33,6 +35,7 @@ public class OverallWarehouseOperationVO { @ApiModelProperty("仓库运营统计") private OverallWarehouseBizStatisticVO bizStatistics; - @ApiModelProperty("左侧仓储运营能力排名表") - private List capabilityRanking; + @JsonProperty("turnover_rate_trend") + @ApiModelProperty("库存周转率趋势(替代原 capabilityRanking)") + private WhTurnoverRateTrendVO turnoverRateTrend; } From c8f527c9a66aefb7d260015fdcdd68da8e3b539d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Tue, 19 May 2026 19:07:13 +0800 Subject: [PATCH 10/11] =?UTF-8?q?BI=E5=A4=A7=E5=B1=8F=E6=80=BB=E4=BD=93?= =?UTF-8?q?=E8=BF=90=E8=90=A5=E6=80=81=E5=8A=BF=E7=BB=8F=E7=BA=AC=E5=BA=A6?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../support/BiSnapshotWeeklyRandomDataBuilder.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/support/BiSnapshotWeeklyRandomDataBuilder.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/support/BiSnapshotWeeklyRandomDataBuilder.java index 87fa51ff1..cb72d7b6a 100644 --- a/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/support/BiSnapshotWeeklyRandomDataBuilder.java +++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biSnapshotSync/support/BiSnapshotWeeklyRandomDataBuilder.java @@ -292,12 +292,12 @@ public final class BiSnapshotWeeklyRandomDataBuilder { OverallMapNodeVO.builder() .type("headquarters") .name("总部") - .location(Arrays.asList(113.3, 22.5)) + .location(Arrays.asList(113.55, 22.25, 0.0)) .build(), OverallMapNodeVO.builder() .type("businessUnit") .name("业务单元") - .location(Arrays.asList(113.6, 22.8)) + .location(Arrays.asList(113.55, 22.20, 0.0)) .tooltip(OverallMapTooltipVO.builder() .title("通宇业务情况分析") .data(Arrays.asList( @@ -309,7 +309,7 @@ public final class BiSnapshotWeeklyRandomDataBuilder { OverallMapNodeVO.builder() .type("warehouse") .name("通宇保税仓") - .location(Arrays.asList(113.4, 22.3)) + .location(Arrays.asList(114.16, 22.28, 0.0)) .tooltip(OverallMapTooltipVO.builder() .title("通宇保税仓情况分析") .data(Arrays.asList( From 65f8e6119b75ba8f2858588931908003c16cce92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Tue, 19 May 2026 20:27:45 +0800 Subject: [PATCH 11/11] =?UTF-8?q?BI=E6=AD=A3=E5=BC=8F=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mhd-bi/src/main/resources/bootstrap.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/mhd-bi/src/main/resources/bootstrap.yml b/mhd-bi/src/main/resources/bootstrap.yml index 83148b69b..2572662c1 100644 --- a/mhd-bi/src/main/resources/bootstrap.yml +++ b/mhd-bi/src/main/resources/bootstrap.yml @@ -14,21 +14,21 @@ spring: discovery: # server-addr: 127.0.0.1:8848 # 线上测试环境配置 容器名+端口号 - server-addr: 10.33.0.129:6010 +# server-addr: 10.33.0.129:6010 # server-addr: 10.102.192.5:6848 # username: nacos # password: manhuoda@2023 #线上正式环境 -# server-addr: 10.102.192.5:6848 -# username: nacos -# password: manhuoda@2023 + server-addr: 10.102.192.30:6848 + username: nacos + password: manhuoda@2023 config: # server-addr: 127.0.0.1:8848 # 线上测试环境配置 容器名+端口号 - server-addr: 10.33.0.129:6010 -# server-addr: 10.102.192.5:6848 -# username: nacos -# password: manhuoda@2023 +# server-addr: 10.33.0.129:6010 + server-addr: 10.102.192.30:6848 + username: nacos + password: manhuoda@2023 #线上正式环境 group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置 file-extension: yml #默认properties