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 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file