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] =?UTF-8?q?BI=E5=A4=A7=E5=B1=8F=E6=80=BB=E4=BD=93=E8=BF=90?= =?UTF-8?q?=E8=90=A5=E6=80=81=E5=8A=BF=E6=9F=A5=E8=AF=A2=E4=BF=AE=E6=94=B9?= =?UTF-8?q?1?= 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() + ); + } +}