我这个components模块已经是最新的了吧


我这个components模块已经是最新的了吧


@Zhang书书 ok,确实是这样
请求:

分组随便选,汇总个数。

版本:

@Zhang书书 只能远程
kale邀请您进行远程控制
ToDesk设备代码:988 014 971
临时密码:gjp9jtj8
点击链接直接进行远程控制:
https://wechat.todesk.com/invite-page?id=hJQ9Rvsw7heBSTkkn-ejF
可视化,数据源中对报警表做 恢复时间为空 判断时,页面报错。
sql语句报错


这样的


设备表驱动。
db-driver数据库驱动,不能自动根据设备id去过滤值
我在驱动配置里面设置了对的id字段


点位

配置好对应设备编号

D1308设备下的数据点值,没有和设备编号有关联。


驱动版本

这个帖子是笔记,防止我自己忘记。
我的项目是6488246bd7c5cfb28a4405c1,如果你能看懂就可以操作,
如果看不懂,请在他人协助下完成以下操作。
获取报警恢复耗时计算。
报警恢复时间/时长统计。报警持续时间统计。
这是说明:
一个报警事件 = 从异常开始,到异常恢复的整个连续过程
无论中间触发多少次提醒,只要属于同一异常持续过程,就只算 一次报警。
查询通过以下规则进行“报警压缩”:
按 ruleid + desc + table + tableData 分组
如果时间间隔未超过 1.2 × interval,则认为仍属于同一次报警
如果前一条已恢复,则视为新报警
超过 1.2 × interval,则视为新报警
方法一:直接运行sql语句查询报警数据表。
直接查询报警数据表,查询出每次报警恢复耗时。
/* ============================================================
报警压缩 + 自动计算恢复时间 + 计算恢复时长(单位:秒)
逻辑说明:
1. 按 ruleid + desc + table + tableData 分组
2. 判断是否为新报警段:
- 第一条数据
- 前一条已经物理恢复
- 时间间隔 > 1.2 × interval(interval 单位:秒)
3. 通过窗口累计求和生成分段ID
4. 每段聚合出:
- 报警开始时间 start_time
- 报警结束时间 end_time
- 记录条数 alarm_count
5. 计算最终恢复时间
6. 计算恢复持续时长(秒)
注意:
interval 字段单位为 秒
============================================================ */
WITH base AS (
/* ========================================================
取同组内上一条报警时间和恢复时间
======================================================== */
SELECT *,
LAG("time") OVER (
PARTITION BY ruleid, "desc", "table", "tableData"
ORDER BY "time"
) AS prev_time,
LAG("recoveryTime") OVER (
PARTITION BY ruleid, "desc", "table", "tableData"
ORDER BY "time"
) AS prev_recovery
FROM "6488246bd7c5cfb28a4405c1".warning
),
/* ============================================================
判断是否为新报警段
============================================================ */
mark AS (
SELECT *,
CASE
WHEN prev_time IS NULL THEN 1
WHEN prev_recovery IS NOT NULL
AND prev_recovery <= "time"
THEN 1
WHEN EXTRACT(EPOCH FROM ("time" - prev_time))
> ("interval" * 1.2)
THEN 1
ELSE 0
END AS is_new_group
FROM base
),
/* ============================================================
生成报警分段ID
============================================================ */
grp AS (
SELECT *,
SUM(is_new_group) OVER (
PARTITION BY ruleid, "desc", "table", "tableData"
ORDER BY "time"
) AS grp_id
FROM mark
),
/* ============================================================
按分段ID进行聚合
============================================================ */
agg AS (
SELECT
ruleid,
"desc",
"table",
"tableData",
grp_id,
MIN("time") AS start_time,
MAX("time") AS end_time,
/* 段内最大恢复时间 */
MAX("recoveryTime") AS max_recovery,
COUNT(*) AS alarm_count
FROM grp
GROUP BY
ruleid, "desc", "table", "tableData", grp_id
),
/* ============================================================
计算最终恢复时间
============================================================ */
final_result AS (
SELECT
ruleid,
"desc",
"table",
"tableData",
grp_id,
start_time,
end_time,
alarm_count,
/* 有恢复时间就用恢复时间,否则用 end_time */
COALESCE(max_recovery, end_time) AS final_recovery_time
FROM agg
)
/* ============================================================
最终输出
============================================================ */
SELECT
ruleid,
"desc",
"table",
"tableData",
grp_id,
start_time,
end_time,
alarm_count,
final_recovery_time,
/* 恢复持续时长(单位:秒) */
CAST(
EXTRACT(EPOCH FROM (final_recovery_time - start_time))
AS BIGINT) AS recovery_seconds
FROM final_result
ORDER BY
ruleid,
"desc",
"table",
"tableData",
start_time;
方法二、
如果报警数据归档了,又想查询全部报警数据,需要创建两个视图来实现。
方法二第一步:
/* 创建全部报警数据视图 */
CREATE OR REPLACE VIEW "6488246bd7c5cfb28a4405c1".warning_all AS
SELECT
id::text AS id,
level,
uid,
type,
status,
processed,
"desc",
audio,
interval,
ruleid,
remark,
"table",
"tableData",
fields,
"recoveryFields",
"time",
"recoveryTime",
"confirmTime",
"handleTime",
other,
"warnTag",
"timesOfPlay",
handle,
alert,
"handleUser",
"confirmUser",
"warnMode",
"broadcastContent",
"broadcastVoice",
"audioAlert",
"i18nProp"
FROM "6488246bd7c5cfb28a4405c1".warning
UNION ALL
SELECT
id::text AS id,
level,
uid,
type,
status,
processed,
"desc",
audio,
interval,
ruleid,
remark,
"table",
"tableData",
fields,
"recoveryFields",
"time",
"recoveryTime",
"confirmTime",
"handleTime",
other,
"warnTag",
"timesOfPlay",
handle,
alert,
"handleUser",
"confirmUser",
"warnMode",
"broadcastContent",
"broadcastVoice",
"audioAlert",
"i18nProp"
FROM "6488246bd7c5cfb28a4405c1".warning_archive;
方法二第二步:
/* 创建报警恢复时间统计视图 */
CREATE OR REPLACE VIEW "6488246bd7c5cfb28a4405c1".warning_recovery_view AS
WITH base AS (
/* ========================================================
取同组内上一条报警时间和恢复时间
LAG() 返回当前行的前一条数据
======================================================== */
SELECT *,
LAG("time") OVER (
PARTITION BY ruleid, "desc", "table", "tableData"
ORDER BY "time"
) AS prev_time,
LAG("recoveryTime") OVER (
PARTITION BY ruleid, "desc", "table", "tableData"
ORDER BY "time"
) AS prev_recovery
FROM "6488246bd7c5cfb28a4405c1".warning_all
),
mark AS (
/* ========================================================
判断是否为新报警段
is_new_group = 1 表示当前记录是新报警段起始
======================================================== */
SELECT *,
CASE
/* 第一条记录必定是新段 */
WHEN prev_time IS NULL THEN 1
/* 前一条已恢复,并且恢复时间早于当前报警时间 */
WHEN prev_recovery IS NOT NULL
AND prev_recovery <= "time"
THEN 1
/* 与上一条时间间隔超过 1.2 × interval */
WHEN EXTRACT(EPOCH FROM ("time" - prev_time))
> ("interval" * 1.2)
THEN 1
/* 否则属于同一报警段 */
ELSE 0
END AS is_new_group
FROM base
),
grp AS (
/* ========================================================
生成报警分段ID
SUM(is_new_group) 累加,得到 grp_id,表示连续报警段
======================================================== */
SELECT *,
SUM(is_new_group) OVER (
PARTITION BY ruleid, "desc", "table", "tableData"
ORDER BY "time"
) AS grp_id
FROM mark
),
agg AS (
/* ========================================================
按分段ID聚合报警信息
======================================================== */
SELECT
ruleid,
"desc",
"table",
"tableData",
grp_id,
/* 本段报警起始时间 */
MIN("time") AS start_time,
/* 本段报警最后触发时间 */
MAX("time") AS end_time,
/* 段内最大恢复时间,可能为批量确认 */
MAX("recoveryTime") AS max_recovery,
/* 本段记录条数 */
COUNT(*) AS alarm_count
FROM grp
GROUP BY
ruleid, "desc", "table", "tableData", grp_id
)
SELECT
ruleid,
"desc",
"table",
"tableData",
grp_id,
start_time, -- 报警开始时间
end_time, -- 报警最后触发时间
alarm_count, -- 本段记录条数
/* ========================================================
最终恢复时间:
- 有恢复时间使用 max_recovery
- 无恢复时间(单条或多条)使用 end_time
======================================================== */
COALESCE(max_recovery, end_time) AS final_recovery_time,
/* ========================================================
恢复持续时长(秒)
final_recovery_time - start_time
======================================================== */
CAST(
EXTRACT(EPOCH FROM (COALESCE(max_recovery, end_time) - start_time))
AS BIGINT) AS recovery_seconds
FROM agg
ORDER BY
ruleid,
"desc",
"table",
"tableData",
start_time;
@核桃酥 在 角色管理里面,数据表记录权限取消不掉 中说:
有外网地址吗?@kzz
没有,只能远程。
我的识别码:1610391542
m183cr
使用向日葵即可对我发起远程协助
向日葵下载地址:http://url.oray.com/tGJdas/
@核桃酥 在 角色管理里面,数据表记录权限取消不掉 中说:
你是在表记录选择里面,取消选中的一个表记录,点击确认,然后点击外层的保存后,在编辑这个角色,刚刚取消的那个选中状态 又变成选择了吗?
是这样的,而且相关用户登录之后,确实还能看到表记录。
角色管理里面,表管理的数据表记录,权限可以添加但是不能取消,取消之后还在。
(只发现这个,其他权限没有测试。)



ok,有效果

设备表怎么关联部门,使用关联字段也不行,字段名定义为什么,关联之后报警表的所属部门还是空的(主要目的)
最近换了授权文件之后导致的。没有在项目内上传。
在项目内上传的驱动授权文件 后 问题解决了
谢谢
设备驱动的授权显示,驱动授权无效,机器码不匹配,其他授权都是正常的,就设备驱动授权,上传也是显示ok,,但使用起来报错,可以帮忙看一下吗
机器码没有变化,其他模块,和modbus驱动正常,只是部分驱动
报错。

windows空间版的
更新了一部分服务。
有些服务官网没有,这个也没有

@Zhang书书 这样的,一样的

3.0平台服务报错,怎么解决,现在也不能更新官网没有安装包



经过测试发现,问题原因。
如果接口设置了参数变量和默认值。需要在表配置中增加 请求参数。
如果接口参考使用了固定值则表配置中不用填写 请求参数。
其他无影响。

