From c061e679adbf793cbbf5644eb347b17a4ff91466 Mon Sep 17 00:00:00 2001 From: yinq Date: Mon, 23 Mar 2026 16:12:21 +0800 Subject: [PATCH 1/3] =?UTF-8?q?add=20-=20=E6=8C=AF=E5=8A=A8=E4=BC=A0?= =?UTF-8?q?=E6=84=9F=E5=99=A8=E6=95=B4=E7=82=B9=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...VibrationSensorHourlyReportController.java | 57 +++++ .../TVibrationSensorHourlyReport.html | 229 ++++++++++++++++++ .../domain/TVibrationSensorHourlyReport.java | 146 +++++++++++ .../TVibrationSensorHourlyReportMapper.java | 24 ++ .../ITVibrationSensorHourlyReportService.java | 17 ++ ...ibrationSensorHourlyReportServiceImpl.java | 41 ++++ .../TVibrationSensorHourlyReportMapper.xml | 61 +++++ 7 files changed, 575 insertions(+) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TVibrationSensorHourlyReportController.java create mode 100644 ruoyi-admin/src/main/resources/templates/system/TVibrationSensorHourlyReport/TVibrationSensorHourlyReport.html create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/TVibrationSensorHourlyReport.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TVibrationSensorHourlyReportMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/ITVibrationSensorHourlyReportService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TVibrationSensorHourlyReportServiceImpl.java create mode 100644 ruoyi-system/src/main/resources/mapper/system/TVibrationSensorHourlyReportMapper.xml diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TVibrationSensorHourlyReportController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TVibrationSensorHourlyReportController.java new file mode 100644 index 0000000..de1d364 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TVibrationSensorHourlyReportController.java @@ -0,0 +1,57 @@ +package com.ruoyi.web.controller.system; + +import java.util.List; + +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +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.ResponseBody; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.TVibrationSensorHourlyReport; +import com.ruoyi.system.service.ITVibrationSensorHourlyReportService; + +/** + * 振动传感器整点报表 + * + * @author ruoyi + */ +@Controller +@RequestMapping("/system/TVibrationSensorHourlyReport") +public class TVibrationSensorHourlyReportController extends BaseController { + + private final String prefix = "system/TVibrationSensorHourlyReport"; + + @Autowired + private ITVibrationSensorHourlyReportService tVibrationSensorHourlyReportService; + + @GetMapping() + public String index() { + return prefix + "/TVibrationSensorHourlyReport"; + } + + @PostMapping("/list") + @ResponseBody + public TableDataInfo list(TVibrationSensorHourlyReport query) { + startPage(); + List list = tVibrationSensorHourlyReportService.selectTVibrationSensorHourlyReportList(query); + return getDataTable(list); + } + + @Log(title = "振动传感器整点报表", businessType = BusinessType.EXPORT) + @PostMapping("/export") + @ResponseBody + public AjaxResult export(TVibrationSensorHourlyReport query) { + List list = tVibrationSensorHourlyReportService.selectTVibrationSensorHourlyReportList(query); + ExcelUtil util = new ExcelUtil<>(TVibrationSensorHourlyReport.class); + return util.exportExcel(list, "振动传感器整点报表"); + } +} diff --git a/ruoyi-admin/src/main/resources/templates/system/TVibrationSensorHourlyReport/TVibrationSensorHourlyReport.html b/ruoyi-admin/src/main/resources/templates/system/TVibrationSensorHourlyReport/TVibrationSensorHourlyReport.html new file mode 100644 index 0000000..fff84b7 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/system/TVibrationSensorHourlyReport/TVibrationSensorHourlyReport.html @@ -0,0 +1,229 @@ + + + + + + + + + + +
+
+
+
+ 测控点信息 +
+
+ + + + +
+
+
+
+
+
+
+ +
+
+
+
+
+ +
+ +
+
+
+ + +
+
+
+
+
+
+ + + + + + + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TVibrationSensorHourlyReport.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TVibrationSensorHourlyReport.java new file mode 100644 index 0000000..f419ec5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TVibrationSensorHourlyReport.java @@ -0,0 +1,146 @@ +package com.ruoyi.system.domain; + +import java.math.BigDecimal; +import java.util.Date; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 振动传感器整点报表 T_VibrationSensor_Hourly_Report + * + * @author ruoyi + */ +public class TVibrationSensorHourlyReport extends BaseEntity { + private static final long serialVersionUID = 1L; + + private Long objId; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "报表小时", width = 20, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date reportTime; + + @Excel(name = "振动传感器ID") + private String sensorId; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "采集时间", width = 20, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date collectTime; + + @Excel(name = "速度(mm/s)") + private BigDecimal speed; + + @Excel(name = "位移(um)") + private BigDecimal displacement; + + @Excel(name = "加速度(g)") + private BigDecimal acceleration; + + @Excel(name = "温度(℃)") + private BigDecimal temperature; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "记录时间", width = 20, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date recodeTime; + + private String monitorName; + + public String getMonitorName() { + return monitorName; + } + + public void setMonitorName(String monitorName) { + this.monitorName = monitorName; + } + + public Long getObjId() { + return objId; + } + + public void setObjId(Long objId) { + this.objId = objId; + } + + public Date getReportTime() { + return reportTime; + } + + public void setReportTime(Date reportTime) { + this.reportTime = reportTime; + } + + public String getSensorId() { + return sensorId; + } + + public void setSensorId(String sensorId) { + this.sensorId = sensorId; + } + + public Date getCollectTime() { + return collectTime; + } + + public void setCollectTime(Date collectTime) { + this.collectTime = collectTime; + } + + public BigDecimal getSpeed() { + return speed; + } + + public void setSpeed(BigDecimal speed) { + this.speed = speed; + } + + public BigDecimal getDisplacement() { + return displacement; + } + + public void setDisplacement(BigDecimal displacement) { + this.displacement = displacement; + } + + public BigDecimal getAcceleration() { + return acceleration; + } + + public void setAcceleration(BigDecimal acceleration) { + this.acceleration = acceleration; + } + + public BigDecimal getTemperature() { + return temperature; + } + + public void setTemperature(BigDecimal temperature) { + this.temperature = temperature; + } + + public Date getRecodeTime() { + return recodeTime; + } + + public void setRecodeTime(Date recodeTime) { + this.recodeTime = recodeTime; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("objId", getObjId()) + .append("reportTime", getReportTime()) + .append("sensorId", getSensorId()) + .append("collectTime", getCollectTime()) + .append("speed", getSpeed()) + .append("displacement", getDisplacement()) + .append("acceleration", getAcceleration()) + .append("temperature", getTemperature()) + .append("recodeTime", getRecodeTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TVibrationSensorHourlyReportMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TVibrationSensorHourlyReportMapper.java new file mode 100644 index 0000000..6897739 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TVibrationSensorHourlyReportMapper.java @@ -0,0 +1,24 @@ +package com.ruoyi.system.mapper; + +import java.util.Date; +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.ruoyi.system.domain.TVibrationSensorHourlyReport; + +/** + * 振动传感器整点报表Mapper + * + * @author ruoyi + */ +public interface TVibrationSensorHourlyReportMapper { + + List selectTVibrationSensorHourlyReportList(TVibrationSensorHourlyReport query); + + /** + * 调用存储过程写入整点报表(一般由 SQL Server 代理定时执行;此方法便于手工补数或测试) + * + * @param hourEnd 区间右端点(不包含),与存储过程参数一致;传 null 时由库端按当前整点计算 + */ + void insertHourlyReportByProcedure(@Param("hourEnd") Date hourEnd); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ITVibrationSensorHourlyReportService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ITVibrationSensorHourlyReportService.java new file mode 100644 index 0000000..7aa53a4 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ITVibrationSensorHourlyReportService.java @@ -0,0 +1,17 @@ +package com.ruoyi.system.service; + +import java.util.Date; +import java.util.List; + +import com.ruoyi.system.domain.TVibrationSensorHourlyReport; + +/** + * 振动传感器整点报表Service + * + * @author ruoyi + */ +public interface ITVibrationSensorHourlyReportService { + + List selectTVibrationSensorHourlyReportList(TVibrationSensorHourlyReport query); + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TVibrationSensorHourlyReportServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TVibrationSensorHourlyReportServiceImpl.java new file mode 100644 index 0000000..d60da1d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TVibrationSensorHourlyReportServiceImpl.java @@ -0,0 +1,41 @@ +package com.ruoyi.system.service.impl; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.ruoyi.system.domain.TVibrationSensorHourlyReport; +import com.ruoyi.system.mapper.TVibrationSensorHourlyReportMapper; +import com.ruoyi.system.service.ITVibrationSensorHourlyReportService; + +/** + * 振动传感器整点报表Service实现 + * + * @author ruoyi + */ +@Service +public class TVibrationSensorHourlyReportServiceImpl implements ITVibrationSensorHourlyReportService { + + @Autowired + private TVibrationSensorHourlyReportMapper tVibrationSensorHourlyReportMapper; + + @Override + public List selectTVibrationSensorHourlyReportList(TVibrationSensorHourlyReport query) { + if (query != null && query.getSensorId() != null && !query.getSensorId().trim().isEmpty()) { + List sensorIdList = Arrays.stream(query.getSensorId().split(",")) + .map(String::trim) + .filter(item -> !item.isEmpty()) + .distinct() + .collect(Collectors.toList()); + if (!sensorIdList.isEmpty()) { + query.getParams().put("sensorIdList", sensorIdList); + } + } + return tVibrationSensorHourlyReportMapper.selectTVibrationSensorHourlyReportList(query); + } + + +} diff --git a/ruoyi-system/src/main/resources/mapper/system/TVibrationSensorHourlyReportMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TVibrationSensorHourlyReportMapper.xml new file mode 100644 index 0000000..552b92f --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/TVibrationSensorHourlyReportMapper.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + From e0eebd89a96616c5d30a60e852ddd01f26ab01c4 Mon Sep 17 00:00:00 2001 From: yinq Date: Mon, 23 Mar 2026 16:12:45 +0800 Subject: [PATCH 2/3] =?UTF-8?q?add=20-=20=E6=8C=AF=E5=8A=A8=E4=BC=A0?= =?UTF-8?q?=E6=84=9F=E5=99=A8=E6=95=B4=E7=82=B9=E6=95=B0=E6=8D=AE=E5=AD=98?= =?UTF-8?q?=E5=82=A8=E8=BF=87=E7=A8=8B=E3=80=81=E5=AE=9A=E6=97=B6=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=8E=86=E5=8F=B2=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/T_VibrationSensor_Hourly_Report.sql | 238 ++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 sql/T_VibrationSensor_Hourly_Report.sql diff --git a/sql/T_VibrationSensor_Hourly_Report.sql b/sql/T_VibrationSensor_Hourly_Report.sql new file mode 100644 index 0000000..4766659 --- /dev/null +++ b/sql/T_VibrationSensor_Hourly_Report.sql @@ -0,0 +1,238 @@ +/* + 振动传感器振动温度整点报表 + + 说明: + 1. 存储过程 dbo.sp_InsertVibrationSensorHourlyReport 在整点执行时,默认取「上一完整小时」区间内, + 每个 sensor_id 在 T_VibrationSensor_Data 中 collectTime 最晚的一条(并列时取 objId 较大者)。 + 2. reportTime 存该小时起始时间。例如 2025-03-23 09:00:00 表示统计区间 [09:00, 10:00) 的末条数据。 + 3. 定时请使用 SQL Server 代理作业(见脚本末尾示例),不要在应用内写 Quartz 定时任务。 + + 该存储过程无入参: + - 以「当前服务器时间的整点」为区间右端点(不包含),汇总上一小时。 + - 区间为 [DATEADD(hour,-1,@EndExclusive), @EndExclusive)。 +*/ + +IF OBJECT_ID(N'dbo.T_VibrationSensor_Hourly_Report', N'U') IS NULL +BEGIN + CREATE TABLE dbo.T_VibrationSensor_Hourly_Report + ( + objId BIGINT IDENTITY + CONSTRAINT PK_T_VibrationSensor_Hourly_Report PRIMARY KEY, + reportTime DATETIME NOT NULL, + sensor_id NVARCHAR(64) NOT NULL, + collectTime DATETIME NULL, + speed DECIMAL(18, 2) NULL, + displacement DECIMAL(18, 2) NULL, + acceleration DECIMAL(18, 2) NULL, + temperature DECIMAL(18, 2) NULL, + recodeTime DATETIME NOT NULL CONSTRAINT DF_T_VibrationSensor_Hourly_Report_recodeTime DEFAULT GETDATE(), + remark VARCHAR(64) NULL, + CONSTRAINT UQ_T_VibrationSensor_Hourly_Report_hour_sensor UNIQUE (reportTime, sensor_id) + ); + + CREATE NONCLUSTERED INDEX IX_T_VibrationSensor_Hourly_Report_reportTime + ON dbo.T_VibrationSensor_Hourly_Report (reportTime DESC); + + EXEC sp_addextendedproperty N'MS_Description', N'振动传感器整点报表(每小时末条采集)', N'SCHEMA', N'dbo', N'TABLE', N'T_VibrationSensor_Hourly_Report'; + EXEC sp_addextendedproperty N'MS_Description', N'主键', N'SCHEMA', N'dbo', N'TABLE', N'T_VibrationSensor_Hourly_Report', N'COLUMN', N'objId'; + EXEC sp_addextendedproperty N'MS_Description', N'报表归属小时(该小时起点)', N'SCHEMA', N'dbo', N'TABLE', N'T_VibrationSensor_Hourly_Report', N'COLUMN', N'reportTime'; + EXEC sp_addextendedproperty N'MS_Description', N'振动传感器ID', N'SCHEMA', N'dbo', N'TABLE', N'T_VibrationSensor_Hourly_Report', N'COLUMN', N'sensor_id'; + EXEC sp_addextendedproperty N'MS_Description', N'该小时内末条记录的采集时间', N'SCHEMA', N'dbo', N'TABLE', N'T_VibrationSensor_Hourly_Report', N'COLUMN', N'collectTime'; + EXEC sp_addextendedproperty N'MS_Description', N'速度(mm/s)', N'SCHEMA', N'dbo', N'TABLE', N'T_VibrationSensor_Hourly_Report', N'COLUMN', N'speed'; + EXEC sp_addextendedproperty N'MS_Description', N'位移(um)', N'SCHEMA', N'dbo', N'TABLE', N'T_VibrationSensor_Hourly_Report', N'COLUMN', N'displacement'; + EXEC sp_addextendedproperty N'MS_Description', N'加速度(g)', N'SCHEMA', N'dbo', N'TABLE', N'T_VibrationSensor_Hourly_Report', N'COLUMN', N'acceleration'; + EXEC sp_addextendedproperty N'MS_Description', N'温度(℃)', N'SCHEMA', N'dbo', N'TABLE', N'T_VibrationSensor_Hourly_Report', N'COLUMN', N'temperature'; + EXEC sp_addextendedproperty N'MS_Description', N'写入报表时间', N'SCHEMA', N'dbo', N'TABLE', N'T_VibrationSensor_Hourly_Report', N'COLUMN', N'recodeTime'; + EXEC sp_addextendedproperty N'MS_Description', N'备注', N'SCHEMA', N'dbo', N'TABLE', N'T_VibrationSensor_Hourly_Report', N'COLUMN', N'remark'; +END +GO + +IF OBJECT_ID(N'dbo.sp_InsertVibrationSensorHourlyReport', N'P') IS NOT NULL + DROP PROCEDURE dbo.sp_InsertVibrationSensorHourlyReport; +GO + +CREATE PROCEDURE dbo.sp_InsertVibrationSensorHourlyReport +AS +BEGIN + SET NOCOUNT ON; + SET XACT_ABORT ON; + + DECLARE @EndExclusive DATETIME = DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()), 0); + DECLARE @StartInclusive DATETIME = DATEADD(HOUR, -1, @EndExclusive); + DECLARE @ReportTime DATETIME = @StartInclusive; + + ;WITH Ranked AS ( + SELECT d.objId, + d.sensor_id, + d.collectTime, + d.speed, + d.displacement, + d.acceleration, + d.temperature, + d.remark, + ROW_NUMBER() OVER ( + PARTITION BY d.sensor_id + ORDER BY d.collectTime DESC, d.objId DESC + ) AS rn + FROM dbo.T_VibrationSensor_Data d + WHERE d.collectTime >= @StartInclusive + AND d.collectTime < @EndExclusive + ) + INSERT INTO dbo.T_VibrationSensor_Hourly_Report (reportTime, sensor_id, collectTime, speed, displacement, + acceleration, temperature, recodeTime, remark) + SELECT @ReportTime, + r.sensor_id, + @ReportTime, + r.speed, + r.displacement, + r.acceleration, + r.temperature, + @ReportTime, + r.remark + FROM Ranked r + WHERE r.rn = 1 + AND NOT EXISTS ( + SELECT 1 + FROM dbo.T_VibrationSensor_Hourly_Report x + WHERE x.reportTime = @ReportTime + AND x.sensor_id = r.sensor_id + ); + + -- 清理原始明细:删除 recodeTime 三个月前的数据 + DELETE FROM dbo.T_VibrationSensor_Data + WHERE recodeTime < DATEADD(MONTH, -3, @EndExclusive); +END +GO + +IF NOT EXISTS ( + SELECT 1 + FROM sys.extended_properties ep + WHERE ep.class = 1 + AND ep.major_id = OBJECT_ID(N'dbo.sp_InsertVibrationSensorHourlyReport') + AND ep.minor_id = 0 + AND ep.name = N'MS_Description' +) + EXEC sp_addextendedproperty N'MS_Description', + N'按小时汇总振动温度:无入参,固定按当前整点回算上一小时,取各传感器 collectTime 最后一条写入整点报表。', + N'SCHEMA', N'dbo', N'PROCEDURE', N'sp_InsertVibrationSensorHourlyReport'; +ELSE + EXEC sp_updateextendedproperty N'MS_Description', + N'按小时汇总振动温度:无入参,固定按当前整点回算上一小时,取各传感器 collectTime 最后一条写入整点报表。', + N'SCHEMA', N'dbo', N'PROCEDURE', N'sp_InsertVibrationSensorHourlyReport'; +GO + +/* +-------------------------------------------------------------------- +若依菜单与权限(在「菜单管理」中自行添加,或执行类似语句,注意 menu_id / parent_id 勿冲突) + +-- 目录或菜单 C:url = /system/TVibrationSensorHourlyReport +-- perms: system:TVibrationSensorHourlyReport:view / list / export + +INSERT INTO sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, remark) +VALUES (N'振动整点报表', <父菜单ID>, 10, N'/system/TVibrationSensorHourlyReport', N'C', N'0', N'system:TVibrationSensorHourlyReport:view', N'fa fa-table', N'admin', GETDATE(), N''); + +-- 将返回的 menu_id 记入 @mid,再插入按钮权限 F: +-- system:TVibrationSensorHourlyReport:list +-- system:TVibrationSensorHourlyReport:export +-------------------------------------------------------------------- +*/ + +/* +-------------------------------------------------------------------- +SQL Server 代理作业(在 SSMS 中图形化创建,或按需执行以下模板并修改作业名) + +USE msdb; +GO +EXEC dbo.sp_add_job + @job_name = N'振动传感器整点报表', + @enabled = 1, + @description = N'每小时执行 sp_InsertVibrationSensorHourlyReport'; +GO +EXEC dbo.sp_add_jobstep + @job_name = N'振动传感器整点报表', + @step_name = N'写入整点报表', + @subsystem = N'TSQL', + @database_name = N'你的数据库名', + @command = N'EXEC dbo.sp_InsertVibrationSensorHourlyReport;', + @retry_attempts = 2, + @retry_interval = 5; +GO +EXEC dbo.sp_add_schedule + @schedule_name = N'每小时整点', + @freq_type = 4, + @freq_interval = 1, + @freq_subday_type = 8, + @freq_subday_interval = 1, + @active_start_time = 0; +GO +EXEC dbo.sp_attach_schedule + @job_name = N'振动传感器整点报表', + @schedule_name = N'每小时整点'; +GO +EXEC dbo.sp_add_jobserver + @job_name = N'振动传感器整点报表'; +GO + +注意:@active_start_time = 0 表示从 00:00:00 起每 1 小时一次(与 freq_subday 组合为每小时)。 +若环境与版本不同,请用 SSMS「新建作业」→「步骤」执行上述 EXEC →「计划」选「重复执行」每小时、在整点触发更直观。 +-------------------------------------------------------------------- +*/ + +/* +-------------------------------------------------------------------- +振动整点报表随机测试数据(可直接执行) +说明: +1) 生成“今天 00:00 ~ 当前小时前一小时”之间,2 个传感器、每小时 1 条随机整点报表数据。 +2) 已存在同小时同传感器数据会跳过(依赖唯一键 reportTime + sensor_id)。 +-------------------------------------------------------------------- +*/ +DECLARE @TodayStart DATETIME = DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0); +DECLARE @CurrentHour DATETIME = DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()), 0); + +;WITH H AS ( + SELECT @TodayStart AS reportTime + UNION ALL + SELECT DATEADD(HOUR, 1, reportTime) + FROM H + WHERE DATEADD(HOUR, 1, reportTime) < @CurrentHour +), +S AS ( + SELECT N'VS-001' AS sensor_id + UNION ALL + SELECT N'VS-002' +), +R AS ( + SELECT + h.reportTime, + s.sensor_id, + h.reportTime AS collectTime, + CAST((ABS(CHECKSUM(NEWID())) % 1200) / 100.0 AS DECIMAL(18, 2)) AS speed, + CAST((ABS(CHECKSUM(NEWID())) % 5000) / 100.0 AS DECIMAL(18, 2)) AS displacement, + CAST((ABS(CHECKSUM(NEWID())) % 300) / 100.0 AS DECIMAL(18, 2)) AS acceleration, + CAST((ABS(CHECKSUM(NEWID())) % 7000) / 100.0 AS DECIMAL(18, 2)) AS temperature + FROM H h + CROSS JOIN S s +) +INSERT INTO dbo.T_VibrationSensor_Hourly_Report +( + reportTime, sensor_id, collectTime, speed, displacement, acceleration, temperature, recodeTime, remark +) +SELECT + r.reportTime, + r.sensor_id, + r.collectTime, + r.speed, + r.displacement, + r.acceleration, + r.temperature, + r.reportTime, + N'随机测试数据' +FROM R r +WHERE NOT EXISTS ( + SELECT 1 + FROM dbo.T_VibrationSensor_Hourly_Report x + WHERE x.reportTime = r.reportTime + AND x.sensor_id = r.sensor_id +) +OPTION (MAXRECURSION 1000); +GO From 5289bc404cdfc21dacf478c1686ed09cec292dd3 Mon Sep 17 00:00:00 2001 From: yinq Date: Mon, 23 Mar 2026 16:32:21 +0800 Subject: [PATCH 3/3] =?UTF-8?q?update=20-=20=E6=8C=AF=E5=8A=A8=E4=BC=A0?= =?UTF-8?q?=E6=84=9F=E5=99=A8=E5=AE=9E=E6=97=B6=E7=9B=91=E6=8E=A7=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=8F=AF=E4=BC=A0=E5=A4=9A=E4=B8=AA=E7=82=B9=E4=BD=8D?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TVibrationsensorData/RealTimeMonitor.html | 31 ++++++++++++++----- ...ibrationSensorHourlyReportServiceImpl.java | 13 +------- .../impl/TVibrationsensorDataServiceImpl.java | 9 ++++++ .../TVibrationSensorHourlyReportMapper.xml | 8 +---- .../system/TVibrationsensorDataMapper.xml | 7 +++-- 5 files changed, 40 insertions(+), 28 deletions(-) diff --git a/ruoyi-admin/src/main/resources/templates/system/TVibrationsensorData/RealTimeMonitor.html b/ruoyi-admin/src/main/resources/templates/system/TVibrationsensorData/RealTimeMonitor.html index f4ff18d..14e1580 100644 --- a/ruoyi-admin/src/main/resources/templates/system/TVibrationsensorData/RealTimeMonitor.html +++ b/ruoyi-admin/src/main/resources/templates/system/TVibrationsensorData/RealTimeMonitor.html @@ -6,6 +6,7 @@ +