From ae138915aea989f4ed98797c84f5c80ef4f77a01 Mon Sep 17 00:00:00 2001
From: zhaoqing <3160641494@qq.com>
Date: Fri, 7 Aug 2026 18:51:04 +0800
Subject: [PATCH 1/7] =?UTF-8?q?fix(system):=20=E5=BA=93=E4=BD=8D=E5=BA=93?=
=?UTF-8?q?=E5=8C=BA=E6=8E=92=E5=BA=8F=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../mapper/basic/storageLocation/StorageLocationMapper.xml | 4 ++--
.../mapper/basic/storageSection/StorageSectionMapper.xml | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/mhd-modules/mhd-system/src/main/resources/mapper/basic/storageLocation/StorageLocationMapper.xml b/mhd-modules/mhd-system/src/main/resources/mapper/basic/storageLocation/StorageLocationMapper.xml
index e2915658e..e9aa41514 100644
--- a/mhd-modules/mhd-system/src/main/resources/mapper/basic/storageLocation/StorageLocationMapper.xml
+++ b/mhd-modules/mhd-system/src/main/resources/mapper/basic/storageLocation/StorageLocationMapper.xml
@@ -185,8 +185,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
@@ -429,30 +429,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
from material_inventory a
left join material_base_info b on a.material_base_info_id = b.material_base_info_id
inner join (
- select material_base_info_id, warehouse_id, warehouse_code, warehouse_name,
- storage_section_id, storage_code, storage_name,
- storage_location_id, storage_location_code, storage_location_name
- from (
- select mi.material_base_info_id, mi.warehouse_id, mi.warehouse_code, mi.warehouse_name,
- mi.storage_section_id, mi.storage_code, mi.storage_name,
- mi.storage_location_id, mi.storage_location_code, mi.storage_location_name,
- row_number() over (partition by mi.material_base_info_id order by mi.create_time desc, mi.material_inventory_id desc) as wl_rn
- from material_inventory mi
- left join material_base_info b on mi.material_base_info_id = b.material_base_info_id
-
-
-
-
- ) wl_ranked where wl_ranked.wl_rn = 1
- ) loc on loc.material_base_info_id = a.material_base_info_id
+ select material_base_info_id, warehouse_id, warehouse_code, warehouse_name,
+ storage_section_id, storage_code, storage_name,
+ storage_location_id, storage_location_code, storage_location_name
+ from (
+ select mi.material_base_info_id, mi.warehouse_id, mi.warehouse_code, mi.warehouse_name,
+ mi.storage_section_id, mi.storage_code, mi.storage_name,
+ mi.storage_location_id, mi.storage_location_code, mi.storage_location_name,
+ row_number() over (partition by mi.material_base_info_id, mi.warehouse_id order by mi.create_time desc, mi.material_inventory_id desc) as wl_rn
+ from material_inventory mi
+ left join material_base_info b on mi.material_base_info_id = b.material_base_info_id
+
+
+
+
+ ) wl_ranked where wl_ranked.wl_rn = 1
+ ) loc on loc.material_base_info_id = a.material_base_info_id and loc.warehouse_id = a.warehouse_id
- GROUP BY a.MATERIAL_BASE_INFO_ID,
- loc.warehouse_id, loc.warehouse_code, loc.warehouse_name,
- loc.storage_section_id, loc.storage_code, loc.storage_name,
- loc.storage_location_id, loc.storage_location_code, loc.storage_location_name order by sort_order, a.update_time desc
+ GROUP BY a.MATERIAL_BASE_INFO_ID, a.WAREHOUSE_ID,
+ loc.warehouse_id, loc.warehouse_code, loc.warehouse_name,
+ loc.storage_section_id, loc.storage_code, loc.storage_name,
+ loc.storage_location_id, loc.storage_location_code, loc.storage_location_name order by sort_order, a.update_time desc
@@ -534,7 +534,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.shipper_id,
MAX(a.shipper_code) AS shipper_code,
MAX(a.shipper_name) AS shipper_name,
- b.material_base_info_id,
+ MAX(b.material_base_info_id) AS material_base_info_id,
MAX(b.material_code) AS material_code,
MAX(b.material_name) AS material_name,
MAX(b.SPECIFICATION_MODEL) AS SPECIFICATION_MODEL,
@@ -551,7 +551,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
MAX(b.pack_id) AS pack_id,
MAX(b.pack_code) AS pack_code,
MAX(b.pack_name) AS pack_name,
- MAX(a.unit) AS unit,
+ MAX(a.unit) AS unit,
IFNULL(SUM(a.freeze_quantity), 0) AS freeze_quantity,
IFNULL(SUM(a.inventory_quantity), 0) AS inventory_quantity,
IFNULL(SUM(a.allocation_quantity), 0) AS allocation_quantity,
@@ -580,7 +580,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
GROUP BY a.shipper_id,
- b.material_base_info_id,
+ b.material_code,
a.warehouse_id,
a.organization_id, a.top_organization_id
ORDER BY sort_order, MAX(a.update_time) DESC
@@ -596,7 +596,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- GROUP BY a.SHIPPER_ID order by sort_order, a.update_time desc
+ GROUP BY a.SHIPPER_ID, a.WAREHOUSE_ID order by sort_order, a.update_time desc
From 64bb96c97cef0edf191b3f9ce0ec1fbd5f900d53 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com>
Date: Mon, 10 Aug 2026 17:36:04 +0800
Subject: [PATCH 6/7] =?UTF-8?q?BI=E6=9C=88=E5=8F=B0=E5=8A=A8=E6=80=81?=
=?UTF-8?q?=E7=9C=9F=E5=AE=9E=E6=95=B0=E6=8D=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../mapper/BiPlatformRealDataMapper.java | 34 +++++++
.../repository/po/RealPlatformOverviewPO.java | 18 ++++
.../repository/po/RealPlatformVehiclePO.java | 30 ++++++
.../repository/po/RealTaskLoadPO.java | 18 ++++
.../repository/po/RealVehicleStatusPO.java | 24 +++++
.../service/BiPlatformRealDataService.java | 92 ++++++++++++++++++
.../service/BiReportSnapshotSyncService.java | 93 ++++++++++++++++++-
.../BiPlatformRealDataMapper.xml | 85 +++++++++++++++++
8 files changed, 392 insertions(+), 2 deletions(-)
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/mapper/BiPlatformRealDataMapper.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealPlatformOverviewPO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealPlatformVehiclePO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealTaskLoadPO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealVehicleStatusPO.java
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/service/BiPlatformRealDataService.java
create mode 100644 mhd-bi/src/main/resources/mapper/biPlatformRealData/BiPlatformRealDataMapper.xml
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/mapper/BiPlatformRealDataMapper.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/mapper/BiPlatformRealDataMapper.java
new file mode 100644
index 000000000..9fa3ed755
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/mapper/BiPlatformRealDataMapper.java
@@ -0,0 +1,34 @@
+package com.mhd.bi.domain.biPlatformRealData.repository.mapper;
+
+import com.mhd.bi.domain.biPlatformRealData.repository.po.RealPlatformVehiclePO;
+import com.mhd.bi.domain.biPlatformRealData.repository.po.RealPlatformOverviewPO;
+import com.mhd.bi.domain.biPlatformRealData.repository.po.RealVehicleStatusPO;
+import com.mhd.bi.domain.biPlatformRealData.repository.po.RealTaskLoadPO;
+
+import java.util.List;
+
+/**
+ * 月台监测-真实数据 Mapper
+ * 数据来源:TEST_NGWL_YMS 库(达梦,跨库访问)
+ * 注:列名按达梦默认大写规则;若实际库中小写请反馈调整
+ */
+public interface BiPlatformRealDataMapper {
+
+ /** 作业车辆状态列表 */
+ List queryVehicles();
+
+ /** 月台实时概览(总数 / 当前作业中) */
+ RealPlatformOverviewPO queryPlatformOverview();
+
+ /** 今日作业任务数 */
+ Long countTodayTasks();
+
+ /** 车辆状态统计(今日) */
+ RealVehicleStatusPO queryVehicleStatusToday();
+
+ /** 本月任务量 */
+ Long countMonthTasks();
+
+ /** 任务负荷(今日 24 小时) */
+ List queryTaskLoadToday();
+}
\ No newline at end of file
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealPlatformOverviewPO.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealPlatformOverviewPO.java
new file mode 100644
index 000000000..bc1948549
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealPlatformOverviewPO.java
@@ -0,0 +1,18 @@
+package com.mhd.bi.domain.biPlatformRealData.repository.po;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 月台实时概览(真实数据,来自 TEST_NGWL_YMS.QMS_WINDOW_INFO)
+ */
+@Data
+public class RealPlatformOverviewPO implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /** 月台总数 */
+ private Long totalPlatforms;
+
+ /** 当前作业中(月台作业状态=占用) */
+ private Long operatingPlatforms;
+}
\ No newline at end of file
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealPlatformVehiclePO.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealPlatformVehiclePO.java
new file mode 100644
index 000000000..71112888b
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealPlatformVehiclePO.java
@@ -0,0 +1,30 @@
+package com.mhd.bi.domain.biPlatformRealData.repository.po;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 月台监测-作业车辆(真实数据,来自 TEST_NGWL_YMS.QMS_MAIN_BUSINESS 等)
+ */
+@Data
+public class RealPlatformVehiclePO implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /** 车牌号(qms_main_business.CARNO) */
+ private String plateNumber;
+
+ /** 流程状态(qms_main_business.FLOWSTATUS) */
+ private String status;
+
+ /** 叫号月台(qms_queue_list.WINDOWNAME) */
+ private String platformId;
+
+ /** 月台作业时长,分钟(EXITTIME - ENTRYTIME) */
+ private Long platformDuration;
+
+ /** 预约申请时间(qms_main_business.CREATE_TIME) */
+ private String appointmentTime;
+
+ /** 作业楼层(qms_window_info.PLATFORMFLOOR) */
+ private String workFloor;
+}
\ No newline at end of file
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealTaskLoadPO.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealTaskLoadPO.java
new file mode 100644
index 000000000..d9c70f669
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealTaskLoadPO.java
@@ -0,0 +1,18 @@
+package com.mhd.bi.domain.biPlatformRealData.repository.po;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 任务负荷统计(按小时,来自 TEST_NGWL_YMS.QMS_MAIN_BUSINESS)
+ */
+@Data
+public class RealTaskLoadPO implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /** 0-23 小时 */
+ private Integer hourOfDay;
+
+ /** 该小时段任务数 */
+ private Long taskCount;
+}
\ No newline at end of file
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealVehicleStatusPO.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealVehicleStatusPO.java
new file mode 100644
index 000000000..7f2f782a7
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealVehicleStatusPO.java
@@ -0,0 +1,24 @@
+package com.mhd.bi.domain.biPlatformRealData.repository.po;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 作业车辆状态统计(真实数据,来自 TEST_NGWL_YMS.QMS_MAIN_BUSINESS)
+ */
+@Data
+public class RealVehicleStatusPO implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /** 今日预约车辆 */
+ private Long todayReservedVehicles;
+
+ /** 当前未签到 */
+ private Long notCheckedIn;
+
+ /** 当前作业中 */
+ private Long operatingVehicles;
+
+ /** 作业完成 */
+ private Long completedVehicles;
+}
\ No newline at end of file
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/service/BiPlatformRealDataService.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/service/BiPlatformRealDataService.java
new file mode 100644
index 000000000..0069c653f
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/service/BiPlatformRealDataService.java
@@ -0,0 +1,92 @@
+package com.mhd.bi.domain.biPlatformRealData.service;
+
+import com.mhd.bi.domain.biPlatformRealData.repository.mapper.BiPlatformRealDataMapper;
+import com.mhd.bi.domain.biPlatformRealData.repository.po.RealPlatformVehiclePO;
+import com.mhd.bi.domain.biPlatformRealData.repository.po.RealPlatformOverviewPO;
+import com.mhd.bi.domain.biPlatformRealData.repository.po.RealVehicleStatusPO;
+import com.mhd.bi.domain.biPlatformRealData.repository.po.RealTaskLoadPO;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 月台监测-真实数据业务层(封装 YMS 跨库查询)
+ * 注:列名大小写、字段类型需以实际库为准;若 YMS 库无数据/无权限,相关方法应返回空/0,不影响写死字段写入快照
+ */
+@Service
+public class BiPlatformRealDataService {
+
+ @Resource
+ private BiPlatformRealDataMapper biPlatformRealDataMapper;
+
+ public List queryVehicles() {
+ try {
+ return biPlatformRealDataMapper.queryVehicles();
+ } catch (Exception e) {
+ return java.util.Collections.emptyList();
+ }
+ }
+
+ public RealPlatformOverviewPO queryPlatformOverview() {
+ try {
+ RealPlatformOverviewPO po = biPlatformRealDataMapper.queryPlatformOverview();
+ if (po == null) {
+ po = new RealPlatformOverviewPO();
+ }
+ if (po.getTotalPlatforms() == null) po.setTotalPlatforms(0L);
+ if (po.getOperatingPlatforms() == null) po.setOperatingPlatforms(0L);
+ return po;
+ } catch (Exception e) {
+ RealPlatformOverviewPO po = new RealPlatformOverviewPO();
+ po.setTotalPlatforms(0L);
+ po.setOperatingPlatforms(0L);
+ return po;
+ }
+ }
+
+ public long countTodayTasks() {
+ try {
+ Long n = biPlatformRealDataMapper.countTodayTasks();
+ return n == null ? 0L : n;
+ } catch (Exception e) {
+ return 0L;
+ }
+ }
+
+ public RealVehicleStatusPO queryVehicleStatusToday() {
+ try {
+ RealVehicleStatusPO po = biPlatformRealDataMapper.queryVehicleStatusToday();
+ if (po == null) po = new RealVehicleStatusPO();
+ if (po.getTodayReservedVehicles() == null) po.setTodayReservedVehicles(0L);
+ if (po.getNotCheckedIn() == null) po.setNotCheckedIn(0L);
+ if (po.getOperatingVehicles() == null) po.setOperatingVehicles(0L);
+ if (po.getCompletedVehicles() == null) po.setCompletedVehicles(0L);
+ return po;
+ } catch (Exception e) {
+ RealVehicleStatusPO po = new RealVehicleStatusPO();
+ po.setTodayReservedVehicles(0L);
+ po.setNotCheckedIn(0L);
+ po.setOperatingVehicles(0L);
+ po.setCompletedVehicles(0L);
+ return po;
+ }
+ }
+
+ public long countMonthTasks() {
+ try {
+ Long n = biPlatformRealDataMapper.countMonthTasks();
+ return n == null ? 0L : n;
+ } catch (Exception e) {
+ return 0L;
+ }
+ }
+
+ public List queryTaskLoadToday() {
+ try {
+ return biPlatformRealDataMapper.queryTaskLoadToday();
+ } catch (Exception e) {
+ return java.util.Collections.emptyList();
+ }
+ }
+}
\ No newline at end of file
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 2f42acdf8..ea997db21 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
@@ -13,10 +13,20 @@ import com.mhd.bi.interfaces.facadeApi.biReport.vo.platform.PlatformSurveillance
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.bi.interfaces.facadeApi.biReport.vo.platform.PlatformVehicleItemVO;
+import com.mhd.bi.domain.biPlatformRealData.service.BiPlatformRealDataService;
+import com.mhd.bi.domain.biPlatformRealData.repository.po.RealPlatformVehiclePO;
+import com.mhd.bi.domain.biPlatformRealData.repository.po.RealPlatformOverviewPO;
+import com.mhd.bi.domain.biPlatformRealData.repository.po.RealVehicleStatusPO;
+import com.mhd.bi.domain.biPlatformRealData.repository.po.RealTaskLoadPO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
import java.util.Random;
/**
@@ -34,6 +44,7 @@ public class BiReportSnapshotSyncService {
private final BiSnapshotWriteMapper biSnapshotWriteMapper;
private final ObjectMapper objectMapper;
+ private final BiPlatformRealDataService biPlatformRealDataService;
/**
* 依次同步各快照表;单表失败不影响其它表,只记日志。
@@ -137,9 +148,87 @@ public class BiReportSnapshotSyncService {
return BiSnapshotWeeklyRandomDataBuilder.warehouseTransport(new Random());
}
- /** TODO 业务落地:改为查询真实数据。临时实现见 {@link BiSnapshotWeeklyRandomDataBuilder#platformSurveillance(Random)}。 */
+ /** TODO 业务落地:部分字段改为真实数据,其余仍写死。 */
protected PlatformSurveillanceVO buildPlatformSurveillanceSnapshot() {
- return BiSnapshotWeeklyRandomDataBuilder.platformSurveillance(new Random());
+ Random r = new Random();
+ // 写死数据复用原 builder
+ PlatformSurveillanceVO template = BiSnapshotWeeklyRandomDataBuilder.platformSurveillance(r);
+
+ // ====== 真实数据:作业车辆列表 ======
+ List realVehicles = biPlatformRealDataService.queryVehicles();
+ List vehicleVos = new ArrayList<>();
+ for (RealPlatformVehiclePO rv : realVehicles) {
+ PlatformVehicleItemVO v = new PlatformVehicleItemVO();
+ v.setAppointmentTime(rv.getAppointmentTime());
+ v.setWorkFloor(rv.getWorkFloor());
+ v.setPlateNumber(rv.getPlateNumber());
+ v.setStatus(rv.getStatus());
+ v.setPlatformId(rv.getPlatformId());
+ v.setPlatformDuration(rv.getPlatformDuration() == null ? 0 : rv.getPlatformDuration().intValue());
+ vehicleVos.add(v);
+ }
+ if (!vehicleVos.isEmpty()) {
+ template.setVehicles(vehicleVos);
+ }
+
+ // ====== 真实数据:月台实时概览 ======
+ RealPlatformOverviewPO ov = biPlatformRealDataService.queryPlatformOverview();
+ if (template.getPlatformOverview() != null) {
+ template.getPlatformOverview().setTotalPlatforms(ov.getTotalPlatforms().intValue());
+ template.getPlatformOverview().setOperatingPlatforms(ov.getOperatingPlatforms().intValue());
+ int total = ov.getTotalPlatforms().intValue();
+ int occ = ov.getOperatingPlatforms().intValue();
+ int rate = total > 0 ? (int) Math.round(((double) occ / total) * 100.0) : 0;
+ template.getPlatformOverview().setCurrentOccupancyRate(rate);
+ }
+ long todayTasks = biPlatformRealDataService.countTodayTasks();
+ if (template.getPlatformOverview() != null) {
+ template.getPlatformOverview().setTodayTasks((int) todayTasks);
+ }
+
+ // ====== 真实数据:作业车辆状态统计 ======
+ RealVehicleStatusPO vs = biPlatformRealDataService.queryVehicleStatusToday();
+ if (template.getVehicleStatus() != null) {
+ template.getVehicleStatus().setTodayReservedVehicles(vs.getTodayReservedVehicles().intValue());
+ template.getVehicleStatus().setNotCheckedIn(vs.getNotCheckedIn().intValue());
+ template.getVehicleStatus().setOperatingVehicles(vs.getOperatingVehicles().intValue());
+ template.getVehicleStatus().setCompletedVehicles(vs.getCompletedVehicles().intValue());
+ }
+
+ // ====== 真实数据:本月任务统计 taskTotal ======
+ long monthTasks = biPlatformRealDataService.countMonthTasks();
+ if (template.getMonthlyTaskStatistics() != null) {
+ template.getMonthlyTaskStatistics().setTaskTotal((int) monthTasks);
+ }
+
+ // ====== 真实数据:任务负荷(今日 24 小时) ======
+ List loads = biPlatformRealDataService.queryTaskLoadToday();
+ if (!loads.isEmpty() && template.getTaskLoadStatistics() != null) {
+ Map hourMap = new HashMap<>();
+ for (RealTaskLoadPO l : loads) {
+ hourMap.put(l.getHourOfDay(), l.getTaskCount());
+ }
+ for (com.mhd.bi.interfaces.facadeApi.biReport.vo.platform.TaskLoadItemVO item : template.getTaskLoadStatistics()) {
+ Integer hour = parseHourFromLabel(item.getTime());
+ if (hour != null) {
+ Long n = hourMap.get(hour);
+ if (n != null) item.setTaskCount(n.intValue());
+ }
+ }
+ }
+
+ return template;
+ }
+
+ private static Integer parseHourFromLabel(String label) {
+ if (label == null) return null;
+ // "15时" -> 15
+ try {
+ String s = label.replace("时", "").trim();
+ return Integer.parseInt(s);
+ } catch (Exception e) {
+ return null;
+ }
}
/**
diff --git a/mhd-bi/src/main/resources/mapper/biPlatformRealData/BiPlatformRealDataMapper.xml b/mhd-bi/src/main/resources/mapper/biPlatformRealData/BiPlatformRealDataMapper.xml
new file mode 100644
index 000000000..e4dbeba6a
--- /dev/null
+++ b/mhd-bi/src/main/resources/mapper/biPlatformRealData/BiPlatformRealDataMapper.xml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+ SELECT
+ mb.CARNO AS plateNumber,
+ mb.FLOWSTATUS AS status,
+ ql.WINDOWNAME AS platformId,
+ CASE
+ WHEN mb.EXITTIME IS NOT NULL AND mb.ENTRYTIME IS NOT NULL
+ THEN CAST((mb.EXITTIME - mb.ENTRYTIME) AS BIGINT)
+ ELSE 0
+ END AS platformDuration,
+ TO_CHAR(mb.CREATE_TIME, 'YYYY-MM-DD HH24:MI:SS') AS appointmentTime,
+ wi.PLATFORMFLOOR AS workFloor
+ FROM NGWL_TEST_YMS.QMS_MAIN_BUSINESS mb
+ LEFT JOIN NGWL_TEST_YMS.QMS_QUEUE_LIST ql ON ql.MAIN_BUSINESS_ID = mb.ID
+ LEFT JOIN NGWL_TEST_YMS.QMS_WINDOW_INFO wi ON wi.WINDOW_NO = ql.WINDOWNAME
+ WHERE 1=1
+ AND mb.DEL_FLAG = 1
+ ORDER BY mb.CREATE_TIME DESC
+ LIMIT 50
+
+
+
+
+ SELECT
+ COUNT(1) AS totalPlatforms,
+ SUM(CASE WHEN STATUS = 2 THEN 1 ELSE 0 END) AS operatingPlatforms
+ FROM NGWL_TEST_YMS.QMS_WINDOW_INFO
+ WHERE DEL_FLAG = 1
+
+
+
+
+ SELECT COUNT(1)
+ FROM NGWL_TEST_YMS.QMS_MAIN_BUSINESS
+ WHERE DEL_FLAG = 1
+ AND TRUNC(ENTRYTIME) = TRUNC(SYSDATE)
+
+
+
+
+ SELECT
+ SUM(CASE WHEN TRUNC(CREATE_TIME) = TRUNC(SYSDATE) THEN 1 ELSE 0 END) AS todayReservedVehicles,
+ SUM(CASE WHEN FLOWSTATUS = '已预约' AND TRUNC(CREATE_TIME) = TRUNC(SYSDATE) THEN 1 ELSE 0 END) AS notCheckedIn,
+ SUM(CASE WHEN FLOWSTATUS IN ('已进场','已称重','已装车','二次称重','已结算','已还卡') AND TRUNC(CREATE_TIME) = TRUNC(SYSDATE) THEN 1 ELSE 0 END) AS operatingVehicles,
+ SUM(CASE WHEN FLOWSTATUS = '已出场' AND TRUNC(CREATE_TIME) = TRUNC(SYSDATE) THEN 1 ELSE 0 END) AS completedVehicles
+ FROM NGWL_TEST_YMS.QMS_MAIN_BUSINESS
+ WHERE DEL_FLAG = 1
+
+
+
+
+ SELECT COUNT(1)
+ FROM NGWL_TEST_YMS.QMS_MAIN_BUSINESS
+ WHERE DEL_FLAG = 1
+ AND ENTRYTIME IS NOT NULL
+ AND TO_CHAR(ENTRYTIME, 'YYYY-MM') = TO_CHAR(SYSDATE, 'YYYY-MM')
+
+
+
+
+ SELECT
+ HOUR(ENTRYTIME) AS hourOfDay,
+ COUNT(1) AS taskCount
+ FROM NGWL_TEST_YMS.QMS_MAIN_BUSINESS
+ WHERE DEL_FLAG = 1
+ AND ENTRYTIME IS NOT NULL
+ AND TRUNC(ENTRYTIME) = TRUNC(SYSDATE)
+ GROUP BY HOUR(ENTRYTIME)
+ ORDER BY HOUR(ENTRYTIME)
+
+
\ No newline at end of file
From d4f660bc7eecf39a4a603dd63cf00ddccff0cd77 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com>
Date: Mon, 10 Aug 2026 17:59:59 +0800
Subject: [PATCH 7/7] =?UTF-8?q?BI=E6=9C=88=E5=8F=B0=E5=8A=A8=E6=80=81?=
=?UTF-8?q?=E7=9C=9F=E5=AE=9E=E6=95=B0=E6=8D=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../service/BiPlatformRealDataService.java | 92 +++++++++++++++++++
.../facadeApi/biReport/BiReportApi.java | 10 +-
2 files changed, 99 insertions(+), 3 deletions(-)
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/service/BiPlatformRealDataService.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/service/BiPlatformRealDataService.java
index 0069c653f..da9fba312 100644
--- a/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/service/BiPlatformRealDataService.java
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/service/BiPlatformRealDataService.java
@@ -5,10 +5,18 @@ import com.mhd.bi.domain.biPlatformRealData.repository.po.RealPlatformVehiclePO;
import com.mhd.bi.domain.biPlatformRealData.repository.po.RealPlatformOverviewPO;
import com.mhd.bi.domain.biPlatformRealData.repository.po.RealVehicleStatusPO;
import com.mhd.bi.domain.biPlatformRealData.repository.po.RealTaskLoadPO;
+import com.mhd.bi.domain.biSnapshotSync.support.BiSnapshotWeeklyRandomDataBuilder;
+import com.mhd.bi.interfaces.facadeApi.biReport.vo.platform.PlatformSurveillanceVO;
+import com.mhd.bi.interfaces.facadeApi.biReport.vo.platform.PlatformVehicleItemVO;
+import com.mhd.bi.interfaces.facadeApi.biReport.vo.platform.TaskLoadItemVO;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import java.util.Random;
/**
* 月台监测-真实数据业务层(封装 YMS 跨库查询)
@@ -89,4 +97,88 @@ public class BiPlatformRealDataService {
return java.util.Collections.emptyList();
}
}
+
+ /**
+ * 实时组装月台监测数据:真实字段查 YMS 库,写死字段保留静态值。
+ * 每次调用实时查库,不经过快照表。
+ */
+ public PlatformSurveillanceVO buildRealTimePlatformSurveillance() {
+ Random r = new Random();
+ PlatformSurveillanceVO template = BiSnapshotWeeklyRandomDataBuilder.platformSurveillance(r);
+
+ // 作业车辆列表
+ List realVehicles = queryVehicles();
+ List vehicleVos = new ArrayList<>();
+ for (RealPlatformVehiclePO rv : realVehicles) {
+ PlatformVehicleItemVO v = new PlatformVehicleItemVO();
+ v.setAppointmentTime(rv.getAppointmentTime());
+ v.setWorkFloor(rv.getWorkFloor());
+ v.setPlateNumber(rv.getPlateNumber());
+ v.setStatus(rv.getStatus());
+ v.setPlatformId(rv.getPlatformId());
+ v.setPlatformDuration(rv.getPlatformDuration() == null ? 0 : rv.getPlatformDuration().intValue());
+ vehicleVos.add(v);
+ }
+ if (!vehicleVos.isEmpty()) {
+ template.setVehicles(vehicleVos);
+ }
+
+ // 月台实时概览
+ RealPlatformOverviewPO ov = queryPlatformOverview();
+ if (template.getPlatformOverview() != null) {
+ template.getPlatformOverview().setTotalPlatforms(ov.getTotalPlatforms().intValue());
+ template.getPlatformOverview().setOperatingPlatforms(ov.getOperatingPlatforms().intValue());
+ int total = ov.getTotalPlatforms().intValue();
+ int occ = ov.getOperatingPlatforms().intValue();
+ int rate = total > 0 ? (int) Math.round(((double) occ / total) * 100.0) : 0;
+ template.getPlatformOverview().setCurrentOccupancyRate(rate);
+ }
+ long todayTasks = countTodayTasks();
+ if (template.getPlatformOverview() != null) {
+ template.getPlatformOverview().setTodayTasks((int) todayTasks);
+ }
+
+ // 作业车辆状态统计
+ RealVehicleStatusPO vs = queryVehicleStatusToday();
+ if (template.getVehicleStatus() != null) {
+ template.getVehicleStatus().setTodayReservedVehicles(vs.getTodayReservedVehicles().intValue());
+ template.getVehicleStatus().setNotCheckedIn(vs.getNotCheckedIn().intValue());
+ template.getVehicleStatus().setOperatingVehicles(vs.getOperatingVehicles().intValue());
+ template.getVehicleStatus().setCompletedVehicles(vs.getCompletedVehicles().intValue());
+ }
+
+ // 本月任务统计 taskTotal
+ long monthTasks = countMonthTasks();
+ if (template.getMonthlyTaskStatistics() != null) {
+ template.getMonthlyTaskStatistics().setTaskTotal((int) monthTasks);
+ }
+
+ // 任务负荷(今日 24 小时)
+ List loads = queryTaskLoadToday();
+ if (!loads.isEmpty() && template.getTaskLoadStatistics() != null) {
+ Map hourMap = new HashMap<>();
+ for (RealTaskLoadPO l : loads) {
+ hourMap.put(l.getHourOfDay(), l.getTaskCount());
+ }
+ for (TaskLoadItemVO item : template.getTaskLoadStatistics()) {
+ Integer hour = parseHourFromLabel(item.getTime());
+ if (hour != null) {
+ Long n = hourMap.get(hour);
+ if (n != null) item.setTaskCount(n.intValue());
+ }
+ }
+ }
+
+ return template;
+ }
+
+ private static Integer parseHourFromLabel(String label) {
+ if (label == null) return null;
+ try {
+ String s = label.replace("时", "").trim();
+ return Integer.parseInt(s);
+ } catch (Exception e) {
+ return null;
+ }
+ }
}
\ No newline at end of file
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 6d6156940..4aa56c70f 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
@@ -3,6 +3,7 @@ package com.mhd.bi.interfaces.facadeApi.biReport;
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.biPlatformRealData.service.BiPlatformRealDataService;
import com.mhd.bi.domain.biOverallOperation.service.BiOverallOperationReportService;
import com.mhd.bi.domain.biHkMacaoServiceZone.service.BiHkMacaoServiceZoneReportService;
import com.mhd.bi.domain.biTransportOperationZone.service.BiTransportOperationZoneReportService;
@@ -48,6 +49,9 @@ public class BiReportApi extends BaseController {
@Autowired
private BiPlatformSurveillanceReportService biPlatformSurveillanceReportService;
+ @Autowired
+ private BiPlatformRealDataService biPlatformRealDataService;
+
@Autowired
private BiOverallOperationReportService biOverallOperationReportService;
@@ -92,12 +96,12 @@ public class BiReportApi extends BaseController {
}
/**
- * 月台监测指标查询(按照 del_flag=1,按 create_time 最新一条)
+ * 月台监测指标查询(实时查 YMS 库,真实字段 + 写死字段)
*/
- @ApiOperation(value = "月台监测指标查询", notes = "返回 DEL_FLAG=1 且 CREATE_TIME 最新的一条快照")
+ @ApiOperation(value = "月台监测指标查询", notes = "每次调用实时查询 YMS 库组装;部分字段为真实业务数据,部分为写死数据")
@GetMapping("/platformSurveillance")
public BiApiResult platformSurveillance() {
- PlatformSurveillanceVO data = biPlatformSurveillanceReportService.loadLatestPlatformSurveillance();
+ PlatformSurveillanceVO data = biPlatformRealDataService.buildRealTimePlatformSurveillance();
return BiApiResult.ok(data);
}
//园区物流大屏接口----------------------------------------------------------------------