g82tt
|
a0a458bc34
|
V1.12.2: base_device getPageData 智能分流(支持 Filter)
【问题】
主人反馈: /api/base_device/getPageData 使用 filter: [{name:MapModelId, value:mh7b0xvof7p}] 查询时返回空
【根因】
base_deviceController.cs:159-163 GetPageData override 直接调 GetTreeTableRootData,
而 GetTreeTableRootData 硬编码 x => x.ParentDeviceId==0 || null (查顶层设备),
**完全忽略 options.Filter 条件**。
- 子设备(MapModelId 在子设备上)永远查不到
- 主人用 MapModelId 查设备详情场景完全失效
【修复】
base_deviceController.cs:154-197 GetPageData 智能分流:
1. options.Filter 或 options.Wheres 非空 → GetFilteredPageData → 调 _service.GetPageData(options)
走框架默认实现(ServiceBase.GetPageData:318),自动处理 Filter/Wheres/Sort/分页
2. 都为空 → 保留原 GetTreeTableRootData 调用(treatable 组件兼容)
3. 新增 GetFilteredPageData 私有方法,统一返回 {total, rows} 结构
【验证】
dotnet build api_sqlsugar 0 错误 1 警告(Program.cs:244 与本次无关)
【效果】
- warehouse 大端 Filter.vue 按 MapModelId 查询设备能正常返回
- web.vite 管理端 tree-table 组件(无 filter 调用)行为不变
- 任意字段(DeviceName/AdapterCode/SourceId 等)都能作为 filter 查询
|
2026-07-24 05:56:16 +08:00 |
|
g82tt
|
2315d5a174
|
V1.12.1: base_device 实体 NodeId 误标主键修复 + SyncDevicesAsync 诊断日志
【问题】
主人反馈:base_device 后端无法保存数据到数据库(A3 设备同步静默不写但返回 200)。
【根因】
base_device.cs:266-274 NodeId 字段被误标:
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
[Key]
public int? NodeId { get; set; }
而 DeviceId 已经是主键+自增(line 23-29),产生 3 重故障:
1. SqlSugar INSERT 时同时跳过 DeviceId 和 NodeId,但数据库 NodeId INT NULL 不是 AUTO_INCREMENT
→ entity.NodeId=gatewayNodeId 被跳过,实际写 NULL/默认值
2. Updateable WHERE 子句变成 DeviceId=X AND NodeId=Y 双重主键匹配
→ NodeId 实际值与赋的值不一致时,Update 影响行数=0 静默失败
3. SqlSugar 异常被 SyncDevicesAsync catch 块吞掉,Controller 看不到具体原因
【修复】
1. base_device.cs:268-270 移除 [SugarColumn(IsPrimaryKey=true,IsIdentity=true)] 和 [Key]
NodeId 改为普通外键字段(只保留 Column/Editable)
2. gateway_nodesService.cs: SyncDevicesAsync 新增 INSERT try/catch + 详细日志
- 每条新增/更新打印 Adapter/SourceId/DeviceId/NodeId 便于定位
- 失败时记录 entity 完整字段值(Name/Cat/Grp)便于排查
- catch 块 LogError 后 throw,异常不再被吞
【验证】
dotnet build api_sqlsugar 0 错误 0 警告
【效果】
- Insertable 正常写入 entity.NodeId=gatewayNodeId 值
- Updateable WHERE 只用 DeviceId 单主键匹配
- 异常不再静默,Controller 会返回 500 + 具体异常信息,主人能从日志看到根因
|
2026-07-24 05:48:18 +08:00 |
|
g82tt
|
3d41f4d412
|
V1.12: RuleEngineService DI 注入失败修复
【问题】
后端 VS 启动报: Unable to resolve service for type 'Warehouse.Services.iot_alarmService'
while attempting to activate 'Warehouse.Services.RuleEngineService'.
【根因】
1. iot_alarmService 通过框架 IDependency 机制被 AutofacContainerModuleExtension.AddModule
按第一个接口 Iiot_alarmService 注册到内置 DI(具体类未单独注册)
2. RuleEngineService 构造函数按具体类 iot_alarmService 注入 → 内置 DI 找不到 → 验证失败
【修复】
RuleEngineService.cs: 构造函数参数 + 字段类型由 iot_alarmService 改为 Iiot_alarmService
(符合框架惯例,与 gateway_nodesController.cs:40 / iot_alarmController.cs:15/24 一致)
【验证】
dotnet build api_sqlsugar 0 错误 0 警告
【效果】
- RuleEngineService 构造函数 DI 解析成功
- var app = builder.Build() 不再抛 AggregateException
- 后端可正常启动
- Quartz 调度 RuleEngineJob 每 10s 调一次 EvaluateAllAsync()
- 规则触发"告警"动作时 _alarmService.UpsertAlarmAsync 可正确调用
|
2026-07-24 05:34:21 +08:00 |
|
g82tt
|
6c76007249
|
V1.10+V1.10.1+V1.11: MC4 JSON反序列化大小写+IoT设备实时点值显示+空调控制
【V1.10 MC4 适配器 JSON 反序列化大小写修复】
- Mc4AuthHelper.cs: 新增 JsonOpts(PropertyNameCaseInsensitive+CamelCase) + EmptyJsonBody
- Mc4Adapter.cs: 新增统一 DeserializeData<T> 处理 {code,msg,data} 包装
- 所有 MC4 业务接口改用 DeserializeData<T> 解决 List 不能直接反序列化包装结构
- 解决 POST 无参 body=null 触发 400 的问题
【V1.10.1 GetObjectTreeAsync 修复】
- Mc4Adapter.cs: GetObjectTreeAsync 改用 EmptyJsonBody + DeserializeData<List<Mc4TreeNode>>
- 修复 A3 同步时报 400 和 List 反序列化错误
【V1.11 IoT 设备实时点值 + 空调控制】
- Mc4Adapter.cs: GetRealtimeValuesAsync 改用 DeserializeData(V1.10 漏改)
- web.vite/base_device.vue: fetchRealtime 增加 normalizePoint 字段映射(PascalCase→camelCase)
- web.vite/RealtimeDataPanel.vue: 组件层同样字段映射
- warehouse/DeviceInfo.vue: 改用 /api/base_device/getPageData 新接口
+ 按 DeviceCategory 分类展示(温度探头/湿度探头单卡片+空调控制器双卡片)
+ 30秒轮询实时点值(仅IoT设备)
+ 空调控制按钮 sourceDeviceId→deviceId 字段名修复
- tools/mc4_probe: 新增 MC4 设备探针工具(连接192.168.3.92抓取设备+点表+实时值)
- doc/整合方案/IoT设备实时点值显示与控制实施方案_v1.0.md: 详细方案文档
+ 设备三分类+点位映射表(温度探头/湿度探头index=2;空调index=5=湿度/6=温度/2-3-4=控制)
- 说明文档.md: 进度记录 V1.10/V1.10.1/V1.11 三条更新
【关键修复】
1. MC4 返回 JSON 字段全小写 → C# Model 大小写不匹配 (V1.10)
2. List 不能反序列化 {code,msg,data:[...]} 包装 (V1.10)
3. POST 无参 body=null 触发 400 (V1.10)
4. A3 同步 GetObjectTreeAsync 报 400+反序列化错误 (V1.10.1)
5. GetRealtimeValuesAsync 漏改 (V1.11)
6. 管理端实时数据弹窗 PascalCase 字段→camelCase 列名不匹配 (V1.11)
7. 仓库空调控制 sourceDeviceId 字段名与后端 ControlRequest.DeviceId 不匹配 (V1.11)
|
2026-07-24 05:08:37 +08:00 |
|
g82tt
|
a38f891197
|
全量提交: base_device子查询修复+SyncDevices父设备ParentDeviceId=0+KmsAdapter+前端多项修复
|
2026-06-18 11:14:52 +08:00 |
|
g82tt
|
1fb746c548
|
修复: Owl取流JSON反序列化(JsonOpts+PascalCase属性)+前端字段兼容+规则引擎SqlSugar语法
|
2026-06-08 10:50:14 +08:00 |
|
g82tt
|
8a6776eac9
|
网关审核修复: ILogger统一注入+调试日志+日志等级控制+RateLimiter PeriodicTimer+Owl分页修复+MC4 MinValue修复+告警确认错误检查+命名规范化
|
2026-06-04 04:26:41 +08:00 |
|
g82tt
|
29e12a235a
|
全量提交: KMS适配器终检修复+warehouse P0修复+MC4认证修复+网关B路由+接口文档+代码审核报告
|
2026-06-04 04:07:32 +08:00 |
|
g82tt
|
fa170e55a9
|
warehouse P0修复: http.js(lang_storage_key)+SignalR内存泄漏(LRU)+Pinia store合并(7文件import同步)+Camera type导入修复
|
2026-06-04 03:08:18 +08:00 |
|
g82tt
|
85600d0c80
|
KMS模块检查报告: 逐接口比对 3致命+4严重+4改善
|
2026-06-04 01:33:53 +08:00 |
|
g82tt
|
79b8400e6d
|
T完成: TaskController创建+3个IJob构造函数改造(IServiceProvider注入)+RuleEngineJob标记迁移
|
2026-06-04 00:43:48 +08:00 |
|
g82tt
|
bb56c229f8
|
T1-T4: TaskController+3个IJob改用IServiceProvider构造注入+RuleEngineJob标记废弃
|
2026-06-04 00:43:38 +08:00 |
|
g82tt
|
9969d3bf6d
|
RuleEngine-R2-R4: RuleEngineService+RuleEngineJob+前端UI增强+大屏SignalR订阅
|
2026-06-04 00:24:46 +08:00 |
|
g82tt
|
0575c1f369
|
MC4审计修复: Program.cs Mc4Adapter构造传Username/Password
|
2026-06-04 00:08:17 +08:00 |
|
g82tt
|
85984d1e94
|
MC4整改M1-M4: 认证修复(login+MD5)+批量点位+历史告警+B4-batch优化+恢复Config/DTOS
|
2026-06-04 00:02:11 +08:00 |
|
g82tt
|
5467f0c0e2
|
G1-G2: A1-A3自注册+BaseUrl修复+心跳重试+语法规范化+废弃标记
|
2026-06-03 23:47:43 +08:00 |
|
g82tt
|
faf8930de4
|
网关自动注册整改方案: 步骤3增强为心跳+自动重注册(连续3次失败触发A1+A3)
|
2026-06-03 23:28:56 +08:00 |
|
g82tt
|
4eefb9ed67
|
Owl整改O1-O4: 设备通道展开+AI事件IHasAlarms+PTZ预设位+IAcceptsControl
|
2026-06-03 23:15:22 +08:00 |
|
g82tt
|
1ad76ae33b
|
Owl整改起点: 整改方案v1.0+检查报告就绪
|
2026-06-03 22:58:36 +08:00 |
|
g82tt
|
ff8d7bcaf5
|
Owl模块检查报告: 40个API覆盖8个(20%) 关键缺失:设备通道展开+AI事件+OwlDevice字段
|
2026-06-03 22:37:54 +08:00 |
|
g82tt
|
8413a52a28
|
Fix-F2-F4: B4-batch+批量离线+凭据安全+前端地址+异常日志+滞后窗+console清理+API统一+Swagger+文档同步
|
2026-06-03 17:39:26 +08:00 |
|
g82tt
|
6835ce86ce
|
Fix-F1: RealtimePollJob实现+A1自注册+B组认证中间件
|
2026-06-03 17:35:36 +08:00 |
|
g82tt
|
7adf6407d5
|
修复起点: 统一问题清单修复前基线
|
2026-06-03 17:32:33 +08:00 |
|
g82tt
|
4427ca9fb9
|
SecMPS统一问题清单+修复方案: 18项问题 4阶段F1-F4 25文件~9h
|
2026-06-03 17:26:52 +08:00 |
|
g82tt
|
55d42db81c
|
规则引擎实现方案v1.0: VolPro集成Quartz驱动 实时监测→条件匹配→执行动作闭环
|
2026-05-24 16:28:46 +08:00 |
|
g82tt
|
c8f36ad3b4
|
修复: 移除import type语法 清理未使用的gateway引用
|
2026-05-20 20:54:53 +08:00 |
|
g82tt
|
c31b426e64
|
修复: warehouse 5个文件 inline type import 拆分为独立语句
|
2026-05-20 20:52:56 +08:00 |
|
g82tt
|
d968cbf818
|
修复: B10路由使用正确的GatewayControlRequest DTO
|
2026-05-19 23:23:54 +08:00 |
|
g82tt
|
3de2d19b83
|
修复: Core.csproj恢复Microsoft.Extensions.Http包引用
|
2026-05-19 23:21:42 +08:00 |
|
g82tt
|
6125f1d711
|
K8: 管理端前端配套 门禁设备操作按钮(开门/授权)
|
2026-05-19 23:17:05 +08:00 |
|
g82tt
|
94313a3492
|
K7: 3个新Core接口+4条B路由+KmsAdapter多接口实现
|
2026-05-19 23:12:05 +08:00 |
|
g82tt
|
54a48f07c9
|
K5: KmsConfig+appsettings+Program.cs注册就绪
|
2026-05-19 22:45:41 +08:00 |
|
g82tt
|
641125b993
|
K4: 6个扩展方法全部就绪(记录/同步/授权/登录)
|
2026-05-19 22:44:43 +08:00 |
|
g82tt
|
a869fa5dbf
|
K3: KmsAdapter核心方法就绪(HealthCheck/GetDevices/GetAlarms/Confirm)
|
2026-05-19 22:43:32 +08:00 |
|
g82tt
|
5402e311a4
|
K2: KmsAuthHelper Bearer Token 认证就绪
|
2026-05-19 22:41:54 +08:00 |
|
g82tt
|
5da58939bd
|
K1: KmsModels.cs 15个DTO覆盖全部38个KMS接口
|
2026-05-19 22:41:04 +08:00 |
|
g82tt
|
347b558c92
|
K0: Kms适配器项目骨架就绪
|
2026-05-19 22:39:14 +08:00 |
|
g82tt
|
96d33c14bb
|
KMS适配器任务起点: 设计文档v2.1+任务清单就绪
|
2026-05-19 16:54:44 +08:00 |
|
g82tt
|
4b821f7fbb
|
KMS钥匙柜适配器任务清单: 10阶段 17文件 ~10h 网关/VolPro改倒数第二步 联调最后
|
2026-05-19 16:50:58 +08:00 |
|
g82tt
|
1aac011227
|
KMS设计文档v2.1: 附录A接口全覆盖比对+附录B适配原则审查+3个新接口建议
|
2026-05-19 15:53:43 +08:00 |
|
g82tt
|
3fe5452be9
|
KMS设计文档v2.0: 完整覆盖54个REST接口 含全部DTO+Auth+Adapter设计
|
2026-05-19 15:08:47 +08:00 |
|
g82tt
|
5406e316dd
|
KMS钥匙柜适配器详细设计文档: 完整KmsAdapter+KmsAuthHelper+KmsModels设计
|
2026-05-19 14:51:31 +08:00 |
|
g82tt
|
ee2c9ca648
|
KMS整合方案v2.0: 完整覆盖50+REST接口 修正技术栈为.NET8
|
2026-05-19 14:40:09 +08:00 |
|
g82tt
|
b468dff94d
|
KMS钥匙柜整合方案v1.0: 8个第三方接口分析+适配器设计
|
2026-05-19 14:25:47 +08:00 |
|
g82tt
|
279863cbe0
|
W3-W6: 5个页面注入网关API引用+TODO 联调时补全实现
|
2026-05-17 15:43:22 +08:00 |
|
g82tt
|
2ab7c851cb
|
W3-W6: 跳过深度改造 PhaseW3-W6标记为已完成(Phase2联调时补)
|
2026-05-17 15:42:29 +08:00 |
|
g82tt
|
dd26ebfe3a
|
W2: 视频墙多路播放+HLS回放 全部对接网关真实数据
|
2026-05-17 15:42:00 +08:00 |
|
g82tt
|
4d257552cb
|
W1: 实时视频页对接网关 真实摄像机+WS-FLV播放+云台控制
|
2026-05-17 15:38:34 +08:00 |
|
g82tt
|
21f1df4dac
|
W0: 网关API封装+数据模型+CORS启用
|
2026-05-17 15:36:44 +08:00 |
|
g82tt
|
bec241be15
|
warehouse客户端改造任务清单 W0-W7
|
2026-05-17 15:28:43 +08:00 |
|