BI总体运营态势查询

This commit is contained in:
秦鸿展
2026-05-14 09:23:41 +08:00
parent 495bed1b71
commit 2f3de800a4
23 changed files with 580 additions and 1 deletions
@@ -0,0 +1,20 @@
package com.mhd.bi.domain.biOverallOperation.repository.mapper;
import com.mhd.bi.domain.biReport.support.BiReportSnapshotMapperSupport;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.overall.OverallOperationSituationVO;
/**
* 总体运营态势:SQL 见 BiOverallOperationReportMapper.xml;取数与组装均在 Mapper 层完成。
*/
public interface BiOverallOperationReportMapper {
String selectLatestPayloadJson();
default OverallOperationSituationVO loadLatestOverallOperation() {
return BiReportSnapshotMapperSupport.parsePayload(
selectLatestPayloadJson(),
OverallOperationSituationVO.class,
BiReportSnapshotMapperSupport::emptyOverallOperationSituation,
"总体运营态势");
}
}
@@ -0,0 +1,21 @@
package com.mhd.bi.domain.biOverallOperation.service;
import com.mhd.bi.domain.biOverallOperation.repository.mapper.BiOverallOperationReportMapper;
import com.mhd.bi.interfaces.facadeApi.biReport.vo.overall.OverallOperationSituationVO;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* 南光物流业务经营分析 · 总体运营态势(大图1)
*/
@Service
public class BiOverallOperationReportService {
@Resource
private BiOverallOperationReportMapper biOverallOperationReportMapper;
public OverallOperationSituationVO loadLatestOverallOperation() {
return biOverallOperationReportMapper.loadLatestOverallOperation();
}
}
@@ -242,6 +242,7 @@ public final class BiSnapshotWeeklyRandomDataBuilder {
/**
* 与产品约定返回值示例一致,供快照同步与联调。
* {@code warehouse.capabilityRanking}、{@code transport.enterpriseRanking} 的 {@code name} 为固定展示名,不参与随机抖动。
*/
public static OverallOperationSituationVO overallReferenceDashboard() {
return OverallOperationSituationVO.builder()
@@ -285,7 +286,7 @@ public final class BiSnapshotWeeklyRandomDataBuilder {
.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(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()
@@ -0,0 +1,30 @@
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;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("总体运营态势-地图节点")
public class OverallMapNodeVO {
@ApiModelProperty("类型:headquarters / businessUnit / warehouse")
private String type;
@ApiModelProperty("名称")
private String name;
@ApiModelProperty("坐标 [经度, 纬度]")
private List<Double> location;
@ApiModelProperty("悬停信息")
private OverallMapTooltipVO tooltip;
}
@@ -0,0 +1,21 @@
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;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("总体运营态势-地图")
public class OverallMapSectionVO {
@ApiModelProperty("地图节点")
private List<OverallMapNodeVO> nodes;
}
@@ -0,0 +1,22 @@
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 OverallMapTooltipDataItemVO {
@ApiModelProperty("标签")
private String label;
@ApiModelProperty("数值")
private Integer value;
}
@@ -0,0 +1,24 @@
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;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("总体运营态势-地图气泡")
public class OverallMapTooltipVO {
@ApiModelProperty("标题")
private String title;
@ApiModelProperty("指标行")
private List<OverallMapTooltipDataItemVO> data;
}
@@ -0,0 +1,31 @@
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;
/**
* 总体运营态势:与 PAYLOAD_JSON、接口 data 字段结构一致。
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("BI-总体运营态势")
public class OverallOperationSituationVO {
@ApiModelProperty("快照时间展示")
private String updateTime;
@ApiModelProperty("仓储运营")
private OverallWarehouseOperationVO warehouse;
@ApiModelProperty("地图")
private OverallMapSectionVO map;
@ApiModelProperty("运输运营")
private OverallTransportOperationVO transport;
}
@@ -0,0 +1,22 @@
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 OverallThroughputTrendMonthVO {
@ApiModelProperty("月份标签")
private String monthLabel;
@ApiModelProperty("吞吐量(与示例一致可为整数)")
private Integer throughput;
}
@@ -0,0 +1,34 @@
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 OverallTransportCapacityVO {
@ApiModelProperty("车辆总数")
private Integer totalVehicles;
@ApiModelProperty("自有车辆")
private Integer ownedVehicles;
@ApiModelProperty("社会车辆")
private Integer socialVehicles;
@ApiModelProperty("驾驶员总数")
private Integer totalDrivers;
@ApiModelProperty("自有驾驶员")
private Integer ownedDrivers;
@ApiModelProperty("社会驾驶员")
private Integer socialDrivers;
}
@@ -0,0 +1,31 @@
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;
}
@@ -0,0 +1,22 @@
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 OverallTransportFreightTrendMonthVO {
@ApiModelProperty("月份标签")
private String monthLabel;
@ApiModelProperty("货运量")
private Integer freight;
}
@@ -0,0 +1,22 @@
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 OverallTransportModeDistributionVO {
@ApiModelProperty("跨境单量")
private Long crossBorder;
@ApiModelProperty("国内单量")
private Long domestic;
}
@@ -0,0 +1,36 @@
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;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("总体运营态势-运输运营")
public class OverallTransportOperationVO {
@ApiModelProperty("运输订单摘要")
private OverallTransportOrderSummaryVO orderSummary;
@ApiModelProperty("运力统计")
private OverallTransportCapacityVO capacityStatistics;
@ApiModelProperty("运输订单趋势(按月)")
private List<OverallTransportOrderTrendMonthVO> orderTrendByMonth;
@ApiModelProperty("货运量趋势(按月)")
private List<OverallTransportFreightTrendMonthVO> freightTrendByMonth;
@ApiModelProperty("运输订单分布")
private OverallTransportModeDistributionVO orderDistribution;
@ApiModelProperty("企业运营能力排名")
private List<OverallTransportEnterpriseRankVO> enterpriseRanking;
}
@@ -0,0 +1,31 @@
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 OverallTransportOrderSummaryVO {
@ApiModelProperty("处理单量")
private Long processedOrderCount;
@ApiModelProperty("变化百分比")
private Double changePercent;
@ApiModelProperty("年货运量数值")
private Double annualFreight;
@ApiModelProperty("货运单位,如 万吨")
private String freightUnit;
@ApiModelProperty("货运变化百分比")
private Double freightGrowth;
}
@@ -0,0 +1,22 @@
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 OverallTransportOrderTrendMonthVO {
@ApiModelProperty("月份标签")
private String monthLabel;
@ApiModelProperty("订单量")
private Long count;
}
@@ -0,0 +1,31 @@
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 OverallWarehouseBizStatisticVO {
@ApiModelProperty("服务客户数")
private Long customerCount;
@ApiModelProperty("覆盖区域说明")
private String coverageArea;
@ApiModelProperty("年吞吐量数值")
private Integer annualThroughput;
@ApiModelProperty("吞吐量单位,如 万吨")
private String throughputUnit;
@ApiModelProperty("吞吐量变化百分比")
private Double throughputGrowth;
}
@@ -0,0 +1,31 @@
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;
}
@@ -0,0 +1,31 @@
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 OverallWarehouseCoreCapabilityVO {
@ApiModelProperty("仓库总数")
private Integer totalWarehouses;
@ApiModelProperty("自营数量")
private Integer selfOperatedCount;
@ApiModelProperty("外租/外包数量")
private Integer outsourcedCount;
@ApiModelProperty("运营面积数值")
private Integer operatingArea;
@ApiModelProperty("面积单位,如 万m²")
private String areaUnit;
}
@@ -0,0 +1,36 @@
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;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("总体运营态势-仓储运营")
public class OverallWarehouseOperationVO {
@ApiModelProperty("仓库订单统计")
private OverallWarehouseOrderStatisticVO orderStatistics;
@ApiModelProperty("仓库核心能力")
private OverallWarehouseCoreCapabilityVO coreCapability;
@ApiModelProperty("仓库订单趋势(按月)")
private List<OverallWarehouseOrderTrendMonthVO> orderTrendByMonth;
@ApiModelProperty("吞吐量趋势(按月)")
private List<OverallThroughputTrendMonthVO> throughputTrendByMonth;
@ApiModelProperty("仓库运营统计")
private OverallWarehouseBizStatisticVO bizStatistics;
@ApiModelProperty("仓库运营能力排名")
private List<OverallWarehouseCapabilityRankVO> capabilityRanking;
}
@@ -0,0 +1,22 @@
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 OverallWarehouseOrderStatisticVO {
@ApiModelProperty("处理单量")
private Long processedOrderCount;
@ApiModelProperty("变化百分比(如 5.4 表示 ↑5.4%)")
private Double changePercent;
}
@@ -0,0 +1,25 @@
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 OverallWarehouseOrderTrendMonthVO {
@ApiModelProperty("月份标签")
private String monthLabel;
@ApiModelProperty("入库订单")
private Long inboundOrders;
@ApiModelProperty("出库订单")
private Long outboundOrders;
}
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mhd.bi.domain.biOverallOperation.repository.mapper.BiOverallOperationReportMapper">
<select id="selectLatestPayloadJson" resultType="java.lang.String">
select PAYLOAD_JSON
from NGWL_TEST_BI.BI_OVERALL_OPERATION_SNAPSHOT
where DEL_FLAG = 1
order by CREATE_TIME desc nulls last, ID desc
limit 1
</select>
</mapper>