原始会话按时间保留,后续条目覆盖前面的过期约定;当前事实以 ../long-term.md 为准。后续会话见 ../sessions/2026-09-24.md。
src/views/subSystem/alarm/index.vue 删除丢弃确认及无用 dirty 状态,取消、关闭按钮、Esc 和路由切换不再触发未保存确认;上传或提交中仍保护退出。审核结果必选,意见选填、最多 500 字,输入框提示同步调整。AlarmReviewRequest 移除意见的 @NotBlank,保留 @Size(max=500);AlarmReviewService 允许 null、空字符串及纯空白意见,统一以空字符串记录日志,继续限制长度。tests/waterAlarmAuditWorkbench.test.mjs、后端审核 service/controller 测试及后端交付说明 docs/alarm-review-2026-09-23.md;本条覆盖上一日意见必填和退出需确认的历史交互约定。git diff --check 通过。未执行全量前端生产构建、真实登录浏览器 E2E 或真实数据库操作。.feisuan/ 未跟踪目录,本轮未提交或推送代码。alarm_data.warning_code。WorkOrderServiceImpl 删除设备级查重及手动/隐患建单中的调用;报警建单通过 alarm_data.order_id 关联 work_order,只比较设备主键 work_order.device_id 和报警 warning_code,状态采用 WorkOrderStatusEnum.activeCodes()(0/1/2/3/4/6)。不同编码、其他设备、已结案/已取消、无报警关联的手动或隐患工单不占同类名额。EquipmentBaseMapper.lockById,在建单事务中对设备行执行 FOR UPDATE,锁后刷新读取报警关联并查重;WorkOrderMapper.existsActiveAlarmOrder 不使用部门过滤或报警处理状态过滤。锁与查重查询禁用缓存并刷新 MyBatis 会话缓存,防止等待锁后读取旧结果。git diff --check 通过。.feisuan/,本轮未提交或推送。alarmGIS.vue、菜单 path 为 drainageAlarmGIS,不需要周边环境页签,已同步代码、后端授权组件白名单和菜单 SQL。src/api/alarm.js 与 alarm/remind.vue、list.vue、drainage/analysis.vue、drainage/alarmGIS.vue,共享详情/图表/查询范围及数据模型。清单使用框架 pagination、后端分页排序,首列预警单号;按设备/单号/等级/监测状态/审核结果/日期查询。sidebarRouters,按 rootTypeId 查获授权入口,供水/排水相同 alarmList 不串系统。后端独立校验运营菜单和审核菜单;GIS/研判只接受排水根。migration_alarm_operations.sql 按 menu_id 精确更新 2139/2140/2141/2143/2117,不改父级和角色关联;2117 同时保留供水首页/GIS 所用查询权限。新 alarm_no 数据库日期+序列生成,唯一不可改,不回填历史;报警触发/自动恢复事务日志、工单创建日志使用预警单号。自动恢复由采集事务标记区分,人工处理不误标为自动。E:/work/pipe-ner-server/docs/alarm-operations-2026-09-24.md。依赖上一轮审核脚本;首次部署按审核脚本、运营脚本顺序执行,本轮脚本须最后执行,避免旧脚本覆盖生命周期函数。.feisuan/;此次清理无数据表删除或历史数据迁移。alarm_no 的名称从“预警单号”改为“报警单号”,生成前缀从 YJ 改为 BJ。同步清单/审核/提醒/GIS/详情/研判文案、研判单号搜索识别、后端实体注解、工单创建日志文案、SQL 触发器和列注释,以及测试与交付说明。alarm_data.alarm_no,新号格式 BJYYYYMMDD 加至少 8 位全局序列;沿用序列、不重置、不迁移已有号码。数据库脚本位置仍为 E:/work/pipe-ner-server/pipe-network-service/sql/migration_alarm_operations.sql,本轮未连接或执行实际数据库。alarm_data.alarm_no 由程序生成,取消数据库自动赋号。管理端 AlarmDataServiceImpl.saveAlarmData(新增、测试报警、两个演练入口)与采集端 CollectionAlarmWriter 在 INSERT 前生成 BJ + 北京日期 YYYYMMDD + MyBatis-Plus 雪花 ID,覆盖请求带入号码。复用已有报警、等级变化和恢复不改号。migration_alarm_operations.sql,兼容清理旧 trg_alarm_number、assign_alarm_number()、默认值、alarm_no_seq,保留报警日志触发器。已有号码和日志不重写。work_order_id、报警时间改为 create_time,全部保留;修正旧 Mapper 测试的关联字段断言以验证最新真实 SQL。dispose.vue 样式;两后端日志类型枚举合一。order_no 后,仅插入一条确认日志,描述含选填意见及工单号,缺失工单号或日志写入失败则异常回滚;保留 work_order_log 和不修改设备状态的约定。删除工单写入报警日志的 mapper 方法及调用。SysUserMapper 取 sys_user.nick_name,同时存用户 ID;历史查询关联用户昵称,按 oper_time DESC NULLS LAST, log_id DESC 排序。自动动作仍使用系统名称。旧类型历史行保留显示“历史操作”,不删除或迁移历史数据。alarm-contract,唯一的 AlarmLogOperTypeEnum 保留 0 报警触发、1 确认报警、2 误报警、3 报警处理;删除 zksy-system / zk-api-service 重复枚举及工单相关类型,两端 Maven 引用该模块。alarm/AlarmHistory.vue、alarmHistoryModel.js,审核页和详情页共用。按日期、时间及同一时间日志 ID 倒序分组,显示时间、加粗昵称、动作、描述及 50px 图片缩略图;保留点击大图预览,不使用不安全 HTML。E:/work/pipe-ner-server/pipe-network-service/sql/migration_alarm_review_log.sql 清理旧日志触发器/自定义函数,使用 NOT VALID 限制新日志类型为 0~3、保留历史旧类型行;同步完整建表脚本及交付说明。BJyyyyMMddHHmmss + 4 位随机数(北京时间),不是雪花 ID;新增/解除日志均由 Java 事务主动写入,不依赖自定义函数/触发器。本条覆盖前述旧约定。clean test,本轮选定 11 个测试类共 97 项通过、零失败/错误/跳过;清理旧 class 后重新编译,验证共享枚举依赖不依赖残留产物。dist-verify/。两仓 git diff --check 通过。-pl zk-api-service,pipe-network-service/zksy-admin -am 构建以包含共享模块,单独构建前先安装该模块及父 POM。.feisuan/,删除的重复枚举/无用方法可由版本管理恢复,业务日志数据未删除。alarm-contract 模块,允许 zksy-system 与 zk-api-service 各创建一份相同的 AlarmLogOperTypeEnum。本条取代上一节共享模块的实现和安装要求。com.zksy.base.alarm.enums.AlarmLogOperTypeEnum,采集端新增 com.zksy.api.enums.AlarmLogOperTypeEnum;两份除包名外完全一致,仍只保留 0 触发、1 确认、2 误报、3 处理。同步服务与测试 import。E:/work/pipe-ner-server/alarm-contract 目录不存在,无运行时代码引用。被移除枚举内容保存在两个本地枚举文件,不丢失业务逻辑或数据。clean test 共 12 类、98 项通过,零失败/错误/跳过;两份源码一致性及两仓 diff 检查通过。dispose.vue 的 dayLabel 后,在报警历史沿用“今天 · 月日”样式并增加昨天、跨年及无效日期处理,未改工单页面。alarmHistoryModel.js 新增 historyDayLabel,按本地日历日期判定今天/昨天,避免直接取 UTC 日期导致凌晨误判。当天/昨天保留具体月日,同年其他记录显示月日,跨年记录显示年月日;空值/无效日期显示“时间未记录”。AlarmHistory.vue 日期分组标题调用该函数,悬停显示原始完整日期。审核页和详情页同步生效;每条记录时分秒、时间倒序、昵称、图片展示均保持不变。tests/alarmHistory.test.mjs 增加今天/昨天、跨月、跨年、闰日、无效值及模板接入测试;Asia/Shanghai 时区下相关 Node 回归共 21 项通过,组件脚本/模板/样式编译及 diff 检查通过。alarmHistoryModel.js 改为仅返回“今天”“昨天”,更早日期、悬停完整日期及每条记录的时分秒不变,审核页与详情页同步生效。tests/alarmHistory.test.mjs 断言以及长期记忆、索引;相关 Node 测试 21 项通过,diff 检查通过。无后端/SQL 修改,未部署或进行浏览器验收。AlarmOperationsService.reminders 强制使用 AlarmRecordStatusEnum.UNHANDLED,不能通过请求改查已处理事件。AlarmQuery.actualValueOnly 默认 false,Mapper 在 WHERE 中加 actual_value IS NOT NULL 后再由框架分页,研判使用 true;普通清单/地图查询不受此筛选影响。analysis 对实际值为空的报警直接返回 unsupported 和空采样,不查监测表。remind.vue 请求显式状态 0,删除清单导航按钮及无用变量;list.vue 修改查询文字及筛选状态,但保留审核结果表格列。alarmOperationsModel.js 新增共享候选筛选函数,保留 0、负数,排除 null/undefined/空串并按 ID 去重。alarmGIS.vue 只过滤曲线候选/曲线按钮,不过滤点位和历史记录;默认选择首个有值事件,切换设备或历史页后校验当前选择,无候选时显示空状态且不加载图表。analysis.vue 使用后端过滤且校验深链接详情,不能将无实际值事件补入下拉。AlarmDetail.vue 对无值事件隐藏进入研判按钮。AlarmDetail.vue 改为三列横排的标签和值,使用语义化 dt/dd,标签 13px、状态标签 12px、字重均 400;状态使用小号浅色、无边框标记,窄屏自动换行。alarmOperations.scss 中旧状态灰底卡片样式,组件采用 scoped 样式避免影响其他页面;工单关联/责任人/期限表格和历史布局不变。监测与审核颜色映射只影响展示,处置颜色复用现有工单字典,不新增状态含义或修改接口。